summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2026-02-22 00:39:58 +0100
committerMichael Biebl <biebl@debian.org>2026-02-22 00:39:58 +0100
commit067fb576988f685e83ac8b0ae690334aff547c85 (patch)
tree204c7c8a0300691c53627cd3418cf54671ada1a8
parent6de29285e533f4fec22a219013f3687edb6b7399 (diff)
New upstream version 1.56.0 upstream/1.56.0
-rw-r--r--.gitlab-ci.yml300
-rw-r--r--.gitlab-ci/ci.template2
-rw-r--r--.gitlab-ci/config.yml31
-rw-r--r--.gitlab-ci/distros-info.yml52
-rwxr-xr-x.gitlab-ci/run-test.sh7
-rw-r--r--MAINTAINERS.md26
-rw-r--r--NEWS61
-rw-r--r--config.h.meson9
-rwxr-xr-xcontrib/alpine/REQUIRED_PACKAGES1
-rwxr-xr-xcontrib/debian/REQUIRED_PACKAGES1
-rwxr-xr-xcontrib/fedora/REQUIRED_PACKAGES1
-rw-r--r--contrib/fedora/rpm/NetworkManager.spec62
-rwxr-xr-xcontrib/fedora/rpm/build.sh14
-rwxr-xr-xcontrib/fedora/rpm/configure-for-system.sh2
-rwxr-xr-xcontrib/fedora/rpm/release.sh253
-rwxr-xr-xcontrib/scripts/nm-ci-run.sh3
-rw-r--r--data/NetworkManager.service.in2
-rw-r--r--docs/api/meson.build2
-rw-r--r--man/NetworkManager.conf.xml8
-rw-r--r--man/meson.build128
-rw-r--r--man/nmcli.xml5
-rw-r--r--meson.build101
-rw-r--r--meson_options.txt3
-rw-r--r--po/ca.po97
-rw-r--r--po/it.po2
-rw-r--r--po/ru.po4797
-rw-r--r--po/sk.po368
-rw-r--r--po/sl.po5075
-rw-r--r--src/contrib/nm-vpn-plugin-utils.c30
-rw-r--r--src/contrib/nm-vpn-plugin-utils.h2
-rw-r--r--src/core/devices/nm-device-bridge.c2
-rw-r--r--src/core/devices/nm-device-ethernet.c16
-rw-r--r--src/core/devices/nm-device-macsec.c13
-rw-r--r--src/core/devices/nm-device-private.h3
-rw-r--r--src/core/devices/nm-device-utils.c4
-rw-r--r--src/core/devices/nm-device-wireguard.c61
-rw-r--r--src/core/devices/nm-device.c122
-rw-r--r--src/core/devices/nm-device.h3
-rw-r--r--src/core/devices/ovs/nm-ovsdb.c105
-rw-r--r--src/core/devices/wifi/nm-device-wifi.c38
-rw-r--r--src/core/devices/wifi/nm-iwd-manager.c2
-rw-r--r--src/core/devices/wwan/nm-modem-broadband.c12
-rw-r--r--src/core/devices/wwan/nm-modem.c41
-rw-r--r--src/core/devices/wwan/nm-modem.h2
-rw-r--r--src/core/dns/nm-dns-dnsconfd.c2
-rw-r--r--src/core/dns/nm-dns-dnsmasq.c5
-rw-r--r--src/core/dns/nm-dns-manager.c13
-rw-r--r--src/core/dns/nm-dns-systemd-resolved.c28
-rw-r--r--src/core/main-utils.c2
-rw-r--r--src/core/main.c2
-rw-r--r--src/core/ndisc/nm-lndp-ndisc.c69
-rw-r--r--src/core/nm-connectivity.c134
-rw-r--r--src/core/nm-core-utils.c158
-rw-r--r--src/core/nm-core-utils.h13
-rw-r--r--src/core/nm-l3-config-data.c42
-rw-r--r--src/core/nm-l3-config-data.h4
-rw-r--r--src/core/nm-l3cfg.c24
-rw-r--r--src/core/nm-netns.c161
-rw-r--r--src/core/nm-netns.h19
-rw-r--r--src/core/nm-policy.c5
-rw-r--r--src/core/platform/tests/monitor.c1
-rw-r--r--src/core/platform/tests/test-link.c3
-rw-r--r--src/core/platform/tests/test-route.c74
-rw-r--r--src/core/settings/nm-settings-storage.h13
-rw-r--r--src/core/settings/nm-settings.c48
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c24
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c9
-rw-r--r--src/core/settings/plugins/keyfile/nms-keyfile-utils.c1
-rw-r--r--src/core/settings/plugins/keyfile/nms-keyfile-writer.c10
-rw-r--r--src/core/settings/plugins/keyfile/tests/keyfiles/Test_Write_GSM1
-rw-r--r--src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c2
-rw-r--r--src/core/supplicant/nm-supplicant-config.c48
-rw-r--r--src/core/supplicant/nm-supplicant-interface.c15
-rw-r--r--src/core/supplicant/nm-supplicant-interface.h1
-rw-r--r--src/core/tests/meson.build1
-rw-r--r--src/core/tests/test-netns.c69
-rw-r--r--src/core/tests/test-utils.c65
-rw-r--r--src/core/vpn/nm-vpn-connection.c51
-rw-r--r--src/libnm-client-aux-extern/tests/test-libnm-client-aux.c222
-rw-r--r--src/libnm-client-impl/libnm.ver16
-rw-r--r--src/libnm-client-impl/nm-client.c24
-rwxr-xr-xsrc/libnm-client-impl/tests/test-gir.py2
-rw-r--r--src/libnm-client-impl/tests/test-libnm.c2
-rw-r--r--src/libnm-core-aux-extern/nm-libnm-core-aux.c175
-rw-r--r--src/libnm-core-aux-extern/nm-libnm-core-aux.h6
-rw-r--r--src/libnm-core-aux-intern/nm-libnm-core-utils.c88
-rw-r--r--src/libnm-core-aux-intern/nm-libnm-core-utils.h16
-rw-r--r--src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in8
-rw-r--r--src/libnm-core-impl/nm-keyfile.c51
-rw-r--r--src/libnm-core-impl/nm-setting-connection.c50
-rw-r--r--src/libnm-core-impl/nm-setting-gsm.c40
-rw-r--r--src/libnm-core-impl/nm-setting-hsr.c8
-rw-r--r--src/libnm-core-impl/nm-setting-ip-config.c56
-rw-r--r--src/libnm-core-impl/nm-setting-wireguard.c67
-rw-r--r--src/libnm-core-impl/nm-utils.c3
-rw-r--r--src/libnm-core-impl/nm-vpn-plugin-info.c2
-rw-r--r--src/libnm-core-impl/tests/test-general.c20
-rw-r--r--src/libnm-core-impl/tests/test-setting.c39
-rw-r--r--src/libnm-core-public/nm-dbus-interface.h14
-rw-r--r--src/libnm-core-public/nm-errors.h7
-rw-r--r--src/libnm-core-public/nm-setting-connection.h22
-rw-r--r--src/libnm-core-public/nm-setting-gsm.h3
-rw-r--r--src/libnm-core-public/nm-setting-hsr.h6
-rw-r--r--src/libnm-core-public/nm-setting-ip-config.h3
-rw-r--r--src/libnm-core-public/nm-utils.h2
-rw-r--r--src/libnm-core-public/nm-version-macros.h.in9
-rw-r--r--src/libnm-core-public/nm-version.h24
-rw-r--r--src/libnm-core-public/nm-vpn-plugin-info.h2
-rw-r--r--src/libnm-glib-aux/nm-io-utils.c18
-rw-r--r--src/libnm-glib-aux/nm-io-utils.h1
-rw-r--r--src/libnm-platform/nm-linux-platform.c56
-rw-r--r--src/libnm-platform/nm-platform.c25
-rw-r--r--src/libnm-platform/nm-platform.h15
-rw-r--r--src/libnm-platform/nmp-ethtool.c2
-rw-r--r--src/libnm-platform/nmp-object.c2
-rw-r--r--src/libnm-systemd-core/meson.build1
-rw-r--r--src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h2
-rw-r--r--src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h2
-rw-r--r--src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c2
-rw-r--r--src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c5
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-device/device-internal.h94
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-device/device-private.c35
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-device/device-private.h10
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-device/device-util.c156
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-device/device-util.h17
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-device/sd-device.c436
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c158
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h9
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c128
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c1
-rw-r--r--src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c13
-rw-r--r--src/libnm-systemd-core/src/systemd/_sd-common.h2
-rw-r--r--src/libnm-systemd-core/src/systemd/sd-device.h3
-rw-r--r--src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h3
-rw-r--r--src/libnm-systemd-core/src/systemd/sd-dhcp6-lease.h3
-rw-r--r--src/libnm-systemd-core/src/systemd/sd-dhcp6-option.h3
-rw-r--r--src/libnm-systemd-core/src/systemd/sd-ndisc.h3
-rw-r--r--src/libnm-systemd-shared/meson.build2
-rw-r--r--src/libnm-systemd-shared/src/basic/alloc-util.c1
-rw-r--r--src/libnm-systemd-shared/src/basic/alloc-util.h13
-rw-r--r--src/libnm-systemd-shared/src/basic/assert-util.h48
-rw-r--r--src/libnm-systemd-shared/src/basic/bitfield.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/cgroup-util.h12
-rw-r--r--src/libnm-systemd-shared/src/basic/chattr-util.c2
-rw-r--r--src/libnm-systemd-shared/src/basic/chattr-util.h13
-rw-r--r--src/libnm-systemd-shared/src/basic/devnum-util.h10
-rw-r--r--src/libnm-systemd-shared/src/basic/env-file.c1
-rw-r--r--src/libnm-systemd-shared/src/basic/env-util.c41
-rw-r--r--src/libnm-systemd-shared/src/basic/env-util.h2
-rw-r--r--src/libnm-systemd-shared/src/basic/errno-util.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/escape.c25
-rw-r--r--src/libnm-systemd-shared/src/basic/escape.h9
-rw-r--r--src/libnm-systemd-shared/src/basic/ether-addr-util.c17
-rw-r--r--src/libnm-systemd-shared/src/basic/ether-addr-util.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/fd-util.c41
-rw-r--r--src/libnm-systemd-shared/src/basic/fd-util.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/fileio.c231
-rw-r--r--src/libnm-systemd-shared/src/basic/fileio.h12
-rw-r--r--src/libnm-systemd-shared/src/basic/format-ifname.c2
-rw-r--r--src/libnm-systemd-shared/src/basic/format-util.c1
-rw-r--r--src/libnm-systemd-shared/src/basic/fs-util.c15
-rw-r--r--src/libnm-systemd-shared/src/basic/fs-util.h9
-rw-r--r--src/libnm-systemd-shared/src/basic/glyph-util.c208
-rw-r--r--src/libnm-systemd-shared/src/basic/glyph-util.h128
-rw-r--r--src/libnm-systemd-shared/src/basic/hash-funcs.c78
-rw-r--r--src/libnm-systemd-shared/src/basic/hash-funcs.h3
-rw-r--r--src/libnm-systemd-shared/src/basic/hashmap.c40
-rw-r--r--src/libnm-systemd-shared/src/basic/hashmap.h89
-rw-r--r--src/libnm-systemd-shared/src/basic/hexdecoct.h14
-rw-r--r--src/libnm-systemd-shared/src/basic/hostname-util.c50
-rw-r--r--src/libnm-systemd-shared/src/basic/hostname-util.h36
-rw-r--r--src/libnm-systemd-shared/src/basic/in-addr-util.c18
-rw-r--r--src/libnm-systemd-shared/src/basic/include/net/if.h9
-rw-r--r--src/libnm-systemd-shared/src/basic/include/netinet/in.h19
-rw-r--r--src/libnm-systemd-shared/src/basic/io-util.c7
-rw-r--r--src/libnm-systemd-shared/src/basic/io-util.h9
-rw-r--r--src/libnm-systemd-shared/src/basic/iovec-util.h8
-rw-r--r--src/libnm-systemd-shared/src/basic/list.h6
-rw-r--r--src/libnm-systemd-shared/src/basic/locale-util.c120
-rw-r--r--src/libnm-systemd-shared/src/basic/lock-util.h2
-rw-r--r--src/libnm-systemd-shared/src/basic/log.h229
-rw-r--r--src/libnm-systemd-shared/src/basic/macro.h131
-rw-r--r--src/libnm-systemd-shared/src/basic/memory-util.c16
-rw-r--r--src/libnm-systemd-shared/src/basic/memory-util.h88
-rw-r--r--src/libnm-systemd-shared/src/basic/mempool.c1
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_fcntl.h73
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_fs.h14
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_random.h21
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_socket.h57
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_stat.h139
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_syscall.h482
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_threads.h13
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_type.h12
-rw-r--r--src/libnm-systemd-shared/src/basic/missing_wait.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/mountpoint-util.c823
-rw-r--r--src/libnm-systemd-shared/src/basic/mountpoint-util.h87
-rw-r--r--src/libnm-systemd-shared/src/basic/namespace-util.h5
-rw-r--r--src/libnm-systemd-shared/src/basic/ordered-set.h21
-rw-r--r--src/libnm-systemd-shared/src/basic/parse-util.c14
-rw-r--r--src/libnm-systemd-shared/src/basic/parse-util.h16
-rw-r--r--src/libnm-systemd-shared/src/basic/path-util.c71
-rw-r--r--src/libnm-systemd-shared/src/basic/path-util.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/pidfd-util.c55
-rw-r--r--src/libnm-systemd-shared/src/basic/pidref.h22
-rw-r--r--src/libnm-systemd-shared/src/basic/prioq.c12
-rw-r--r--src/libnm-systemd-shared/src/basic/process-util.c259
-rw-r--r--src/libnm-systemd-shared/src/basic/process-util.h39
-rw-r--r--src/libnm-systemd-shared/src/basic/random-util.c3
-rw-r--r--src/libnm-systemd-shared/src/basic/random-util.h8
-rw-r--r--src/libnm-systemd-shared/src/basic/ratelimit.h52
-rw-r--r--src/libnm-systemd-shared/src/basic/set.h31
-rw-r--r--src/libnm-systemd-shared/src/basic/signal-util.c6
-rw-r--r--src/libnm-systemd-shared/src/basic/signal-util.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/socket-util.c94
-rw-r--r--src/libnm-systemd-shared/src/basic/socket-util.h61
-rw-r--r--src/libnm-systemd-shared/src/basic/stat-util.c91
-rw-r--r--src/libnm-systemd-shared/src/basic/stat-util.h30
-rw-r--r--src/libnm-systemd-shared/src/basic/stdio-util.h1
-rw-r--r--src/libnm-systemd-shared/src/basic/string-util.c108
-rw-r--r--src/libnm-systemd-shared/src/basic/string-util.h18
-rw-r--r--src/libnm-systemd-shared/src/basic/strv.c58
-rw-r--r--src/libnm-systemd-shared/src/basic/strv.h10
-rw-r--r--src/libnm-systemd-shared/src/basic/time-util.c5
-rw-r--r--src/libnm-systemd-shared/src/basic/time-util.h4
-rw-r--r--src/libnm-systemd-shared/src/basic/tmpfile-util.c1
-rw-r--r--src/libnm-systemd-shared/src/basic/user-util.c1243
-rw-r--r--src/libnm-systemd-shared/src/basic/utf8.c25
-rw-r--r--src/libnm-systemd-shared/src/basic/utf8.h3
-rw-r--r--src/libnm-systemd-shared/src/fundamental/assert-fundamental.h141
-rw-r--r--src/libnm-systemd-shared/src/fundamental/iovec-util-fundamental.h12
-rw-r--r--src/libnm-systemd-shared/src/fundamental/macro-fundamental.h187
-rw-r--r--src/libnm-systemd-shared/src/fundamental/memory-util-fundamental.h115
-rw-r--r--src/libnm-systemd-shared/src/fundamental/sha256-fundamental.c7
-rw-r--r--src/libnm-systemd-shared/src/fundamental/string-util-fundamental.c2
-rw-r--r--src/libnm-systemd-shared/src/fundamental/string-util-fundamental.h3
-rw-r--r--src/libnm-systemd-shared/src/shared/dns-domain.c7
-rw-r--r--src/libnmc-base/nm-client-utils.c4
-rw-r--r--src/libnmc-setting/nm-meta-setting-desc.c65
-rw-r--r--src/libnmc-setting/settings-docs.h.in9
-rw-r--r--src/linux-headers/mptcp.h1
-rw-r--r--src/meson.build2
-rw-r--r--src/n-acd/.github/workflows/ci.yml36
-rw-r--r--src/n-acd/README.md7
-rw-r--r--src/n-acd/meson.build2
-rw-r--r--src/n-acd/meson_options.txt1
-rw-r--r--src/n-acd/src/libnacd.sym1
-rw-r--r--src/n-acd/src/meson.build17
-rw-r--r--src/n-acd/src/n-acd-bpf-fallback.c30
-rw-r--r--src/n-acd/src/n-acd-bpf.c8
-rw-r--r--src/n-acd/src/n-acd.c34
-rw-r--r--src/n-acd/src/n-acd.h1
-rw-r--r--src/n-acd/src/test-api.c1
-rw-r--r--src/n-acd/src/test-bpf.c28
-rw-r--r--src/n-dhcp4/src/n-dhcp4-c-connection.c4
-rw-r--r--src/n-dhcp4/src/n-dhcp4-c-probe.c4
-rw-r--r--src/n-dhcp4/src/n-dhcp4-private.h2
-rw-r--r--src/nm-cloud-setup/main.c4
-rw-r--r--src/nm-initrd-generator/nm-initrd-generator.c2
-rw-r--r--src/nm-initrd-generator/nmi-cmdline-reader.c37
-rw-r--r--src/nm-initrd-generator/tests/test-cmdline-reader.c63
-rw-r--r--src/nmcli/devices.c53
-rw-r--r--src/nmcli/gen-metadata-nm-settings-nmcli.xml.in18
-rw-r--r--src/tests/client/meson.build6
-rw-r--r--src/tests/client/test-client.check-on-disk/test_002.expected10
-rw-r--r--src/tests/client/test-client.check-on-disk/test_003.expected556
-rw-r--r--src/tests/client/test-client.check-on-disk/test_004.expected678
-rwxr-xr-xsrc/tests/client/test-client.py34
-rwxr-xr-xsrc/tests/client/test-client.sh12
-rwxr-xr-xtools/create-exports-NetworkManager.sh27
-rwxr-xr-xtools/meson-post-install.sh5
-rwxr-xr-xtools/nm-in-container10
-rwxr-xr-xtools/run-nm-test.sh29
-rwxr-xr-xtools/test-sudo-wrapper.sh16
-rw-r--r--valgrind.suppressions17
274 files changed, 13839 insertions, 9557 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a938fa10..67fcf026 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -60,11 +60,11 @@ variables:
   #
   # This is done by running `ci-fairy generate-template` and possibly bumping
   # ".default_tag".
-  ALPINE_TAG:  'tag-dcc430216167'
-  CENTOS_TAG:  'tag-feb1adbc208e'
-  DEBIAN_TAG:  'tag-afb784497c2f'
-  FEDORA_TAG:  'tag-feb1adbc208e'
-  UBUNTU_TAG:  'tag-afb784497c2f'
+  ALPINE_TAG:  'tag-0c3a6f855fb8'
+  CENTOS_TAG:  'tag-c1c23df75dda'
+  DEBIAN_TAG:  'tag-d4bf5db9e214'
+  FEDORA_TAG:  'tag-c1c23df75dda'
+  UBUNTU_TAG:  'tag-d4bf5db9e214'
 
   ALPINE_EXEC: 'bash .gitlab-ci/alpine-install.sh'
   CENTOS_EXEC: 'bash .gitlab-ci/fedora-install.sh'
@@ -102,25 +102,123 @@ variables:
 # Build a container for each distribution + version. The ci-templates
 # will re-use the containers if the tag doesn't change.
 
-tier1:fedora:43@prep:
+tier1:fedora:42@prep:
   extends:
     - .fdo.container-build@fedora
   stage: prep
   variables:
     GIT_STRATEGY: none
-    FDO_DISTRIBUTION_VERSION: '43'
+    FDO_DISTRIBUTION_VERSION: '42'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
   rules:
     - if: $CI_PIPELINE_SOURCE != 'schedule' || $SCHEDULED_PIPELINE_NAME == "weekly"
 
-tier3:fedora:42@prep:
+tier2:fedora:rawhide@prep:
   extends:
     - .fdo.container-build@fedora
   stage: prep
   variables:
     GIT_STRATEGY: none
-    FDO_DISTRIBUTION_VERSION: '42'
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier2:centos:stream10@prep:
+  extends:
+    - .fdo.container-build@centos
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'stream10'
+    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
+    FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier2:centos:stream9@prep:
+  extends:
+    - .fdo.container-build@centos
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'stream9'
+    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
+    FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier2:ubuntu:devel@prep:
+  extends:
+    - .fdo.container-build@ubuntu
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'devel'
+    FDO_DISTRIBUTION_TAG: $UBUNTU_TAG
+    FDO_DISTRIBUTION_EXEC: $UBUNTU_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier2:debian:testing@prep:
+  extends:
+    - .fdo.container-build@debian
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'testing'
+    FDO_DISTRIBUTION_TAG: $DEBIAN_TAG
+    FDO_DISTRIBUTION_EXEC: $DEBIAN_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier2:debian:sid@prep:
+  extends:
+    - .fdo.container-build@debian
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'sid'
+    FDO_DISTRIBUTION_TAG: $DEBIAN_TAG
+    FDO_DISTRIBUTION_EXEC: $DEBIAN_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier2:alpine:edge@prep:
+  extends:
+    - .fdo.container-build@alpine
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'edge'
+    FDO_DISTRIBUTION_TAG: $ALPINE_TAG
+    FDO_DISTRIBUTION_EXEC: $ALPINE_EXEC
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+      when: manual
+      allow_failure: true
+
+tier3:fedora:43@prep:
+  extends:
+    - .fdo.container-build@fedora
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '43'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
   rules:
@@ -268,34 +366,6 @@ tier3:alpine:3.19@prep:
       when: manual
       allow_failure: true
 
-tier3:centos:stream10@prep:
-  extends:
-    - .fdo.container-build@centos
-  stage: prep
-  variables:
-    GIT_STRATEGY: none
-    FDO_DISTRIBUTION_VERSION: 'stream10'
-    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
-    FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC
-  rules:
-    - if: $CI_PIPELINE_SOURCE != 'schedule'
-      when: manual
-      allow_failure: true
-
-tier3:centos:stream9@prep:
-  extends:
-    - .fdo.container-build@centos
-  stage: prep
-  variables:
-    GIT_STRATEGY: none
-    FDO_DISTRIBUTION_VERSION: 'stream9'
-    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
-    FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC
-  rules:
-    - if: $CI_PIPELINE_SOURCE != 'schedule'
-      when: manual
-      allow_failure: true
-
 #################################################################
 #                                                               #
 # tierN stage                                                   #
@@ -312,7 +382,7 @@ tier3:centos:stream9@prep:
   dependencies: []
 
 
-t_fedora:43:
+t_fedora:42:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -328,24 +398,122 @@ t_fedora:43:
         - tarball
         - subtree
   variables:
-    FDO_DISTRIBUTION_VERSION: '43'
+    FDO_DISTRIBUTION_VERSION: '42'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
   needs:
-    - "tier1:fedora:43@prep"
+    - "tier1:fedora:42@prep"
   rules:
     - if: $CI_PIPELINE_SOURCE != 'schedule'
 
-t_fedora:42:
+t_fedora:rawhide:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@fedora
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - "tier2:fedora:rawhide@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_centos:stream10:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@centos
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'stream10'
+    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
+  needs:
+    - "tier2:centos:stream10@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_centos:stream9:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@centos
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'stream9'
+    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
+  needs:
+    - "tier2:centos:stream9@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_ubuntu:devel:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@ubuntu
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'devel'
+    FDO_DISTRIBUTION_TAG: $UBUNTU_TAG
+  needs:
+    - "tier2:ubuntu:devel@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_debian:testing:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@debian
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'testing'
+    FDO_DISTRIBUTION_TAG: $DEBIAN_TAG
+  needs:
+    - "tier2:debian:testing@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_debian:sid:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@debian
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'sid'
+    FDO_DISTRIBUTION_TAG: $DEBIAN_TAG
+  needs:
+    - "tier2:debian:sid@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_alpine:edge:
+  extends:
+    - .build@template
+    - .fdo.distribution-image@alpine
+    - .nm_artifacts_debug
+  stage: tier2
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'edge'
+    FDO_DISTRIBUTION_TAG: $ALPINE_TAG
+  needs:
+    - "tier2:alpine:edge@prep"
+  rules:
+    - if: $CI_PIPELINE_SOURCE != 'schedule'
+
+t_fedora:43:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
     - .nm_artifacts_debug
   stage: tier3
   variables:
-    FDO_DISTRIBUTION_VERSION: '42'
+    FDO_DISTRIBUTION_VERSION: '43'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
   needs:
-    - "tier3:fedora:42@prep"
+    - "tier3:fedora:43@prep"
   rules:
     - if: $CI_PIPELINE_SOURCE != 'schedule'
 
@@ -489,34 +657,6 @@ t_alpine:3.19:
   rules:
     - if: $CI_PIPELINE_SOURCE != 'schedule'
 
-t_centos:stream10:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@centos
-    - .nm_artifacts_debug
-  stage: tier3
-  variables:
-    FDO_DISTRIBUTION_VERSION: 'stream10'
-    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
-  needs:
-    - "tier3:centos:stream10@prep"
-  rules:
-    - if: $CI_PIPELINE_SOURCE != 'schedule'
-
-t_centos:stream9:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@centos
-    - .nm_artifacts_debug
-  stage: tier3
-  variables:
-    FDO_DISTRIBUTION_VERSION: 'stream9'
-    FDO_DISTRIBUTION_TAG: $CENTOS_TAG
-  needs:
-    - "tier3:centos:stream9@prep"
-  rules:
-    - if: $CI_PIPELINE_SOURCE != 'schedule'
-
 #################################################################
 #                                                               #
 # specific jobs                                                 #
@@ -527,10 +667,10 @@ check-patch:
   extends:
     - .fdo.distribution-image@fedora
   variables:
-    FDO_DISTRIBUTION_VERSION: '43'
+    FDO_DISTRIBUTION_VERSION: '42'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
   needs:
-    - "tier1:fedora:43@prep"
+    - "tier1:fedora:42@prep"
   rules:
     - if: $CI_PIPELINE_SOURCE != 'schedule'
   stage: tier1
@@ -542,10 +682,10 @@ check-tree:
   extends:
     - .fdo.distribution-image@fedora
   variables:
-    FDO_DISTRIBUTION_VERSION: '43'
+    FDO_DISTRIBUTION_VERSION: '42'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
   needs:
-    - "tier1:fedora:43@prep"
+    - "tier1:fedora:42@prep"
   rules:
     - if: $CI_PIPELINE_SOURCE == 'merge_request_event' && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH
       allow_failure: true
@@ -573,11 +713,11 @@ pages:
   rules:
     - if: $CI_PIPELINE_SOURCE == 'schedule'
       when: never
-    - if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == 'main'
+    - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
   dependencies:
-    - "t_fedora:43: [meson+gcc+docs+valgrind]"
+    - "t_fedora:42: [meson+gcc+docs+valgrind]"
   needs:
-    - "t_fedora:43: [meson+gcc+docs+valgrind]"
+    - "t_fedora:42: [meson+gcc+docs+valgrind]"
 
 triage:issues:
   stage: triage
@@ -594,11 +734,11 @@ coverity:
   extends:
     - .fdo.distribution-image@fedora
   variables:
-    FDO_DISTRIBUTION_VERSION: '43'
+    FDO_DISTRIBUTION_VERSION: '42'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
   stage: coverity
   needs:
-    - "tier1:fedora:43@prep"
+    - "tier1:fedora:42@prep"
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule" && $SCHEDULED_PIPELINE_NAME == "weekly"
   script:
diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template
index 3af5cac4..4ef3ff9e 100644
--- a/.gitlab-ci/ci.template
+++ b/.gitlab-ci/ci.template
@@ -240,7 +240,7 @@ pages:
   rules:
     - if: $CI_PIPELINE_SOURCE == 'schedule'
       when: never
-    - if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == 'main'
+    - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
   dependencies:
     - "t_{{default_distro.name}}:{{default_distro.versions[0]}}: [meson+gcc+docs+valgrind]"
   needs:
diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml
index b99c1673..28d31931 100644
--- a/.gitlab-ci/config.yml
+++ b/.gitlab-ci/config.yml
@@ -23,17 +23,39 @@ distributions:
   - name: fedora
     tier: 1
     versions:
-      - '43'
+      - '42'
 
   # TIER 2: distribution versions that will or might use the current NM version.
   # Run when doing a release.
+  - name: fedora
+    tier: 2
+    versions:
+      - 'rawhide'
+  - name: centos
+    tier: 2
+    versions:
+      - 'stream10'
+      - 'stream9'
+  - name: ubuntu
+    tier: 2
+    versions:
+      - 'devel'
+  - name: debian
+    tier: 2
+    versions:
+      - 'testing'
+      - 'sid'
+  - name: alpine
+    tier: 2
+    versions:
+      - 'edge'
 
   # TIER 3: distribution versions not in EOL but don't use the current NM version.
   # Run when doing a release, but a failure won't be blocking for the release.
   - name: fedora
     tier: 3
     versions:
-      - '42'
+      - '43'
       - '41'
   - name: ubuntu
     tier: 3
@@ -53,8 +75,3 @@ distributions:
       - '3.21'
       - '3.20'
       - '3.19'
-  - name: centos
-    tier: 3
-    versions:
-      - 'stream10'
-      - 'stream9'
diff --git a/.gitlab-ci/distros-info.yml b/.gitlab-ci/distros-info.yml
index 90d23993..e2ac2829 100644
--- a/.gitlab-ci/distros-info.yml
+++ b/.gitlab-ci/distros-info.yml
@@ -8,6 +8,9 @@ fedora:
 - version: rawhide
   support: yes
   nm: main
+- version: 43
+  support: 2026-12-02
+  nm: 1.54
 - version: 42
   support: 2026-05-13
   nm: 1.52
@@ -18,8 +21,11 @@ fedora:
 
 # CentOS Stream
 centos:
+- version: stream10
+  support: 2030-12-31 # exact date unknown, only the year
+  nm: main
 - version: stream9
-  support: 2027-05-31
+  support: 2027-12-31 # exact date unknown, only the year
   nm: main
 
 # RHEL:
@@ -31,33 +37,43 @@ centos:
 #   support: 6 months
 # Releases and support info: https://access.redhat.com/support/policy/updates/errata
 rhel:
-- version: 9.6  # not released yet
+# Not released yet
+- version: 10.1
   support: yes
-  nm: main
-- version: 9.5
+  nm: 1.54
+- version: 9.7  # not released yet
   support: yes
-  nm: 1.48
+  nm: 1.54
+# Full support or EUS support:
+- version: 10.0
+  support: 2027-05-31
+  extended-support: 2029-05-31
+  nm: 1.52
+- version: 9.6
+  support: 2027-05-31
+  extended-support: 2029-05-31
+  nm: 1.52
 - version: 9.4
   support: 2026-04-30
   extended-support: 2028-04-30
   nm: 1.46
-- version: 9.2
-  support: 2025-05-31
-  extended-support: 2027-05-31
-  nm: 1.42
 - version: 8.10  # last RHEL 8 release, maintenaince support only
   support: 2029-05-31
   extended-support: no
   nm: 1.40
-- version: 8.8
+# SAP / Enhaced EUS only:
+- version: 9.2
   support: 2025-05-31
   extended-support: 2027-05-31
-  nm: 1.40
-# SAP / Enhaced EUS only:
+  nm: 1.42
 - version: 9.0
   support: 2024-05-31
   extended-support: 2026-05-31
   nm: 1.36
+- version: 8.8
+  support: 2025-05-31
+  extended-support: 2027-05-31
+  nm: 1.40
 - version: 8.6
   support: 2024-05-31
   extended-support: 2026-05-31
@@ -81,10 +97,6 @@ ubuntu:
   name: plucky
   support: 2026-01-15
   nm: 1.52
-- version: 24.10
-  name: oracular
-  support: 2025-07-10
-  nm: 1.48
 - version: 24.04
   name: noble
   support: 2029-05-31
@@ -109,6 +121,11 @@ debian:
 - version: sid
   support: yes
   nm: main
+- version: 13
+  name: trixie
+  support: 2028-08-09
+  extended-support: 2030-06-30
+  nm: 1.52
 - version: 12
   name: bookworm
   support: 2026-06-11
@@ -130,6 +147,9 @@ alpine:
 - version: edge
   support: yes
   nm: main
+- version: 3.22
+  support: 2027-05-01
+  nm: 1.52
 - version: 3.21
   support: 2026-11-01
   nm: 1.50
diff --git a/.gitlab-ci/run-test.sh b/.gitlab-ci/run-test.sh
index 44405558..b58a1c32 100755
--- a/.gitlab-ci/run-test.sh
+++ b/.gitlab-ci/run-test.sh
@@ -155,12 +155,7 @@ test_subtree() {
     do_clean
     pushd ./src/$d
 
-    ARGS=()
-    if [ "$d" = n-acd ]; then
-        ARGS+=('-Debpf=false')
-    fi
-
-    CC="$cc" CFLAGS="-Werror -Wall" meson build "${ARGS[@]}"
+    CC="$cc" CFLAGS="-Werror -Wall" meson build
     ninja -v -C build test
 
     popd
diff --git a/MAINTAINERS.md b/MAINTAINERS.md
index 9be6901e..f6384c92 100644
--- a/MAINTAINERS.md
+++ b/MAINTAINERS.md
@@ -252,17 +252,25 @@ Versioning scheme (version numbers are called MAJOR.MINOR.MICRO):
   versioning scheme than the main NM project despite there are no development
   versions here.
 
+Before starting:
+- You need to have the maintainer role in the project.
+- The GPG key used to sign the release must be added to your GNOME's Gitlab
+  profile and uploaded to a keyserver.
+- All details: https://handbook.gnome.org/maintainers/making-a-release.html
+
 When doing a release, follow this process:
 1. Ensure that `NEWS` file is up to date.
-2. Increment the version in `meson.build`, commit and tag the commit. Example:
-   `git tag -s 1.2.8 -m 'Tag 1.2.8'`.
-3. Ensure that you are on the right commit and create the tarball:
-   `git clean -fdx && meson setup build && cd build && meson dist`
-4. Upload the tarball: `scp ./*-*.tar.xz "$user@master.gnome.org:"`
-5. Login to `master.gnome.org` and run `ftpadmin install`.  
-   Ensure the new tarballs show up at https://download.gnome.org/sources/
-   (happens after a short delay)
-6. Announce the release on the mailing list.
+2. Increment the version in `meson.build` or `configure.ac`.
+3. Commit and push to the `main` branch.
+4. Check that the Gitlab's pipeline finishes without errors.
+5. Tag the commit with a signed tag. Example: `git tag -s 1.2.8 -m 'Release 1.2.8'`.
+6. Push the tag. Example: `git push origin 1.2.8`.  
+   WARN: this is what starts the automatic CI release. As GNOME doesn't allow
+   to delete tags, any error detected after this will force a new version bump.
+7. Check that the Gitlab's pipeline finishes without errors. If that happens,
+   the release is done and available both in the Gitlab's releases section and
+   https://download.gnome.org/sources/*
+8. Announce the release on the mailing list.
 
 Notes:
 - You need access to master.gnome.org, see [here](https://handbook.gnome.org/infrastructure/accounts.html).
diff --git a/NEWS b/NEWS
index 339ff253..3ee8e88a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,36 +1,45 @@
-===============================================
-NetworkManager-1.54.3
-Overview of changes since NetworkManager-1.54.2
-===============================================
-
-* For private connections (the ones that specify a user in the
-  "connection.permissions" property), verify that the user can access
-  the 802.1X certificates and keys set in the connection.
-* Introduce a libnm function that can be used by VPN plugins to check
-  user permissions on certificate and keys.
-
-===============================================
-NetworkManager-1.54.2
-Overview of changes since NetworkManager-1.54.1
-===============================================
+=============================================
+NetworkManager-1.56
+Overview of changes since NetworkManager-1.54
+=============================================
 
+* Unify the versioning to use everywhere the scheme with the -rcX or -dev
+  suffixes when appropriate. This affects, for example, the URL and filename
+  of the release tarball and the version reported by nmcli and the daemon.
+  As an exception, the C API will continue to use the 90+ scheme for RC versions.
+* nmcli now supports viewing and managing WireGuard peers.
 * Support reapplying the "sriov.vfs" property as long as
   "sriov.total-vfs" is not changed.
-* Support configuring the HSR protocol version via the
-  "hsr.protocol-version" property.
-* Support configuring the HSR interlink port via the
-  "hsr.interlink" property.
-
-===============================================
-NetworkManager-1.54.1
-Overview of changes since NetworkManager-1.54.0
-===============================================
-
+* Support reapplying "bond-port.vlans".
+* Accept hostnames longer than 64 characters from DNS lookup.
 * Make that global-dns configuration overwrites DNS searches and
   options from connections, instead of merging all together.
 * Add support for a new rd.net.dhcp.client-id option in
   nm-initrd-generator.
-* Minor bug fixes.
+* Add gsm device-uid setting to restrict the devices the connection applies to.
+* Support configuring the HSR protocol version via the
+  "hsr.protocol-version" property.
+* Fix a bug that makes broadband connections auto-connect getting 
+  blocked if the connection tries to reconnect when modem status is 
+  "disconnecting" / "disconnected".
+* Treat modem connection not having an operator code available
+  as a recoverable error.
+* Add support for configuring systemd-resolved's DNSSEC option
+  per-connection via the "connection.dnssec" connection property.
+* Support configuring the HSR interlink port via the
+  "hsr.interlink" property.
+* Fix some connection properties not being applied to vpn connections
+  (connection.mdns, connection.llmnr, connection.dns-over-tls,
+   connection.mptcp-flags, ipv6.ip6-privacy)
+* Update n-acd to always compile with eBPF enabled, as support
+  for eBPF is now detected at run time.
+* Add new MPTCP 'laminar' endpoint type, and set it by default alongside
+  the 'subflow' one.
+* For private connections (the ones that specify a user in the
+  "connection.permissions" property), verify that the user can access
+  the 802.1X certificates and keys set in the connection.
+* Introduce a libnm function that can be used by VPN plugins to check
+  user permissions on certificate and keys.
 
 =============================================
 NetworkManager-1.54
diff --git a/config.h.meson b/config.h.meson
index d41304db..05d346bb 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -239,6 +239,15 @@
 /* Whether we build with OVS plugin */
 #mesondefine WITH_OPENVSWITCH
 
+/* Whether we build with team support */
+#mesondefine WITH_TEAMDCTL
+
+/* Whether we build with Wi-Fi support */
+#mesondefine WITH_WIFI
+
+/* Whether we build with WWAN support */
+#mesondefine WITH_WWAN
+
 /* Define if you have PPP support */
 #mesondefine WITH_PPP
 
diff --git a/contrib/alpine/REQUIRED_PACKAGES b/contrib/alpine/REQUIRED_PACKAGES
index 9f1affcb..3a3cc1ab 100755
--- a/contrib/alpine/REQUIRED_PACKAGES
+++ b/contrib/alpine/REQUIRED_PACKAGES
@@ -30,7 +30,6 @@ apk add \
     'libpsl-dev' \
     'libsoup-dev' \
     'libteam-dev' \
-    'libtool' \
     'linux-headers' \
     'meson' \
     'mobile-broadband-provider-info' \
diff --git a/contrib/debian/REQUIRED_PACKAGES b/contrib/debian/REQUIRED_PACKAGES
index d91e54d2..68f62570 100755
--- a/contrib/debian/REQUIRED_PACKAGES
+++ b/contrib/debian/REQUIRED_PACKAGES
@@ -62,7 +62,6 @@ install \
     libreadline-dev \
     libsystemd-dev \
     libteam-dev \
-    libtool \
     libudev-dev \
     locales \
     meson \
diff --git a/contrib/fedora/REQUIRED_PACKAGES b/contrib/fedora/REQUIRED_PACKAGES
index 38a2cbbf..6f70537d 100755
--- a/contrib/fedora/REQUIRED_PACKAGES
+++ b/contrib/fedora/REQUIRED_PACKAGES
@@ -68,7 +68,6 @@ install \
     libndp-devel \
     libnvme-devel \
     libselinux-devel \
-    libtool \
     libuuid-devel \
     meson \
     mobile-broadband-provider-info-devel \
diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec
index 29bf8050..73ab88f3 100644
--- a/contrib/fedora/rpm/NetworkManager.spec
+++ b/contrib/fedora/rpm/NetworkManager.spec
@@ -6,18 +6,23 @@
 #
 # Note that it contains __PLACEHOLDERS__ that will be replaced by the accompanying 'build.sh' script.
 
+Name:    NetworkManager
+Summary: Network connection manager and user applications
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+URL:     https://networkmanager.dev/
+Group:   System Environment/Base
+
+Epoch:   1
+Version: __VERSION__
+Release: __RELEASE_VERSION__%{?dist}
+
+###############################################################################
 
 %global wpa_supplicant_version 1:1.1
 
 %global ppp_version %(pkg-config --modversion pppd 2>/dev/null || sed -n 's/^#define\\s*VERSION\\s*"\\([^\\s]*\\)"$/\\1/p' %{_includedir}/pppd/patchlevel.h 2>/dev/null | grep . || echo bad)
 %global glib2_version %(pkg-config --modversion glib-2.0 2>/dev/null || echo bad)
 
-%global epoch_version 1
-%global real_version __VERSION__
-%global rpm_version %{real_version}
-%global release_version __RELEASE_VERSION__
-%global snapshot __SNAPSHOT__
-%global git_sha __COMMIT__
 %global bcond_default_debug __BCOND_DEFAULT_DEBUG__
 %global bcond_default_lto __BCOND_DEFAULT_LTO__
 %global bcond_default_test __BCOND_DEFAULT_TEST__
@@ -32,17 +37,6 @@
 
 %global _hardened_build 1
 
-%if "x%{?snapshot}" != "x"
-%global snapshot_dot .%{snapshot}
-%endif
-%if "x%{?git_sha}" != "x"
-%global git_sha_dot .%{git_sha}
-%endif
-
-%global snap %{?snapshot_dot}%{?git_sha_dot}
-
-%global real_version_major %(printf '%s' '%{real_version}' | sed -n 's/^\\([1-9][0-9]*\\.[0-9][0-9]*\\)\\.[0-9][0-9]*$/\\1/p')
-
 %global systemd_units NetworkManager.service NetworkManager-wait-online.service NetworkManager-dispatcher.service nm-priv-helper.service
 
 %global systemd_units_cloud_setup nm-cloud-setup.service nm-cloud-setup.timer
@@ -153,17 +147,6 @@
 %bcond_with ifcfg_migrate
 %endif
 
-%if 0%{?fedora}
-# Although eBPF would be available on Fedora's kernel, it seems
-# we often get SELinux denials (rh#1651654). But even aside them,
-# bpf(BPF_MAP_CREATE, ...) randomly fails with EPERM. That might
-# be related to `ulimit -l`. Anyway, this is not usable at the
-# moment.
-%global ebpf_enabled "no"
-%else
-%global ebpf_enabled "no"
-%endif
-
 # Fedora 33 enables LTO by default by setting CFLAGS="-flto -ffat-lto-objects".
 # However, we also require "-flto -flto-partition=none", so disable Fedora's
 # default and use our configure option --with-lto instead.
@@ -171,16 +154,7 @@
 
 ###############################################################################
 
-Name: NetworkManager
-Summary: Network connection manager and user applications
-Epoch: %{epoch_version}
-Version: %{rpm_version}
-Release: %{release_version}%{?snap}%{?dist}
-Group: System Environment/Base
-License: GPL-2.0-or-later AND LGPL-2.1-or-later
-URL: https://networkmanager.dev/
-
-#Source: https://download.gnome.org/sources/NetworkManager/%{real_version_major}/%{name}-%{real_version}.tar.xz
+#Source: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/releases/%{version_no_tilde}/downloads/%{name}-%{version_no_tilde}.tar.xz
 Source: __SOURCE1__
 Source1: NetworkManager.conf
 Source2: 00-server.conf
@@ -253,7 +227,6 @@ Conflicts: NetworkManager-dispatcher-routing-rules <= 1:1.47.5-3
 %endif
 
 BuildRequires: gcc
-BuildRequires: libtool
 BuildRequires: pkgconfig
 BuildRequires: meson
 BuildRequires: gettext-devel >= 0.19.8
@@ -586,7 +559,7 @@ Preferably use nmcli instead.
 
 
 %prep
-%autosetup -p1 -n NetworkManager-%{real_version}
+%autosetup -p1 -n NetworkManager-%{version_no_tilde}
 
 
 %build
@@ -683,11 +656,6 @@ Preferably use nmcli instead.
 %else
 	-Dlibpsl=false \
 %endif
-%if %{ebpf_enabled} != "yes"
-	-Debpf=false \
-%else
-	-Debpf=true \
-%endif
 	-Dsession_tracking=systemd \
 	-Dsuspend_resume=systemd \
 	-Dsystemdsystemunitdir=%{_unitdir} \
@@ -771,8 +739,8 @@ rm -f %{buildroot}%{_unitdir}/NetworkManager-wait-online-initrd.service
 find %{buildroot}%{_datadir}/gtk-doc -exec touch --reference meson.build '{}' \+
 
 %if 0%{?__debug_package} && ! 0%{?flatpak}
-mkdir -p %{buildroot}%{_prefix}/src/debug/NetworkManager-%{real_version}
-cp valgrind.suppressions %{buildroot}%{_prefix}/src/debug/NetworkManager-%{real_version}
+mkdir -p %{buildroot}%{_prefix}/src/debug/NetworkManager-%{version_no_tilde}
+cp valgrind.suppressions %{buildroot}%{_prefix}/src/debug/NetworkManager-%{version_no_tilde}
 %endif
 
 %if %{with ifcfg_rh}
diff --git a/contrib/fedora/rpm/build.sh b/contrib/fedora/rpm/build.sh
index 4a89a6b4..10180587 100755
--- a/contrib/fedora/rpm/build.sh
+++ b/contrib/fedora/rpm/build.sh
@@ -110,7 +110,6 @@ exec 2>&1
 
 UUID=`uuidgen`
 RELEASE_VERSION="${RELEASE_VERSION:-$(git rev-list HEAD | wc -l)}"
-SNAPSHOT="${SNAPSHOT:-%{nil\}}"
 VERSION="${VERSION:-$(get_version || die "Could not read $VERSION")}"
 COMMIT_FULL="${COMMIT_FULL:-$(git rev-parse --verify HEAD || die "Error reading HEAD revision")}"
 COMMIT="${COMMIT:-$(printf '%s' "$COMMIT_FULL" | sed 's/^\(.\{10\}\).*/\1/' || die "Error reading HEAD revision")}"
@@ -206,12 +205,8 @@ cp "$SOURCE_README_IFCFG_MIGRATED" "$TEMP/SOURCES/readme-ifcfg-rh-migrated.txt"
 
 write_changelog
 
-sed -e "s/__VERSION__/$VERSION/g" \
+sed -e "s/__VERSION__/${VERSION/-/\~}/g" \
     -e "s/__RELEASE_VERSION__/$RELEASE_VERSION/g" \
-    -e "s/__SNAPSHOT__/$SNAPSHOT/g" \
-    -e "s/__COMMIT__/$COMMIT/g" \
-    -e "s/__COMMIT_FULL__/$COMMIT_FULL/g" \
-    -e "s/__SNAPSHOT__/$SNAPSHOT/g" \
     -e "s/__SOURCE1__/$(basename "$SOURCE")/g" \
     -e "s/__BCOND_DEFAULT_DEBUG__/$BCOND_DEFAULT_DEBUG/g" \
     -e "s/__BCOND_DEFAULT_LTO__/${BCOND_DEFAULT_LTO:-"%{nil}"}/g" \
@@ -232,7 +227,12 @@ case "$BUILDTYPE" in
         ;;
 esac
 
-rpmbuild --define "_topdir $TEMP" $RPM_BUILD_OPTION "$TEMPSPEC" $NM_RPMBUILD_ARGS || die "ERROR: rpmbuild FAILED"
+DIST=
+[[ "$COMMIT" != "" ]] && DIST=".${COMMIT}${DIST}"
+[[ "$SNAPSHOT" != "" ]] && DIST=".${SNAPSHOT}${DIST}"
+[[ "$DIST" != "" ]] && DIST=("--define" "dist ${DIST}$(rpmbuild --eval '%{dist}')")
+
+rpmbuild --define "_topdir $TEMP" "${DIST[@]}" $RPM_BUILD_OPTION "$TEMPSPEC" $NM_RPMBUILD_ARGS || die "ERROR: rpmbuild FAILED"
 
 LS_EXTRA=()
 
diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh
index f0638591..6bdf6682 100755
--- a/contrib/fedora/rpm/configure-for-system.sh
+++ b/contrib/fedora/rpm/configure-for-system.sh
@@ -155,7 +155,6 @@ P_CRYPTO="${CRYPTO-}"
 P_DBUS_SYS_DIR="${DBUS_SYS_DIR-}"
 P_DHCP_DEFAULT="${DHCP_DEFAULT-}"
 P_DNS_RC_MANAGER_DEFAULT="${DNS_RC_MANAGER_DEFAULT-}"
-P_EBPF_ENABLED="${EBPF_ENABLED-no}"
 P_FIREWALLD_ZONE="${FIREWALLD_ZONE-}"
 P_IWD="${IWD-}"
 P_LOGGING_BACKEND_DEFAULT="${LOGGING_BACKEND_DEFAULT-}"
@@ -396,7 +395,6 @@ meson setup\
     -Dmodify_system=true \
     -Dconcheck=true \
     -Dlibpsl="$(bool_true "$P_FEDORA")" \
-    -Debpf="$(bool_true "$P_EBPF_ENABLED")" \
     -Dsession_tracking=systemd \
     -Dsuspend_resume=systemd \
     -Dsystemdsystemunitdir=/usr/lib/systemd/system \
diff --git a/contrib/fedora/rpm/release.sh b/contrib/fedora/rpm/release.sh
index ff18cc5b..6caf1100 100755
--- a/contrib/fedora/rpm/release.sh
+++ b/contrib/fedora/rpm/release.sh
@@ -27,7 +27,7 @@
 #   * Run in a "clean" environment, i.e. no unusual environment variables set, on a recent
 #     Fedora, with suitable dependencies installed.
 #
-#   * First, ensure that you have a valid Gitlab's private token for gitlab.freedestkop.org
+#   * First, ensure that you have a valid Gitlab's private token for gitlab.freedesktop.org
 #     stored in ~/.config/nm-release-token, or pass one with --gitlab-token argument.
 #     Also, ensure you have a GPG key that you want to use for signing. Also, have gpg-agent running
 #     and possibly configure `git config --get user.signingkey` for the proper key.
@@ -102,14 +102,8 @@ do_command() {
 SCRIPTDIR="$(dirname "$(readlink -f "$0")")"
 GITDIR="$(cd "$SCRIPTDIR" && git rev-parse --show-toplevel || die "Could not get GITDIR")"
 
-parse_version() {
-    local VERSION=$(grep -E -m1 '^\s+version:' "$GITDIR/meson.build" \
-                    | cut -d"'" -f2 \
-                    | sed 's/\./ /g')
-
-    re='^(0|[1-9][0-9]*) (0|[1-9][0-9]*) (0|[1-9][0-9]*)$'
-    [[ "$VERSION" =~ $re ]] || return 1
-    echo "$VERSION"
+get_version() {
+    grep -E -m1 '^\s+version:' "$GITDIR/meson.build" | cut -d"'" -f2
 }
 
 number_is_even() {
@@ -155,14 +149,12 @@ check_gitlab_pipeline() {
 
 set_version_number() {
     sed -i \
-        -e '1,20 s/^\( *version: *'\''\)[0-9]\+\.[0-9]\+\.[0-9]\+\('\'',\)$/\1'"$1.$2.$3"'\2/' \
+        -E "1,20 s/^( *version: *')[^']+(',) *\$/\1$1\2/" \
         meson.build
 }
 
 check_news() {
     local mode="$1"
-    shift
-    local ver_arr=("$@")
 
     case "$mode" in
         major|minor)
@@ -259,12 +251,18 @@ done
 
 [ -n "$RELEASE_MODE" ] || die_usage "specify the desired release mode"
 
-VERSION_ARR=( $(parse_version) ) || die "cannot detect NetworkManager version"
-VERSION_STR="$(IFS=.; echo "${VERSION_ARR[*]}")"
+VERSION_STR="$(get_version)"
+VERSION_ARR=( $(echo "$VERSION_STR" | sed 's/[\.\-]/ /g') )
+if [[ ${VERSION_ARR[2]} =~ ^rc ]]; then
+    RC_VERSION=${VERSION_ARR[2]#rc}
+    VERSION_ARR[2]=0
+else
+    RC_VERSION=
+fi
 
 echo "Current version before release: $VERSION_STR (do \"$RELEASE_MODE\" release)"
 
-grep -q "version: '${VERSION_ARR[0]}.${VERSION_ARR[1]}.${VERSION_ARR[2]}'," ./meson.build || die "meson.build does not have expected version"
+grep -q "version: '$VERSION_STR'," ./meson.build || die "meson.build does not have expected version"
 
 TMP="$(git status --porcelain)" || die "git status failed"
 test -z "$TMP" || die "git working directory is not clean (git status --porcelain)"
@@ -280,50 +278,41 @@ if [ "$CUR_BRANCH" = main ]; then
     number_is_odd "${VERSION_ARR[1]}" || die "Unexpected version number on main. Should be an odd development version"
     [ "$RELEASE_MODE" = devel -o "$RELEASE_MODE" = rc1 -o "$RELEASE_MODE" = major-post ] || die "Unexpected branch name \"$CUR_BRANCH\" for \"$RELEASE_MODE\""
 else
-    re='^nm-[0-9]+-[0-9]+$'
-    [[ "$CUR_BRANCH" =~ $re ]] || die "Unexpected current branch $CUR_BRANCH. Should be main or nm-?-??"
-    if number_is_odd "${VERSION_ARR[1]}"; then
-        # we are on a release candiate branch.
-        [ "$RELEASE_MODE" = rc -o "$RELEASE_MODE" = major ] || die "Unexpected branch name \"$CUR_BRANCH\" for \"$RELEASE_MODE\""
-        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))" ] || die "Unexpected current branch $CUR_BRANCH. Should be nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))"
-    else
-        [ "$RELEASE_MODE" = minor ] || die "Unexpected branch name \"$CUR_BRANCH\" for \"$RELEASE_MODE\""
-        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}" ] || die "Unexpected current branch $CUR_BRANCH. Should be nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}"
-    fi
+    [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}" ] || die "Unexpected current branch $CUR_BRANCH. Should be nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}"
+    [ "$RELEASE_MODE" = rc -o "$RELEASE_MODE" = major -o "$RELEASE_MODE" = minor ] || die "Unexpected branch name \"$CUR_BRANCH\" for \"$RELEASE_MODE\""
 fi
 
-RC_VERSION=
 RELEASE_BRANCH=
 case "$RELEASE_MODE" in
     minor)
         number_is_even "${VERSION_ARR[1]}" || die "cannot do minor release on top of version $VERSION_STR"
-        [ "$CUR_BRANCH" != main ] || die "cannot do a minor release on main"
+        [ "$RC_VERSION" = "" ] || die "cannot do a minor release on top of an RC version"
+        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}" ] || die "minor release can only be on \"nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}\" branch"
         ;;
     devel)
         number_is_odd "${VERSION_ARR[1]}" || die "cannot do devel release on top of version $VERSION_STR"
-        [ "$((${VERSION_ARR[2]} + 1))" -lt 90 ] || die "devel release must have a micro version smaller than 90 but current version is $VERSION_STR"
+        [ "$RC_VERSION" = "" ] || die "cannot do a devel release on top of an RC version"
         [ "$CUR_BRANCH" == main ] || die "devel release can only be on main"
         ;;
-    rc)
-        number_is_odd "${VERSION_ARR[1]}" || die "cannot do rc release on top of version $VERSION_STR"
-        [ "${VERSION_ARR[2]}" -ge 90 ] || die "rc release must have a micro version larger than ${VERSION_ARR[0]}.90 but current version is $VERSION_STR"
-        RC_VERSION="$((${VERSION_ARR[2]} - 88))"
-        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))" ] || die "devel release can only be on \"nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))\" branch"
-        ;;
     rc1)
         number_is_odd "${VERSION_ARR[1]}" || die "cannot do rc release on top of version $VERSION_STR"
-        [ "${VERSION_ARR[2]}" -lt 90 ] || die "rc release must have a micro version smaller than ${VERSION_ARR[0]}.${VERSION_ARR[1]}.90 but current version is $VERSION_STR"
+        [ "$RC_VERSION" = "" ] || die "rc1 release cannot be done on top of an RC version"
         [ "$CUR_BRANCH" == main ] || die "rc1 release can only be on main"
         RELEASE_BRANCH="nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))"
         ;;
+    rc)
+        number_is_even "${VERSION_ARR[1]}" || die "cannot do rc release on top of version $VERSION_STR"
+        [ "$RC_VERSION" != "" ] || die "rc release must be done on top of an RC version"
+        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}" ] || die "rc release can only be on \"nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}\" branch"
+        ;;
     major)
-        number_is_odd "${VERSION_ARR[1]}" || die "cannot do major release on top of version $VERSION_STR"
-        [ "${VERSION_ARR[2]}" -ge 90 ] || die "parent version for major release must have a micro version larger than ${VERSION_ARR[0]}.90 but current version is $VERSION_STR"
-        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))" ] || die "major release can only be on \"nm-${VERSION_ARR[0]}-$((${VERSION_ARR[1]} + 1))\" branch"
+        number_is_even "${VERSION_ARR[1]}" || die "cannot do major release on top of version $VERSION_STR"
+        [ "$RC_VERSION" != "" ] || die "major release must be done on top of an RC version"
+        [ "$CUR_BRANCH" == "nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}" ] || die "major release can only be on \"nm-${VERSION_ARR[0]}-${VERSION_ARR[1]}\" branch"
         ;;
     major-post)
         number_is_odd "${VERSION_ARR[1]}" || die "cannot do major-post release on top of version $VERSION_STR"
-        [ "$((${VERSION_ARR[2]} + 1))" -lt 90 ] || die "major-post release must have a micro version smaller than 90 but current version is $VERSION_STR"
+        [ "$RC_VERSION" = "" ] || die "major-post release cannot be done on top of an RC version"
         [ "$CUR_BRANCH" == main ] || die "major-post release can only be on main"
         ;;
     *)
@@ -370,7 +359,7 @@ if [ "$ALLOW_LOCAL_BRANCHES" != 1 ]; then
     cmp <(git show "$ORIGIN/main:contrib/fedora/rpm/release.sh") "$BASH_SOURCE_ABSOLUTE" || die "$BASH_SOURCE is not identical to \`git show \"$ORIGIN/main:contrib/fedora/rpm/release.sh\"\`"
 fi
 
-if ! check_news "$RELEASE_MODE" "@{VERSION_ARR[@]}" ; then
+if ! check_news "$RELEASE_MODE"; then
     if [ "$CHECK_NEWS" == 1 ]; then
         die "NEWS file needs update to mention stable release (skip check with --no-check-news)"
     fi
@@ -389,7 +378,7 @@ if [ "$RELEASE_MODE" = major -o "$RELEASE_MODE" = minor ]; then
     fi
     echo "$(echo_color 36 -n "https://gitlab.freedesktop.org/NetworkManager/networkmanager.pages.freedesktop.org.git") by running"
     if [ "$RELEASE_MODE" = major ]; then
-        v="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1)).0"
+        v="${VERSION_ARR[0]}.${VERSION_ARR[1]}.0"
     else
         v="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((${VERSION_ARR[2]} + 1))"
     fi
@@ -418,71 +407,36 @@ if [ $CHECK_GITLAB = 1 ]; then
     fi
 fi
 
-BRANCHES=()
-BUILD_TAG=
-
+# Work on a temporary branch
 CLEANUP_CHECKOUT_BRANCH="$CUR_BRANCH"
-
 git checkout -B "$TMP_BRANCH"
 CLEANUP_REFS+=("refs/heads/$TMP_BRANCH")
 
 case "$RELEASE_MODE" in
     minor)
-        set_version_number "${VERSION_ARR[0]}" "${VERSION_ARR[1]}" $(("${VERSION_ARR[2]}" + 1))
-        git commit -m "release: bump version to ${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))" -a || die "failed to commit release"
-
-        b="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))"
-        git tag -s -a -m "Tag $b" "$b" HEAD || die "failed to tag release"
-        BRANCHES+=("$b")
-        CLEANUP_REFS+=("refs/tags/$b")
-        BUILD_TAG="$b"
-        TAR_VERSION="$b"
+        # Version is already correct in meson.build
+        BUILD_VERSION="$VERSION_STR"
+        NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((${VERSION_ARR[2]} + 1))"
         ;;
     devel)
-        set_version_number "${VERSION_ARR[0]}" "${VERSION_ARR[1]}" $(("${VERSION_ARR[2]}" + 1))
-        git commit -m "release: bump version to ${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1)) (development)" -a || die "failed to commit devel version bump"
-
-        b="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))"
-        git tag -s -a -m "Tag $b (development)" "$b-dev" HEAD || die "failed to tag release"
-        BRANCHES+=("$b-dev")
-        CLEANUP_REFS+=("refs/tags/$b-dev")
-        BUILD_TAG="$b-dev"
-        TAR_VERSION="$b"
+        # Version is already correct in meson.build
+        BUILD_VERSION="$VERSION_STR"
+        NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((${VERSION_ARR[2]} + 1))-dev"
         ;;
     rc)
-        b="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))"
-        t="${VERSION_ARR[0]}.$(("${VERSION_ARR[1]}" + 1))-rc$RC_VERSION"
-        set_version_number "${VERSION_ARR[0]}" "${VERSION_ARR[1]}" $(("${VERSION_ARR[2]}" + 1))
-        git commit -m "release: bump version to $b ($t) (development)" -a || die "failed to commit rc version bump"
-
-        git tag -s -a -m "Tag $b ($t) (development)" "$t" HEAD || die "failed to tag release"
-        BRANCHES+=("$t")
-        CLEANUP_REFS+=("refs/tags/$t")
-        BUILD_TAG="$t"
-        TAR_VERSION="$b"
+        # Version is already correct in meson.build
+        BUILD_VERSION="$VERSION_STR"
+        NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}-rc$((RC_VERSION + 1))"
         ;;
     rc1)
-        set_version_number "${VERSION_ARR[0]}" "${VERSION_ARR[1]}" 90
-        b="${VERSION_ARR[0]}.${VERSION_ARR[1]}.90"
-        t="${VERSION_ARR[0]}.$(("${VERSION_ARR[1]}" + 1))-rc1"
-        git commit -m "release: bump version to $b ($t)" -a || die "failed to commit rc1 version bump"
-
-        git tag -s -a -m "Tag $b ($t) (development)" "$t" HEAD || die "failed to tag release $t"
-        BRANCHES+=("$t")
-        CLEANUP_REFS+=("refs/tags/$t")
-        BUILD_TAG="$t"
-        TAR_VERSION="$b"
+        # Current version is wrong (dev version), need to set rc1 version
+        BUILD_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1))-rc1"
+        NEXT_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1))-rc2"
         ;;
     major)
-        b="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1)).0"
-        set_version_number "${VERSION_ARR[0]}" "$((${VERSION_ARR[1]} + 1))" 0
-        git commit -m "release: bump version to $b" -a || die "failed to commit major version bump"
-
-        git tag -s -a -m "Tag $b" "$b" HEAD || die "failed to tag release"
-        BRANCHES+=("$b")
-        CLEANUP_REFS+=("refs/tags/$b")
-        BUILD_TAG="$b"
-        TAR_VERSION="$b"
+        # Current version is wrong (rc version), need to set major version
+        BUILD_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.0"
+        NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.1"
         ;;
     major-post)
         # We create a merge commit with the content of current "main", with two
@@ -494,65 +448,77 @@ case "$RELEASE_MODE" in
         git merge -Xours --commit -m tmp main || die "merge1"
         git rm --cached -r . || die "merge2"
         git checkout main -- . || die "merge3"
-        b="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((${VERSION_ARR[2]} + 1))"
         git commit --amend -m tmp -a || die "failed to commit major version bump"
         test x = "x$(git diff main HEAD)" || die "there is a diff after merge!"
 
-        set_version_number "${VERSION_ARR[0]}" "${VERSION_ARR[1]}" "$((${VERSION_ARR[2]} + 1))"
-        git commit --amend -m "release: bump version to $b (development)" -a || die "failed to commit major version bump"
-        git tag -s -a -m "Tag $b (development)" "$b-dev" HEAD || die "failed to tag release"
-        BRANCHES+=("$b-dev")
-        CLEANUP_REFS+=("refs/tags/$b-dev")
-        BUILD_TAG="$b-dev"
-        TAR_VERSION="$b"
+        # Version is already correct in meson.build
+        BUILD_VERSION="$VERSION_STR"
+        NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((${VERSION_ARR[2]} + 1))-dev"
         ;;
     *)
         die "Release mode $RELEASE_MODE not yet implemented"
         ;;
 esac
 
-build_tag() {
-    local BUILD_TAG="$1"
-    local TAR_FILE="NetworkManager-$2.tar.xz"
+build_version() {
+    local CURR_VERSION="$(get_version)"
+    local BUILD_VERSION="$1"
+    local NEXT_VERSION="$2"
+    local BUILD_VERSION_DESCR="${BUILD_VERSION/-dev/ (development)}"
+    local NEXT_VERSION_DESCR="${NEXT_VERSION/-dev/ (development)}"
+    local TAR_FILE="NetworkManager-$BUILD_VERSION.tar.xz"
     local SUM_FILE="$TAR_FILE.sha256sum"
 
-    git checkout "$BUILD_TAG" || die "failed to checkout $BUILD_TAG"
+    # The current version is usually already correct, except for rc1 and major. Bump version in those cases.
+    if [[ "$BUILD_VERSION" != "$CURR_VERSION" ]]; then
+        set_version_number "$BUILD_VERSION"
+        git commit -m "release: bump version to $BUILD_VERSION_DESCR" -a || die "failed to commit release"
+    fi
+
+    # Tag the release
+    git tag -s -a -m "Release $BUILD_VERSION_DESCR" "$BUILD_VERSION" HEAD || die "failed to tag release"
+    PUSH_REFS+=("$BUILD_VERSION")
+    CLEANUP_REFS+=("refs/tags/$BUILD_VERSION")
+
+    # Build to get the tarball for the release
     ./contrib/fedora/rpm/build_clean.sh -r || die "build release failed"
     cp "./build/meson-dist/$TAR_FILE" /tmp/ || die "failed to copy $TAR_FILE to /tmp"
     cp "./build/meson-dist/$SUM_FILE" /tmp/ || die "failed to copy $SUM_FILE to /tmp"
     git clean -fdx
-}
 
-RELEASE_TAR_VERSIONS=()
-RELEASE_TAGS=()
-if [ -n "$BUILD_TAG" ]; then
-    build_tag "$BUILD_TAG" "$TAR_VERSION"
-    RELEASE_TAR_VERSIONS+=("$TAR_VERSION")
-    RELEASE_TAGS+=("$BUILD_TAG")
-fi
-git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH"
+    # Store the release version for later use
+    RELEASE_VERSIONS+=("$BUILD_VERSION")
 
-BRANCHES+=( "$CUR_BRANCH" )
+    # Bump to next version, so that build between now and the next release has the next version already.
+    # Otherwise the macros in nm_version.h don't work correctly.
+    set_version_number "$NEXT_VERSION"
+    git commit -m "release: bump version to $NEXT_VERSION_DESCR" -a || die "failed to commit version bump"
+}
+
+# Build and create tarball. Bump version as needed.
+PUSH_REFS=()
+RELEASE_VERSIONS=()
+build_version "$BUILD_VERSION" "$NEXT_VERSION"
 
 if [ "$RELEASE_MODE" = rc1 ]; then
-    git branch "$RELEASE_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH"
-    BRANCHES+=( "$RELEASE_BRANCH" )
+    # Create the release branch (nm-1-xx)
+    git branch "$RELEASE_BRANCH" "$TMP_BRANCH" || die "cannot checkout $RELEASE_BRANCH"
+    PUSH_REFS+=( "$RELEASE_BRANCH" )
     CLEANUP_REFS+=( "refs/heads/$RELEASE_BRANCH" )
-    git checkout "$TMP_BRANCH"
-    b="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 2)).0"
-    set_version_number "${VERSION_ARR[0]}" "$((${VERSION_ARR[1]} + 2))" 0
-    git commit -m "release: bump version to $b (development)" -a || die "failed to commit devel version bump"
-    git tag -s -a -m "Tag $b (development)" "$b-dev" HEAD || die "failed to tag release"
-    BRANCHES+=("$b-dev")
-    CLEANUP_REFS+=("refs/tags/$b-dev")
-    BUILD_TAG="$b-dev"
-    TAR_VERSION="$b"
-    build_tag "$BUILD_TAG" "$TAR_VERSION"
-    RELEASE_TAR_VERSIONS+=("$TAR_VERSION")
-    RELEASE_TAGS+=("$BUILD_TAG")
-    git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH"
+
+    # Go back to the commit of the rc1 release, nm-1-xx is one commit further now.
+    git checkout -B "$TMP_BRANCH" "$BUILD_VERSION" || die "cannot checkout $TMP_BRANCH"
+
+    # Second release for rc1: create new dev version on main
+    BUILD_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 2)).0-dev"
+    NEXT_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 2)).1-dev"
+    build_version "$BUILD_VERSION" "$NEXT_VERSION"
 fi
 
+# Work was done on the temporary branch, advance the real branch
+git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH"
+PUSH_REFS+=( "$CUR_BRANCH" )
+
 if [[ $GITLAB_TOKEN == "" ]]; then
     [[ -r ~/.config/nm-release-token ]] || die "cannot read ~/.config/nm-release-token"
     GITLAB_TOKEN=$(< ~/.config/nm-release-token)
@@ -565,20 +531,21 @@ if [ -z "$GITLAB_USER_ID" ] || [ "$GITLAB_USER_ID" = "null" ]; then
     die "failed to authenticate to gitlab.freedesktop.org with the private token"
 fi
 
-do_command git push "$ORIGIN" "${BRANCHES[@]}" || die "failed to to push branches ${BRANCHES[@]} to $ORIGIN"
+# Push the modified branches and tags to the origin repository
+do_command git push "$ORIGIN" "${PUSH_REFS[@]}" || die "failed to to push branches ${PUSH_REFS[@]} to $ORIGIN"
 
+# Create the releases
 CREATE_RELEASE_FAIL=0
-for I in "${!RELEASE_TAR_VERSIONS[@]}"; do
-    TAR_FILE="NetworkManager-${RELEASE_TAR_VERSIONS[$I]}.tar.xz"
+for BUILD_VERSION in "${RELEASE_VERSIONS[@]}"; do
+    TAR_FILE="NetworkManager-$BUILD_VERSION.tar.xz"
     SUM_FILE="$TAR_FILE.sha256sum"
-    BUILD_TAG="${RELEASE_TAGS["$I"]}"
     FAIL=0
 
     # upload tarball and checksum file as generic packages
     for F in "$TAR_FILE" "$SUM_FILE"; do
         do_command curl --location --fail-with-body --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
             --upload-file "/tmp/$F" \
-            "https://gitlab.freedesktop.org/api/v4/projects/411/packages/generic/NetworkManager/$BUILD_TAG/$F" \
+            "https://gitlab.freedesktop.org/api/v4/projects/411/packages/generic/NetworkManager/$BUILD_VERSION/$F" \
             || FAIL=1
 
         if [[ $FAIL = 1 ]]; then
@@ -595,25 +562,25 @@ for I in "${!RELEASE_TAR_VERSIONS[@]}"; do
          --request POST "https://gitlab.freedesktop.org/api/v4/projects/411/releases" \
          --data "$(cat <<END
             {
-                "name": "NetworkManager $BUILD_TAG",
-                "tag_name": "$BUILD_TAG", 
+                "name": "NetworkManager $BUILD_VERSION",
+                "tag_name": "$BUILD_VERSION", 
                 "assets": {
                     "links": [
                         {
-                            "name": "NetworkManager $BUILD_TAG tarball with docs",
-                            "url": "https://gitlab.freedesktop.org/api/v4/projects/411/packages/generic/NetworkManager/$BUILD_TAG/$TAR_FILE",
+                            "name": "NetworkManager $BUILD_VERSION tarball with docs",
+                            "url": "https://gitlab.freedesktop.org/api/v4/projects/411/packages/generic/NetworkManager/$BUILD_VERSION/$TAR_FILE",
                             "direct_asset_path": "/$TAR_FILE",
                             "link_type":"package"
                         },
                         {
-                            "name": "NetworkManager $BUILD_TAG tarball sha256sum",
-                            "url": "https://gitlab.freedesktop.org/api/v4/projects/411/packages/generic/NetworkManager/$BUILD_TAG/$SUM_FILE",
+                            "name": "NetworkManager $BUILD_VERSION tarball sha256sum",
+                            "url": "https://gitlab.freedesktop.org/api/v4/projects/411/packages/generic/NetworkManager/$BUILD_VERSION/$SUM_FILE",
                             "direct_asset_path": "/$SUM_FILE",
                             "link_type":"package"
                         },
                         {
                             "name": "NEWS",
-                            "url": "https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/$BUILD_TAG/NEWS?ref_type=tags",
+                            "url": "https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/$BUILD_VERSION/NEWS?ref_type=tags",
                             "direct_asset_path": "/NEWS",
                             "link_type":"other"
                         }
@@ -623,8 +590,8 @@ for I in "${!RELEASE_TAR_VERSIONS[@]}"; do
 END
             )" || FAIL=1
 
-    if [[ $? != 0 ]]; then
-        fail_msg "failed to create NetworkManager $BUILD_TAG release"
+    if [[ $FAIL = 1 ]]; then
+        fail_msg "failed to create NetworkManager $BUILD_VERSION release"
         CREATE_RELEASE_FAIL=1
         continue
     fi
diff --git a/contrib/scripts/nm-ci-run.sh b/contrib/scripts/nm-ci-run.sh
index 2ae96a7c..57b867c5 100755
--- a/contrib/scripts/nm-ci-run.sh
+++ b/contrib/scripts/nm-ci-run.sh
@@ -175,12 +175,11 @@ meson setup build \
     -D libpsl=false \
     -D vapi=false \
     -D introspection=$_WITH_DOCS \
+    -D man=$_WITH_DOCS \
     -D qt=false \
     -D crypto=$_WITH_CRYPTO \
     -D docs=$_WITH_DOCS \
     \
-    -D ebpf=false \
-    \
     -D iwd=true \
     -D ofono=true \
     -D teamdctl=$_WITH_LIBTEAM \
diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
index 8cd2ac87..d0cd8b73 100644
--- a/data/NetworkManager.service.in
+++ b/data/NetworkManager.service.in
@@ -19,7 +19,7 @@ KillMode=process
 # With a huge number of interfaces, starting can take a long time.
 TimeoutStartSec=600
 
-CapabilityBoundingSet=CAP_NET_ADMIN CAP_DAC_OVERRIDE CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_MODULE CAP_AUDIT_WRITE CAP_KILL CAP_SYS_CHROOT
+CapabilityBoundingSet=CAP_NET_ADMIN CAP_DAC_OVERRIDE CAP_NET_RAW CAP_BPF CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_MODULE CAP_AUDIT_WRITE CAP_KILL CAP_SYS_CHROOT
 
 ProtectSystem=true
 ProtectHome=read-only
diff --git a/docs/api/meson.build b/docs/api/meson.build
index 6dc4adc1..aea7e5a9 100644
--- a/docs/api/meson.build
+++ b/docs/api/meson.build
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 if enable_introspection
+  xsltproc = find_program('xsltproc')
+
   settings = 'settings-spec'
   output = settings + '.xml'
 
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml
index 3f9aec79..6c055e9d 100644
--- a/man/NetworkManager.conf.xml
+++ b/man/NetworkManager.conf.xml
@@ -895,11 +895,15 @@ ipv6.ip6-privacy=0
         </varlistentry>
         <varlistentry>
           <term><varname>connection.mptcp-flags</varname></term>
-          <listitem><para>If unspecified, the fallback is 0x22 (<literal>"enabled,subflow"</literal>). Note that if sysctl <literal>/proc/sys/net/mptcp/enabled</literal> is disabled, NetworkManager will still not configure endpoints.</para></listitem>
+          <listitem><para>If unspecified, the fallback is 0x122 (<literal>"enabled,subflow,laminar"</literal>). Note that if sysctl <literal>/proc/sys/net/mptcp/enabled</literal> is disabled, NetworkManager will still not configure endpoints.</para></listitem>
         </varlistentry>
         <varlistentry>
           <term><varname>connection.dns-over-tls</varname></term>
-          <listitem><para>If unspecified, the ultimate default values depends on the DNS plugin. With systemd-resolved the default currently is global setting and for all other plugins "no" (0).</para></listitem>
+          <listitem><para>If unspecified, the ultimate default values depends on the DNS plugin. With systemd-resolved the default currently is its global setting and for all other plugins "no" (0).</para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><varname>connection.dnssec</varname></term>
+          <listitem><para>If unspecified, the ultimate default values depends on the DNS plugin. With systemd-resolved the default currently is its global setting and for all other plugins "no" (0).</para></listitem>
         </varlistentry>
         <varlistentry>
           <term><varname>connection.stable-id</varname></term>
diff --git a/man/meson.build b/man/meson.build
index 56f52bb4..d3310dc1 100644
--- a/man/meson.build
+++ b/man/meson.build
@@ -1,29 +1,5 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-common_ent_file = configure_file(
-  input: 'common.ent.in',
-  output: '@BASENAME@',
-  configuration: data_conf,
-)
-
-xsltproc_options = [
-  xsltproc,
-  '--output', '@OUTPUT@',
-  '--path', meson.current_build_dir(),
-  '--xinclude',
-  '--nonet',
-  '--stringparam', 'man.output.quietly', '1',
-  '--stringparam', 'funcsynopsis.style', 'ansi',
-  '--stringparam', 'man.th.extra1.suppress', '1',
-  '--stringparam', 'man.authors.section.enabled', '0',
-  '--stringparam', 'man.copyright.section.enabled', '0',
-  '--stringparam', 'man.th.title.max.length', '30',
-]
-
-docbook_xls = 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl'
-
-mans_xmls = []
-
 mans = [
   ['NetworkManager', '8'],
   ['NetworkManager-dispatcher', '8'],
@@ -44,24 +20,74 @@ if enable_nm_cloud_setup
   mans += [['nm-cloud-setup', '8']]
 endif
 
-foreach man: mans
-  input = man[0] + '.xml'
-  content_files += join_paths(meson.current_source_dir(), input)
+introspection_mans = [
+  ['nm-settings-keyfile', '5'],
+  ['nm-settings-dbus',    '5'],
+  ['nm-settings-nmcli',   '5'],
+]
 
-  output = '@0@.@1@'.format(man[0], man[1])
+if enable_ifcfg_rh
+  introspection_mans += [['nm-settings-ifcfg-rh', '5']]
+endif
 
-  custom_target(
-    output,
-    input: input,
-    output: output,
-    command: xsltproc_options + [docbook_xls, '@INPUT@'],
-    depend_files: common_ent_file,
-    install: true,
-    install_dir: join_paths(nm_mandir, 'man' + man[1]),
-  )
+built_mans = []
+foreach man: mans + introspection_mans
+  name = man[0] + '.' + man[1]
+  if not fs.exists(name)
+    built_mans = []
+    break
+  endif
+
+  built_mans += name
 endforeach
 
-if enable_introspection
+if enable_introspection or enable_docs
+  common_ent_file = configure_file(
+    input: 'common.ent.in',
+    output: '@BASENAME@',
+    configuration: data_conf,
+  )
+endif
+
+if enable_introspection and (enable_man or enable_docs)
+  xsltproc_options = [
+    find_program('xsltproc'),
+    '--output', '@OUTPUT@',
+    '--path', meson.current_build_dir(),
+    '--xinclude',
+    '--nonet',
+    '--stringparam', 'man.output.quietly', '1',
+    '--stringparam', 'funcsynopsis.style', 'ansi',
+    '--stringparam', 'man.th.extra1.suppress', '1',
+    '--stringparam', 'man.authors.section.enabled', '0',
+    '--stringparam', 'man.copyright.section.enabled', '0',
+    '--stringparam', 'man.th.title.max.length', '30',
+  ]
+
+  docbook_xls = 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl'
+
+  mans_xmls = []
+
+  foreach man: mans
+    input = man[0] + '.xml'
+    content_files += join_paths(meson.current_source_dir(), input)
+
+    output = '@0@.@1@'.format(man[0], man[1])
+
+    # not needed if only html requested
+    if enable_man
+      custom_target(
+        output,
+        input: input,
+        output: output,
+        command: xsltproc_options + [docbook_xls, '@INPUT@'],
+        depend_files: common_ent_file,
+        install: true,
+        install_dir: join_paths(nm_mandir, 'man' + man[1]),
+      )
+    endif
+  endforeach
+
   merge_cmd = files(source_root / 'tools' / 'generate-docs-nm-settings-docs-merge.py')
 
   name = 'dbus'
@@ -124,13 +150,23 @@ if enable_introspection
 
     output = '@0@.@1@'.format(man[0], man[1])
 
-    custom_target(
-      output,
-      input: input,
-      output: output,
-      command: xsltproc_options + [docbook_xls, '@INPUT@'],
-      install: true,
-      install_dir: join_paths(nm_mandir, 'man' + man[1]),
-    )
+    # not needed if only html requested
+    if enable_man
+      custom_target(
+        output,
+        input: input,
+        output: output,
+        command: xsltproc_options + [docbook_xls, '@INPUT@'],
+        install: true,
+        install_dir: join_paths(nm_mandir, 'man' + man[1]),
+      )
+    endif
   endforeach
+# not needed if only html requested
+elif enable_man
+  if built_mans.length() > 0
+    install_man(built_mans)
+  else
+    error('Building manpages requires xsltproc and -Dintrospection=true, and no prebuilt manpages were found. Try building from a release tarball or using -Dman=false.')
+  endif
 endif
diff --git a/man/nmcli.xml b/man/nmcli.xml
index f3b6706e..7bce0de7 100644
--- a/man/nmcli.xml
+++ b/man/nmcli.xml
@@ -1066,15 +1066,16 @@
             <listitem><para><literal>dummy</literal></para></listitem>
             <listitem><para><literal>generic</literal></para></listitem>
             <listitem><para><literal>gsm</literal></para></listitem>
+            <listitem><para><literal>hsr</literal></para></listitem>
             <listitem><para><literal>infiniband</literal></para></listitem>
             <listitem><para><literal>ip-tunnel</literal></para></listitem>
+            <listitem><para><literal>ipvlan</literal></para></listitem>
+            <listitem><para><literal>loopback</literal></para></listitem>
             <listitem><para><literal>macsec</literal></para></listitem>
             <listitem><para><literal>macvlan</literal></para></listitem>
             <listitem><para><literal>olpc-mesh</literal></para></listitem>
             <listitem><para><literal>ovs-bridge</literal></para></listitem>
-            <listitem><para><literal>ovs-dpdk</literal></para></listitem>
             <listitem><para><literal>ovs-interface</literal></para></listitem>
-            <listitem><para><literal>ovs-patch</literal></para></listitem>
             <listitem><para><literal>ovs-port</literal></para></listitem>
             <listitem><para><literal>pppoe</literal></para></listitem>
             <listitem><para><literal>team</literal></para></listitem>
diff --git a/meson.build b/meson.build
index 7998b0d3..0657ce5a 100644
--- a/meson.build
+++ b/meson.build
@@ -5,23 +5,48 @@ project(
 # NOTE: When incrementing version also add corresponding
 #       NM_VERSION_x_y_z macros in
 #       "src/libnm-core-public/nm-version-macros.h.in"
-  version: '1.54.3',
+  version: '1.56.0',
   license: 'GPL2+',
   default_options: [
     'buildtype=debugoptimized',
     'c_std=gnu11',
     'warning_level=2' # value "2" will add "-Wall" and "-Wextra" to the compiler flags
   ],
-  meson_version: '>= 0.51.0',
+  meson_version: '>= 0.56.0',
 )
 
 nm_name = meson.project_name()
-
 nm_version = meson.project_version()
-version_array = nm_version.split('.')
-nm_major_version = version_array[0].to_int()
-nm_minor_version = version_array[1].to_int()
-nm_micro_version = version_array[2].to_int()
+
+version_and_suffix = nm_version.split('-')
+version_array = version_and_suffix[0].split('.')
+if version_and_suffix.length() == 2
+  version_suffix = version_and_suffix[1]
+else
+  assert(version_and_suffix.length() == 1)
+  version_suffix = ''
+endif
+
+# In the C API we encode the version in 90+ scheme (1.56-rc1 = 1.55.90, rc2 = .91, etc)
+if version_suffix == '' or version_suffix == 'dev'
+  assert(version_array.length() == 3)
+  nm_major_version = version_array[0].to_int()
+  nm_minor_version = version_array[1].to_int()
+  nm_micro_version = version_array[2].to_int()
+elif version_suffix.startswith('rc')
+  assert(version_array.length() == 2)
+  nm_major_version = version_array[0].to_int()
+  nm_minor_version = version_array[1].to_int() - 1
+  nm_micro_version = version_suffix.substring(2).to_int() + 89
+else
+  error('Invalid suffix: ' + version_suffix)
+endif
+
+if nm_minor_version % 2 == 1 and version_suffix == ''
+  error('Expected a "-dev" or "-rc" suffix')
+elif nm_minor_version %2 == 0 and version_suffix != ''
+  error('Unexpected "' + version_suffix + '" suffix')
+endif
 
 nm_id_prefix = 'NM'
 
@@ -77,6 +102,7 @@ libnm_version = '@0@.@1@.@2@'.format(current - age, age, revision)
 
 libnm_pkgincludedir = join_paths(nm_includedir, libnm_name)
 
+fs = import('fs')
 gnome = import('gnome')
 i18n = import('i18n')
 pkg = import('pkgconfig')
@@ -89,7 +115,6 @@ po_dir = source_root / 'po'
 top_inc = include_directories('.')
 
 perl = find_program('perl')
-xsltproc = find_program('xsltproc')
 
 check_exports = find_program(join_paths(source_root, 'tools', 'check-exports.sh'))
 
@@ -327,6 +352,7 @@ config_h.set10('WITH_CONFIG_PLUGIN_IFUPDOWN', enable_ifupdown)
 config_h.set_quoted('NM_DIST_VERSION', dist_version)
 
 enable_wifi = get_option('wifi')
+config_h.set10('WITH_WIFI', enable_wifi)
 
 enable_iwd = get_option('iwd')
 assert((not enable_iwd) or enable_wifi, 'Enabling iwd support requires Wi-Fi support as well')
@@ -476,19 +502,6 @@ if enable_selinux
 endif
 config_h.set10('HAVE_SELINUX', enable_selinux)
 
-# eBPF support
-ebpf_opt = get_option('ebpf')
-# 'auto' means 'false', because there are still issues.
-if ebpf_opt != 'true'
-  enable_ebpf = false
-else
-  enable_ebpf = true
-  if not cc.has_header('linux/bpf.h')
-    assert(ebpf_opt != 'true', 'eBPF requires kernel support')
-    enable_ebpf = false
-  endif
-endif
-
 # libaudit support
 libaudit = get_option('libaudit')
 enable_libaudit = libaudit.contains('yes')
@@ -507,6 +520,7 @@ if enable_teamdctl
   libteamdctl_dep = dependency('libteamdctl', version: '>= 1.9')
   assert(libteamdctl_dep.found(), 'You must have libteamdctl installed to build. Use -Dteamdctl=false to disable it')
 endif
+config_h.set10('WITH_TEAMDCTL', enable_teamdctl)
 
 # polkit
 enable_polkit = get_option('polkit')
@@ -616,6 +630,7 @@ if enable_modem_manager
   endif
   config_h.set_quoted('MOBILE_BROADBAND_PROVIDER_INFO_DATABASE', mobile_broadband_provider_info_database)
 endif
+config_h.set10('WITH_WWAN', enable_modem_manager)
 
 # Bluez5 DUN support
 enable_bluez5_dun = get_option('bluez5_dun')
@@ -816,6 +831,7 @@ if enable_nm_cloud_setup
   assert(jansson_dep.found(), 'nm-cloud-setup requires jansson library. Use -Dnm_cloud_setup=false to disable it')
 endif
 
+enable_man = get_option('man')
 enable_docs = get_option('docs')
 
 more_asserts = get_option('more_asserts')
@@ -914,7 +930,6 @@ endif
 test_args = [
   '--called-from-make',
   build_root,
-  '',
   enable_valgrind ? valgrind_path : '',
   enable_valgrind ? valgrind_suppressions_path : '',
   '--launch-dbus=auto',
@@ -964,38 +979,6 @@ data_conf.set('nmstatedir',                              nm_pkgstatedir)
 data_conf.set('sbindir',                                 nm_sbindir)
 data_conf.set('sysconfdir',                              nm_sysconfdir)
 
-# check if we can build setting property documentation
-'''
-build_docs=no
-if test -n "$INTROSPECTION_MAKEFILE"; then
-  # If g-i is installed we know we have python, but we might not have pygobject
-  if ! "$PYTHON" -c 'from gi.repository import GObject' >& /dev/null; then
-    AC_MSG_ERROR(["--enable-introspection aims to build the settings documentation. This requires GObject introspection for python (pygobject)])
-  fi
-
-  AC_PATH_PROG(PERL, perl)
-  if test -z "$PERL"; then
-    AC_MSG_ERROR([--enable-introspection requires perl])
-  fi
-  AC_PATH_PROG(XSLTPROC, xsltproc)
-  if test -z "$XSLTPROC"; then
-    AC_MSG_ERROR([--enable-introspection requires xsltproc])
-  fi
-
-  have_introspection=yes
-  if test "$enable_gtk_doc" = "yes"; then
-    build_docs=yes
-  fi
-else
-  if test "$enable_gtk_doc" = "yes"; then
-    # large parts of the documentation require introspection/pygobject to extract
-    # the documentation out of the source files. You cannot enable gtk-doc without alone.
-    AC_MSG_ERROR(["--with-gtk-doc requires --enable-introspection"])
-  fi
-  have_introspection=no
-fi
-'''
-
 content_files = []
 
 subdir('introspection')
@@ -1033,9 +1016,14 @@ if enable_qt != 'false'
   endif
 endif
 
+# The man/ directory builds a couple targets needed by the docs build too.
+# If we build with docs but no man, then enter the subdir and only build
+# some targets.
+if enable_docs or enable_man
+  subdir('man')
+endif
 if enable_docs
   assert(enable_introspection, '-Ddocs=true requires -Dintrospection=true')
-  subdir('man')
   subdir('docs')
   meson.add_dist_script(
     'tools/meson-dist-data.sh',
@@ -1086,7 +1074,7 @@ meson.add_install_script(
   nm_pkgstatedir,
   nm_mandir,
   nm_sysconfdir,
-  enable_docs ? '1' : '0',
+  enable_man ? '1' : '0',
   enable_ifcfg_rh ? '1' : '0',
   enable_nm_cloud_setup ? '1' : '0',
   install_systemdunitdir ? '1' : '0',
@@ -1184,6 +1172,5 @@ output +=      'have-nss: ' + crypto_nss_dep.found().to_string() + ')\n'
 output += '  sanitizers: ' + get_option('b_sanitize') + '\n'
 output += '  Mozilla Public Suffix List: ' + enable_libpsl.to_string() + '\n'
 output += '  vapi: ' + enable_vapi.to_string() + '\n'
-output += '  ebpf: ' + enable_ebpf.to_string() + '\n'
 output += '  readline: ' + with_readline + '\n'
 message(output)
diff --git a/meson_options.txt b/meson_options.txt
index 18d8bfc4..d28cc76f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -44,7 +44,7 @@ option('nmcli', type: 'boolean', value: true, description: 'Build nmcli')
 option('nmtui', type: 'boolean', value: true, description: 'Build nmtui')
 option('nm_cloud_setup', type: 'boolean', value: true, description: 'Build nm-cloud-setup, a tool for automatically configuring networking in cloud')
 option('bluez5_dun', type: 'boolean', value: false, description: 'enable Bluez5 DUN support')
-option('ebpf', type: 'combo', choices: ['auto', 'true', 'false'], description: 'Enable eBPF support')
+option('ebpf', type: 'combo', choices: ['auto', 'true', 'false'], description: 'Enable eBPF support (deprecated)')
 option('nbft', type: 'boolean', value: true, description: 'Enable NBFT support in the initrd generator')
 
 # configuration plugins
@@ -67,6 +67,7 @@ option('config_dhcp_default', type: 'combo', choices: ['dhclient', 'dhcpcd', 'in
 option('introspection', type: 'boolean', value: true, description: 'Enable introspection for this build')
 option('vapi', type : 'combo', choices : ['auto', 'true', 'false'], description: 'build Vala bindings')
 option('docs', type: 'boolean', value: false, description: 'use to build documentation')
+option('man', type: 'boolean', value: true, description: 'Install manpages')
 option('tests', type: 'combo', choices: ['yes', 'no', 'root'], value: 'yes', description: 'Build NetworkManager tests')
 option('firewalld_zone', type: 'boolean', value: true, description: 'Install and use firewalld zone for shared mode')
 option('more_asserts', type: 'string', value: 'auto', description: 'Enable more assertions for debugging (0 = no, 100 = all, default: auto)')
diff --git a/po/ca.po b/po/ca.po
index 828a2016..1f46c668 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -8,14 +8,15 @@
 # Lubomir Rintel <lkundrak@v3.sk>, 2016. #zanata
 # Lubomir Rintel <lkundrak@v3.sk>, 2017. #zanata
 # Thomas Haller <thaller@redhat.com>, 2017. #zanata
+# Jordi Mas i Hernàndez <jmas@softcatala.org>, 2025
 msgid ""
 msgstr ""
 "Project-Id-Version: NetworkManager\n"
 "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/"
 "NetworkManager/issues\n"
 "POT-Creation-Date: 2023-06-16 15:26+0000\n"
-"PO-Revision-Date: 2023-06-17 00:07+0200\n"
-"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+"PO-Revision-Date: 2025-09-28 00:07+0200\n"
+"Last-Translator: Jordi Mas i Hernàndez <jmas@softcatala.org>\n"
 "Language-Team: Catalan <tradgnome@softcatala.org>\n"
 "Language: ca\n"
 "MIME-Version: 1.0\n"
@@ -355,7 +356,7 @@ msgstr "Connexió WPAN"
 
 #: src/core/devices/team/nm-device-team.c:131
 msgid "Team connection"
-msgstr "Connexió equip"
+msgstr "Connexió d'equip"
 
 #: src/core/devices/wifi/nm-device-olpc-mesh.c:112 src/nmcli/devices.c:1400
 msgid "Mesh"
@@ -648,7 +649,7 @@ msgstr "Surt després de la configuració inicial"
 #: src/core/nm-config.c:639
 msgid "Don't become a daemon, and log to stderr"
 msgstr ""
-"No et converteixis en un dimoni, i envia el registre a la sortida estàndard"
+"No et converteixis en un dimoni, i envia el registre a la sortida d'error"
 
 #: src/core/nm-config.c:648
 msgid "An http(s) address for checking internet connectivity"
@@ -795,7 +796,7 @@ msgstr "La connexió no era una connexió Ethernet o PPPoE."
 
 #: src/libnm-client-impl/nm-device-ethernet.c:206
 msgid "The connection and device differ in S390 subchannels."
-msgstr "La connexió i el dispositiu difereixen als subcanals 5930."
+msgstr "La connexió i el dispositiu difereixen als subcanals S390."
 
 #: src/libnm-client-impl/nm-device-ethernet.c:223
 #, c-format
@@ -881,7 +882,7 @@ msgstr "La connexió no era una connexió tun."
 
 #: src/libnm-client-impl/nm-device-team.c:124
 msgid "The connection was not a team connection."
-msgstr "La connexió no era una connexió equip."
+msgstr "La connexió no era una connexió d'equip."
 
 #: src/libnm-client-impl/nm-device-tun.c:204
 msgid "The connection was not a tun connection."
@@ -1325,27 +1326,27 @@ msgstr ""
 
 #: src/libnm-core-impl/nm-keyfile.c:333
 msgid "ignoring missing number"
-msgstr "s'ignorarà el número faltant"
+msgstr "s'ignora el número faltant"
 
 #: src/libnm-core-impl/nm-keyfile.c:345
 #, c-format
 msgid "ignoring invalid number '%s'"
-msgstr "s'ignorarà el número «%s» no vàlid"
+msgstr "s'ignora el número «%s» no vàlid"
 
 #: src/libnm-core-impl/nm-keyfile.c:374
 #, c-format
 msgid "ignoring invalid %s address: %s"
-msgstr "s'ignorarà l'adreça %s no vàlida: %s"
+msgstr "s'ignora l'adreça %s no vàlida: %s"
 
 #: src/libnm-core-impl/nm-keyfile.c:420
 #, c-format
 msgid "ignoring invalid gateway '%s' for %s route"
-msgstr "s'ignorarà la passarel·la «%s» no vàlida per a la ruta %s"
+msgstr "s'ignora la passarel·la «%s» no vàlida per a la ruta %s"
 
 #: src/libnm-core-impl/nm-keyfile.c:442
 #, c-format
 msgid "ignoring invalid %s route: %s"
-msgstr "s'ignorarà la ruta %s no vàlida: %s"
+msgstr "s'ignora la ruta %s no vàlida: %s"
 
 #: src/libnm-core-impl/nm-keyfile.c:620
 #, c-format
@@ -1361,7 +1362,7 @@ msgstr "caràcter «%c» inesperat per a %s: «%s» (posició %td)"
 #, c-format
 msgid "unexpected character '%c' in prefix length for %s: '%s' (position %td)"
 msgstr ""
-"caràcter «%c» inesperat a la longitud de prefix %s: «%s» (posició %td)<"
+"caràcter «%c» inesperat a la longitud de prefix %s: «%s» (posició %td)"
 
 #: src/libnm-core-impl/nm-keyfile.c:669
 #, c-format
@@ -1413,11 +1414,11 @@ msgstr "s'ignorarà l'adreça %s no vàlida: %s"
 
 #: src/libnm-core-impl/nm-keyfile.c:1518
 msgid "ignoring invalid SSID"
-msgstr "s'ignorarà l'SSID no vàlida"
+msgstr "s'ignora l'SSID no vàlida"
 
 #: src/libnm-core-impl/nm-keyfile.c:1536
 msgid "ignoring invalid raw password"
-msgstr "s'ignorarà la contrasenya sense processar no vàlida"
+msgstr "s'ignora la contrasenya sense processar no vàlida"
 
 #: src/libnm-core-impl/nm-keyfile.c:1681
 msgid "invalid key/cert value"
@@ -1458,7 +1459,7 @@ msgstr "valor de paritat «%s» no vàlid"
 #: src/libnm-core-impl/nm-keyfile.c:1958 src/libnm-core-impl/nm-keyfile.c:3540
 #, c-format
 msgid "invalid setting: %s"
-msgstr "el paràmetre no és vàlid: «%s»"
+msgstr "el paràmetre no és vàlid: %s"
 
 #: src/libnm-core-impl/nm-keyfile.c:1978
 #, fuzzy, c-format
@@ -1973,7 +1974,7 @@ msgstr "file:// URI no és UTF-8 vàlida"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1501
 msgid "invalid permissions not in format \"user:$UNAME[:]\""
-msgstr "els permisos no són vàlids, no estan en el format «user:$UNANE[:]"
+msgstr "els permisos no són vàlids, no estan en el format «user:$UNAME[:]"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1530
 #, c-format
@@ -2086,7 +2087,7 @@ msgstr "«%s» no és un número"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:479
 msgid "property is empty or wrong size"
-msgstr "la propietat és buda o de mida incorrecta"
+msgstr "la propietat és buida o de mida incorrecta"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:492
 msgid "property must contain only digits"
@@ -2098,12 +2099,12 @@ msgstr "no es pot activar quan hi ha una configuració manual"
 
 #: src/libnm-core-impl/nm-setting-infiniband.c:215
 msgid "Must specify a P_Key if specifying parent"
-msgstr "S'ha d'especificar una P-Key si s'especifica el pare"
+msgstr "S'ha d'especificar una P_Key si s'especifica el pare"
 
 #: src/libnm-core-impl/nm-setting-infiniband.c:226
 msgid "InfiniBand P_Key connection did not specify parent interface name"
 msgstr ""
-"La connexió InfiniBand P_Key no ha especificat el nom de l'interfície pare"
+"La connexió InfiniBand P_Key no ha especificat el nom de la interfície pare"
 
 #: src/libnm-core-impl/nm-setting-infiniband.c:234
 msgid "the values 0 and 0x8000 are not allowed"
@@ -2156,12 +2157,12 @@ msgstr "Adreça IPv4 «%s» no és vàlida"
 #: src/libnm-core-impl/nm-setting-ip-config.c:106
 #, c-format
 msgid "Invalid IPv4 address prefix '%u'"
-msgstr "Prefix «%u» d'adreça IPv4 no vàlida"
+msgstr "Prefix «%u» d'adreça IPv4 no vàlid"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:107
 #, c-format
 msgid "Invalid IPv6 address prefix '%u'"
-msgstr "Prefix «%u» d'adreça IPv6 no vàlida<"
+msgstr "Prefix «%u» d'adreça IPv6 no vàlid"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:124
 #, c-format
@@ -2208,7 +2209,7 @@ msgstr "el prefix %s no és vàlid"
 #: src/libnm-core-impl/nm-setting-ip-config.c:1423
 #, c-format
 msgid "%s is not a valid route type"
-msgstr "%s no és un nom de ruta vàlid"
+msgstr "%s no és un tipus de ruta vàlid"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1442
 #, fuzzy
@@ -2432,7 +2433,7 @@ msgstr "La ruta %d. no és vàlida"
 #: src/libnm-core-impl/nm-setting-ip-config.c:5638
 #, c-format
 msgid "invalid attribute: %s"
-msgstr "atribut no vàlid: «%s»"
+msgstr "atribut no vàlid: %s"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:5658
 #, c-format
@@ -4105,7 +4106,7 @@ msgstr "«%s» no és vàlid; useu [%s] or [%s]"
 #: src/libnmc-base/nm-client-utils.c:176
 #, c-format
 msgid "'%s' is not valid; use [%s], [%s] or [%s]"
-msgstr "«%s» no és vàld, useu [%s], [%s] o [%s]"
+msgstr "«%s» no és vàlid, useu [%s], [%s] o [%s]"
 
 #: src/libnmc-base/nm-client-utils.c:230
 #, c-format
@@ -4676,7 +4677,7 @@ msgstr "clau privada no vàlida"
 #, fuzzy, c-format
 msgid "Secrets are required to connect WireGuard VPN '%s'"
 msgstr ""
-"Es requereixen contrasenyes o claus d'encriptació per accedir la xarxa sens "
+"Es requereixen contrasenyes o claus d'encriptació per accedir la xarxa sense "
 "fil «%s»."
 
 #: src/libnmc-base/nm-secret-agent-simple.c:620
@@ -4698,7 +4699,7 @@ msgid ""
 "Passwords or encryption keys are required to access the wireless network "
 "'%s'."
 msgstr ""
-"Es requereixen contrasenyes o claus d'encriptació per accedir la xarxa sens "
+"Es requereixen contrasenyes o claus d'encriptació per accedir la xarxa sense "
 "fil «%s»."
 
 #: src/libnmc-base/nm-secret-agent-simple.c:886
@@ -4709,7 +4710,7 @@ msgstr "Autenticació 802.1X de xarxa amb fil"
 #, fuzzy, c-format
 msgid "Secrets are required to access the wired network '%s'"
 msgstr ""
-"Es requereixen contrasenyes o claus d'encriptació per accedir la xarxa sens "
+"Es requereixen contrasenyes o claus d'encriptació per accedir la xarxa sense "
 "fil «%s»."
 
 #: src/libnmc-base/nm-secret-agent-simple.c:893
@@ -5418,10 +5419,10 @@ msgid ""
 msgstr ""
 "Entreu els bytes com una llista de valors hexadecimals.\n"
 "S'accepten dos formats:\n"
-"(a) una cadena de dígits exadecimals, on cada dos dígits representen un "
+"(a) una cadena de dígits hexadecimals, on cada dos dígits representen un "
 "byte\n"
-"(b) una llista separada per espais de bytes escrits com a dígits hexadecimas "
-"(amb prefix opcional 0x/0X,i un 0 inicial opcional). \n"
+"(b) una llista separada per espais de bytes escrits com a dígits hexadecimals "
+"(amb prefix opcional 0x/0X,i un 0 inicial opcional).\n"
 "\n"
 "Exemples: ab0455a6ea3a74C2\n"
 "          ab 4 55 0xa6 ea 3a 74 C2\n"
@@ -5493,7 +5494,7 @@ msgstr "Demora cap endavant"
 #: src/libnmc-setting/nm-meta-setting-desc.c:5280
 #: src/nmtui/nmt-page-bridge.c:134
 msgid "Hello time"
-msgstr "Temps de benviguda"
+msgstr "Temps de benvinguda"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:5286
 #: src/nmtui/nmt-page-bridge.c:148
@@ -5567,7 +5568,7 @@ msgid ""
 msgstr ""
 "Entreu les connexions secundàries que s'haurien d'activar quan s'activa "
 "aquesta connexió. Les connexions es poden especificar o bé per UUID o per ID "
-"(nom). L'nmcli tradueix transparentment els noms a UUID. Noteu que el "
+"(nom). nmcli tradueix transparentment els noms a UUID. Noteu que el "
 "NetworkManager actualment sols dóna suport els VPN com a connexions "
 "secundàries.\n"
 "Els elements es poden separar per comes o espais.\n"
@@ -5676,7 +5677,7 @@ msgid ""
 "  priority [prio] [from [src]] [to [dst]], ,...\n"
 "\n"
 msgstr ""
-"Introduïu una llista de regles d'encaminanent IPv4 amb el següent format:\n"
+"Introduïu una llista de regles d'encaminament IPv4 amb el següent format:\n"
 "  priority [prioritat] [from [origen]] [to [destí]], ,...\n"
 "\n"
 "\n"
@@ -5696,7 +5697,7 @@ msgstr ""
 "configuració IPv6 \n"
 "és «auto» aquests servidors DNS s'annexen als que retorna (si retorna cap) "
 "la \n"
-"configuració automatica. Els servidors DNS no es poden usar amb els métodes "
+"configuració automàtica. Els servidors DNS no es poden usar amb els mètodes "
 "de \n"
 "configuracó DNS «shared» o «link-local», atès que no hi una xarxa superior. "
 "A tots\n"
@@ -8151,12 +8152,12 @@ msgstr ""
 "canonada (|) o un ampersand (&). El primer indica que l'element és opcional "
 "i el segon significa que és obligatori. Si hi ha algun element opcional, "
 "llavors la coincidència avalua a cert si almenys un dels elements opcionals "
-"coincideix (O lògicà). Si hi ha elements obligatoris, llavors tots han de "
+"coincideix (O lògica). Si hi ha elements obligatoris, llavors tots han de "
 "coincidir (I lògica). Per defecte, un element és opcional. Això significa "
 "que un element «foo» es comporta igual que «|foo». Un element també es pot "
 "invertir amb el símbol d'exclamació (!) entre el símbol de la canonada (o de "
 "l'ampersand) i abans del patró. Tingueu en compte que «!foo» és una drecera "
-"per al patró obligatòri «&!foo». Finalment, es pot utilitzar una barra "
+"per al patró obligatori «&!foo». Finalment, es pot utilitzar una barra "
 "inversa al començament de l'element (després dels caràcters especials "
 "opcionals) per no considerar-lo inici del patró. Per exemple, «\\!a» és una "
 "coincidència obligatòria per literalment «!a»."
@@ -10722,7 +10723,7 @@ msgstr "Error: «%s» no és una connexió activa.\n"
 
 #: src/nmcli/connections.c:3436
 msgid "Error: not all active connections found."
-msgstr "Error: No s'han trobar totes les connexions actives."
+msgstr "Error: No s'han trobat totes les connexions actives."
 
 #: src/nmcli/connections.c:3444
 msgid "Error: no active connection provided."
@@ -11041,7 +11042,7 @@ msgstr ""
 "Verifica si el paràmetre o la connexió és vàlida i es pot desar més tard.\n"
 "Indica valors no vàlids quan hi ha un error. Alguns errors es poden "
 "corregir\n"
-"automàticaent amb l'opció «fix».\n"
+"automàticament amb l'opció «fix».\n"
 "\n"
 "Exemples: nmcli> verify\n"
 "          nmcli> verify fix\n"
@@ -11063,7 +11064,7 @@ msgid ""
 msgstr ""
 "save [persistent|temporary]  :: desa la connexió\n"
 "\n"
-"Envia el perfil de la connexió al NetworManager que o bé la desarà de forma\n"
+"Envia el perfil de la connexió al NetworkManager que o bé la desarà de forma\n"
 "persistent o bé sols la mantindrà a la memòria. «desa» sense cap argument\n"
 "significa «desa de forma persistent».\n"
 "Noteu que un cop que deseu el perfile de forma persistent aquestes "
@@ -11485,7 +11486,7 @@ msgstr "Opció no vàlida de verificació: %s\n"
 #: src/nmcli/connections.c:8486
 #, c-format
 msgid "Verify setting '%s': %s\n"
-msgstr "Verifica el paràmere «%s»: %s\n"
+msgstr "Verifica el paràmetre «%s»: %s\n"
 
 #: src/nmcli/connections.c:8501
 #, c-format
@@ -11552,12 +11553,12 @@ msgstr "Error: no es pot activar la connexió: %s.\n"
 #: src/nmcli/connections.c:8679
 #, c-format
 msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
-msgstr "Error: no s'ha pogut desconnectar la connexió «%s» (%s): %s\n"
+msgstr "Error: no s'ha pogut activar la connexió «%s» (%s): %s\n"
 
 #: src/nmcli/connections.c:8686
 msgid "Monitoring connection activation (press any key to continue)\n"
 msgstr ""
-"S'està supervisant l'activació de la connexio (premeu qualsevol teclar per "
+"S'està supervisant l'activació de la connexió (premeu qualsevol tecla per "
 "continuar)\n"
 
 #: src/nmcli/connections.c:8721
@@ -11582,7 +11583,7 @@ msgstr "Configuració actual del nmcli:\n"
 #: src/nmcli/connections.c:8753
 #, c-format
 msgid "Invalid configuration option '%s'; allowed [%s]\n"
-msgstr "Opció de configuració no vàida: «%s»; es permet [%s]\n"
+msgstr "Opció de configuració no vàlida: «%s»; es permet [%s]\n"
 
 #: src/nmcli/connections.c:8985
 #, fuzzy
@@ -12396,7 +12397,7 @@ msgstr "Error: no s'ha pogut afegir/activar la connexió nova: %s"
 #: src/nmcli/devices.c:2266
 #, c-format
 msgid "Error: Device activation failed: %s"
-msgstr "Error: no s'ha pogut activar el dispositu: %s"
+msgstr "Error: no s'ha pogut activar el dispositiu: %s"
 
 #: src/nmcli/devices.c:2322
 #, c-format
@@ -12603,7 +12604,7 @@ msgstr "Contrasenya: "
 #: src/nmcli/devices.c:4172
 #, c-format
 msgid "'%s' is not valid WPA PSK"
-msgstr "«%s» no és una WPS PSK vàlida"
+msgstr "«%s» no és una WPA PSK vàlida"
 
 #: src/nmcli/devices.c:4193
 #, c-format
@@ -13538,7 +13539,7 @@ msgstr "Error: s'esperava l'argument «%s», però s'ha proporcionat «%s»."
 #: src/nmcli/utils.c:315
 #, c-format
 msgid "Error: Unexpected argument '%s'"
-msgstr "Error: argument inesperat «%s»."
+msgstr "Error: argument inesperat «%s»"
 
 #: src/nmcli/utils.c:702
 #, fuzzy, c-format
@@ -13897,7 +13898,7 @@ msgstr "«%s» <"
 #. NB: the ordering/numbering here corresponds to NmtPageBondMonitoringMode
 #: src/nmtui/nmt-page-bond.c:92
 msgid "MII (recommended)"
-msgstr "MII (recomendat)"
+msgstr "MII (recomanat)"
 
 #: src/nmtui/nmt-page-bond.c:93
 msgid "ARP"
@@ -14543,7 +14544,7 @@ msgstr ""
 
 #: src/nmtui/nmtui-edit.c:394 src/nmtui/nmtui-edit.c:410
 msgid "New Connection"
-msgstr "Connexions nova"
+msgstr "Connexió nova"
 
 #: src/nmtui/nmtui-edit.c:452
 #, c-format
diff --git a/po/it.po b/po/it.po
index ae036b82..9ef6bc14 100644
--- a/po/it.po
+++ b/po/it.po
@@ -12596,7 +12596,7 @@ msgstr "Digitare «help» o «?» per i comandi disponibili."
 #. TRANSLATORS: do not translate 'print', leave it as it is
 #: src/nmcli/connections.c:9072
 msgid "Type 'print' to show all the connection properties."
-msgstr "Digitare «stampa» per mostrare tutte le proprietà della connessione."
+msgstr "Digitare «print» per mostrare tutte le proprietà della connessione."
 
 #. TRANSLATORS: do not translate 'describe', leave it as it is
 #: src/nmcli/connections.c:9075
diff --git a/po/ru.po b/po/ru.po
index beac01bf..849805bf 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,4 +1,3 @@
-# Copyright (C) 2024 Дронова Юлия <juliette.tux@gmail.com>,
 # Leonid Kanter <leon@asplinux.ru>, 2006, 2007.
 # Артём Попов <artfwo@gmail.com>, 2009.
 # Yulia <ypoyarko@redhat.com>, 2010.
@@ -11,23 +10,24 @@
 # tchuang <tchuang@redhat.com>, 2017. #zanata.
 # ljanda <ljanda@redhat.com>, 2018. #zanata.
 # lrintel <lrintel@redhat.com>, 2018. #zanata.
-# Дронова Юлия <juliette.tux@gmail.com>, 2023.
+# Дронова Юлия <juliette.tux@gmail.com>, 2023, 2025.
 # This file is distributed under the same license as the NetworkManager package.
 msgid ""
 msgstr ""
-"Project-Id-Version: NetworkManager\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-31 11:59+0200\n"
-"PO-Revision-Date: 2024-07-18 17:46+0300\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/NetworkMan"
+"ager/issues\n"
+"POT-Creation-Date: 2025-08-14 03:31+0000\n"
+"PO-Revision-Date: 2025-09-05 18:36+0300\n"
 "Last-Translator: Дронова Юлия <juliette.tux@gmail.com>\n"
 "Language-Team: RU\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 23.08.1\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
+"4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 25.08.0\n"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:13
 msgid "Enable or disable system networking"
@@ -211,7 +211,7 @@ msgid "%s %u"
 msgstr "%s %u"
 
 #: src/core/devices/adsl/nm-device-adsl.c:118
-#: src/libnmc-setting/nm-meta-setting-desc.c:8697
+#: src/libnmc-setting/nm-meta-setting-desc.c:8993
 msgid "ADSL connection"
 msgstr "Подключение ADSL"
 
@@ -251,12 +251,12 @@ msgid "DUN connection must include a GSM or CDMA setting"
 msgstr "Подключения DUN должны содержать параметры GSM или CDMA"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:382
-#: src/core/devices/wwan/nm-modem-broadband.c:897
+#: src/core/devices/wwan/nm-modem-broadband.c:918
 msgid "GSM connection"
 msgstr "Подключение GSM"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:384
-#: src/core/devices/wwan/nm-modem-broadband.c:918
+#: src/core/devices/wwan/nm-modem-broadband.c:938
 msgid "CDMA connection"
 msgstr "Подключение CDMA"
 
@@ -264,11 +264,11 @@ msgstr "Подключение CDMA"
 msgid "Unknown/unhandled Bluetooth connection type"
 msgstr "Неизвестный/необрабатываемый тип подключения Bluetooth"
 
-#: src/core/devices/bluetooth/nm-device-bt.c:417
+#: src/core/devices/bluetooth/nm-device-bt.c:416
 msgid "connection does not match device"
 msgstr "подключение не соответствует устройству"
 
-#: src/core/devices/nm-device-6lowpan.c:162
+#: src/core/devices/nm-device-6lowpan.c:154
 msgid "6LOWPAN connection"
 msgstr "Подключение 6LOWPAN"
 
@@ -276,7 +276,7 @@ msgstr "Подключение 6LOWPAN"
 msgid "Bond connection"
 msgstr "Агрегированное подключение (bond)"
 
-#: src/core/devices/nm-device-bridge.c:164
+#: src/core/devices/nm-device-bridge.c:165
 msgid "Bridge connection"
 msgstr "Мостовое подключение"
 
@@ -289,21 +289,21 @@ msgstr "Фиктивное подключение"
 msgid "Wired connection %d"
 msgstr "Проводное подключение %d"
 
-#: src/core/devices/nm-device-ethernet.c:1641
-#: src/libnmc-setting/nm-meta-setting-desc.c:8739
+#: src/core/devices/nm-device-ethernet.c:1640
+#: src/libnmc-setting/nm-meta-setting-desc.c:9037
 msgid "Veth connection"
 msgstr "Подключение Veth"
 
-#: src/core/devices/nm-device-ethernet.c:1699
+#: src/core/devices/nm-device-ethernet.c:1697
 msgid "PPPoE connection"
 msgstr "Подключение PPPoE"
 
-#: src/core/devices/nm-device-ethernet.c:1699
+#: src/core/devices/nm-device-ethernet.c:1697
 msgid "Wired connection"
 msgstr "Проводное подключение"
 
 #: src/core/devices/nm-device-infiniband.c:160
-#: src/libnmc-setting/nm-meta-setting-desc.c:8712
+#: src/libnmc-setting/nm-meta-setting-desc.c:9008
 msgid "InfiniBand connection"
 msgstr "Подключение InfiniBand"
 
@@ -315,7 +315,7 @@ msgstr "Подключение IP-туннель"
 msgid "Loopback connection"
 msgstr "Подключение loopback"
 
-#: src/core/devices/nm-device-macvlan.c:366
+#: src/core/devices/nm-device-macvlan.c:355
 msgid "MACVLAN connection"
 msgstr "Подключение MACVLAN"
 
@@ -323,18 +323,18 @@ msgstr "Подключение MACVLAN"
 msgid "TUN connection"
 msgstr "Подключение TUN"
 
-#: src/core/devices/nm-device-vlan.c:380
-#: src/libnmc-setting/nm-meta-setting-desc.c:8740
+#: src/core/devices/nm-device-vlan.c:370
+#: src/libnmc-setting/nm-meta-setting-desc.c:9038
 msgid "VLAN connection"
 msgstr "Подключение VLAN"
 
 #: src/core/devices/nm-device-vrf.c:185
-#: src/libnmc-setting/nm-meta-setting-desc.c:8742
+#: src/libnmc-setting/nm-meta-setting-desc.c:9040
 msgid "VRF connection"
 msgstr "Подключение VRF"
 
 #: src/core/devices/nm-device-vxlan.c:385
-#: src/libnmc-setting/nm-meta-setting-desc.c:8743
+#: src/libnmc-setting/nm-meta-setting-desc.c:9041
 msgid "VXLAN connection"
 msgstr "Подключение VXLAN"
 
@@ -477,12 +477,10 @@ msgstr "Для режима Ad-Hoc требуется открытая ауте
 
 #: src/core/devices/wifi/nm-wifi-utils.c:565
 #: src/core/devices/wifi/nm-wifi-utils.c:600
-#, c-format
 msgid "connection does not match access point"
 msgstr "подключение не соответствует точке доступа"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:654
-#, c-format
 msgid "connection does not match mesh point"
 msgstr "подключение не соответствует точке mesh"
 
@@ -594,8 +592,8 @@ msgid "Could not daemonize: %s [error %u]\n"
 msgstr "Невозможно преобразовать в демона: %s [ошибка %u]\n"
 
 #: src/core/nm-config.c:544 src/libnm-core-impl/nm-setting-ovs-bridge.c:187
-#: src/libnmc-setting/nm-meta-setting-desc.c:2163
-#: src/libnmc-setting/nm-meta-setting-desc.c:4309
+#: src/libnmc-setting/nm-meta-setting-desc.c:2176
+#: src/libnmc-setting/nm-meta-setting-desc.c:4366
 #, c-format
 msgid "'%s' is not valid"
 msgstr "«%s» недействителен"
@@ -663,40 +661,39 @@ msgstr "Параметры NetworkManager"
 msgid "Show NetworkManager options"
 msgstr "Показать параметры NetworkManager"
 
-#: src/core/nm-manager.c:6931 src/libnmc-setting/nm-meta-setting-desc.c:8741
+#: src/core/nm-manager.c:6988 src/libnmc-setting/nm-meta-setting-desc.c:9039
 msgid "VPN connection"
 msgstr "Подключение VPN"
 
-#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5654
-#: src/libnm-client-impl/nm-device.c:1781
-#: src/libnm-core-impl/nm-connection.c:3244 src/nmtui/nm-editor-utils.c:196
+#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5653
+#: src/libnm-client-impl/nm-device.c:1782
+#: src/libnm-core-impl/nm-connection.c:3343 src/nmtui/nm-editor-utils.c:204
 msgid "Bond"
 msgstr "Агрегированное (Bond)"
 
-#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5725
-#: src/libnm-client-impl/nm-device.c:1783
-#: src/libnm-core-impl/nm-connection.c:3246 src/nmtui/nm-editor-utils.c:214
+#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5724
+#: src/libnm-client-impl/nm-device.c:1784
+#: src/libnm-core-impl/nm-connection.c:3345 src/nmtui/nm-editor-utils.c:222
 msgid "Team"
 msgstr "Агрегированное (Team)"
 
-#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:6062
-#: src/libnm-client-impl/nm-device.c:1785
-#: src/libnm-core-impl/nm-connection.c:3248 src/nmtui/nm-editor-utils.c:205
+#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:6061
+#: src/libnm-client-impl/nm-device.c:1786
+#: src/libnm-core-impl/nm-connection.c:3347 src/nmtui/nm-editor-utils.c:213
 msgid "Bridge"
 msgstr "Мост"
 
-#: src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9026
-#: src/libnm-core-impl/nm-team-utils.c:2391
-#, c-format
+#: src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9028
+#: src/libnm-core-impl/nm-team-utils.c:2395
 msgid "invalid json"
 msgstr "недействительный json"
 
-#: src/libnm-client-impl/nm-client.c:3816
+#: src/libnm-client-impl/nm-client.c:3818
 #, c-format
 msgid "request succeeded with %s but object is in an unsuitable state"
 msgstr "запрос был успешным (%s), но объект имеет неподходящий статус"
 
-#: src/libnm-client-impl/nm-client.c:3908
+#: src/libnm-client-impl/nm-client.c:3910
 #, c-format
 msgid "operation succeeded but object %s does not exist"
 msgstr "действие было успешным, но объекта %s не существует"
@@ -747,12 +744,10 @@ msgid "The connection was not a bridge connection."
 msgstr "Это подключение не было мостом."
 
 #: src/libnm-client-impl/nm-device-bt.c:133
-#, c-format
 msgid "The connection was not a Bluetooth connection."
 msgstr "Это подключение не было подключением Bluetooth."
 
 #: src/libnm-client-impl/nm-device-bt.c:141
-#, c-format
 msgid "The connection is of Bluetooth NAP type."
 msgstr "Подключение имеет тип Bluetooth NAP."
 
@@ -933,138 +928,143 @@ msgstr ""
 msgid "The connection was not a wpan connection."
 msgstr "Это подключение не было подключением wpan."
 
-#: src/libnm-client-impl/nm-device.c:1761 src/nmtui/nm-editor-utils.c:144
+#: src/libnm-client-impl/nm-device.c:1762 src/nmtui/nm-editor-utils.c:144
 msgid "Ethernet"
 msgstr "Ethernet"
 
-#: src/libnm-client-impl/nm-device.c:1763 src/nmtui/nm-editor-utils.c:160
+#: src/libnm-client-impl/nm-device.c:1764 src/nmtui/nm-editor-utils.c:168
 #: src/nmtui/nmtui-radio.c:58
 msgid "Wi-Fi"
 msgstr "Wi-Fi"
 
-#: src/libnm-client-impl/nm-device.c:1765
+#: src/libnm-client-impl/nm-device.c:1766
 msgid "Bluetooth"
 msgstr "Bluetooth"
 
-#: src/libnm-client-impl/nm-device.c:1767
+#: src/libnm-client-impl/nm-device.c:1768
 msgid "OLPC Mesh"
 msgstr "OLPC Mesh"
 
-#: src/libnm-client-impl/nm-device.c:1769
+#: src/libnm-client-impl/nm-device.c:1770
 msgid "Open vSwitch Interface"
 msgstr "Интерфейс Open vSwitch"
 
-#: src/libnm-client-impl/nm-device.c:1771
+#: src/libnm-client-impl/nm-device.c:1772
 msgid "Open vSwitch Port"
 msgstr "Порт Open vSwitch"
 
-#: src/libnm-client-impl/nm-device.c:1773
+#: src/libnm-client-impl/nm-device.c:1774
 msgid "Open vSwitch Bridge"
 msgstr "Мост Open vSwitch"
 
-#: src/libnm-client-impl/nm-device.c:1775
+#: src/libnm-client-impl/nm-device.c:1776
 msgid "WiMAX"
 msgstr "WiMAX"
 
-#: src/libnm-client-impl/nm-device.c:1777 src/nmtui/nm-editor-utils.c:178
+#: src/libnm-client-impl/nm-device.c:1778 src/nmtui/nm-editor-utils.c:186
 msgid "Mobile Broadband"
 msgstr "Мобильное широкополосное"
 
-#: src/libnm-client-impl/nm-device.c:1779
-#: src/libnm-core-impl/nm-connection.c:3252 src/nmtui/nm-editor-utils.c:169
+#: src/libnm-client-impl/nm-device.c:1780
+#: src/libnm-core-impl/nm-connection.c:3351 src/nmtui/nm-editor-utils.c:177
 msgid "InfiniBand"
 msgstr "InfiniBand"
 
-#: src/libnm-client-impl/nm-device.c:1787
-#: src/libnm-core-impl/nm-connection.c:3250 src/nmtui/nm-editor-utils.c:223
+#: src/libnm-client-impl/nm-device.c:1788
+#: src/libnm-core-impl/nm-connection.c:3349 src/nmtui/nm-editor-utils.c:231
 #: src/nmtui/nmt-page-vlan.c:57
 msgid "VLAN"
 msgstr "VLAN"
 
-#: src/libnm-client-impl/nm-device.c:1789
+#: src/libnm-client-impl/nm-device.c:1790
 msgid "ADSL"
 msgstr "ADSL"
 
-#: src/libnm-client-impl/nm-device.c:1791
+#: src/libnm-client-impl/nm-device.c:1792
 msgid "MACVLAN"
 msgstr "MACVLAN"
 
-#: src/libnm-client-impl/nm-device.c:1793
+#: src/libnm-client-impl/nm-device.c:1794
 msgid "VXLAN"
 msgstr "VXLAN"
 
-#: src/libnm-client-impl/nm-device.c:1795
+#: src/libnm-client-impl/nm-device.c:1796
 msgid "IPTunnel"
 msgstr "IPTunnel"
 
-#: src/libnm-client-impl/nm-device.c:1797
+#: src/libnm-client-impl/nm-device.c:1798
 msgid "Tun"
 msgstr "Tun"
 
-#: src/libnm-client-impl/nm-device.c:1799
-#: src/libnm-core-impl/nm-connection.c:3262 src/nmtui/nm-editor-utils.c:152
+#: src/libnm-client-impl/nm-device.c:1800
+#: src/libnm-core-impl/nm-connection.c:3361 src/nmtui/nm-editor-utils.c:152
 msgid "Veth"
 msgstr "Veth"
 
-#: src/libnm-client-impl/nm-device.c:1801 src/nmtui/nm-editor-utils.c:239
+#: src/libnm-client-impl/nm-device.c:1802 src/nmtui/nm-editor-utils.c:247
 #: src/nmtui/nmt-page-macsec.c:99
 msgid "MACsec"
 msgstr "MACsec"
 
-#: src/libnm-client-impl/nm-device.c:1803
+#: src/libnm-client-impl/nm-device.c:1804
 msgid "Dummy"
 msgstr "Фиктивное"
 
-#: src/libnm-client-impl/nm-device.c:1805
+#: src/libnm-client-impl/nm-device.c:1806
 msgid "PPP"
 msgstr "PPP"
 
-#: src/libnm-client-impl/nm-device.c:1807
+#: src/libnm-client-impl/nm-device.c:1808
 msgid "IEEE 802.15.4"
 msgstr "IEEE 802.15.4"
 
-#: src/libnm-client-impl/nm-device.c:1809
+#: src/libnm-client-impl/nm-device.c:1810
 msgid "6LoWPAN"
 msgstr "6LoWPAN"
 
-#: src/libnm-client-impl/nm-device.c:1811
-#: src/libnm-core-impl/nm-connection.c:3258 src/nmtui/nm-editor-utils.c:271
+#: src/libnm-client-impl/nm-device.c:1812
+#: src/libnm-core-impl/nm-connection.c:3357 src/nmtui/nm-editor-utils.c:279
 #: src/nmtui/nmt-page-wireguard.c:57
 msgid "WireGuard"
 msgstr "WireGuard"
 
-#: src/libnm-client-impl/nm-device.c:1813
+#: src/libnm-client-impl/nm-device.c:1814
 msgid "Wi-Fi P2P"
 msgstr "Wi-Fi P2P"
 
-#: src/libnm-client-impl/nm-device.c:1815
+#: src/libnm-client-impl/nm-device.c:1816
 msgid "VRF"
 msgstr "VRF"
 
-#: src/libnm-client-impl/nm-device.c:1817
+#: src/libnm-client-impl/nm-device.c:1818
+#: src/libnm-core-impl/nm-connection.c:3363 src/nmtui/nm-editor-utils.c:160
 msgid "Loopback"
 msgstr "Loopback"
 
-#: src/libnm-client-impl/nm-device.c:1819
+#: src/libnm-client-impl/nm-device.c:1820
 msgid "HSR"
 msgstr "HSR"
 
+#: src/libnm-client-impl/nm-device.c:1822
+msgid "IPVLAN"
+msgstr "IPVLAN"
+
 #. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
 #. TRANSLATORS: Unknown reason for a connection state change (NMActiveConnectionStateReason)
-#: src/libnm-client-impl/nm-device.c:1826 src/libnmc-base/nm-client-utils.c:352
-#: src/libnmc-base/nm-client-utils.c:502 src/nmcli/utils.c:1841
+#: src/libnm-client-impl/nm-device.c:1829 src/libnmc-base/nm-client-utils.c:352
+#: src/libnmc-base/nm-client-utils.c:502 src/nmcli/utils.c:1852
 msgid "Unknown"
 msgstr "Неизвестно"
 
-#: src/libnm-client-impl/nm-device.c:1851
+#: src/libnm-client-impl/nm-device.c:1854
 msgid "Wired"
 msgstr "Проводное"
 
-#: src/libnm-client-impl/nm-device.c:1883
+#: src/libnm-client-impl/nm-device.c:1886
 msgid "PCI"
 msgstr "PCI"
 
-#: src/libnm-client-impl/nm-device.c:1885
+#: src/libnm-client-impl/nm-device.c:1888
 msgid "USB"
 msgstr "USB"
 
@@ -1074,20 +1074,19 @@ msgstr "USB"
 #. * "%2$s (%1$s)" if there's no grammatical way to combine
 #. * the strings otherwise.
 #.
-#: src/libnm-client-impl/nm-device.c:2184
-#: src/libnm-client-impl/nm-device.c:2203
+#: src/libnm-client-impl/nm-device.c:2187
+#: src/libnm-client-impl/nm-device.c:2206
 #, c-format
 msgctxt "long device name"
 msgid "%s %s"
 msgstr "%s %s"
 
-#: src/libnm-client-impl/nm-device.c:2863
+#: src/libnm-client-impl/nm-device.c:2866
 #, c-format
 msgid "The connection was not valid: %s"
 msgstr "Это подключение не было действительным: %s"
 
-#: src/libnm-client-impl/nm-device.c:2875
-#, c-format
+#: src/libnm-client-impl/nm-device.c:2878
 msgid "The interface names of the device and the connection didn't match"
 msgstr "Имена интерфейсов устройства и подключения не совпадают"
 
@@ -1096,51 +1095,51 @@ msgid "registration failed"
 msgstr "сбой регистрации"
 
 #: src/libnm-client-impl/nm-vpn-plugin-old.c:807
-#: src/libnm-client-impl/nm-vpn-service-plugin.c:1055
+#: src/libnm-client-impl/nm-vpn-service-plugin.c:1075
 msgid "No service name specified"
 msgstr "Не указано имя службы"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:287
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:288
 #, c-format
 msgid "'%s' is not valid: properties should be specified as 'key=value'"
 msgstr ""
 "Недействительное '%s': параметры должны указываться в виде «ключ=значение»"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:301
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:302
 #, c-format
 msgid "'%s' is not a valid key"
 msgstr "«%s» не является действительным ключом"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:306
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:307
 #, c-format
 msgid "duplicate key '%s'"
 msgstr "дублирующий ключ '%s'"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:320
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:321
 #, c-format
 msgid "number for '%s' is out of range"
 msgstr "число для '%s' выходит за пределы диапазона"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:325
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:326
 #, c-format
 msgid "value for '%s' must be a number"
 msgstr "значение '%s' должно быть числом"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:338
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:339
 #, c-format
 msgid "value for '%s' must be a boolean"
 msgstr "значение '%s' должно быть логическим"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:347
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:348
 msgid "missing 'name' attribute"
 msgstr "отсутствует атрибут 'name'"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:356
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:357
 #, c-format
 msgid "invalid 'name' \"%s\""
 msgstr "недействительный атрибут 'name' \"%s\""
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:369
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:370
 #, c-format
 msgid "attribute '%s' is invalid for \"%s\""
 msgstr "атрибут '%s' является недействительным для \"%s\""
@@ -1160,44 +1159,92 @@ msgstr "свойство не может содержать нулевые ба
 #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:474
 msgid "invalid DSCP value; allowed values are: 'CS0', 'CS4', 'CS6'"
 msgstr ""
+"недействительное значение DSCP; допустимые значения: 'CS0', 'CS4', 'CS6'"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:508
+msgid "NULL DHCP range; it should be provided as <START_IP>,<END_IP>."
+msgstr ""
+"Нулевой диапазон DHCP; диапазон должен быть указан в форме <НАЧАЛЬНЫЙ_IP>,<ПОС"
+"ЛЕДНИЙ_IP>."
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:691
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:520
+msgid "Non-NULL range and NULL addresses detected."
+msgstr "Обнаружены нулевые адреса и не нулевой диапазон."
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:529
+msgid "Invalid DHCP range; it should be provided as <START_IP>,<END_IP>."
+msgstr ""
+"Недействительный диапазон DHCP; диапазон должен быть указан в форме <НАЧАЛЬНЫЙ"
+"_IP>,<ПОСЛЕДНИЙ_IP>."
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:538
+msgid "Start IP has invalid length."
+msgstr "Недействительная длина начального IP"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:549
+msgid "Start IP is invalid."
+msgstr "Недействительный начальный IP"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:557
+msgid "End IP is invalid."
+msgstr "Недействительный последний IP"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:565
+msgid "Start IP should be lower than the end IP."
+msgstr "Значение начального IP должно быть меньше значения последнего IP."
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:594
+msgid "Requested range is not in any network configured on the interface."
+msgstr ""
+"Запрошенный диапазон не принадлежит ни одной из сетей, настроенных на интерфей"
+"се."
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:615
+#, c-format
+msgid ""
+"Invalid DHCP lease time value; it should be either default or a positive "
+"number between %u and %u or %s."
+msgstr ""
+"Недействительное значение времени аренды DHCP. Значение должно быть либо "
+"значением по умолчанию, либо положительным числом от %u до %u, или %s."
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1017
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:82
 #: src/libnm-core-impl/nm-setting-user.c:93
 msgid "missing key"
 msgstr "отсутствует ключ"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:699
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1025
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:90
 #: src/libnm-core-impl/nm-setting-user.c:101
 msgid "key is too long"
 msgstr "слишком длинный ключ"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:706
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1032
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:97
 #: src/libnm-core-impl/nm-setting-user.c:108
 msgid "key must be UTF8"
 msgstr "ключ должен быть в кодировке UTF8"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:715
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1041
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:106
 #: src/libnm-core-impl/nm-setting-user.c:155
 msgid "key contains invalid characters"
 msgstr "ключ содержит недействительные символы"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:743
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1069
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:195
 #: src/libnm-core-impl/nm-setting-user.c:182
 msgid "value is missing"
 msgstr "отсутствует значение"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:752
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1078
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:204
 #: src/libnm-core-impl/nm-setting-user.c:191
 msgid "value is too large"
 msgstr "слишком большое значение"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:760
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1086
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:212
 #: src/libnm-core-impl/nm-setting-user.c:199
 msgid "value is not valid UTF8"
@@ -1227,36 +1274,36 @@ msgstr "имеет UUID, для которого требуется нормал
 msgid "has duplicate UUIDs"
 msgstr "имеет дублирующие UUID"
 
-#: src/libnm-core-impl/nm-connection.c:1839
+#: src/libnm-core-impl/nm-connection.c:1936
 msgid "setting not found"
 msgstr "параметр не найден"
 
-#: src/libnm-core-impl/nm-connection.c:1893
-#: src/libnm-core-impl/nm-connection.c:1918
-#: src/libnm-core-impl/nm-connection.c:1943
-msgid "setting is required for non-slave connections"
-msgstr "параметр обязателен для подключений, не являющихся ведомыми"
+#: src/libnm-core-impl/nm-connection.c:1990
+#: src/libnm-core-impl/nm-connection.c:2015
+#: src/libnm-core-impl/nm-connection.c:2040
+msgid "setting is required for non-port connections"
+msgstr "параметр обязателен для подключений «non-port»"
 
-#: src/libnm-core-impl/nm-connection.c:1906
-#: src/libnm-core-impl/nm-connection.c:1931
-#: src/libnm-core-impl/nm-connection.c:1956
-msgid "setting not allowed in slave connection"
-msgstr "этот параметр не допускается для ведомых подключений"
+#: src/libnm-core-impl/nm-connection.c:2003
+#: src/libnm-core-impl/nm-connection.c:2028
+#: src/libnm-core-impl/nm-connection.c:2053
+msgid "setting not allowed in port connection"
+msgstr "параметр не может использоваться в подключениях портов"
 
-#: src/libnm-core-impl/nm-connection.c:2068
+#: src/libnm-core-impl/nm-connection.c:2166
 msgid "Unexpected failure to normalize the connection"
 msgstr "Непредвиденный сбой при нормализации подключения"
 
-#: src/libnm-core-impl/nm-connection.c:2129
+#: src/libnm-core-impl/nm-connection.c:2227
 msgid "Unexpected failure to verify the connection"
 msgstr "Непредвиденный сбой при проверке подлинности подключения"
 
-#: src/libnm-core-impl/nm-connection.c:2166
+#: src/libnm-core-impl/nm-connection.c:2264
 #, c-format
 msgid "unexpected uuid %s instead of %s"
 msgstr "непредвиденный uuid %s вместо %s"
 
-#: src/libnm-core-impl/nm-connection.c:3095
+#: src/libnm-core-impl/nm-connection.c:3193
 #: src/libnm-core-impl/nm-setting-8021x.c:2641
 #: src/libnm-core-impl/nm-setting-8021x.c:2678
 #: src/libnm-core-impl/nm-setting-8021x.c:2696
@@ -1266,10 +1313,10 @@ msgstr "непредвиденный uuid %s вместо %s"
 #: src/libnm-core-impl/nm-setting-bluetooth.c:190
 #: src/libnm-core-impl/nm-setting-bluetooth.c:207
 #: src/libnm-core-impl/nm-setting-cdma.c:142
-#: src/libnm-core-impl/nm-setting-connection.c:1253
-#: src/libnm-core-impl/nm-setting-connection.c:1291
-#: src/libnm-core-impl/nm-setting-connection.c:1620
-#: src/libnm-core-impl/nm-setting-ip-config.c:5517
+#: src/libnm-core-impl/nm-setting-connection.c:1424
+#: src/libnm-core-impl/nm-setting-connection.c:1462
+#: src/libnm-core-impl/nm-setting-connection.c:1961
+#: src/libnm-core-impl/nm-setting-ip-config.c:5613
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:405
 #: src/libnm-core-impl/nm-setting-olpc-mesh.c:97
 #: src/libnm-core-impl/nm-setting-ovs-patch.c:75
@@ -1282,16 +1329,15 @@ msgstr "непредвиденный uuid %s вместо %s"
 msgid "property is missing"
 msgstr "свойство отсутствует"
 
-#: src/libnm-core-impl/nm-connection.c:3256
+#: src/libnm-core-impl/nm-connection.c:3355
 msgid "IP Tunnel"
 msgstr "IP-туннель"
 
-#: src/libnm-core-impl/nm-connection.c:3260
+#: src/libnm-core-impl/nm-connection.c:3359
 msgid "TUN/TAP"
 msgstr "TUN/TAP"
 
 #: src/libnm-core-impl/nm-keyfile-utils.c:174
-#, c-format
 msgid "Value cannot be interpreted as a list of numbers."
 msgstr "Значение не может быть интерпретировано как список номеров."
 
@@ -1300,68 +1346,76 @@ msgstr "Значение не может быть интерпретирован
 msgid "value is not an integer in range [%lld, %lld]"
 msgstr "значение не является целым числом в диапазоне [%lld, %lld]"
 
-#: src/libnm-core-impl/nm-keyfile.c:333
+#: src/libnm-core-impl/nm-keyfile.c:334
 msgid "ignoring missing number"
 msgstr "отсутствующее число игнорируется"
 
-#: src/libnm-core-impl/nm-keyfile.c:345
+#: src/libnm-core-impl/nm-keyfile.c:346
 #, c-format
 msgid "ignoring invalid number '%s'"
 msgstr "недействительное число «%s» игнорируется"
 
-#: src/libnm-core-impl/nm-keyfile.c:374
+#: src/libnm-core-impl/nm-keyfile.c:375
 #, c-format
 msgid "ignoring invalid %s address: %s"
 msgstr "недействительный адрес %s игнорируется: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:420
+#: src/libnm-core-impl/nm-keyfile.c:421
 #, c-format
 msgid "ignoring invalid gateway '%s' for %s route"
 msgstr "недействительный шлюз «%s» для маршрута %s игнорируется"
 
-#: src/libnm-core-impl/nm-keyfile.c:442
+#: src/libnm-core-impl/nm-keyfile.c:443
 #, c-format
 msgid "ignoring invalid %s route: %s"
 msgstr "недействительный маршрут %s игнорируется: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:620
+#: src/libnm-core-impl/nm-keyfile.c:621
 #, c-format
 msgid "unexpected character '%c' for address %s: '%s' (position %td)"
 msgstr "непредвиденный символ «%c» в адресе %s: «%s» (позиция %td)"
 
-#: src/libnm-core-impl/nm-keyfile.c:636
+#: src/libnm-core-impl/nm-keyfile.c:637
 #, c-format
 msgid "unexpected character '%c' for %s: '%s' (position %td)"
 msgstr "непредвиденный символ «%c» в %s: «%s» (позиция %td)"
 
-#: src/libnm-core-impl/nm-keyfile.c:652
+#: src/libnm-core-impl/nm-keyfile.c:653
 #, c-format
 msgid "unexpected character '%c' in prefix length for %s: '%s' (position %td)"
 msgstr "непредвиденный символ «%c» в длине префикса для %s: «%s» (позиция %td)"
 
-#: src/libnm-core-impl/nm-keyfile.c:669
+#: src/libnm-core-impl/nm-keyfile.c:670
 #, c-format
 msgid "garbage at the end of value %s: '%s'"
 msgstr "мусор в конце значения %s: «%s»"
 
-#: src/libnm-core-impl/nm-keyfile.c:679
+#: src/libnm-core-impl/nm-keyfile.c:680
 #, c-format
 msgid "deprecated semicolon at the end of value %s: '%s'"
 msgstr "устаревшая точка с запятой в конце значения %s: «%s»"
 
-#: src/libnm-core-impl/nm-keyfile.c:698
+#: src/libnm-core-impl/nm-keyfile.c:699
 #, c-format
 msgid "invalid prefix length for %s '%s', defaulting to %d"
 msgstr ""
 "недействительная длина префикса %s «%s»; по умолчанию будет использоваться %d"
 
-#: src/libnm-core-impl/nm-keyfile.c:710
+#: src/libnm-core-impl/nm-keyfile.c:711
 #, c-format
 msgid "missing prefix length for %s '%s', defaulting to %d"
 msgstr ""
 "отсутствует длина префикса %s «%s»; по умолчанию будет использоваться %d"
 
-#: src/libnm-core-impl/nm-keyfile.c:1053
+#: src/libnm-core-impl/nm-keyfile.c:959
+#, c-format
+msgid ""
+"ignoring gateway \"%s\" from \"address*\" keys because the \"gateway\" key "
+"is set"
+msgstr ""
+"шлюз «%s» из ключей «address*» игнорируется, т.к. ключ «gateway» настроен"
+
+#: src/libnm-core-impl/nm-keyfile.c:1079
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:370
 #: src/libnm-core-impl/nm-setting-ovs-other-config.c:208
 #: src/libnm-core-impl/nm-setting-user.c:368
@@ -1369,171 +1423,181 @@ msgstr ""
 msgid "invalid value for \"%s\": %s"
 msgstr "недействительное значение «%s»: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:1140
+#: src/libnm-core-impl/nm-keyfile.c:1166
 #, c-format
 msgid "ignoring invalid DNS server IPv%c address '%s'"
 msgstr "игнорируется адрес IPv%c '%s' недействительного сервера DNS"
 
-#: src/libnm-core-impl/nm-keyfile.c:1177
-#: src/libnmc-setting/nm-meta-setting-desc.c:1653
+#: src/libnm-core-impl/nm-keyfile.c:1203
+#: src/libnmc-setting/nm-meta-setting-desc.c:1666
 #, c-format
 msgid "invalid option '%s', use one of [%s]"
 msgstr "недействительный параметр «%s»; используйте один из [%s]"
 
-#: src/libnm-core-impl/nm-keyfile.c:1257
+#: src/libnm-core-impl/nm-keyfile.c:1283
 msgid "ignoring invalid MAC address"
 msgstr "недействительный адрес MAC игнорируется"
 
-#: src/libnm-core-impl/nm-keyfile.c:1333
+#: src/libnm-core-impl/nm-keyfile.c:1359
 #, c-format
 msgid "ignoring invalid bond option %s%s%s = %s%s%s: %s"
 msgstr ""
 "недействительный параметр агрегации bond %s%s%s = %s%s%s игнорируется: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:1523
+#: src/libnm-core-impl/nm-keyfile.c:1549
 msgid "ignoring invalid SSID"
 msgstr "недействительный SSID игнорируется"
 
-#: src/libnm-core-impl/nm-keyfile.c:1541
+#: src/libnm-core-impl/nm-keyfile.c:1567
 msgid "ignoring invalid raw password"
 msgstr "недействительный необработанный пароль игнорируется"
 
-#: src/libnm-core-impl/nm-keyfile.c:1686
+#: src/libnm-core-impl/nm-keyfile.c:1712
 msgid "invalid key/cert value"
 msgstr "недействительное значение ключ/сертификат"
 
-#: src/libnm-core-impl/nm-keyfile.c:1701
+#: src/libnm-core-impl/nm-keyfile.c:1727
 #, c-format
 msgid "invalid key/cert value path \"%s\""
 msgstr "недействительный путь к ключу-сертификату: «%s»"
 
-#: src/libnm-core-impl/nm-keyfile.c:1726 src/libnm-core-impl/nm-keyfile.c:1823
+#: src/libnm-core-impl/nm-keyfile.c:1752 src/libnm-core-impl/nm-keyfile.c:1849
 #, c-format
 msgid "certificate or key file '%s' does not exist"
 msgstr "файл сертификата или ключа «%s» не существует"
 
-#: src/libnm-core-impl/nm-keyfile.c:1739
+#: src/libnm-core-impl/nm-keyfile.c:1765
 #, c-format
 msgid "invalid PKCS#11 URI \"%s\""
 msgstr "недействительный URI PKCS # 11 \"%s\""
 
-#: src/libnm-core-impl/nm-keyfile.c:1785
+#: src/libnm-core-impl/nm-keyfile.c:1811
 msgid "invalid key/cert value data:;base64, is not base64"
 msgstr ""
 "недействительное значение ключа/сертификата data:;base64, не является схемой "
 "base64"
 
-#: src/libnm-core-impl/nm-keyfile.c:1798
+#: src/libnm-core-impl/nm-keyfile.c:1824
 msgid "invalid key/cert value data:;base64,file://"
 msgstr "недействительное значение ключа/сертификата data:;base64,file://"
 
-#: src/libnm-core-impl/nm-keyfile.c:1839
+#: src/libnm-core-impl/nm-keyfile.c:1865
 msgid "invalid key/cert value is not a valid blob"
 msgstr ""
 "недействительное значение ключа/сертификата: не является действительным "
 "большим двоичным объектом"
 
-#: src/libnm-core-impl/nm-keyfile.c:1941
+#: src/libnm-core-impl/nm-keyfile.c:1967
 #, c-format
 msgid "invalid parity value '%s'"
 msgstr "недействительное значение чётности: «%s»"
 
-#: src/libnm-core-impl/nm-keyfile.c:1963 src/libnm-core-impl/nm-keyfile.c:3545
+#: src/libnm-core-impl/nm-keyfile.c:1989 src/libnm-core-impl/nm-keyfile.c:3566
 #, c-format
 msgid "invalid setting: %s"
 msgstr "недействительный параметр: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:1983
+#: src/libnm-core-impl/nm-keyfile.c:2009
 #, c-format
 msgid "ignoring invalid team configuration: %s"
 msgstr "недействительная конфигурация team игнорируется: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:2104
+#: src/libnm-core-impl/nm-keyfile.c:2130
 #, c-format
 msgid "invalid qdisc: %s"
 msgstr "недействительный алгоритм планирования очередей: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:2154
+#: src/libnm-core-impl/nm-keyfile.c:2180
 #, c-format
 msgid "invalid tfilter: %s"
 msgstr "недействительный фильтр трафика: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:3370
+#: src/libnm-core-impl/nm-keyfile.c:3391
 #, c-format
 msgid "error loading setting value: %s"
 msgstr "ошибка загрузки значения параметра: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:3401 src/libnm-core-impl/nm-keyfile.c:3413
-#: src/libnm-core-impl/nm-keyfile.c:3432 src/libnm-core-impl/nm-keyfile.c:3444
-#: src/libnm-core-impl/nm-keyfile.c:3456 src/libnm-core-impl/nm-keyfile.c:3518
-#: src/libnm-core-impl/nm-keyfile.c:3530
+#: src/libnm-core-impl/nm-keyfile.c:3422 src/libnm-core-impl/nm-keyfile.c:3434
+#: src/libnm-core-impl/nm-keyfile.c:3453 src/libnm-core-impl/nm-keyfile.c:3465
+#: src/libnm-core-impl/nm-keyfile.c:3477 src/libnm-core-impl/nm-keyfile.c:3539
+#: src/libnm-core-impl/nm-keyfile.c:3551
 msgid "value cannot be interpreted as integer"
 msgstr "значение не может быть интерпретировано как целое"
 
-#: src/libnm-core-impl/nm-keyfile.c:3486
+#: src/libnm-core-impl/nm-keyfile.c:3507
 #, c-format
 msgid "ignoring invalid byte element '%u' (not between 0 and 255 inclusive)"
 msgstr ""
 "недействительный байтовый элемент «%u» игнорируется (должен находиться в "
 "диапазоне от 0 до 255 включительно)"
 
-#: src/libnm-core-impl/nm-keyfile.c:3570
+#: src/libnm-core-impl/nm-keyfile.c:3601
+#, c-format
+msgid "invalid value for '%s.dhcp-send-hostname'"
+msgstr "недействительное значение для «%s.dhcp-send-hostname»"
+
+#: src/libnm-core-impl/nm-keyfile.c:3622
+#, c-format
+msgid "invalid value for '%s.dhcp-send-hostname-deprecated'"
+msgstr "недействительное значение для «%s.dhcp-send-hostname-deprecated»"
+
+#: src/libnm-core-impl/nm-keyfile.c:3647
 #, c-format
 msgid "invalid setting name '%s'"
 msgstr "недействительное название параметра «%s»"
 
-#: src/libnm-core-impl/nm-keyfile.c:3617
+#: src/libnm-core-impl/nm-keyfile.c:3696
 #, c-format
 msgid "invalid key '%s.%s'"
 msgstr "недействительный ключ '%s.%s'"
 
-#: src/libnm-core-impl/nm-keyfile.c:3633
+#: src/libnm-core-impl/nm-keyfile.c:3712
 #, c-format
 msgid "key '%s.%s' is not boolean"
 msgstr "ключ «%s.%s» не является логическим значением"
 
-#: src/libnm-core-impl/nm-keyfile.c:3650
+#: src/libnm-core-impl/nm-keyfile.c:3729
 #, c-format
 msgid "key '%s.%s' is not a uint32"
 msgstr "ключ '%s.%s' не имеет тип uint32"
 
-#: src/libnm-core-impl/nm-keyfile.c:3707
+#: src/libnm-core-impl/nm-keyfile.c:3786
 #, c-format
 msgid "invalid peer public key in section '%s'"
 msgstr "недействительный открытый ключ пира в разделе «%s»"
 
-#: src/libnm-core-impl/nm-keyfile.c:3722
+#: src/libnm-core-impl/nm-keyfile.c:3801
 #, c-format
 msgid "key '%s.%s' is not a valid 256 bit key in base64 encoding"
 msgstr ""
 "ключ «%s.%s» не является действительным 256-битным ключом в кодировке base64"
 
-#: src/libnm-core-impl/nm-keyfile.c:3745
+#: src/libnm-core-impl/nm-keyfile.c:3824
 #, c-format
 msgid "key '%s.%s' is not a valid secret flag"
 msgstr "ключ «%s.%s» не является действительным флагом секрета"
 
-#: src/libnm-core-impl/nm-keyfile.c:3768
+#: src/libnm-core-impl/nm-keyfile.c:3847
 #, c-format
 msgid "key '%s.%s' is not a integer in range 0 to 2^32"
 msgstr "ключ «%s.%s» не является целым числом в диапазоне от 0 до 2^32"
 
-#: src/libnm-core-impl/nm-keyfile.c:3784
+#: src/libnm-core-impl/nm-keyfile.c:3863
 #, c-format
 msgid "key '%s.%s' is not a valid endpoint"
 msgstr "ключ «%s.%s» не является действительной конечной точкой"
 
-#: src/libnm-core-impl/nm-keyfile.c:3810
+#: src/libnm-core-impl/nm-keyfile.c:3889
 #, c-format
 msgid "key '%s.%s' has invalid allowed-ips"
 msgstr "у ключа «%s.%s» недействительные значения allowed-ips"
 
-#: src/libnm-core-impl/nm-keyfile.c:3825
+#: src/libnm-core-impl/nm-keyfile.c:3904
 #, c-format
 msgid "peer '%s' is invalid: %s"
 msgstr "недействительный пир «%s»: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:4353
+#: src/libnm-core-impl/nm-keyfile.c:4454
 #, c-format
 msgid "unsupported option \"%s.%s\" of variant type %s"
 msgstr "неподдерживаемый параметр \"%s.%s\" типа варианта %s"
@@ -1542,7 +1606,6 @@ msgstr "неподдерживаемый параметр \"%s.%s\" типа в
 #: src/libnm-core-impl/nm-setting-hsr.c:131
 #: src/libnm-core-impl/nm-setting-hsr.c:149
 #: src/libnm-core-impl/nm-setting-veth.c:81
-#, c-format
 msgid "property is not specified"
 msgstr "свойство не указано"
 
@@ -1555,6 +1618,7 @@ msgstr "Значение «%s» не соответствует «%s=%s»"
 
 #: src/libnm-core-impl/nm-setting-6lowpan.c:120
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:378
+#: src/libnm-core-impl/nm-setting-ipvlan.c:134
 #: src/libnm-core-impl/nm-setting-macsec.c:349
 #: src/libnm-core-impl/nm-setting-macvlan.c:138
 #: src/libnm-core-impl/nm-setting-vlan.c:641
@@ -1590,7 +1654,6 @@ msgid "certificate is invalid: %s"
 msgstr "недействительный сертификат: %s"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:334
-#, c-format
 msgid "certificate detected as invalid scheme"
 msgstr "недействительная схема сертификата"
 
@@ -1603,7 +1666,6 @@ msgid "invalid certificate format"
 msgstr "недействительный формат сертификата"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:704
-#, c-format
 msgid "password is not supported when certificate is not on a PKCS#11 token"
 msgstr ""
 "пароль не поддерживается, если сертификат не хранится в токене PKCS # 11"
@@ -1620,16 +1682,16 @@ msgstr ""
 #: src/libnm-core-impl/nm-setting-adsl.c:179
 #: src/libnm-core-impl/nm-setting-cdma.c:147
 #: src/libnm-core-impl/nm-setting-cdma.c:157
-#: src/libnm-core-impl/nm-setting-connection.c:1263
-#: src/libnm-core-impl/nm-setting-connection.c:1306
-#: src/libnm-core-impl/nm-setting-connection.c:1558
-#: src/libnm-core-impl/nm-setting-gsm.c:396
-#: src/libnm-core-impl/nm-setting-gsm.c:411
-#: src/libnm-core-impl/nm-setting-gsm.c:454
-#: src/libnm-core-impl/nm-setting-gsm.c:463
-#: src/libnm-core-impl/nm-setting-ip-config.c:5526
-#: src/libnm-core-impl/nm-setting-ip4-config.c:284
-#: src/libnm-core-impl/nm-setting-ip4-config.c:296
+#: src/libnm-core-impl/nm-setting-connection.c:1434
+#: src/libnm-core-impl/nm-setting-connection.c:1477
+#: src/libnm-core-impl/nm-setting-connection.c:1729
+#: src/libnm-core-impl/nm-setting-gsm.c:542
+#: src/libnm-core-impl/nm-setting-gsm.c:557
+#: src/libnm-core-impl/nm-setting-gsm.c:600
+#: src/libnm-core-impl/nm-setting-gsm.c:609
+#: src/libnm-core-impl/nm-setting-ip-config.c:5622
+#: src/libnm-core-impl/nm-setting-ip4-config.c:307
+#: src/libnm-core-impl/nm-setting-ip4-config.c:319
 #: src/libnm-core-impl/nm-setting-pppoe.c:149
 #: src/libnm-core-impl/nm-setting-pppoe.c:159
 #: src/libnm-core-impl/nm-setting-vpn.c:553
@@ -1637,8 +1699,7 @@ msgstr ""
 #: src/libnm-core-impl/nm-setting-wimax.c:107
 #: src/libnm-core-impl/nm-setting-wireless-security.c:968
 #: src/libnm-core-impl/nm-setting-wireless-security.c:996
-#: src/libnm-core-impl/nm-setting.c:2624
-#, c-format
+#: src/libnm-core-impl/nm-setting.c:2626
 msgid "property is empty"
 msgstr "пустое свойство"
 
@@ -1660,8 +1721,8 @@ msgstr "может быть включено только в подключен
 #: src/libnm-core-impl/nm-setting-generic.c:84
 #: src/libnm-core-impl/nm-setting-infiniband.c:175
 #: src/libnm-core-impl/nm-setting-infiniband.c:187
-#: src/libnm-core-impl/nm-setting-ip4-config.c:232
-#: src/libnm-core-impl/nm-setting-ip4-config.c:248
+#: src/libnm-core-impl/nm-setting-ip4-config.c:254
+#: src/libnm-core-impl/nm-setting-ip4-config.c:271
 #: src/libnm-core-impl/nm-setting-ip6-config.c:343
 #: src/libnm-core-impl/nm-setting-ip6-config.c:359
 #: src/libnm-core-impl/nm-setting-olpc-mesh.c:135
@@ -1682,7 +1743,6 @@ msgstr "может быть включено только в подключен
 #: src/libnm-core-impl/nm-setting-wireless.c:1221
 #: src/libnm-core-impl/nm-setting-wpan.c:164
 #: src/libnm-core-impl/nm-utils.c:4559
-#, c-format
 msgid "property is invalid"
 msgstr "недействительное свойство"
 
@@ -1728,21 +1788,21 @@ msgstr "Для подключения '%s' требуется параметр '
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:306
 #: src/libnm-core-impl/nm-setting-ovs-port.c:411
 #: src/libnm-core-impl/nm-setting-team-port.c:321
-#, c-format
 msgid "missing setting"
 msgstr "отсутствует параметр"
 
 #: src/libnm-core-impl/nm-setting-bond-port.c:109
 #: src/libnm-core-impl/nm-setting-bridge-port.c:336
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:329
+#: src/libnm-core-impl/nm-setting-ovs-port.c:434
 #: src/libnm-core-impl/nm-setting-team-port.c:331
 #, c-format
 msgid ""
-"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"A connection with a '%s' setting must have the port-type set to '%s'. "
 "Instead it is '%s'"
 msgstr ""
-"Подключение с параметром '%s' должно иметь тип ведомости '%s'. Вместо этого "
-"установлен '%s'"
+"Для подключения с параметром «%s» тип порта должен быть настроен как «%s». "
+"Вместо этого указан «%s»."
 
 #: src/libnm-core-impl/nm-setting-bond.c:524
 #, c-format
@@ -1755,7 +1815,6 @@ msgid "'%s' is not a valid %s address for '%s' option"
 msgstr "«%s» не является действительным адресом %s для параметра «%s»"
 
 #: src/libnm-core-impl/nm-setting-bond.c:565
-#, c-format
 msgid "missing option name"
 msgstr "отсутствует имя параметра"
 
@@ -1888,111 +1947,166 @@ msgstr "параметр '%s' должен быть степенью числа
 msgid "bridge connection should have a ethernet setting as well"
 msgstr "для подключения типа мост требуются также и параметры ethernet"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1146
+#: src/libnm-core-impl/nm-setting-connection.c:1318
 #, c-format
 msgid "setting required for connection of type '%s'"
 msgstr "этот параметр обязателен для подключения с типом «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1177
+#: src/libnm-core-impl/nm-setting-connection.c:1349
 #, c-format
-msgid "Unknown slave type '%s'"
-msgstr "Неизвестный тип ведомого подключения: '%s'"
+msgid "Unknown port type '%s'"
+msgstr "Неизвестный тип порта: «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1192
+#: src/libnm-core-impl/nm-setting-connection.c:1364
 #, c-format
 msgid "Slave connections need a valid '%s' property"
 msgstr "Ведомые подключения должны иметь действительное свойство  «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1216
+#: src/libnm-core-impl/nm-setting-connection.c:1387
 #, c-format
 msgid "Cannot set '%s' without '%s'"
 msgstr "Нельзя настроить «%s» без «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1275
+#: src/libnm-core-impl/nm-setting-connection.c:1446
 #, c-format
 msgid "'%s' is not a valid UUID"
 msgstr "Недействительный UUID: «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1320
+#: src/libnm-core-impl/nm-setting-connection.c:1491
 #, c-format
 msgid "connection type '%s' is not valid"
 msgstr "недействительный тип подключения «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1426
+#: src/libnm-core-impl/nm-setting-connection.c:1597
 #, c-format
-msgid "'%s' connections must be enslaved to '%s', not '%s'"
-msgstr "подключения «%s» должны быть ведомыми для «%s», а не для «%s»"
+msgid "'%s' connections must be attached as port to '%s', not '%s'"
+msgstr ""
+"Подключения «%s» должна быть прикреплены в виде порта к «%s», а не к '%s'"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1441
+#: src/libnm-core-impl/nm-setting-connection.c:1612
 #, c-format
 msgid "metered value %d is not valid"
 msgstr "недействительное значение тарифного плана %d"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1455
-#: src/libnm-core-impl/nm-setting-connection.c:1469
-#: src/libnm-core-impl/nm-setting-connection.c:1483
-#: src/libnm-core-impl/nm-setting-connection.c:1544
+#: src/libnm-core-impl/nm-setting-connection.c:1626
+#: src/libnm-core-impl/nm-setting-connection.c:1640
+#: src/libnm-core-impl/nm-setting-connection.c:1654
+#: src/libnm-core-impl/nm-setting-connection.c:1715
 #, c-format
 msgid "value %d is not valid"
 msgstr "значение %d не является действительным"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1499
+#: src/libnm-core-impl/nm-setting-connection.c:1670
 msgid "\"disabled\" flag cannot be combined with other MPTCP flags"
 msgstr "флаг \"disabled\" нельзя сочетать с другими флагами MPTCP"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1513
+#: src/libnm-core-impl/nm-setting-connection.c:1684
 msgid "cannot set both \"signal\" and \"fullmesh\" MPTCP flags"
 msgstr ""
 "для MPTCP нельзя одновременно указывать и флаг \"signal\" и флаг \"fullmesh\""
 
-#: src/libnm-core-impl/nm-setting-connection.c:1525
+#: src/libnm-core-impl/nm-setting-connection.c:1696
 #, c-format
 msgid "value %u is not a valid combination of MPTCP flags"
 msgstr "значение %u не является действительным сочетанием флагов MPTCP"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1572
+#: src/libnm-core-impl/nm-setting-connection.c:1743
 msgid "DHCP option cannot be longer than 255 characters"
 msgstr "параметр DHCP не может превышать 255 символов"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1583
+#: src/libnm-core-impl/nm-setting-connection.c:1754
 msgid "MUD URL is not a valid URL"
 msgstr "MUD URL не является действительным URL"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1603
+#: src/libnm-core-impl/nm-setting-connection.c:1774
 msgid "invalid permissions not in format \"user:$UNAME[:]\""
 msgstr "недействительные полномочия, не в формате \"user:$UNAME[:]\""
 
-#: src/libnm-core-impl/nm-setting-connection.c:1632
+#: src/libnm-core-impl/nm-setting-connection.c:1790
+#: src/libnm-core-impl/nm-setting-connection.c:1807
+#, c-format
+msgid "can only be set if %s.%s is set"
+msgstr "может быть настроено только при настроенном %s.%s"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1821
+#, c-format
+msgid "is incompatible with '%s'"
+msgstr "несовместимо с «%s»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1846
+#, c-format
+msgid "contains IPv4 address '%s', %s.%s cannot be 'disabled'"
+msgstr "содержит адрес IPv4 «%s», %s.%s не может иметь значение «отключён»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1860
+#, c-format
+msgid "contains IPv4 address '%s', %s.%s cannot be 'true'"
+msgstr "содержит адрес IPv4 «%s», %s.%s не может иметь значение «истина»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1874
+#, c-format
+msgid "contains IPv4 address '%s', %s.%s must be set to 'false' explicitly"
+msgstr ""
+"содержит адрес IPv4 «%s», для %s.%s необходимо явно указать значение «ложно»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1899
+#, c-format
+msgid "contains IPv6 address '%s', %s.%s cannot be '%s'"
+msgstr "содержит адрес IPv6 «%s», %s.%s не может иметь значение «%s»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1914
+#, c-format
+msgid "contains IPv6 address '%s', %s.%s cannot be 'true'"
+msgstr "содержит адрес IPv6 «%s», %s.%s не может иметь значение «истина»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1928
+#, c-format
+msgid "contains IPv6 address '%s', %s.%s must be set to 'false' explicitly"
+msgstr ""
+"содержит адрес IPv6 «%s», для %s.%s необходимо явно указать значение «ложно»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1944
+#, c-format
+msgid "has an invalid IP address '%s'"
+msgstr "содержит недействительный адрес IP «%s»"
+
+#: src/libnm-core-impl/nm-setting-connection.c:1973
 #, c-format
 msgid "property type should be set to '%s'"
 msgstr "свойство должно иметь настроенный тип «%s»"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1650
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-connection.c:1991
+#, c-format
 msgid "port-type '%s' requires a '%s' setting in the connection"
-msgstr "для ведомого типа «%s» необходимо определить параметр «%s»"
+msgstr ""
+"для типа порта '%s' необходимо в параметрах подключения настроить параметр '%s"
+"'"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1661
+#: src/libnm-core-impl/nm-setting-connection.c:2002
 #, c-format
 msgid ""
-"Detect a slave connection with '%s' set and a port type '%s'. '%s' should be "
+"Detect a port connection with '%s' set and a port type '%s'. '%s' should be "
 "set to '%s'"
 msgstr ""
-"Обнаружение ведомого подключения с настроенным «%s» и типом порта «%s». «%s» "
-"должно иметь значение «%s»."
+"Обнаружить подключение порта с настроенным «%s» и типом порта «%s». "
+"«%s» должно иметь значение «%s»."
 
-#: src/libnm-core-impl/nm-setting-connection.c:1687
+#: src/libnm-core-impl/nm-setting-connection.c:2028
 #, c-format
-msgid "A slave connection with '%s' set to '%s' cannot have a '%s' setting"
+msgid "A port connection with '%s' set to '%s' cannot have a '%s' setting"
 msgstr ""
-"Ведомое подключение со значением '%s' для параметра '%s' не может иметь "
-"параметр '%s'"
+"Подключение порта со значением '%s' для параметра '%s' не может иметь параметр"
+" '%s'"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1704
+#: src/libnm-core-impl/nm-setting-connection.c:2045
 msgid "UUID needs normalization"
 msgstr "требуется нормализация UUID"
 
-#: src/libnm-core-impl/nm-setting-connection.c:1719
+#: src/libnm-core-impl/nm-setting-connection.c:2062
+msgid "has duplicate addresses"
+msgstr "имеются дублирующие адреса"
+
+#: src/libnm-core-impl/nm-setting-connection.c:2074
 msgid "read-only is deprecated and not settable for the user"
 msgstr ""
 "доступ только для чтения является устаревшим и не может быть настроен для "
@@ -2024,67 +2138,73 @@ msgstr "сумма не равна 100%"
 msgid "property invalid"
 msgstr "недействительное свойство"
 
-#: src/libnm-core-impl/nm-setting-ethtool.c:328
+#: src/libnm-core-impl/nm-setting-ethtool.c:345
 msgid "unsupported ethtool setting"
 msgstr "неподдерживаемый параметр ethtool"
 
-#: src/libnm-core-impl/nm-setting-ethtool.c:337
+#: src/libnm-core-impl/nm-setting-ethtool.c:354
 msgid "setting has invalid variant type"
 msgstr "параметр имеет недействительный тип варианта"
 
-#: src/libnm-core-impl/nm-setting-ethtool.c:349
+#: src/libnm-core-impl/nm-setting-ethtool.c:366
 msgid "coalesce option must be either 0 or 1"
 msgstr "параметр coalesce должен иметь значение либо 0 либо 1"
 
-#: src/libnm-core-impl/nm-setting-ethtool.c:366
+#: src/libnm-core-impl/nm-setting-ethtool.c:385
 msgid "pause-autoneg cannot be enabled when setting rx/tx options"
 msgstr ""
 "при настройке параметров rx/tx нельзя включать использование pause-autoneg"
 
-#: src/libnm-core-impl/nm-setting-ethtool.c:391
+#: src/libnm-core-impl/nm-setting-ethtool.c:410
+#: src/libnmc-setting/nm-meta-setting-desc.c:4608
+#, c-format
+msgid "'%s' is not valid FEC modes, valid modes are combinations of %s"
+msgstr ""
+"'%s' не являются действительными режимами FEC (коррекция ошибок "
+"переадресации), действительные режимы представляют собой сочетания %s"
+
+#: src/libnm-core-impl/nm-setting-ethtool.c:436
 #, c-format
 msgid "unknown ethtool option '%s'"
 msgstr "неизвестный параметр ethtool '%s'"
 
 #: src/libnm-core-impl/nm-setting-generic.c:109
-#, fuzzy, c-format
+#, c-format
 msgid "the property is required when %s.%s is set"
-msgstr "свойство не может быть настроено, если отключено «%s»"
+msgstr "параметр необходим, если настроен %s.%s"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:337
-#, c-format
+#: src/libnm-core-impl/nm-setting-gsm.c:483
 msgid "property value is empty"
 msgstr "пустое значение свойства"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:346
-#, c-format
+#: src/libnm-core-impl/nm-setting-gsm.c:492
 msgid "property value is too long (>64)"
 msgstr "слишком длинное значение свойства (>64)"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:378
+#: src/libnm-core-impl/nm-setting-gsm.c:524
 #, c-format
 msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
 msgstr "«%s» содержит недействительные символы. Используйте [A-Za-z._-]."
 
-#: src/libnm-core-impl/nm-setting-gsm.c:425
+#: src/libnm-core-impl/nm-setting-gsm.c:571
 #, c-format
 msgid "'%s' length is invalid (should be 5 or 6 digits)"
 msgstr "недействительная длина '%s' (нужно 5 или 6 цифр)"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:439
+#: src/libnm-core-impl/nm-setting-gsm.c:585
 #, c-format
 msgid "'%s' is not a number"
 msgstr "«%s» не является числом"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:476
+#: src/libnm-core-impl/nm-setting-gsm.c:622
 msgid "property is empty or wrong size"
 msgstr "свойство пустое или имеет неверный размер"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:489
+#: src/libnm-core-impl/nm-setting-gsm.c:635
 msgid "property must contain only digits"
 msgstr "свойство должно содержать только цифры"
 
-#: src/libnm-core-impl/nm-setting-gsm.c:503
+#: src/libnm-core-impl/nm-setting-gsm.c:649
 msgid "can't be enabled when manual configuration is present"
 msgstr "нельзя активировать при наличии ручной конфигурации"
 
@@ -2099,16 +2219,16 @@ msgstr "Недействительное имя интерфейса «%s»"
 msgid "Must specify a P_Key if specifying parent"
 msgstr "При указании родительского интерфейса необходимо указать P_Key"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:224
+#: src/libnm-core-impl/nm-setting-infiniband.c:225
 msgid "InfiniBand P_Key connection did not specify parent interface name"
 msgstr ""
 "Подключение InfiniBand P_Key не указывает имени родительского интерфейса"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:232
+#: src/libnm-core-impl/nm-setting-infiniband.c:233
 msgid "the values 0 and 0x8000 are not allowed"
 msgstr "значения 0 и 0x8000 не допускаются"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:260
+#: src/libnm-core-impl/nm-setting-infiniband.c:261
 #, c-format
 msgid ""
 "interface name of software infiniband device must be '%s' or unset (instead "
@@ -2117,7 +2237,7 @@ msgstr ""
 "именем интерфейса программного устройства infiniband должно быть '%s', либо "
 "оно не должно быть настроено (текущее имя: '%s')"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:268
+#: src/libnm-core-impl/nm-setting-infiniband.c:269
 #, c-format
 msgid ""
 "interface name of software infiniband device with MAC address must be unset "
@@ -2126,18 +2246,16 @@ msgstr ""
 "имя интерфейса устройства infiniband с адресом MAC не должно быть настроено "
 "(текущее имя: '%s')"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:294
+#: src/libnm-core-impl/nm-setting-infiniband.c:295
 #, c-format
 msgid "mtu can be at most %u but it is %u"
 msgstr "максимальное значение mtu может составлять %u, но указано значение %u"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:83
-#, c-format
 msgid "Missing IPv4 address"
 msgstr "Отсутствует адрес IPv4"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:83
-#, c-format
 msgid "Missing IPv6 address"
 msgstr "Отсутствует адрес IPv6"
 
@@ -2167,23 +2285,21 @@ msgid "Invalid routing metric '%s'"
 msgstr "Недействительная метрика маршрутизации: «%s»"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1339
-#: src/libnm-core-impl/nm-setting-sriov.c:410
+#: src/libnm-core-impl/nm-setting-sriov.c:412
 msgid "unknown attribute"
 msgstr "неизвестный атрибут"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1349
-#: src/libnm-core-impl/nm-setting-sriov.c:420
+#: src/libnm-core-impl/nm-setting-sriov.c:422
 #, c-format
 msgid "invalid attribute type '%s'"
 msgstr "недействительный тип атрибута '%s'"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1358
-#, c-format
 msgid "attribute is not valid for a IPv4 route"
 msgstr "атрибут недействителен для маршрута IPv4"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1359
-#, c-format
 msgid "attribute is not valid for a IPv6 route"
 msgstr "атрибут недействителен для маршрута IPv6"
 
@@ -2214,7 +2330,6 @@ msgid "route weight cannot be larger than 256"
 msgstr "вес маршрута не может превышать 256"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1531
-#, c-format
 msgid "route scope is invalid for local route"
 msgstr "недействительная область маршрута для локального маршрута"
 
@@ -2364,7 +2479,6 @@ msgid "invalid \"to\" part"
 msgstr "недействительная часть \"to\""
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3708
-#, c-format
 msgid "cannot detect address family for rule"
 msgstr "не удалось определить семейство адресов для правила"
 
@@ -2378,83 +2492,88 @@ msgstr "недействительное правило: %s"
 msgid "invalid address family"
 msgstr "недействительное семейство адресов"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5110
+#: src/libnm-core-impl/nm-setting-ip-config.c:5115
 #, c-format
 msgid "rule #%u is invalid: %s"
 msgstr "правило #%u является недействительным: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5547
+#: src/libnm-core-impl/nm-setting-ip-config.c:5639
 #, c-format
 msgid "%u. DNS server address is invalid"
 msgstr "%u. Недействительный адрес сервера DNS"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5567
+#: src/libnm-core-impl/nm-setting-ip-config.c:5659
 #, c-format
 msgid "%d. IP address is invalid"
 msgstr "%d. Недействительный адрес IP"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5582
+#: src/libnm-core-impl/nm-setting-ip-config.c:5674
 #, c-format
 msgid "%d. IP address has 'label' property with invalid type"
 msgstr "%d. Адрес IP содержит свойство «label» с недействительным типом"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5594
+#: src/libnm-core-impl/nm-setting-ip-config.c:5686
 #, c-format
 msgid "%d. IP address has invalid label '%s'"
 msgstr "%d. Адрес IP содержит недействительную метку '%s'"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5612
+#: src/libnm-core-impl/nm-setting-ip-config.c:5704
 msgid "gateway cannot be set if there are no addresses configured"
 msgstr "шлюз не может быть настроен, если не настроены адреса"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5624
+#: src/libnm-core-impl/nm-setting-ip-config.c:5716
 msgid "gateway is invalid"
 msgstr "недействительный шлюз"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5642
+#: src/libnm-core-impl/nm-setting-ip-config.c:5734
 #, c-format
 msgid "%d. route is invalid"
 msgstr "%d. Недействительный маршрут"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5655
+#: src/libnm-core-impl/nm-setting-ip-config.c:5747
 #, c-format
 msgid "invalid attribute: %s"
 msgstr "недействительный атрибут: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5675
+#: src/libnm-core-impl/nm-setting-ip-config.c:5767
 #, c-format
 msgid "%u. rule has wrong address-family"
 msgstr "%u. Неверное семейство адресов для правила"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5687
+#: src/libnm-core-impl/nm-setting-ip-config.c:5779
 #, c-format
 msgid "%u. rule is invalid: %s"
 msgstr "%u. Недействительное правило: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5703
+#: src/libnm-core-impl/nm-setting-ip-config.c:5795
 #, c-format
 msgid "'%s' is not a valid IAID"
 msgstr "'%s' не является действительным идентификатором IAID"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5717
+#: src/libnm-core-impl/nm-setting-ip-config.c:5809
 #, c-format
 msgid "the property cannot be set when '%s' is disabled"
 msgstr "свойство не может быть настроено, если отключено «%s»"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5743
+#: src/libnm-core-impl/nm-setting-ip-config.c:5835
 msgid "the property is currently supported only for DHCPv4"
 msgstr "на данный момент это свойство поддерживается только для DHCPv4"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5760
+#: src/libnm-core-impl/nm-setting-ip-config.c:5852
 #, c-format
 msgid "'%s' is not a valid IP or subnet"
 msgstr "'%s' не является действительным IP или подсетью"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5784
+#: src/libnm-core-impl/nm-setting-ip-config.c:5896
 #, c-format
 msgid "a gateway is incompatible with '%s'"
 msgstr "шлюз несовместим с «%s»"
 
+#: src/libnm-core-impl/nm-setting-ip-config.c:5910
+#, c-format
+msgid "the value is inconsistent with '%s'"
+msgstr "значение не согласуется с '%s'"
+
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:364
 #, c-format
 msgid "'%d' is not a valid tunnel mode"
@@ -2496,15 +2615,32 @@ msgstr "можно настроить только для туннелей VTI"
 msgid "wired setting not allowed for mode %s"
 msgstr "для режима %s проводная настройка не допускается"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:171
+#: src/libnm-core-impl/nm-setting-ipvlan.c:148
+#: src/libnm-core-impl/nm-setting-macsec.c:365
+#: src/libnm-core-impl/nm-setting-macvlan.c:154
+#: src/libnm-core-impl/nm-setting-vlan.c:654
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "свойство не указано, а также не указано «%s:%s»"
+
+#: src/libnm-core-impl/nm-setting-ipvlan.c:166
+#, c-format
+msgid "unsupported mode %u"
+msgstr "неподдерживаемый режим %u"
+
+#: src/libnm-core-impl/nm-setting-ipvlan.c:176
+msgid "private and VEPA cannot be enabled at the same time"
+msgstr "режимы private и VEPA нельзя включить одновременно"
+
+#: src/libnm-core-impl/nm-setting-ip4-config.c:193
 #: src/libnm-core-impl/nm-setting-ip6-config.c:278
 #, c-format
 msgid "method '%s' requires at least an address or a route"
-msgstr ""
+msgstr "для метода '%s' требуется хотя бы адрес или маршрут"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:186
-#: src/libnm-core-impl/nm-setting-ip4-config.c:200
-#: src/libnm-core-impl/nm-setting-ip4-config.c:216
+#: src/libnm-core-impl/nm-setting-ip4-config.c:208
+#: src/libnm-core-impl/nm-setting-ip4-config.c:222
+#: src/libnm-core-impl/nm-setting-ip4-config.c:238
 #: src/libnm-core-impl/nm-setting-ip6-config.c:297
 #: src/libnm-core-impl/nm-setting-ip6-config.c:311
 #: src/libnm-core-impl/nm-setting-ip6-config.c:325
@@ -2512,37 +2648,37 @@ msgstr ""
 msgid "this property is not allowed for '%s=%s'"
 msgstr "для «%s=%s» это свойство не допускается"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:260
+#: src/libnm-core-impl/nm-setting-ip4-config.c:283
 msgid "cannot enable ipv4.link-local with ipv4.method=disabled"
 msgstr ""
 "невозможно включить использование ipv4.link-local, если ipv4.method=disabled"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:272
+#: src/libnm-core-impl/nm-setting-ip4-config.c:295
 msgid "cannot disable ipv4.link-local with ipv4.method=link-local"
 msgstr ""
 "невозможно выключить использование ipv4.link-local, если ipv4.method=link-"
 "local"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:308
+#: src/libnm-core-impl/nm-setting-ip4-config.c:331
 #, c-format
 msgid "'%s' is not a valid FQDN"
 msgstr "«%s» не является действительным FQDN"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:321
+#: src/libnm-core-impl/nm-setting-ip4-config.c:344
 msgid "property cannot be set when dhcp-hostname is also set"
 msgstr ""
 "свойство не может быть настроено, если также настроено свойство dhcp-hostname"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:336
+#: src/libnm-core-impl/nm-setting-ip4-config.c:359
 msgid "FQDN flags requires a FQDN set"
 msgstr "для флагов FQDN требуется настроенный FQDN"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:355
+#: src/libnm-core-impl/nm-setting-ip4-config.c:378
 #, c-format
 msgid "multiple addresses are not allowed for '%s=%s'"
 msgstr "для «%s=%s» не допускается несколько адресов"
 
-#: src/libnm-core-impl/nm-setting-ip4-config.c:372
+#: src/libnm-core-impl/nm-setting-ip4-config.c:395
 msgid "property should be TRUE when method is set to disabled"
 msgstr ""
 "если использование метода отключено, то значением свойства должно быть ИСТИНА"
@@ -2565,13 +2701,25 @@ msgstr "должен быть действительным адресом IPv6 
 
 #: src/libnm-core-impl/nm-setting-ip6-config.c:435
 msgid "DHCP DSCP is not supported for IPv6"
+msgstr "DHCP DSCP не поддерживается для IPv6"
+
+#: src/libnm-core-impl/nm-setting-ip6-config.c:447
+msgid "Shared DHCP range is not supported for IPv6"
+msgstr ""
+"Диапазоны DHCP в методе разделяемых подключений не поддерживаются для IPv6"
+
+# This option allows you to specify a custom DHCP lease time for the shared connection method in seconds.
+# https://networkmanager.pages.freedesktop.org/NetworkManager/NetworkManager/nm-settings-nmcli.html
+#: src/libnm-core-impl/nm-setting-ip6-config.c:459
+msgid "Shared DHCP lease time is not supported for IPv6"
 msgstr ""
+"Время аренды DHCP в методе разделяемых подключений не поддерживается для IPv6"
 
-#: src/libnm-core-impl/nm-setting-ip6-config.c:449
+#: src/libnm-core-impl/nm-setting-ip6-config.c:473
 msgid "token is not in canonical form"
 msgstr "токен представлен не в канонической форме"
 
-#: src/libnm-core-impl/nm-setting-ip6-config.c:466
+#: src/libnm-core-impl/nm-setting-ip6-config.c:490
 msgid "property should be TRUE when method is set to ignore or disabled"
 msgstr ""
 "если метод игнорируется или отключён, то значением свойства должно быть "
@@ -2583,7 +2731,6 @@ msgid "ipv4 method \"%s\" is not supported for loopback"
 msgstr "метод ipv4 \"%s\" не поддерживается для loopback"
 
 #: src/libnm-core-impl/nm-setting-loopback.c:101
-#, c-format
 msgid "ipv4.link-local cannot be enabled for loopback"
 msgstr "использование ipv4.link-local нельзя включить для loopback"
 
@@ -2593,7 +2740,6 @@ msgid "ipv6 method \"%s\" is not supported for loopback"
 msgstr "метод ipv6 \"%s\" не поддерживается для loopback"
 
 #: src/libnm-core-impl/nm-setting-loopback.c:133
-#, c-format
 msgid "a loopback profile cannot be a port"
 msgstr "профиль loopback не может быть портом"
 
@@ -2614,13 +2760,6 @@ msgstr "ключ должен состоять из чётного числа с
 msgid "the key contains non-hexadecimal characters"
 msgstr "ключ содержит нешестнадцатеричные символы"
 
-#: src/libnm-core-impl/nm-setting-macsec.c:365
-#: src/libnm-core-impl/nm-setting-macvlan.c:154
-#: src/libnm-core-impl/nm-setting-vlan.c:654
-#, c-format
-msgid "property is not specified and neither is '%s:%s'"
-msgstr "свойство не указано, а также не указано «%s:%s»"
-
 #: src/libnm-core-impl/nm-setting-macsec.c:396
 #, c-format
 msgid "EAP key management requires '%s' setting presence"
@@ -2639,11 +2778,10 @@ msgid "non promiscuous operation is allowed only in passthru mode"
 msgstr ""
 "действия не в неразборчивом режиме допускаются только в сквозном режиме"
 
-#: src/libnm-core-impl/nm-setting-match.c:644
-#: src/libnm-core-impl/nm-setting-match.c:660
-#: src/libnm-core-impl/nm-setting-match.c:676
-#: src/libnm-core-impl/nm-setting-match.c:692
-#, c-format
+#: src/libnm-core-impl/nm-setting-match.c:645
+#: src/libnm-core-impl/nm-setting-match.c:661
+#: src/libnm-core-impl/nm-setting-match.c:677
+#: src/libnm-core-impl/nm-setting-match.c:693
 msgid "is empty"
 msgstr "пустой"
 
@@ -2660,17 +2798,16 @@ msgstr "недействительный канал «%d»"
 
 #: src/libnm-core-impl/nm-setting-ovs-bridge.c:160
 #, c-format
-msgid "A connection with a '%s' setting must not have a master."
-msgstr "Подключение с параметром «%s» не должно быть подчинённым."
+msgid "A connection with a '%s' setting must not have a controller."
+msgstr "У подключения с параметром «%s» не должно быть контроллера."
 
 #: src/libnm-core-impl/nm-setting-ovs-bridge.c:174
 #, c-format
 msgid "'%s' is not allowed in fail_mode"
 msgstr "«%s» не допускается в fail_mode"
 
-#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:124
-#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:136
-#, c-format
+#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:145
+#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:157
 msgid "must be a power of two"
 msgstr "должен быть степенью числа два"
 
@@ -2746,25 +2883,21 @@ msgid ""
 msgstr ""
 "Подключение с параметром «%s» должно иметь тип интерфейса «%s», а не «%s»"
 
-# https://manpages.ubuntu.com/manpages/noble/man5/nm-settings.5.html
-# ??
-# ЮДр.
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:239
 #, c-format
 msgid "A connection with ovs-interface.type '%s' setting a 'ovs-patch' setting"
 msgstr "Подключение с ovs-interface.type '%s' настраивает параметр 'ovs-patch'"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:267
-#, c-format
 msgid "Missing ovs interface setting"
 msgstr "Отсутствует параметр интерфейса ovs"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:273
-#, c-format
 msgid "Missing ovs interface type"
 msgstr "Отсутствует тип интерфейса ovs"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:315
+#: src/libnm-core-impl/nm-setting-ovs-port.c:420
 #, c-format
 msgid "A connection with a '%s' setting must have a controller."
 msgstr "У подключения с параметром «%s» должен быть контроллер."
@@ -2783,20 +2916,6 @@ msgstr "дублирующая VLAN %u"
 msgid "VLANs %u and %u are not sorted in ascending order"
 msgstr "VLAN %u и %u не отсортированы в порядке по возрастанию"
 
-#: src/libnm-core-impl/nm-setting-ovs-port.c:420
-#, c-format
-msgid "A connection with a '%s' setting must have a master."
-msgstr "Подключение с параметром «%s» должно быть подчинённым."
-
-#: src/libnm-core-impl/nm-setting-ovs-port.c:434
-#, fuzzy, c-format
-msgid ""
-"A connection with a '%s' setting must have the port-type set to '%s'. "
-"Instead it is '%s'"
-msgstr ""
-"Подключение с параметром '%s' должно иметь тип ведомости '%s'. Вместо этого "
-"установлен '%s'"
-
 #: src/libnm-core-impl/nm-setting-ovs-port.c:457
 #, c-format
 msgid "'%s' is not allowed in vlan_mode"
@@ -2829,60 +2948,55 @@ msgstr ""
 "чтобы настроить это свойство необходимо ненулевое значение свойства '%s'"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:137
-#, c-format
 msgid "invalid proxy method"
 msgstr "недействительный прокси-метод"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:147
 #: src/libnm-core-impl/nm-setting-proxy.c:159
-#, c-format
 msgid "this property is not allowed for method none"
 msgstr "это свойство не допускается для метода none"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:173
-#, c-format
 msgid "the script is too large"
 msgstr "слишком длинный сценарий"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:184
-#, c-format
 msgid "the script is not valid utf8"
 msgstr "кодировка сценария не является действительной utf8"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:195
-#, c-format
 msgid "the script lacks FindProxyForURL function"
 msgstr "в сценарии отсутствует функция FindProxyForURL"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:432
+#: src/libnm-core-impl/nm-setting-sriov.c:434
 #: src/libnm-core-impl/nm-setting-wired.c:993
 #: src/libnm-core-impl/nm-setting-wired.c:1010
 #: src/libnm-core-impl/nm-setting-wired.c:1085
 #: src/libnm-core-impl/nm-setting-wired.c:1144
 #: src/libnm-core-impl/nm-setting-wireless.c:1257
 #: src/libnm-core-impl/nm-setting-wireless.c:1277
-#: src/libnmc-setting/nm-meta-setting-desc.c:4258
+#: src/libnmc-setting/nm-meta-setting-desc.c:4315
 #, c-format
 msgid "'%s' is not a valid MAC address"
 msgstr "Недействительный адрес MAC: «%s»"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1103
+#: src/libnm-core-impl/nm-setting-sriov.c:1121
 #, c-format
 msgid "VF with index %u, but the total number of VFs is %u"
 msgstr ""
 "Вирт. функция имеет индекс %u, но общее количество вирт. функций равно %u"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1117
+#: src/libnm-core-impl/nm-setting-sriov.c:1135
 #, c-format
 msgid "invalid VF %u: %s"
 msgstr "недействительная вирт. функция %u: %s"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1131
+#: src/libnm-core-impl/nm-setting-sriov.c:1149
 #, c-format
 msgid "duplicate VF index %u"
 msgstr "дублирующий индекс вирт. функции %u"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1155
+#: src/libnm-core-impl/nm-setting-sriov.c:1173
 #, c-format
 msgid "VFs %d and %d are not sorted by ascending index"
 msgstr "вирт. функции %d и %d не отсортированы по возрастанию индекса"
@@ -2890,7 +3004,6 @@ msgstr "вирт. функции %d и %d не отсортированы по 
 #: src/libnm-core-impl/nm-setting-tc-config.c:54
 #: src/libnm-core-impl/nm-setting-tc-config.c:420
 #: src/libnm-core-impl/nm-setting-tc-config.c:697
-#, c-format
 msgid "kind is missing"
 msgstr "отсутствует вид"
 
@@ -2923,7 +3036,6 @@ msgid "%s is out of range [0, %d]"
 msgstr "%s находится за пределами диапазона [0, %d]"
 
 #: src/libnm-core-impl/nm-setting-team.c:166
-#, c-format
 msgid "Missing target-host in nsna_ping link watcher"
 msgstr "В наблюдателе за каналами nsna_ping отсутствует target-host"
 
@@ -3010,7 +3122,7 @@ msgid "setting contained a secret with an empty name"
 msgstr "параметр содержал секрет с пустым именем"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:694
-#: src/libnm-core-impl/nm-setting.c:3577
+#: src/libnm-core-impl/nm-setting.c:3579
 msgid "not a secret property"
 msgstr "не является свойством секрета"
 
@@ -3020,7 +3132,6 @@ msgstr "неверный тип секрета"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:789
 #: src/libnm-core-impl/nm-setting-vpn.c:840
-#, c-format
 msgid "secret name cannot be empty"
 msgstr "имя секрета не может быть пустым"
 
@@ -3189,7 +3300,6 @@ msgstr ""
 "'wpa-psk', 'sae', 'wpa-eap' или 'wpa-eap-suite-b-192'"
 
 #: src/libnm-core-impl/nm-setting-wireless-security.c:1127
-#, c-format
 msgid ""
 "pmf can only be 'default' or 'required' when using 'owe', 'sae' or 'wpa-eap-"
 "suite-b-192' key management"
@@ -3218,8 +3328,7 @@ msgid "'%s' requires '%s' and '%s' property"
 msgstr "для «%s» требуются свойства «%s» и «%s»"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1295
-#: src/libnm-core-impl/nm-team-utils.c:2251
-#, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2254
 msgid "invalid value"
 msgstr "недействительное значение"
 
@@ -3238,26 +3347,23 @@ msgstr ""
 "Изолирование точки доступа можно настроить только в режиме точки доступа"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1345
-#, fuzzy
 msgid "a specific channel width can be set only in AP mode"
-msgstr ""
-"Изолирование точки доступа можно настроить только в режиме точки доступа"
+msgstr "ширину канала можно настроить только в режиме точки доступа"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1357
 msgid "a specific channel width can be set only together with a fixed channel"
 msgstr ""
+"ширину канала можно настроить только вместе с настройкой фиксированного канала"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1370
 msgid "80MHz channels are only supported in the 5GHz band"
-msgstr ""
+msgstr "Каналы с частотой 80МГц поддерживаются только в диапазоне 5ГГЦ"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1389
-#, c-format
 msgid "conflicting value of mac-address-randomization and cloned-mac-address"
 msgstr "значения mac-address-randomization и cloned-mac-address конфликтуют"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1401
-#, c-format
 msgid "property is deprecated and not implemented"
 msgstr "свойство устарело и не реализовано"
 
@@ -3275,123 +3381,114 @@ msgstr "страница должна находиться между %d и %d"
 msgid "channel must not be between %d and %d"
 msgstr "значение канала не должно быть между %d и %d"
 
-#: src/libnm-core-impl/nm-setting.c:1772 src/libnm-core-impl/nm-setting.c:1812
-#: src/libnm-core-impl/nm-setting.c:2123
+#: src/libnm-core-impl/nm-setting.c:1774 src/libnm-core-impl/nm-setting.c:1814
+#: src/libnm-core-impl/nm-setting.c:2125
 #, c-format
 msgid "can't set property of type '%s' from value of type '%s'"
 msgstr ""
 "свойство с типом «%s» не может быть настроено на базе значения с типом «%s»"
 
-#: src/libnm-core-impl/nm-setting.c:1788
+#: src/libnm-core-impl/nm-setting.c:1790
 #, c-format
 msgid "value of type '%s' is invalid or out of range for property '%s'"
 msgstr ""
 "значение с типом '%s' для свойства '%s' является недействительным или "
 "находится вне диапазона"
 
-#: src/libnm-core-impl/nm-setting.c:1833
+#: src/libnm-core-impl/nm-setting.c:1835
 #, c-format
 msgid "can not set property: %s"
 msgstr "невозможно настроить свойство: %s"
 
-#: src/libnm-core-impl/nm-setting.c:2062
-#, c-format
+#: src/libnm-core-impl/nm-setting.c:2064
 msgid "duplicate property"
 msgstr "дублирующее свойство"
 
-#: src/libnm-core-impl/nm-setting.c:2082
-#, c-format
+#: src/libnm-core-impl/nm-setting.c:2084
 msgid "unknown property"
 msgstr "неизвестное свойство"
 
-#: src/libnm-core-impl/nm-setting.c:2156 src/libnm-core-impl/nm-setting.c:2238
+#: src/libnm-core-impl/nm-setting.c:2158 src/libnm-core-impl/nm-setting.c:2240
 #, c-format
 msgid "failed to set property: %s"
 msgstr "не удалось настроить свойство: %s"
 
-#: src/libnm-core-impl/nm-setting.c:2513
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting.c:2515
+#, c-format
 msgid "invalid value %d, expected %d-%d"
-msgstr "недействительное значение «%s» по местоположению %s:%zu"
+msgstr "недействительное значение %d, ожидалось %d-%d"
 
-#: src/libnm-core-impl/nm-setting.c:2537
-#, fuzzy
+#: src/libnm-core-impl/nm-setting.c:2539
 msgid "cannot be empty"
-msgstr "имя секрета не может быть пустым"
+msgstr "не может быть пустым"
 
-#: src/libnm-core-impl/nm-setting.c:3474
+#: src/libnm-core-impl/nm-setting.c:3476
 msgid "secret not found"
 msgstr "секрет не найден"
 
-#: src/libnm-core-impl/nm-team-utils.c:1530
-#: src/libnm-core-impl/nm-team-utils.c:1547
+#: src/libnm-core-impl/nm-team-utils.c:1532
+#: src/libnm-core-impl/nm-team-utils.c:1549
 #, c-format
 msgid "invalid D-Bus property \"%s\""
 msgstr "недействительное свойство D-Bus «%s»"
 
-#: src/libnm-core-impl/nm-team-utils.c:1559
+#: src/libnm-core-impl/nm-team-utils.c:1561
 #, c-format
 msgid "duplicate D-Bus property \"%s\""
 msgstr "дублирующее свойство D-Bus «%s»"
 
-#: src/libnm-core-impl/nm-team-utils.c:1579
+#: src/libnm-core-impl/nm-team-utils.c:1581
 #, c-format
 msgid "invalid D-Bus property \"%s\" for \"%s\""
 msgstr "недействительное свойство D-Bus «%s» для «%s»"
 
-#: src/libnm-core-impl/nm-team-utils.c:1651
+#: src/libnm-core-impl/nm-team-utils.c:1653
 #, c-format
 msgid "unknown link-watcher name \"%s\""
 msgstr "неизвестное имя наблюдателя за каналами «%s»"
 
-#: src/libnm-core-impl/nm-team-utils.c:2238
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2241
 msgid "value out of range"
 msgstr "значение вне диапазона"
 
-#: src/libnm-core-impl/nm-team-utils.c:2270
-#, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2274
 msgid "invalid runner-tx-hash"
 msgstr "недействительный runner-tx-hash"
 
-#: src/libnm-core-impl/nm-team-utils.c:2298
+#: src/libnm-core-impl/nm-team-utils.c:2302
 #, c-format
 msgid "%s is only allowed for runner %s"
 msgstr "%s допускается только для модуля runner %s"
 
-#: src/libnm-core-impl/nm-team-utils.c:2308
+#: src/libnm-core-impl/nm-team-utils.c:2312
 #, c-format
 msgid "%s is only allowed for runners %s"
 msgstr "%s допускается только для модулей runner %s"
 
-#: src/libnm-core-impl/nm-team-utils.c:2329
-#, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2333
 msgid "cannot set parameters for lacp and activebackup runners together"
 msgstr ""
 "параметры для модулей runner lacp и activebackup нельзя настраивать "
 "одновременно"
 
-#: src/libnm-core-impl/nm-team-utils.c:2343
-#, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2347
 msgid "missing link watcher"
 msgstr "отсутствует наблюдатель за каналами"
 
-#: src/libnm-core-impl/nm-team-utils.c:2369
-#, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2373
 msgid "team config exceeds size limit"
 msgstr "файл конфигурации team превышает ограничение по размеру"
 
-#: src/libnm-core-impl/nm-team-utils.c:2380
-#, c-format
+#: src/libnm-core-impl/nm-team-utils.c:2384
 msgid "team config is not valid UTF-8"
 msgstr "файл конфигурации team не является действительным UTF-8"
 
-#: src/libnm-core-impl/nm-team-utils.c:2555
+#: src/libnm-core-impl/nm-team-utils.c:2559
 #, c-format
 msgid "invalid D-Bus type \"%s\""
 msgstr "недействительный тип D-Bus «%s»"
 
-#: src/libnm-core-impl/nm-team-utils.c:2594
+#: src/libnm-core-impl/nm-team-utils.c:2598
 #, c-format
 msgid "invalid link-watchers: %s"
 msgstr "недействительный наблюдатель за каналами: %s"
@@ -3721,33 +3818,30 @@ msgstr "невозможно загрузить модуль «%s»: %s"
 msgid "failed to load nm_vpn_editor_plugin_factory() from %s (%s)"
 msgstr "не удалось загрузить nm_vpn_editor_plugin_factory() из %s (%s)"
 
-#: src/libnm-core-impl/nm-vpn-editor-plugin.c:321
+#: src/libnm-core-impl/nm-vpn-editor-plugin.c:324
 #, c-format
 msgid "unknown error initializing plugin %s"
 msgstr "неизвестная ошибка при инициализации модуля %s"
 
-#: src/libnm-core-impl/nm-vpn-editor-plugin.c:341
+#: src/libnm-core-impl/nm-vpn-editor-plugin.c:344
 #, c-format
 msgid "cannot load VPN plugin in '%s': missing plugin name"
 msgstr "невозможно загрузить модуль VPN в «%s»: отсутствует имя модуля"
 
-#: src/libnm-core-impl/nm-vpn-editor-plugin.c:349
+#: src/libnm-core-impl/nm-vpn-editor-plugin.c:352
 #, c-format
 msgid "cannot load VPN plugin in '%s': invalid service name"
 msgstr "невозможно загрузить модуль VPN в «%s»: недействительное имя службы"
 
-#: src/libnm-core-impl/nm-vpn-editor-plugin.c:493
-#, c-format
+#: src/libnm-core-impl/nm-vpn-editor-plugin.c:496
 msgid "the plugin does not support import capability"
 msgstr "модуль не поддерживает возможность импорта"
 
-#: src/libnm-core-impl/nm-vpn-editor-plugin.c:517
-#, c-format
+#: src/libnm-core-impl/nm-vpn-editor-plugin.c:520
 msgid "the plugin does not support export capability"
 msgstr "модуль не поддерживает возможность экспорта"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:109
-#, c-format
 msgid "missing filename"
 msgstr "отсутствует имя файла"
 
@@ -3773,7 +3867,6 @@ msgid "there exists a conflicting plugin with the same name (%s)"
 msgstr "существует конфликтующий модуль с таким же именем (%s)"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:1050
-#, c-format
 msgid "missing \"plugin\" setting"
 msgstr "отсутствует параметр «plugin»"
 
@@ -3801,7 +3894,6 @@ msgid "Failed to initialize the crypto engine."
 msgstr "Не удалось инициализировать криптографический механизм."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:91 src/libnm-crypto/nm-crypto-nss.c:118
-#, c-format
 msgid "Unsupported key cipher for decryption"
 msgstr "Неподдерживаемый шифр ключа для расшифровки"
 
@@ -3821,18 +3913,15 @@ msgid "Failed to decrypt the private key: %s (%s)"
 msgstr "Не удалось расшифровать закрытый ключ: %s (%s)"
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:147 src/libnm-crypto/nm-crypto-nss.c:221
-#, c-format
 msgid "Failed to decrypt the private key: unexpected padding length."
 msgstr ""
 "Не удалось расшифровать закрытый ключ: непредвиденная длина заполнения."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:159 src/libnm-crypto/nm-crypto-nss.c:233
-#, c-format
 msgid "Failed to decrypt the private key."
 msgstr "Не удалось расшифровать закрытый ключ."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:193 src/libnm-crypto/nm-crypto-nss.c:288
-#, c-format
 msgid "Unsupported key cipher for encryption"
 msgstr "Неподдерживаемый ключ шифрования"
 
@@ -3887,22 +3976,18 @@ msgid "Failed to initialize the crypto engine: %d."
 msgstr "Не удалось инициализировать криптографический механизм: %d."
 
 #: src/libnm-crypto/nm-crypto-nss.c:139
-#, c-format
 msgid "Failed to initialize the decryption cipher slot."
 msgstr "Не удалось инициализировать слот ключа расшифровки."
 
 #: src/libnm-crypto/nm-crypto-nss.c:150
-#, c-format
 msgid "Failed to set symmetric key for decryption."
 msgstr "Не удалось задать симметричный ключ расшифровки."
 
 #: src/libnm-crypto/nm-crypto-nss.c:161
-#, c-format
 msgid "Failed to set IV for decryption."
 msgstr "Не удалось задать вектор инициализации для расшифровки."
 
 #: src/libnm-crypto/nm-crypto-nss.c:170
-#, c-format
 msgid "Failed to initialize the decryption context."
 msgstr "Не удалось инициализировать контекст расшифровки."
 
@@ -3912,7 +3997,6 @@ msgid "Failed to decrypt the private key: %d."
 msgstr "Не удалось расшифровать закрытый ключ: %d."
 
 #: src/libnm-crypto/nm-crypto-nss.c:196
-#, c-format
 msgid "Failed to decrypt the private key: decrypted data too large."
 msgstr ""
 "Не удалось расшифровать закрытый ключ: слишком большой объем данных для "
@@ -3924,22 +4008,18 @@ msgid "Failed to finalize decryption of the private key: %d."
 msgstr "Не удалось завершить расшифровку закрытого ключа: %d."
 
 #: src/libnm-crypto/nm-crypto-nss.c:300
-#, c-format
 msgid "Failed to initialize the encryption cipher slot."
 msgstr "Не удалось инициализировать слот ключа шифрования."
 
 #: src/libnm-crypto/nm-crypto-nss.c:309
-#, c-format
 msgid "Failed to set symmetric key for encryption."
 msgstr "Не удалось задать симметричный ключ для шифрования."
 
 #: src/libnm-crypto/nm-crypto-nss.c:318
-#, c-format
 msgid "Failed to set IV for encryption."
 msgstr "Не удалось задать вектор инициализации для шифрования."
 
 #: src/libnm-crypto/nm-crypto-nss.c:327
-#, c-format
 msgid "Failed to initialize the encryption context."
 msgstr "Не удалось инициализировать контекст шифрования."
 
@@ -3949,7 +4029,6 @@ msgid "Failed to encrypt: %d."
 msgstr "Не удалось зашифровать: %d."
 
 #: src/libnm-crypto/nm-crypto-nss.c:361
-#, c-format
 msgid "Unexpected amount of data after encrypting."
 msgstr "Непредвиденный объём данных после шифрования."
 
@@ -3959,12 +4038,10 @@ msgid "Couldn't decode certificate: %d"
 msgstr "Не удалось расшифровать сертификат: %d"
 
 #: src/libnm-crypto/nm-crypto-nss.c:443
-#, c-format
 msgid "Password must be UTF-8"
 msgstr "Пароль должен быть в кодировке UTF-8"
 
 #: src/libnm-crypto/nm-crypto-nss.c:474
-#, c-format
 msgid "Couldn't initialize slot"
 msgstr "Не удалось инициализировать слот"
 
@@ -3991,12 +4068,10 @@ msgstr "Не удалось создать случайные данные"
 #: src/libnm-crypto/nm-crypto-null.c:57 src/libnm-crypto/nm-crypto-null.c:67
 #: src/libnm-crypto/nm-crypto-null.c:77 src/libnm-crypto/nm-crypto-null.c:91
 #: src/libnm-crypto/nm-crypto-null.c:101
-#, c-format
 msgid "Compiled without crypto support."
 msgstr "Скомпилировано без поддержки шифрования."
 
 #: src/libnm-crypto/nm-crypto.c:215
-#, c-format
 msgid "PEM key file had no start tag"
 msgstr "Файл ключа PEM не содержал начального тега"
 
@@ -4006,7 +4081,6 @@ msgid "PEM key file had no end tag '%s'."
 msgstr "Файл ключа PEM не содержал завершающего тега «%s»."
 
 #: src/libnm-crypto/nm-crypto.c:252
-#, c-format
 msgid "Malformed PEM file: Proc-Type was not first tag."
 msgstr "Неправильный формат файла PEM: Proc-Type не был первым тегом."
 
@@ -4016,19 +4090,16 @@ msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
 msgstr "Неправильный формат файла PEM: неизвестный тег Proc-Type «%s»."
 
 #: src/libnm-crypto/nm-crypto.c:274
-#, c-format
 msgid "Malformed PEM file: DEK-Info was not the second tag."
 msgstr "Неправильный формат файла PEM: DEK-Info не был вторым тегом."
 
 #: src/libnm-crypto/nm-crypto.c:286
-#, c-format
 msgid "Malformed PEM file: no IV found in DEK-Info tag."
 msgstr ""
 "Неправильный формат файла PEM: в теге DEK-Info не найден вектор "
 "инициализации."
 
 #: src/libnm-crypto/nm-crypto.c:295
-#, c-format
 msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
 msgstr ""
 "Неправильный формат файла PEM: недействительный формат вектора инициализации "
@@ -4040,7 +4111,6 @@ msgid "Malformed PEM file: unknown private key cipher '%s'."
 msgstr "Неправильный формат файла PEM: неизвестный шифр закрытого ключа «%s»."
 
 #: src/libnm-crypto/nm-crypto.c:330
-#, c-format
 msgid "Could not decode private key."
 msgstr "Не удалось расшифровать закрытый ключ."
 
@@ -4067,27 +4137,22 @@ msgid "Failed to find expected TSS end tag '%s'."
 msgstr "Не удалось найти ожидаемый завершающий тег TSS '%s'."
 
 #: src/libnm-crypto/nm-crypto.c:459
-#, c-format
 msgid "IV must be an even number of bytes in length."
 msgstr "Длина вектора инициализации должна иметь чётное число байтов."
 
 #: src/libnm-crypto/nm-crypto.c:476
-#, c-format
 msgid "IV contains non-hexadecimal digits."
 msgstr "Вектор инициализации содержит не шестнадцатеричные цифры."
 
 #: src/libnm-crypto/nm-crypto.c:552
-#, c-format
 msgid "IV must contain at least 8 characters"
 msgstr "Вектор инициализации должен содержать минимум 8 символов"
 
 #: src/libnm-crypto/nm-crypto.c:602
-#, c-format
 msgid "Unable to determine private key type."
 msgstr "Не удалось определить тип закрытого ключа."
 
 #: src/libnm-crypto/nm-crypto.c:615
-#, c-format
 msgid "Password provided, but key was not encrypted."
 msgstr "Пароль предоставлен, но ключ не был зашифрован."
 
@@ -4102,22 +4167,18 @@ msgid "PEM certificate had no end tag '%s'."
 msgstr "Сертификат PEM не имеет завершающего тега «%s»."
 
 #: src/libnm-crypto/nm-crypto.c:694
-#, c-format
 msgid "Failed to decode certificate."
 msgstr "Не удалось расшифровать сертификат."
 
 #: src/libnm-crypto/nm-crypto.c:723 src/libnm-crypto/nm-crypto.c:774
-#, c-format
 msgid "Certificate file is empty"
 msgstr "Пустой файл сертификата"
 
 #: src/libnm-crypto/nm-crypto.c:756
-#, c-format
 msgid "Failed to recognize certificate"
 msgstr "Не удалось распознать сертификат"
 
 #: src/libnm-crypto/nm-crypto.c:861
-#, c-format
 msgid "not a valid private key"
 msgstr "недействительный закрытый ключ"
 
@@ -4126,17 +4187,17 @@ msgstr "недействительный закрытый ключ"
 msgid "Method returned type '%s', but expected '%s'"
 msgstr "Метод вернул тип «%s», но ожидался «%s»"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:2439
+#: src/libnm-glib-aux/nm-shared-utils.c:2450
 #, c-format
 msgid "object class '%s' has no property named '%s'"
 msgstr "класс объекта «%s» не содержит свойства с именем «%s»"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:2448
+#: src/libnm-glib-aux/nm-shared-utils.c:2459
 #, c-format
 msgid "property '%s' of object class '%s' is not writable"
 msgstr "свойство «%s» класса объекта «%s» недоступно для записи"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:2457
+#: src/libnm-glib-aux/nm-shared-utils.c:2468
 #, c-format
 msgid ""
 "construct property \"%s\" for object '%s' can't be set after construction"
@@ -4144,20 +4205,20 @@ msgstr ""
 "свойство конструкции \"%s\" объекта '%s' не может быть установлено после "
 "создания конструкции"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:2468
+#: src/libnm-glib-aux/nm-shared-utils.c:2479
 #, c-format
 msgid "'%s::%s' is not a valid property name; '%s' is not a GObject subtype"
 msgstr ""
 "'%s::%s' не является действительным именем свойства; '%s' не является "
 "подтипом GObject"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:2481
+#: src/libnm-glib-aux/nm-shared-utils.c:2492
 #, c-format
 msgid "unable to set property '%s' of type '%s' from value of type '%s'"
 msgstr ""
 "невозможно настроить свойство '%s' с типом '%s' на базе значения с типом '%s'"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:2493
+#: src/libnm-glib-aux/nm-shared-utils.c:2504
 #, c-format
 msgid ""
 "value \"%s\" of type '%s' is invalid or out of range for property '%s' of "
@@ -4166,48 +4227,48 @@ msgstr ""
 "значение \"%s\" с типом '%s' для свойства '%s' с типом '%s' не является "
 "действительным, или выходит за пределы диапазона"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5516
+#: src/libnm-glib-aux/nm-shared-utils.c:5581
 msgid "interface name is missing"
 msgstr "отсутствует имя интерфейса"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5524
+#: src/libnm-glib-aux/nm-shared-utils.c:5589
 msgid "interface name is too short"
 msgstr "слишком короткое имя интерфейса"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5532
+#: src/libnm-glib-aux/nm-shared-utils.c:5597
 msgid "interface name is reserved"
 msgstr "имя интерфейса зарезервировано"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5545
+#: src/libnm-glib-aux/nm-shared-utils.c:5610
 msgid "interface name contains an invalid character"
 msgstr "имя интерфейса содержит недействительный символ"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5553
+#: src/libnm-glib-aux/nm-shared-utils.c:5618
 msgid "interface name is longer than 15 characters"
 msgstr "имя интерфейса длиннее 15 символов"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5578
+#: src/libnm-glib-aux/nm-shared-utils.c:5643
 #, c-format
 msgid "'%%' is not allowed in interface names"
 msgstr "'%%' не допускается в именах интерфейсов"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5590
+#: src/libnm-glib-aux/nm-shared-utils.c:5655
 #, c-format
 msgid "'%s' is not allowed as interface name"
 msgstr "'%s' не допускается в качестве имени интерфейса"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5612
+#: src/libnm-glib-aux/nm-shared-utils.c:5677
 msgid ""
 "interface name must be alphanumerical with no forward or backward slashes"
 msgstr ""
 "имя интерфейса должно состоять из букв и цифр без обратных или прямых косых "
 "черт"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5629
+#: src/libnm-glib-aux/nm-shared-utils.c:5694
 msgid "interface name must not be empty"
 msgstr "имя интерфейса не должно быть пустым"
 
-#: src/libnm-glib-aux/nm-shared-utils.c:5637
+#: src/libnm-glib-aux/nm-shared-utils.c:5702
 msgid "interface name must be UTF-8 encoded"
 msgstr "имя интерфейса должно быть в кодировке UTF-8"
 
@@ -4249,18 +4310,18 @@ msgstr "«%s» является неоднозначным: %s"
 msgid "missing name, try one of [%s]"
 msgstr "отсутствует имя, попробуйте что-то из [%s]"
 
-#: src/libnmc-base/nm-client-utils.c:248 src/nmcli/connections.c:3771
-#: src/nmcli/connections.c:3829
+#: src/libnmc-base/nm-client-utils.c:248 src/nmcli/connections.c:3782
+#: src/nmcli/connections.c:3848
 #, c-format
 msgid "'%s' not among [%s]"
 msgstr "«%s» не входит в [%s]"
 
 #: src/libnmc-base/nm-client-utils.c:291 src/libnmc-base/nm-client-utils.c:305
 #: src/libnmc-base/nm-client-utils.c:341 src/libnmc-base/nm-client-utils.c:346
-#: src/libnmc-setting/nm-meta-setting-desc.c:1817
-#: src/libnmc-setting/nm-meta-setting-desc.c:1848
-#: src/libnmc-setting/nm-meta-setting-desc.c:2857
-#: src/libnmc-setting/nm-meta-setting-desc.c:2915 src/nmcli/common.c:1611
+#: src/libnmc-setting/nm-meta-setting-desc.c:1830
+#: src/libnmc-setting/nm-meta-setting-desc.c:1861
+#: src/libnmc-setting/nm-meta-setting-desc.c:2870
+#: src/libnmc-setting/nm-meta-setting-desc.c:2928 src/nmcli/common.c:1611
 #: src/nmcli/connections.c:79 src/nmcli/connections.c:89
 #: src/nmcli/devices.c:485 src/nmcli/devices.c:592 src/nmcli/devices.c:598
 #: src/nmcli/devices.c:604 src/nmcli/general.c:30 src/nmcli/general.c:85
@@ -4332,8 +4393,8 @@ msgstr "деактивация (внешняя)"
 
 #: src/libnmc-base/nm-client-utils.c:342
 #: src/libnmc-setting/nm-meta-setting-desc.c:875
-#: src/libnmc-setting/nm-meta-setting-desc.c:2849 src/nmcli/connections.c:5576
-#: src/nmcli/connections.c:7554 src/nmcli/connections.c:7555
+#: src/libnmc-setting/nm-meta-setting-desc.c:2862 src/nmcli/connections.c:5751
+#: src/nmcli/connections.c:7759 src/nmcli/connections.c:7760
 #: src/nmcli/devices.c:591 src/nmcli/devices.c:597 src/nmcli/devices.c:603
 #: src/nmcli/devices.c:1427 src/nmcli/general.c:92 src/nmcli/utils.h:317
 msgid "yes"
@@ -4341,8 +4402,8 @@ msgstr "да"
 
 #: src/libnmc-base/nm-client-utils.c:343
 #: src/libnmc-setting/nm-meta-setting-desc.c:875
-#: src/libnmc-setting/nm-meta-setting-desc.c:2852 src/nmcli/connections.c:5575
-#: src/nmcli/connections.c:7554 src/nmcli/connections.c:7555
+#: src/libnmc-setting/nm-meta-setting-desc.c:2865 src/nmcli/connections.c:5750
+#: src/nmcli/connections.c:7759 src/nmcli/connections.c:7760
 #: src/nmcli/devices.c:591 src/nmcli/devices.c:597 src/nmcli/devices.c:603
 #: src/nmcli/devices.c:1427 src/nmcli/general.c:93 src/nmcli/utils.h:317
 msgid "no"
@@ -4361,9 +4422,8 @@ msgid "No reason given"
 msgstr "Причина не указана"
 
 #. We should not really come here
-#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3791
-#: src/nmcli/connections.c:3850
-#, c-format
+#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3802
+#: src/nmcli/connections.c:3874
 msgid "Unknown error"
 msgstr "Неизвестная ошибка"
 
@@ -4636,54 +4696,69 @@ msgstr "Не удалось обнаружить пир Wi-Fi P2P"
 
 #: src/libnmc-base/nm-client-utils.c:469
 msgid "The device handler dispatcher returned an error"
-msgstr ""
+msgstr "Диспетчер обработчика устройств вернул ошибку"
 
 #: src/libnmc-base/nm-client-utils.c:471
 msgid ""
 "The device is unmanaged because networking is disabled or the system is "
 "suspended"
 msgstr ""
+"Устройство не контролируется, т.к. использование сети отключено, либо система "
+"в "
+"приостановленном состоянии"
 
 #: src/libnmc-base/nm-client-utils.c:474
 msgid "The device is unmanaged because NetworkManager is quitting"
-msgstr ""
+msgstr "Устройство не контролируется, т.к. NetworkManager завершает работу."
 
 #: src/libnmc-base/nm-client-utils.c:476
 msgid "The device is unmanaged because the link is not initialized by udev"
 msgstr ""
+"Устройство не контролируется, т.к. канал не был инициализирован со стороны ude"
+"v"
 
 #: src/libnmc-base/nm-client-utils.c:478
 msgid ""
 "The device is unmanaged by explicit user decision (e.g. 'nmcli device set "
-"$DEV managed no'"
+"$DEV managed no')"
 msgstr ""
+"Устройство не контролируется согласно явному решению пользователя (например 'n"
+"mcli device set $DEV managed no')"
 
 #: src/libnmc-base/nm-client-utils.c:482
 msgid ""
 "The device is unmanaged by user decision via settings plugin (\"unmanaged-"
 "devices\" for keyfile or \"NM_CONTROLLED=no\" for ifcfg-rh)"
 msgstr ""
+"Устройство не контролируется согласно значениям, указанным пользователем в "
+"модуле параметров (\"unmanaged-devices\" для keyfile, или \"NM_CONTROLLED=no\""
+" для ifcfg-rh)"
 
 #: src/libnmc-base/nm-client-utils.c:485
 msgid ""
 "The device is unmanaged by user decision in NetworkManager.conf ('unmanaged' "
 "in a [device*] section"
 msgstr ""
+"Устройство не контролируется согласно значениям, указанным пользователем в Net"
+"workManager.conf ('unmanaged' в разделе [device*])"
 
 #: src/libnmc-base/nm-client-utils.c:489
 msgid "The device is unmanaged because the device type is unmanaged by default"
 msgstr ""
+"Устройство не контролируется, т.к. этот тип устройств по умолчанию не контроли"
+"руется."
 
 #: src/libnmc-base/nm-client-utils.c:491
-#, fuzzy
 msgid "The device is unmanaged via udev rule"
-msgstr "Устройство пропало"
+msgstr "Устройство не контролируется согласно правилу udev"
 
 #: src/libnmc-base/nm-client-utils.c:493
 msgid ""
 "The device is unmanaged because it is an external device and is unconfigured "
 "(down or without addresses)"
 msgstr ""
+"Устройство не контролируется, т.к. является внешним устройством и для него "
+"отсутствует конфигурация (не запущено, или нет адресов)"
 
 #: src/libnmc-base/nm-client-utils.c:503
 msgid "Unknown reason"
@@ -4790,7 +4865,7 @@ msgstr "Предопределённый общий ключ для %s"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:274
 #: src/libnmc-base/nm-secret-agent-simple.c:361
-#: src/libnmc-setting/nm-meta-setting-desc.c:5146
+#: src/libnmc-setting/nm-meta-setting-desc.c:5244
 #: src/nmtui/nmt-8021x-fields.c:183 src/nmtui/nmt-8021x-fields.c:516
 #: src/nmtui/nmt-8021x-fields.c:622 src/nmtui/nmt-page-dsl.c:51
 #: src/nmtui/nmt-page-wifi.c:345
@@ -4853,12 +4928,14 @@ msgid "Authentication required by wireless network"
 msgstr "Для доступа к беспроводной сети требуется аутентификация"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:911
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Push of the WPS button on the router or a password is required to access the "
 "wireless network '%s'."
 msgstr ""
-"Для доступа к беспроводной сети «%s» требуются пароли или ключи шифрования."
+"Для доступа к беспроводной сети «%s» требуется нажать на кнопку WPS на маршрут"
+"изаторе, "
+"либо указать пароль."
 
 #: src/libnmc-base/nm-secret-agent-simple.c:916
 #, c-format
@@ -4914,7 +4991,7 @@ msgid "MACsec PSK authentication"
 msgstr "Аутентификация MACsec PSK"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:968
-#: src/libnmc-setting/nm-meta-setting-desc.c:6901
+#: src/libnmc-setting/nm-meta-setting-desc.c:7163
 msgid "MKA CAK"
 msgstr "MKA CAK"
 
@@ -4982,7 +5059,6 @@ msgid "Gateway DNS resolution ('host:IP')"
 msgstr "Разрешение DNS шлюза («хост:IP»)"
 
 #: src/libnmc-base/nm-vpn-helpers.c:308
-#, c-format
 msgid "no gateway configured"
 msgstr "шлюз не настроен"
 
@@ -4997,7 +5073,6 @@ msgid "exited on signal %d"
 msgstr "завершено по сигналу %d"
 
 #: src/libnmc-base/nm-vpn-helpers.c:430
-#, c-format
 msgid "insufficent secrets returned"
 msgstr "возвращено недостаточно секретов"
 
@@ -5024,8 +5099,8 @@ msgstr "недействительный адрес IP: %s"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:294
 msgid ""
-"The valid syntax is: 'ip[/prefix] [next-hop] [metric] [attribute=val]... [,"
-"ip[/prefix] ...]'"
+"The valid syntax is: 'ip[/prefix] [next-hop] [metric] [attribute=val]... "
+"[,ip[/prefix] ...]'"
 msgstr ""
 "Действительный синтаксис: 'ip[/prefix] [next-hop] [metric] "
 "[attribute=val]... [,ip[/prefix] ...]'"
@@ -5074,127 +5149,127 @@ msgstr "невозможно прочитать конфигурацию team и
 msgid "team config file '%s' contains non-valid utf-8"
 msgstr "файл конфигурации team «%s» содержит недействительную кодировку utf-8"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1050
+#: src/libnmc-setting/nm-meta-setting-desc.c:1058
 msgid "auto"
 msgstr "автоматически"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1179
+#: src/libnmc-setting/nm-meta-setting-desc.c:1187
 #, c-format
 msgid "%s (%s)"
 msgstr "%s (%s)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1435
-#: src/libnmc-setting/nm-meta-setting-desc.c:1443
-#: src/libnmc-setting/nm-meta-setting-desc.c:4488
+#: src/libnmc-setting/nm-meta-setting-desc.c:1448
+#: src/libnmc-setting/nm-meta-setting-desc.c:1456
+#: src/libnmc-setting/nm-meta-setting-desc.c:4562
 msgid "'%s' is out of range [%"
 msgstr "«%s» за пределами диапазона [%"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1451
+#: src/libnmc-setting/nm-meta-setting-desc.c:1464
 #, c-format
 msgid "'%s' is not a valid number"
 msgstr "«%s» не является действительным числом"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1507
+#: src/libnmc-setting/nm-meta-setting-desc.c:1520
 #, c-format
 msgid "'%s' is out of range [0, %u]"
 msgstr "«%s» за пределами диапазона [0, %u]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1558
+#: src/libnmc-setting/nm-meta-setting-desc.c:1571
 #, c-format
 msgid "'%s' is not a valid Ethernet MAC"
 msgstr "«%s» не является действительным MAC-адресом Ethernet"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1647
+#: src/libnmc-setting/nm-meta-setting-desc.c:1660
 #, c-format
 msgid "invalid option '%s', use a combination of [%s]"
 msgstr "недействительный параметр «%s»; используйте комбинацию [%s]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1784
+#: src/libnmc-setting/nm-meta-setting-desc.c:1797
 #, c-format
 msgid "%d (key)"
 msgstr "%d (ключ)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1786
+#: src/libnmc-setting/nm-meta-setting-desc.c:1799
 #, c-format
 msgid "%d (passphrase)"
 msgstr "%d (парольная фраза)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1789
+#: src/libnmc-setting/nm-meta-setting-desc.c:1802
 #, c-format
 msgid "%d (unknown)"
 msgstr "%d (неизвестно)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1802
+#: src/libnmc-setting/nm-meta-setting-desc.c:1815
 msgid "0 (NONE)"
 msgstr "0 (НЕТ)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1808
+#: src/libnmc-setting/nm-meta-setting-desc.c:1821
 msgid "REORDER_HEADERS, "
 msgstr "REORDER_HEADERS, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1810
+#: src/libnmc-setting/nm-meta-setting-desc.c:1823
 msgid "GVRP, "
 msgstr "GVRP, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1812
+#: src/libnmc-setting/nm-meta-setting-desc.c:1825
 msgid "LOOSE_BINDING, "
 msgstr "LOOSE_BINDING, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1814
+#: src/libnmc-setting/nm-meta-setting-desc.c:1827
 msgid "MVRP, "
 msgstr "MVRP, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1835
+#: src/libnmc-setting/nm-meta-setting-desc.c:1848
 msgid "0 (none)"
 msgstr "0 (нет)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1841
+#: src/libnmc-setting/nm-meta-setting-desc.c:1854
 msgid "agent-owned, "
 msgstr "принадлежит агенту, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1843
+#: src/libnmc-setting/nm-meta-setting-desc.c:1856
 msgid "not saved, "
 msgstr "не сохранено, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1845
+#: src/libnmc-setting/nm-meta-setting-desc.c:1858
 msgid "not required, "
 msgstr "не требуется, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2050
+#: src/libnmc-setting/nm-meta-setting-desc.c:2063
 #, c-format
 msgid "'%s' is not valid; use <option>=<value>"
 msgstr "«%s» не является действительным; используйте <параметр>=<значение>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2060
+#: src/libnmc-setting/nm-meta-setting-desc.c:2073
 #, c-format
 msgid "cannot set empty \"%s\" option"
 msgstr "нельзя настраивать пустое свойство \"%s\""
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2121
+#: src/libnmc-setting/nm-meta-setting-desc.c:2134
 #, c-format
 msgid "'%u' flags are not valid; use combination of %s"
 msgstr "Флаги «%u» не являются действительными; используйте сочетание %s"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2141
+#: src/libnmc-setting/nm-meta-setting-desc.c:2154
 #, c-format
 msgid "'%s' is not a valid number (or out of range)"
 msgstr "«%s» не является действительным числом (или находится вне диапазона)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2241
+#: src/libnmc-setting/nm-meta-setting-desc.c:2254
 #, c-format
 msgid "invalid IPv4 or subnet \"%s\""
 msgstr "недействительный IPv4 или подсеть \"%s\""
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2272
+#: src/libnmc-setting/nm-meta-setting-desc.c:2285
 msgid "not a valid hex-string"
 msgstr "не является действительной шестнадцатеричной строкой"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2290
+#: src/libnmc-setting/nm-meta-setting-desc.c:2303
 #, c-format
 msgid "'%s' is not a valid hex character"
 msgstr "«%s» не является действительным шестнадцатеричным символом"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2378
+#: src/libnmc-setting/nm-meta-setting-desc.c:2391
 msgid ""
 "too many arguments. Please only specify a private key file and optionally a "
 "password"
@@ -5202,12 +5277,12 @@ msgstr ""
 "слишком много аргументов. Укажите только файл закрытого ключа и, "
 "необязательно, пароль"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2495
+#: src/libnmc-setting/nm-meta-setting-desc.c:2508
 #, c-format
 msgid "failed to set bond option \"%s\""
 msgstr "не удалось настроить параметр агрегации «%s»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2543
+#: src/libnmc-setting/nm-meta-setting-desc.c:2556
 #, c-format
 msgid ""
 "Enter a list of bonding options formatted as:\n"
@@ -5238,123 +5313,123 @@ msgstr ""
 "\n"
 "Пример: mode=2,miimon=120\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2650
+#: src/libnmc-setting/nm-meta-setting-desc.c:2663
 msgid "Can not change the connection type"
 msgstr "Тип подключения изменить невозможно"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2731
+#: src/libnmc-setting/nm-meta-setting-desc.c:2744
 #, c-format
 msgid "invalid permission \"%s\""
 msgstr "недействительное полномочие «%s»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2831
+#: src/libnmc-setting/nm-meta-setting-desc.c:2844
 #, c-format
 msgid "the value '%s' is not a valid UUID"
 msgstr "значение «%s» не является действительным UUID"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2902
+#: src/libnmc-setting/nm-meta-setting-desc.c:2915
 msgid "0 (disabled)"
 msgstr "0 (отключено)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2908
+#: src/libnmc-setting/nm-meta-setting-desc.c:2921
 msgid "enabled, "
 msgstr "включено, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2910
+#: src/libnmc-setting/nm-meta-setting-desc.c:2923
 msgid "advertise, "
 msgstr "объявлять, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2912
+#: src/libnmc-setting/nm-meta-setting-desc.c:2925
 msgid "willing, "
 msgstr "желающий, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3001
+#: src/libnmc-setting/nm-meta-setting-desc.c:3014
 #, c-format
 msgid "'%s' is not a valid DCB flag"
 msgstr "«%s» не является действительным флагом DCB"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3029
+#: src/libnmc-setting/nm-meta-setting-desc.c:3042
 msgid "must contain 8 comma-separated numbers"
 msgstr "должен содержать 8 чисел, через запятую"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3044
+#: src/libnmc-setting/nm-meta-setting-desc.c:3057
 #, c-format
 msgid "'%s' not a number between 0 and %u (inclusive) or %u"
 msgstr "«%s» не является числом в диапазоне от 0 до %u (включительно) или %u"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3051
+#: src/libnmc-setting/nm-meta-setting-desc.c:3064
 #, c-format
 msgid "'%s' not a number between 0 and %u (inclusive)"
 msgstr "«%s» не является числом в диапазоне от 0 до %u (включительно)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3077
+#: src/libnmc-setting/nm-meta-setting-desc.c:3090
 #, c-format
 msgid "changes will have no effect until '%s' includes 1 (enabled)"
 msgstr ""
 "изменения не вступят в силу, пока «%s» не будет включать в себя 1 (включено)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3109
+#: src/libnmc-setting/nm-meta-setting-desc.c:3122
 #, c-format
 msgid "bandwidth percentages must total 100%%"
 msgstr "сумма процентных частей пропускной способности должна быть равна 100%%"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3209
-#: src/libnmc-setting/nm-meta-setting-desc.c:3218
+#: src/libnmc-setting/nm-meta-setting-desc.c:3222
+#: src/libnmc-setting/nm-meta-setting-desc.c:3231
 msgid "SIM operator ID must be a 5 or 6 number MCCMNC code"
 msgstr ""
 "Идентификатор оператора SIM должен содержать код MCCMNC из 5 или 6 цифр"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3241
+#: src/libnmc-setting/nm-meta-setting-desc.c:3254
 #, c-format
 msgid "'%s' is not a valid IBoIP P_Key"
 msgstr "Недействительное значение IBoIP P_Key: «%s»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3265
+#: src/libnmc-setting/nm-meta-setting-desc.c:3278
 msgid "default"
 msgstr "по умолчанию"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3536
+#: src/libnmc-setting/nm-meta-setting-desc.c:3549
 #, c-format
 msgid "invalid gateway address '%s'"
 msgstr "недействительный адрес шлюза «%s»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3688
+#: src/libnmc-setting/nm-meta-setting-desc.c:3701
 #, c-format
 msgid "'%s' is not a valid channel; use <1-13>"
 msgstr "«%s» не является действительным каналом; используйте <1-13>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3782
+#: src/libnmc-setting/nm-meta-setting-desc.c:3795
 msgid "The valid syntax is: vf [attribute=value]... [,vf [attribute=value]...]"
 msgstr ""
 "Действительный синтаксис: vf [атрибут=значение]... [,vf "
 "[атрибут=значение]...]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3808
-#: src/libnmc-setting/nm-meta-setting-desc.c:3921
+#: src/libnmc-setting/nm-meta-setting-desc.c:3821
+#: src/libnmc-setting/nm-meta-setting-desc.c:3934
 msgid ""
 "The valid syntax is: '[root | parent <handle>] [handle <handle>] <kind>'"
 msgstr ""
 "Действительный синтаксис: '[root | parent <handle>] [handle <handle>] <kind>'"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3835
+#: src/libnmc-setting/nm-meta-setting-desc.c:3848
 msgid "The valid syntax is: '<value>' or '<start>-<end>"
 msgstr "Действительный синтаксис: '<значение>' или '<начало>-<конец>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3865
+#: src/libnmc-setting/nm-meta-setting-desc.c:3878
 msgid "The valid syntax is: '<vid>[-<vid>] [pvid] [untagged]'"
 msgstr "Действительный синтаксис: '<vid>[-<vid>] [pvid] [untagged]'"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4067
+#: src/libnmc-setting/nm-meta-setting-desc.c:4080
 #, c-format
 msgid "invalid priority map '%s'"
 msgstr "недействительное отображение приоритетов «%s»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4160
+#: src/libnmc-setting/nm-meta-setting-desc.c:4217
 #, c-format
 msgid "'%s' is not valid; 2 or 3 strings should be provided"
 msgstr "'%s' не является допустимым; необходимо предоставить 2 или 3 строки"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4199
+#: src/libnmc-setting/nm-meta-setting-desc.c:4256
 #, c-format
 msgid ""
 "Enter a list of S/390 options formatted as:\n"
@@ -5365,87 +5440,88 @@ msgstr ""
 "  параметр = <значение>, параметр = <значение>,...\n"
 "Действительные параметры: %s\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4233
+#: src/libnmc-setting/nm-meta-setting-desc.c:4290
 #, c-format
 msgid "'%s' is not a valid channel"
 msgstr "'%s' не является действительным каналом"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4241
+#: src/libnmc-setting/nm-meta-setting-desc.c:4298
 #, c-format
 msgid "'%ld' is not a valid channel"
 msgstr "'%ld' не является действительным каналом"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4322
+#: src/libnmc-setting/nm-meta-setting-desc.c:4379
 #, c-format
 msgid ""
 "'%s' not compatible with %s '%s', please change the key or set the right %s "
 "first."
 msgstr "«%s» несовместим с %s «%s». Измените ключ или корректно настройте %s."
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4338
+#: src/libnmc-setting/nm-meta-setting-desc.c:4395
 #, c-format
 msgid "WEP key is guessed to be of %s"
 msgstr "Ключ WEP предположительно равен «%s»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4345
+#: src/libnmc-setting/nm-meta-setting-desc.c:4402
 #, c-format
 msgid "WEP key index set to '%d'"
 msgstr "Индекс ключа WEP установлен в «%d»"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4421
+#: src/libnmc-setting/nm-meta-setting-desc.c:4478
 #, c-format
 msgid "'%s' is not compatible with '%s' type, please change or delete the key."
 msgstr "«%s» несовместим с типом «%s», смените или удалите ключ."
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4458 src/nmcli/utils.h:323
+#: src/libnmc-setting/nm-meta-setting-desc.c:4515 src/nmcli/utils.h:323
 msgid "on"
 msgstr "вкл"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4458 src/nmcli/utils.h:323
+#: src/libnmc-setting/nm-meta-setting-desc.c:4515 src/nmcli/utils.h:323
 msgid "off"
 msgstr "выкл"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4506
+#: src/libnmc-setting/nm-meta-setting-desc.c:4580
 #, c-format
 msgid "'%s' is not valid; use 'on', 'off', or 'ignore'"
 msgstr "'%s' не является действительным; используйте «on», «off» или «ignore»,"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4579
+#: src/libnmc-setting/nm-meta-setting-desc.c:4677
 msgid "Bonding primary interface"
 msgstr "Первичный интерфейс агрегации bond"
 
 #. this is a virtual property, only needed during "ask" mode.
-#: src/libnmc-setting/nm-meta-setting-desc.c:4587
+#: src/libnmc-setting/nm-meta-setting-desc.c:4685
+#: src/libnmc-setting/nm-meta-setting-desc.h:49
 msgid "Bonding monitoring mode"
 msgstr "Режим мониторинга агрегации bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4596
+#: src/libnmc-setting/nm-meta-setting-desc.c:4694
 msgid "Bonding miimon"
 msgstr "Значение miimon агрегации bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4605
+#: src/libnmc-setting/nm-meta-setting-desc.c:4703
 msgid "Bonding downdelay"
 msgstr "Значение downdelay агрегации bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4614
+#: src/libnmc-setting/nm-meta-setting-desc.c:4712
 msgid "Bonding updelay"
 msgstr "Значение updelay агрегации bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4623
+#: src/libnmc-setting/nm-meta-setting-desc.c:4721
 msgid "Bonding arp-interval"
 msgstr "Значение arp-interval агрегации bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4632
+#: src/libnmc-setting/nm-meta-setting-desc.c:4730
 msgid "Bonding arp-ip-target"
 msgstr "Значение arp-ip-target агрегации bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4641
+#: src/libnmc-setting/nm-meta-setting-desc.c:4739
 msgid "LACP rate (slow/fast)"
 msgstr "Частота отправки пакетов LACP (медленно/быстро)"
 
 #. macro that returns @func as const (guint32(*)(NMSetting*)) type, but checks
 #. * that the actual type is (guint32(*)(type *)).
-#: src/libnmc-setting/nm-meta-setting-desc.c:4832
+#: src/libnmc-setting/nm-meta-setting-desc.c:4930
 msgid ""
 "nmcli can accepts both direct JSON configuration data and a file name "
 "containing the configuration. In the latter case the file is read and the "
@@ -5463,7 +5539,7 @@ msgstr ""
 "\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
 "          set team.config /etc/my-team.conf\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4840
+#: src/libnmc-setting/nm-meta-setting-desc.c:4938
 msgid ""
 "Enter a list of link watchers formatted as dictionaries where the keys are "
 "teamd properties. Dictionary pairs are in the form: key=value and pairs are "
@@ -5511,11 +5587,11 @@ msgstr ""
 "   name=arp_ping source-host=172.16.1.1 target-host=172.16.1.254, "
 "name=ethtool delay-up=3\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4889
+#: src/libnmc-setting/nm-meta-setting-desc.c:4987
 msgid "IEEE 802.15.4 (WPAN) parent device or connection UUID"
 msgstr "Родительское устройство IEEE 802.15.4 (WPAN) или UUID подключения"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5079
+#: src/libnmc-setting/nm-meta-setting-desc.c:5177
 msgid ""
 "Enter bytes as a list of hexadecimal values.\n"
 "Two formats are accepted:\n"
@@ -5537,91 +5613,91 @@ msgstr ""
 "Примеры: ab0455a6ea3a74C2\n"
 "          ab 4 55 0xa6 ea 3a 74 C2\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5152
-#: src/libnmc-setting/nm-meta-setting-desc.c:5455
-#: src/libnmc-setting/nm-meta-setting-desc.c:5994
-#: src/libnmc-setting/nm-meta-setting-desc.c:7265
+#: src/libnmc-setting/nm-meta-setting-desc.c:5250
+#: src/libnmc-setting/nm-meta-setting-desc.c:5553
+#: src/libnmc-setting/nm-meta-setting-desc.c:6134
+#: src/libnmc-setting/nm-meta-setting-desc.c:7530
 msgid "Password [none]"
 msgstr "Пароль [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5198
+#: src/libnmc-setting/nm-meta-setting-desc.c:5296
 msgid "Bluetooth device address"
 msgstr "Адрес устройства Bluetooth"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5247
+#: src/libnmc-setting/nm-meta-setting-desc.c:5345
 #: src/nmtui/nmt-page-bond-port.c:51
 msgid "Queue ID"
 msgstr "ID очереди"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5253
+#: src/libnmc-setting/nm-meta-setting-desc.c:5351
 msgid "Port Priority"
 msgstr "Приоритет порта"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5265
-#: src/libnmc-setting/nm-meta-setting-desc.c:6105
-#: src/libnmc-setting/nm-meta-setting-desc.c:8007
-#: src/libnmc-setting/nm-meta-setting-desc.c:8045
-#: src/libnmc-setting/nm-meta-setting-desc.c:8242
-#: src/libnmc-setting/nm-meta-setting-desc.c:8507
+#: src/libnmc-setting/nm-meta-setting-desc.c:5363
+#: src/libnmc-setting/nm-meta-setting-desc.c:6272
+#: src/libnmc-setting/nm-meta-setting-desc.c:8288
+#: src/libnmc-setting/nm-meta-setting-desc.c:8326
+#: src/libnmc-setting/nm-meta-setting-desc.c:8538
+#: src/libnmc-setting/nm-meta-setting-desc.c:8803
 msgid "MAC [none]"
 msgstr "MAC [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5271
+#: src/libnmc-setting/nm-meta-setting-desc.c:5369
 msgid "Enable STP"
 msgstr "Включить использование STP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5277
+#: src/libnmc-setting/nm-meta-setting-desc.c:5375
 msgid "STP priority"
 msgstr "Приоритет STP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5283
+#: src/libnmc-setting/nm-meta-setting-desc.c:5381
 #: src/nmtui/nmt-page-bridge.c:120
 msgid "Forward delay"
 msgstr "Задержка перенаправления"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5289
+#: src/libnmc-setting/nm-meta-setting-desc.c:5387
 #: src/nmtui/nmt-page-bridge.c:134
 msgid "Hello time"
 msgstr "Время приветствия"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5295
+#: src/libnmc-setting/nm-meta-setting-desc.c:5393
 #: src/nmtui/nmt-page-bridge.c:148
 msgid "Max age"
 msgstr "Максимальный период действия"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5301
+#: src/libnmc-setting/nm-meta-setting-desc.c:5399
 msgid "MAC address ageing time"
 msgstr "Период истечения действительности адреса MAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5311
+#: src/libnmc-setting/nm-meta-setting-desc.c:5409
 #: src/nmtui/nmt-page-bridge.c:156
 msgid "Group forward mask"
 msgstr "Маска перенаправления группы"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5353
+#: src/libnmc-setting/nm-meta-setting-desc.c:5451
 #: src/nmtui/nmt-page-bridge.c:79
 msgid "Enable IGMP snooping"
 msgstr "Включить отслеживание сетевого трафика IGMP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5411
+#: src/libnmc-setting/nm-meta-setting-desc.c:5509
 msgid "Bridge port priority"
 msgstr "Приоритет порта моста"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5417
+#: src/libnmc-setting/nm-meta-setting-desc.c:5515
 msgid "Bridge port STP path cost"
 msgstr "Стоимость пути STP для порта моста"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5423
+#: src/libnmc-setting/nm-meta-setting-desc.c:5521
 msgid "Hairpin"
 msgstr "Hairpin"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5449
-#: src/libnmc-setting/nm-meta-setting-desc.c:5988
-#: src/libnmc-setting/nm-meta-setting-desc.c:7852
+#: src/libnmc-setting/nm-meta-setting-desc.c:5547
+#: src/libnmc-setting/nm-meta-setting-desc.c:6128
+#: src/libnmc-setting/nm-meta-setting-desc.c:8133
 msgid "Username [none]"
 msgstr "Имя пользователя [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5554
+#: src/libnmc-setting/nm-meta-setting-desc.c:5652
 msgid ""
 "Enter a list of user permissions. This is a list of user names formatted "
 "as:\n"
@@ -5638,11 +5714,11 @@ msgstr ""
 "\n"
 "Пример: alice bob charlie\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5583
+#: src/libnmc-setting/nm-meta-setting-desc.c:5681
 msgid "Controller"
 msgstr "Контроллер"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5642
+#: src/libnmc-setting/nm-meta-setting-desc.c:5740
 msgid ""
 "Enter secondary connections that should be activated when this connection "
 "is\n"
@@ -5664,7 +5740,7 @@ msgstr ""
 "\n"
 "Пример: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5666
+#: src/libnmc-setting/nm-meta-setting-desc.c:5797
 msgid ""
 "Enter a value which indicates whether the connection is subject to a data\n"
 "quota, usage costs or other limitations. Accepted options are:\n"
@@ -5680,41 +5756,42 @@ msgstr ""
 "«unknown» — позволить NetworkManager выбирать значение с помощью\n"
 "эвристических методов\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6004
+#: src/libnmc-setting/nm-meta-setting-desc.c:6144
 msgid "APN"
 msgstr "APN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6058
+#: src/libnmc-setting/nm-meta-setting-desc.c:6226
 msgid "hsr port1"
 msgstr "hsr port1"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6065
+#: src/libnmc-setting/nm-meta-setting-desc.c:6233
 msgid "hsr port2"
 msgstr "hsr port2"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6071
+#: src/libnmc-setting/nm-meta-setting-desc.c:6239
 msgid "hsr multicast spec"
 msgstr "спецификация многоадресной передачи hsr"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6114
-#: src/libnmc-setting/nm-meta-setting-desc.c:6808
-#: src/libnmc-setting/nm-meta-setting-desc.c:8092
-#: src/libnmc-setting/nm-meta-setting-desc.c:8304
+#: src/libnmc-setting/nm-meta-setting-desc.c:6281
+#: src/libnmc-setting/nm-meta-setting-desc.c:7070
+#: src/libnmc-setting/nm-meta-setting-desc.c:8373
+#: src/libnmc-setting/nm-meta-setting-desc.c:8600
 #: src/nmtui/nmt-page-ethernet.c:124 src/nmtui/nmt-page-infiniband.c:81
-#: src/nmtui/nmt-page-ip-tunnel.c:178 src/nmtui/nmt-page-vlan.c:100
+#: src/nmtui/nmt-page-ip-tunnel.c:178 src/nmtui/nmt-page-loopback.c:56
+#: src/nmtui/nmt-page-veth.c:80 src/nmtui/nmt-page-vlan.c:100
 #: src/nmtui/nmt-page-wifi.c:395 src/nmtui/nmt-page-wireguard.c:85
 msgid "MTU"
 msgstr "MTU"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6133
+#: src/libnmc-setting/nm-meta-setting-desc.c:6300
 msgid "P_KEY [none]"
 msgstr "P_KEY [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6151
+#: src/libnmc-setting/nm-meta-setting-desc.c:6318
 msgid "Parent interface [none]"
 msgstr "Родительский интерфейс [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6180
+#: src/libnmc-setting/nm-meta-setting-desc.c:6347
 msgid ""
 "Enter a list of IPv4 addresses of DNS servers.\n"
 "\n"
@@ -5724,11 +5801,11 @@ msgstr ""
 "\n"
 "Пример: 8.8.8.8, 8.8.4.4\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6230
+#: src/libnmc-setting/nm-meta-setting-desc.c:6397
 msgid "IPv4 address (IP[/plen]) [none]"
 msgstr "Адрес IPv4 (IP[/plen]) [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6232
+#: src/libnmc-setting/nm-meta-setting-desc.c:6399
 msgid ""
 "Enter a list of IPv4 addresses formatted as:\n"
 "  ip[/prefix], ip[/prefix],...\n"
@@ -5742,11 +5819,11 @@ msgstr ""
 "\n"
 "Пример: 92.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6251
+#: src/libnmc-setting/nm-meta-setting-desc.c:6418
 msgid "IPv4 gateway [none]"
 msgstr "Шлюз IPv4 [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6260
+#: src/libnmc-setting/nm-meta-setting-desc.c:6427
 msgid ""
 "Enter a list of IPv4 routes formatted as:\n"
 "  ip[/prefix] [next-hop] [metric],...\n"
@@ -5769,7 +5846,7 @@ msgstr ""
 "Примеры: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
 "          10.1.2.0/24\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6300
+#: src/libnmc-setting/nm-meta-setting-desc.c:6467
 msgid ""
 "Enter a list of IPv4 routing rules formatted as:\n"
 "  priority [prio] [from [src]] [to [dst]], ,...\n"
@@ -5779,7 +5856,7 @@ msgstr ""
 "  приоритет [prio] [от [исходн]] [до [цель]], ,...\n"
 "\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6447
+#: src/libnmc-setting/nm-meta-setting-desc.c:6658
 msgid ""
 "Enter a list of IPv6 addresses of DNS servers.  If the IPv6 configuration "
 "method is 'auto' these DNS servers are appended to those (if any) returned "
@@ -5799,11 +5876,11 @@ msgstr ""
 "\n"
 "Пример: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6503
+#: src/libnmc-setting/nm-meta-setting-desc.c:6714
 msgid "IPv6 address (IP[/plen]) [none]"
 msgstr "Адрес IPv6 (IP[/plen]) [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6505
+#: src/libnmc-setting/nm-meta-setting-desc.c:6716
 msgid ""
 "Enter a list of IPv6 addresses formatted as:\n"
 "  ip[/prefix], ip[/prefix],...\n"
@@ -5817,11 +5894,11 @@ msgstr ""
 "\n"
 "Пример: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6524
+#: src/libnmc-setting/nm-meta-setting-desc.c:6735
 msgid "IPv6 gateway [none]"
 msgstr "Шлюз IPv6 [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6533
+#: src/libnmc-setting/nm-meta-setting-desc.c:6744
 msgid ""
 "Enter a list of IPv6 routes formatted as:\n"
 "  ip[/prefix] [next-hop] [metric],...\n"
@@ -5830,8 +5907,8 @@ msgid ""
 "Missing next-hop is regarded as \"::\".\n"
 "Missing metric means default (NM/kernel will set a default value).\n"
 "\n"
-"Examples: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
-"db8:beef::3 2\n"
+"Examples: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 "
+"2001:db8:beef::3 2\n"
 "          abbe::/64 55\n"
 msgstr ""
 "Укажите список маршрутов IPv6 в формате:\n"
@@ -5846,7 +5923,7 @@ msgstr ""
 "db8:beef::3 2\n"
 "          abbe::/64 55\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6573
+#: src/libnmc-setting/nm-meta-setting-desc.c:6784
 msgid ""
 "Enter a list of IPv6 routing rules formatted as:\n"
 "  priority [prio] [from [src]] [to [dst]], ,...\n"
@@ -5856,170 +5933,174 @@ msgstr ""
 "  приоритет [prio] [от [исходн]] [до [цель]], ,...\n"
 "\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6745
-#: src/libnmc-setting/nm-meta-setting-desc.c:7907
+#: src/libnmc-setting/nm-meta-setting-desc.c:6976
+#: src/libnmc-setting/nm-meta-setting-desc.c:8188
 msgid "Parent device [none]"
 msgstr "Родительское устройство [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6751
+#: src/libnmc-setting/nm-meta-setting-desc.c:6982
 msgid "Local endpoint [none]"
 msgstr "Локальная конечная точка [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6758
-#: src/libnmc-setting/nm-meta-setting-desc.c:7926
+#: src/libnmc-setting/nm-meta-setting-desc.c:6989
+#: src/libnmc-setting/nm-meta-setting-desc.c:8207
 msgid "Remote"
 msgstr "Удалённый"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6874
+#: src/libnmc-setting/nm-meta-setting-desc.c:7040
+msgid "IPVLAN parent device or connection UUID"
+msgstr "родительское устройство IPVLAN, либо UUID подключения"
+
+#: src/libnmc-setting/nm-meta-setting-desc.c:7136
 msgid "MACsec parent device or connection UUID"
 msgstr "Родительское устройство MACsec или UUID подключения"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6895
+#: src/libnmc-setting/nm-meta-setting-desc.c:7157
 msgid "Enable encryption"
 msgstr "Включить шифрование"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6911
+#: src/libnmc-setting/nm-meta-setting-desc.c:7173
 msgid "MKA_CKN"
 msgstr "MKA_CKN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6917
+#: src/libnmc-setting/nm-meta-setting-desc.c:7179
 #: src/nmtui/nmt-page-macsec.c:170
 msgid "SCI port"
 msgstr "Порт SCI"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6946
+#: src/libnmc-setting/nm-meta-setting-desc.c:7208
 msgid "MACVLAN parent device or connection UUID"
 msgstr "Родительское устройство MACVLAN или UUID подключения"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6967
+#: src/libnmc-setting/nm-meta-setting-desc.c:7229
 msgid "Tap"
 msgstr "Tap"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7038
-#: src/libnmc-setting/nm-meta-setting-desc.c:8202 src/nmtui/nmt-page-wifi.c:216
+#: src/libnmc-setting/nm-meta-setting-desc.c:7300
+#: src/libnmc-setting/nm-meta-setting-desc.c:8498 src/nmtui/nmt-page-wifi.c:216
 msgid "SSID"
 msgstr "SSID"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7048
+#: src/libnmc-setting/nm-meta-setting-desc.c:7310
 msgid "OLPC Mesh channel"
 msgstr "Канал OLPC Mesh"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7058
+#: src/libnmc-setting/nm-meta-setting-desc.c:7320
 msgid "DHCP anycast MAC address [none]"
 msgstr "Адрес MAC произвольной рассылки DHCP [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7246
+#: src/libnmc-setting/nm-meta-setting-desc.c:7511
 msgid "PPPoE parent device"
 msgstr "Родительское устройство PPPoE"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7252
+#: src/libnmc-setting/nm-meta-setting-desc.c:7517
 msgid "Service [none]"
 msgstr "Служба [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7259
+#: src/libnmc-setting/nm-meta-setting-desc.c:7524
 msgid "PPPoE username"
 msgstr "Имя пользователя PPPoE"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7295
+#: src/libnmc-setting/nm-meta-setting-desc.c:7573
 msgid "Browser only"
 msgstr "Только для браузера"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7301
+#: src/libnmc-setting/nm-meta-setting-desc.c:7579
 msgid "PAC URL"
 msgstr "PAC URL"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7307
+#: src/libnmc-setting/nm-meta-setting-desc.c:7585
 msgid "PAC script"
 msgstr "Сценарий PAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7440
-#: src/libnmc-setting/nm-meta-setting-desc.c:7629
+#: src/libnmc-setting/nm-meta-setting-desc.c:7721
+#: src/libnmc-setting/nm-meta-setting-desc.c:7910
 msgid "Team JSON configuration [none]"
 msgstr "Конфигурация JSON агрегированного подключения team [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7732
+#: src/libnmc-setting/nm-meta-setting-desc.c:8013
 msgid "User ID [none]"
 msgstr "ID пользователя [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7738
+#: src/libnmc-setting/nm-meta-setting-desc.c:8019
 msgid "Group ID [none]"
 msgstr "ID группы [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7744
+#: src/libnmc-setting/nm-meta-setting-desc.c:8025
 msgid "Enable PI"
 msgstr "Включить PI"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7750
+#: src/libnmc-setting/nm-meta-setting-desc.c:8031
 msgid "Enable VNET header"
 msgstr "Включить заголовок VNET"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7756
+#: src/libnmc-setting/nm-meta-setting-desc.c:8037
 msgid "Enable multi queue"
 msgstr "Включить многоочерёдность"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7769
+#: src/libnmc-setting/nm-meta-setting-desc.c:8050
 msgid "veth peer"
 msgstr "одноранговый узел veth"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7782
+#: src/libnmc-setting/nm-meta-setting-desc.c:8063
 msgid "VLAN parent device or connection UUID"
 msgstr "Родительское устройство VLAN или UUID подключения"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7789
+#: src/libnmc-setting/nm-meta-setting-desc.c:8070
 msgid "VLAN ID (<0-4094>)"
 msgstr "Идентификатор VLAN (<0-4094>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7795
+#: src/libnmc-setting/nm-meta-setting-desc.c:8076
 msgid "VLAN flags (<0-7>) [none]"
 msgstr "Флаги VLAN (<0-7>) [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7811
+#: src/libnmc-setting/nm-meta-setting-desc.c:8092
 msgid "Ingress priority maps [none]"
 msgstr "Карты приоритетов для входящего трафика [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7822
+#: src/libnmc-setting/nm-meta-setting-desc.c:8103
 msgid "Egress priority maps [none]"
 msgstr "Карты приоритетов для исходящего трафика [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7894
+#: src/libnmc-setting/nm-meta-setting-desc.c:8175
 msgid "Table"
 msgstr "Таблица"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7914
+#: src/libnmc-setting/nm-meta-setting-desc.c:8195
 msgid "VXLAN ID"
 msgstr "Идентификатор VXLAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7920
+#: src/libnmc-setting/nm-meta-setting-desc.c:8201
 msgid "Local address [none]"
 msgstr "Локальный адрес [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7932
+#: src/libnmc-setting/nm-meta-setting-desc.c:8213
 msgid "Minimum source port"
 msgstr "Минимальный исходный порт"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7938
+#: src/libnmc-setting/nm-meta-setting-desc.c:8219
 msgid "Maximum source port"
 msgstr "Максимальный исходный порт"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7944
+#: src/libnmc-setting/nm-meta-setting-desc.c:8225
 msgid "Destination port"
 msgstr "Целевой порт"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7984
+#: src/libnmc-setting/nm-meta-setting-desc.c:8265 src/nmtui/nmt-page-veth.c:54
 #: src/nmtui/nmt-wireguard-peer-editor.c:78
 msgid "Peer"
 msgstr "Одноранговый узел"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8014
+#: src/libnmc-setting/nm-meta-setting-desc.c:8295
 msgid "WiMAX NSP name"
 msgstr "Имя WiMAX NSP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8051
-#: src/libnmc-setting/nm-meta-setting-desc.c:8247
+#: src/libnmc-setting/nm-meta-setting-desc.c:8332
+#: src/libnmc-setting/nm-meta-setting-desc.c:8543
 msgid "Cloned MAC [none]"
 msgstr "Клонированный MAC [нет]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8100
+#: src/libnmc-setting/nm-meta-setting-desc.c:8381
 msgid ""
 "Enter a list of subchannels (comma or space separated).\n"
 "\n"
@@ -6029,7 +6110,7 @@ msgstr ""
 "\n"
 "Пример: 0.0.0e20 0.0.0e21 0.0.0e22\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8456
+#: src/libnmc-setting/nm-meta-setting-desc.c:8752
 msgid ""
 "Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
 "and 2 or passphrase.\n"
@@ -6037,223 +6118,300 @@ msgstr ""
 "Укажите тип ключей WEP. Принимаемые значения: 0 (неизвестно), 1 (ключ), 2 "
 "(парольная фраза).\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8515
+#: src/libnmc-setting/nm-meta-setting-desc.c:8811
 msgid "Short address (<0x0000-0xffff>)"
 msgstr "Короткий адрес (<0x0000-0xffff>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8531
+#: src/libnmc-setting/nm-meta-setting-desc.c:8827
 msgid "PAN Identifier (<0x0000-0xffff>)"
 msgstr "Идентификатор PAN (<0x0000-0xffff>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8546
+#: src/libnmc-setting/nm-meta-setting-desc.c:8842
 msgid "Page (<default|0-31>)"
 msgstr "Страница (<default|0-31>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8560
+#: src/libnmc-setting/nm-meta-setting-desc.c:8856
 msgid "Channel (<default|0-26>)"
 msgstr "Канал (<default|0-26>)"
 
 #. ***************************************************************************
-#: src/libnmc-setting/nm-meta-setting-desc.c:8695
+#: src/libnmc-setting/nm-meta-setting-desc.c:8991
 msgid "6LOWPAN settings"
 msgstr "Параметры 6LOWPAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8696
+#: src/libnmc-setting/nm-meta-setting-desc.c:8992
 msgid "802-1x settings"
 msgstr "Параметры 802-1x"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8698
+#: src/libnmc-setting/nm-meta-setting-desc.c:8994
 msgid "bluetooth connection"
 msgstr "Подключение bluetooth"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8699
+#: src/libnmc-setting/nm-meta-setting-desc.c:8995
 msgid "Bond device"
 msgstr "Устройство bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8700
+#: src/libnmc-setting/nm-meta-setting-desc.c:8996
 msgid "Bond port"
 msgstr "Порт bond"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8701
+#: src/libnmc-setting/nm-meta-setting-desc.c:8997
 msgid "Bridge device"
 msgstr "Устройство мост"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8702
+#: src/libnmc-setting/nm-meta-setting-desc.c:8998
 msgid "Bridge port"
 msgstr "Порт устройства мост"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8703
+#: src/libnmc-setting/nm-meta-setting-desc.c:8999
 msgid "CDMA mobile broadband connection"
 msgstr "Мобильное широкополосное подключение CDMA"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8704
+#: src/libnmc-setting/nm-meta-setting-desc.c:9000
 msgid "General settings"
 msgstr "Общие параметры"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8705
+#: src/libnmc-setting/nm-meta-setting-desc.c:9001
 msgid "DCB settings"
 msgstr "Параметры DCB (мост ЦОД)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8706
+#: src/libnmc-setting/nm-meta-setting-desc.c:9002
 msgid "Dummy settings"
 msgstr "Параметры-заглушки"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8707
+#: src/libnmc-setting/nm-meta-setting-desc.c:9003
 msgid "Ethtool settings"
 msgstr "Параметры ethtool"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8708
+#: src/libnmc-setting/nm-meta-setting-desc.c:9004
 msgid "Generic settings"
 msgstr "Базовые параметры"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8709
+#: src/libnmc-setting/nm-meta-setting-desc.c:9005
 msgid "GSM mobile broadband connection"
 msgstr "Мобильное широкополосное подключение GSM"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8710
+#: src/libnmc-setting/nm-meta-setting-desc.c:9006
 msgid "Hostname settings"
 msgstr "Параметры имени хоста"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8711
+#: src/libnmc-setting/nm-meta-setting-desc.c:9007
 msgid "HSR settings"
 msgstr "Настройки HSR"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8713
+#: src/libnmc-setting/nm-meta-setting-desc.c:9009
 msgid "IPv4 protocol"
 msgstr "Протокол IPv4"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8714
+#: src/libnmc-setting/nm-meta-setting-desc.c:9010
 msgid "IPv6 protocol"
 msgstr "Протокол IPv6"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8715
+#: src/libnmc-setting/nm-meta-setting-desc.c:9011
 msgid "IP-tunnel settings"
 msgstr "Параметры туннеля IP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8716
+#: src/libnmc-setting/nm-meta-setting-desc.c:9012
+msgid "IPVLAN settings"
+msgstr "Параметры IPVLAN"
+
+#: src/libnmc-setting/nm-meta-setting-desc.c:9013
 msgid "Link settings"
 msgstr "Параметры канала"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8717
+#: src/libnmc-setting/nm-meta-setting-desc.c:9014
 msgid "Loopback settings"
 msgstr "Параметры loopback"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8718
+#: src/libnmc-setting/nm-meta-setting-desc.c:9015
 msgid "MACsec connection"
 msgstr "Подключение MACsec"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8719
+#: src/libnmc-setting/nm-meta-setting-desc.c:9016
 msgid "macvlan connection"
 msgstr "Подключение macvlan"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8720
+#: src/libnmc-setting/nm-meta-setting-desc.c:9017
 msgid "Match"
 msgstr "Соответствие"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8721
+#: src/libnmc-setting/nm-meta-setting-desc.c:9018
 msgid "OLPC Mesh connection"
 msgstr "Подключение OLPC Mesh"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8722
+#: src/libnmc-setting/nm-meta-setting-desc.c:9019
 msgid "Open vSwitch bridge settings"
 msgstr "Параметры моста Open vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8723
+#: src/libnmc-setting/nm-meta-setting-desc.c:9020
 msgid "Open vSwitch DPDK interface settings"
 msgstr "Параметры интерфейса Open vSwitch DPDK"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8724
+#: src/libnmc-setting/nm-meta-setting-desc.c:9021
 msgid "OVS Other Config"
 msgstr "Другая конфигурация OVS"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8725
+#: src/libnmc-setting/nm-meta-setting-desc.c:9022
 msgid "OVS External IDs"
 msgstr "Внешние идентификаторы OVS"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8726
+#: src/libnmc-setting/nm-meta-setting-desc.c:9023
 msgid "Open vSwitch interface settings"
 msgstr "Параметры интерфейса Open vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8727
+#: src/libnmc-setting/nm-meta-setting-desc.c:9024
 msgid "Open vSwitch patch interface settings"
 msgstr "Параметры патч-интерфейса Open vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8728
+#: src/libnmc-setting/nm-meta-setting-desc.c:9025
 msgid "Open vSwitch port settings"
 msgstr "Параметры порта Open vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8729
+#: src/libnmc-setting/nm-meta-setting-desc.c:9026
 msgid "PPP settings"
 msgstr "Параметры PPP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8730
+#: src/libnmc-setting/nm-meta-setting-desc.c:9027
 msgid "PPPoE"
 msgstr "PPPoE"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8731
+#: src/libnmc-setting/nm-meta-setting-desc.c:9028
+msgid "Prefix delegation settings"
+msgstr "Параметры делегирования префиксов"
+
+#: src/libnmc-setting/nm-meta-setting-desc.c:9029
 msgid "Proxy"
 msgstr "Прокси"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8732
+#: src/libnmc-setting/nm-meta-setting-desc.c:9030
 msgid "Serial settings"
 msgstr "Параметры последовательного порта"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8733
+#: src/libnmc-setting/nm-meta-setting-desc.c:9031
 msgid "SR-IOV settings"
 msgstr "Параметры SR-IOV"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8734
+#: src/libnmc-setting/nm-meta-setting-desc.c:9032
 msgid "Traffic controls"
 msgstr "Контроль трафика"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8735
+#: src/libnmc-setting/nm-meta-setting-desc.c:9033
 msgid "Team device"
 msgstr "Устройство Team"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8736
+#: src/libnmc-setting/nm-meta-setting-desc.c:9034
 msgid "Team port"
 msgstr "Порт агрегации team"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8737
+#: src/libnmc-setting/nm-meta-setting-desc.c:9035
 msgid "Tun device"
 msgstr "Устройство Tun"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8738
+#: src/libnmc-setting/nm-meta-setting-desc.c:9036
 msgid "User settings"
 msgstr "Параметры пользователя"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8744
+#: src/libnmc-setting/nm-meta-setting-desc.c:9042
 msgid "Wi-Fi P2P connection"
 msgstr "Подключение Wi-Fi P2P"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8745
+#: src/libnmc-setting/nm-meta-setting-desc.c:9043
 msgid "WiMAX connection"
 msgstr "Подключение WiMAX"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8746
+#: src/libnmc-setting/nm-meta-setting-desc.c:9044
 msgid "Wired Ethernet"
 msgstr "Проводной Ethernet"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8747
+#: src/libnmc-setting/nm-meta-setting-desc.c:9045
 msgid "WireGuard VPN settings"
 msgstr "Параметры WireGuard VPN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8748
+#: src/libnmc-setting/nm-meta-setting-desc.c:9046
 msgid "Wi-Fi connection"
 msgstr "Подключение Wi-Fi"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8749
+#: src/libnmc-setting/nm-meta-setting-desc.c:9047
 msgid "Wi-Fi security settings"
 msgstr "Параметры безопасности Wi-Fi"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8750
+#: src/libnmc-setting/nm-meta-setting-desc.c:9048
 msgid "WPAN settings"
 msgstr "Параметры WPAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:9179
+#: src/libnmc-setting/nm-meta-setting-desc.c:9478
 msgid "name"
 msgstr "имя"
 
+#: src/libnmc-setting/nm-meta-setting-desc.h:15
+msgid "<hidden>"
+msgstr "<скрыто>"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:17
+msgid "Protocol"
+msgstr "Протокол"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:22
+msgid "ADSL encapsulation"
+msgstr "Инкапсуляция ADSL"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:26
+msgid "Connection type"
+msgstr "Тип подключения"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:27
+msgid "Interface name"
+msgstr "Имя интерфейса"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:28
+msgid "VPN type"
+msgstr "Тип VPN"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:29
+msgid "Master"
+msgstr "Основной"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:31
+#: src/nmtui/nmt-page-infiniband.c:73
+msgid "Transport mode"
+msgstr "Режим транспорта"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:38
+msgid "Bluetooth type"
+msgstr "Тип Bluetooth"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:47
+msgid "Bonding mode"
+msgstr "Режим связки"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:55
+msgid "Wi-Fi mode"
+msgstr "Режим Wi-Fi"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:64
+msgid "Tun mode"
+msgstr "Режим Tun"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:70
+msgid "IP Tunnel mode"
+msgstr "Режим IP-туннеля"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:72
+msgid "IPVLAN mode"
+msgstr "Режим IPVLAN"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:74
+msgid "MACVLAN mode"
+msgstr "Режим MACVLAN mode"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:76
+msgid "MACsec mode"
+msgstr "Режим MACsec"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:82
+msgid "Proxy method"
+msgstr "Прокси-метод"
+
 #. Generated file. Do not edit.
 #: src/libnmc-setting/settings-docs.h.in:3
 msgid ""
@@ -6304,7 +6462,6 @@ msgstr ""
 "промежуток времени, либо несколько раз."
 
 #: src/libnmc-setting/settings-docs.h.in:5
-#, fuzzy
 msgid ""
 "Whether or not ports of this connection should be automatically brought up "
 "when NetworkManager activates this connection. This only has a real effect "
@@ -6315,15 +6472,18 @@ msgid ""
 "set, global connection.autoconnect-ports is read to determine the real "
 "value. If it is default as well, this fallbacks to 0."
 msgstr ""
-"Будут ли при активации данного подключения автоматически активироваться "
-"ведомые подключения. Параметр фактически влияет только на ведущие "
-"подключения. Параметры \"autoconnect\", \"autoconnect-priority\" и "
+"Будут ли при активации данного подключения автоматически активироваться его по"
+"рты. "
+"Параметр фактически влияет только на подключения контроллера. Параметры \"auto"
+"connect\", \"autoconnect-priority\" и "
 "\"autoconnect-retries\" к данному параметру отношения не имеют. Разрешённые "
-"значения: «0» — не трогать ведомые подключения, «1» — при активации данного "
-"подключения активировать все ведомые, «-1» — по умолчанию. При указании «-»1 "
-"(по умолчанию) читается значение глобального параметра в connection."
-"autoconnect-slaves. Если и оно ссылается на параметр по умолчанию, то данный "
-"параметр откатывается на значение «0»."
+"значения: «0» — не трогать подключения портов, «1» — активировать все подключе"
+"ния порта "
+"вместе с данным подключением, «-1» — по умолчанию. При указании «-1» "
+"(по умолчанию) читается значение глобального параметра connection.autoconnect-"
+"ports. "
+"Если и оно ссылается на параметр по умолчанию, то данный параметр откатывается"
+" на значение 0."
 
 #: src/libnmc-setting/settings-docs.h.in:6
 msgid ""
@@ -6358,27 +6518,31 @@ msgstr ""
 "пытаться выполнить автоматическое подключение."
 
 #: src/libnmc-setting/settings-docs.h.in:8
-#, fuzzy
 msgid ""
-"Whether or not slaves of this connection should be automatically brought up "
+"Whether or not ports of this connection should be automatically brought up "
 "when NetworkManager activates this connection. This only has a real effect "
-"for master connections. The properties \"autoconnect\", \"autoconnect-"
+"for controller connections. The properties \"autoconnect\", \"autoconnect-"
 "priority\" and \"autoconnect-retries\" are unrelated to this setting. The "
-"permitted values are: 0: leave slave connections untouched, 1: activate all "
-"the slave connections with this connection, -1: default. If -1 (default) is "
+"permitted values are: 0: leave port connections untouched, 1: activate all "
+"the port connections with this connection, -1: default. If -1 (default) is "
 "set, global connection.autoconnect-slaves is read to determine the real "
 "value. If it is default as well, this fallbacks to 0. Deprecated 1.46. Use "
 "\"autoconnect-ports\" instead, this is just an alias."
 msgstr ""
-"Будут ли при активации данного подключения автоматически активироваться "
-"ведомые подключения. Параметр фактически влияет только на ведущие "
-"подключения. Параметры \"autoconnect\", \"autoconnect-priority\" и "
+"Будут ли при активации данного подключения автоматически активироваться его по"
+"рты. "
+"Параметр фактически влияет только на подключения контроллера. Параметры \"auto"
+"connect\", \"autoconnect-priority\" и "
 "\"autoconnect-retries\" к данному параметру отношения не имеют. Разрешённые "
-"значения: «0» — не трогать ведомые подключения, «1» — при активации данного "
-"подключения активировать все ведомые, «-1» — по умолчанию. При указании «-»1 "
-"(по умолчанию) читается значение глобального параметра в connection."
-"autoconnect-slaves. Если и оно ссылается на параметр по умолчанию, то данный "
-"параметр откатывается на значение «0»."
+"значения: «0» — не трогать подключения портов, «1» — активировать все подключе"
+"ния порта "
+"вместе с данным подключением, «-1» — по умолчанию. При указании «-1» "
+"(по умолчанию) читается значение глобального параметра connection.autoconnect-"
+"ports. "
+"Если и оно ссылается на параметр по умолчанию, то данный параметр откатывается"
+" на значение 0. Устарело в версии 1.46. Используйте \"autoconnect-ports\", дан"
+"ный параметр является "
+"только псевдонимом."
 
 #: src/libnmc-setting/settings-docs.h.in:9
 msgid ""
@@ -6415,6 +6579,12 @@ msgid ""
 "specified, then the global value from NetworkManager configuration is looked "
 "up, if not set, it is considered as \"no\" (0)."
 msgstr ""
+"Нужно ли прерывать подключение перед выключением системы. Значение по умолчани"
+"ю: «по умолчанию» (-1). "
+"При указании значения по умолчанию будет выполнено обнаружение глобального зна"
+"чения "
+"из конфигурации NetworkManager, при её отсутствии значением считается «нет» (0"
+")."
 
 #: src/libnmc-setting/settings-docs.h.in:12
 msgid ""
@@ -6456,10 +6626,63 @@ msgstr ""
 "примениться к неправильному интерфейсу."
 
 #: src/libnmc-setting/settings-docs.h.in:15
+msgid ""
+"The property specifies a list of target IP addresses for pinging. When "
+"multiple targets are set, NetworkManager will start multiple ping processes "
+"in parallel. This property can only be set if connection.ip-ping-timeout is "
+"set. The ip-ping-timeout is used to delay the success of IP addressing until "
+"either the specified timeout (in seconds) is reached, or an target IP "
+"address replies to a ping. Configuring \"ip-ping-addresses\" may delay "
+"reaching the systemd's network-online.target due to waiting for the ping "
+"operations to complete or timeout."
+msgstr ""
+"Данный параметр настраивает список целевых адресов IP для выполнения проверки "
+"ping. "
+"При наличии нескольких целей NetworkManager запустит несколько параллельных пр"
+"оцессов ping. "
+"Данный параметр можно настроить только при наличии настроенного параметра conn"
+"ection.ip-ping-timeout. "
+"Параметр ip-ping-timeout используется для задержки успешного результата адреса"
+"ции IP до момента "
+"истечения указанного времени ожидания (в сек.), либо до момента ответа целевог"
+"о адреса на ping. "
+"Настроенный параметр \"ip-ping-addresses\" может задержать достижение цели sys"
+"temd "
+"network-online.target из-за ожидания завершения операций ping или истечения вр"
+"емени ожидания."
+
+#: src/libnmc-setting/settings-docs.h.in:16
+msgid ""
+"The property determines whether it is sufficient for any ping check to "
+"succeed among \"ip-ping-addresses\", or if all ping checks must succeed for "
+"\"ip-ping-addresses\"."
+msgstr ""
+"Этот параметр определяет, достаточно ли будет одной успешной проверки ping для"
+" любого "
+"из \"ip-ping-addresses\", либо все проверки ping должны быть успешными для все"
+"х \"ip-ping-addresses\"."
+
+#: src/libnmc-setting/settings-docs.h.in:17
+msgid ""
+"If greater than zero, delay success of IP addressing until either the "
+"specified timeout (in seconds) is reached, or a target IP address replies to "
+"a ping. The property specifies the timeout for the \"ip-ping-addresses\". "
+"This property is incompatible with \"gateway-ping-timeout\", you cannot set "
+"these two properties at the same time."
+msgstr ""
+"При значении больше нуля успешная адресация IP будет задерживаться либо до "
+"истечения времени ожидания, либо пока шлюз IP не ответит на ping. Данный парам"
+"етр "
+"настраивает время ожидания для \"ip-ping-addresses\". Данный параметр несовмес"
+"тим с "
+"параметром \"gateway-ping-timeout\", эти два параметра нельзя настроить одновр"
+"еменно."
+
+#: src/libnmc-setting/settings-docs.h.in:18
 msgid "Whether LLDP is enabled for the connection."
 msgstr "Используется ли в подключении протокол LLDP."
 
-#: src/libnmc-setting/settings-docs.h.in:16
+#: src/libnmc-setting/settings-docs.h.in:19
 msgid ""
 "Whether Link-Local Multicast Name Resolution (LLMNR) is enabled for the "
 "connection. LLMNR is a protocol based on the Domain Name System (DNS) packet "
@@ -6483,17 +6706,18 @@ msgstr ""
 "поддерживающего LLMNR, в противном случае параметр ни на что не влияет. "
 "Одним из таких модулей является dns-systemd-resolved."
 
-#: src/libnmc-setting/settings-docs.h.in:17
+#: src/libnmc-setting/settings-docs.h.in:20
 msgid ""
-"Interface name of the master device or UUID of the master connection. "
-"Deprecated 1.46. Use \"controller\" instead, this is just an alias."
+"Interface name of the controller device or UUID of the controller "
+"connection. Deprecated 1.46. Use \"controller\" instead, this is just an "
+"alias."
 msgstr ""
-"Имя интерфейса ведущего устройств, или UUID главного подключения. Устарело с "
-"версии 1.46. Данный параметр является только псевдонимом, используйте вместо "
-"него «контроллер»."
+"Имя интерфейса устройства контроллера или UUID подключения контроллера. Устаре"
+"ло "
+"в версии 1.46. Используйте параметр «контроллер», данный параметр является "
+"только псевдонимом."
 
-#: src/libnmc-setting/settings-docs.h.in:18
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:21
 msgid ""
 "Whether mDNS is enabled for the connection. The permitted values are: "
 "\"yes\" (2) register hostname and resolving for the connection, \"no\" (0) "
@@ -6505,17 +6729,25 @@ msgid ""
 "supported DNS plugin is systemd-resolved. For systemd-resolved, the default "
 "is configurable via MulticastDNS= setting in resolved.conf."
 msgstr ""
-"Используется ли в подключении mDNS. Допустимые значения: «yes» (2) "
-"зарегистрировать имя хоста и разрешить подключение; «no» (0) отключить mDNS "
-"для интерфейса; «resolve» (1) не регистрировать имя хоста, но включить "
-"разрешение имён хостов mDNS, и \"default\" (-1) разрешить поиск глобального "
-"значения по умолчанию в NetworkManager.conf. Если не указано, значение "
-"\"default\" в итоге зависит от модуля DNS (что для systemd-resolved на "
-"данный момент означает «no»). Данный параметр требует модуля, "
-"поддерживающего mDNS, в противном случае параметр ни на что не влияет. Одним "
-"из таких модулей является dns-systemd-resolved."
+"Используется ли mDNS в подключении. Допустимые значения: «yes» (2) — зарегистр"
+"ировать "
+"имя хоста и разрешение имён для подключения; \"no\" (0) —  отключить использов"
+"ание mDNS для "
+"этого интерфейса; \"resolve\" (1) — не регистрировать имя хоста, но допустить "
+"разрешение имён "
+"хостов  mDNS; \"default\" (-1) — допустить поиск глобального значения по умолч"
+"анию из "
+"NetworkManager.conf. Если значение не указано, то значение \"default\" в итоге"
+" зависит от модуля "
+"DNS. Данный параметр требует модуля с поддержкой mDNS, в противном случае пара"
+"метр ни "
+"на что не влияет. На данный момент единственным поддерживаемым модулём DNS явл"
+"яется "
+"systemd-resolved. Для systemd-resolved значение по умолчанию настраивается с п"
+"омощью параметра "
+"«MulticastDNS=» в resolved.conf."
 
-#: src/libnmc-setting/settings-docs.h.in:19
+#: src/libnmc-setting/settings-docs.h.in:22
 msgid ""
 "Whether the connection is metered. When updating this property on a "
 "currently activated connection, the change takes effect immediately."
@@ -6523,7 +6755,7 @@ msgstr ""
 "Является ли подключение лимитным. Изменение значения этого свойства для "
 "текущего активного подключения вступает в силу немедленно."
 
-#: src/libnmc-setting/settings-docs.h.in:20
+#: src/libnmc-setting/settings-docs.h.in:23
 msgid ""
 "Whether to configure MPTCP endpoints and the address flags. If MPTCP is "
 "enabled in NetworkManager, it will configure the addresses of the interface "
@@ -6594,7 +6826,7 @@ msgstr ""
 "обработке MPTCP адресов IPv4 на интерфейсе, NetworkManager меняет строгую "
 "фильтрацию (1) на нестрогую (2)."
 
-#: src/libnmc-setting/settings-docs.h.in:21
+#: src/libnmc-setting/settings-docs.h.in:24
 msgid ""
 "If configured, set to a Manufacturer Usage Description (MUD) URL that points "
 "to manufacturer-recommended network policies for IoT devices. It is "
@@ -6614,7 +6846,7 @@ msgstr ""
 "подключения . Если и оно не указано, окончательное значение по умолчанию — "
 "\"none\"."
 
-#: src/libnmc-setting/settings-docs.h.in:22
+#: src/libnmc-setting/settings-docs.h.in:25
 msgid ""
 "Specifies whether the profile can be active multiple times at a particular "
 "moment. The value is of type NMConnectionMultiConnect."
@@ -6622,7 +6854,7 @@ msgstr ""
 "Указывает, может ли профиль иметь множество активных инстанций в один момент "
 "времени. Значение имеет тип NMConnectionMultiConnect."
 
-#: src/libnmc-setting/settings-docs.h.in:23
+#: src/libnmc-setting/settings-docs.h.in:26
 msgid ""
 "An array of strings defining what access a given user has to this "
 "connection.  If this is NULL or empty, all users are allowed to access this "
@@ -6651,21 +6883,19 @@ msgstr ""
 "использования в будущем. Вся информация в [type], [id] и [reserved] должна "
 "указываться в кодировке UTF-8."
 
-#: src/libnmc-setting/settings-docs.h.in:24
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:27
 msgid ""
 "Setting name of the device type of this port's controller connection (eg, "
 "\"bond\"), or NULL if this connection is not a port."
 msgstr ""
-"Имя параметра типа устройства подключения, являющего основным для данного "
-"подчинённого подключения (например, \"bond\"), либо NULL, если данное "
-"подключение не является подчинённым."
+"Имя параметра типа устройства для подключения контроллера этого порта "
+"(например, \"bond\"), либо NULL, если данное подключение не является портом."
 
-#: src/libnmc-setting/settings-docs.h.in:25
+#: src/libnmc-setting/settings-docs.h.in:28
 msgid "This property is deprecated and has no meaning."
 msgstr "Это свойство устарело и не имеет смысла."
 
-#: src/libnmc-setting/settings-docs.h.in:26
+#: src/libnmc-setting/settings-docs.h.in:29
 msgid ""
 "List of connection UUIDs that should be activated when the base connection "
 "itself is activated. Currently, only VPN connections are supported."
@@ -6673,22 +6903,23 @@ msgstr ""
 "Список UUID подключений, которые должны быть активированы при активации "
 "базового подключения. На данный момент поддерживаются только подключения VPN."
 
-#: src/libnmc-setting/settings-docs.h.in:27
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:30
 msgid ""
-"Setting name of the device type of this slave's master connection (eg, "
-"\"bond\"), or NULL if this connection is not a slave. Deprecated 1.46. Use "
+"Setting name of the device type of this port's controller connection (eg, "
+"\"bond\"), or NULL if this connection is not a port. Deprecated 1.46. Use "
 "\"port-type\" instead, this is just an alias."
 msgstr ""
-"Имя параметра типа устройства подключения, являющего основным для данного "
-"подчинённого подключения (например, \"bond\"), либо NULL, если данное "
-"подключение не является подчинённым."
+"Название параметра типа устройства подключения контроллера данного порта (напр"
+"имер, \"bond\"), "
+"либо NULL, если данное подключение не является портом. Устарело с версии 1.46."
+" Используйте "
+"параметр \"port-type\", данный параметр является только псевдонимом."
 
-#: src/libnmc-setting/settings-docs.h.in:28
+#: src/libnmc-setting/settings-docs.h.in:31
 msgid ""
 "This represents the identity of the connection used for various purposes. It "
-"allows to configure multiple profiles to share the identity. Also, the "
-"stable-id can contain placeholders that are substituted dynamically and "
+"allows configuring multiple profiles to share the identity. Also, the stable-"
+"id can contain placeholders that are substituted dynamically and "
 "deterministically depending on the context. The stable-id is used for "
 "generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-"
 "privacy. It is also used to seed the generated cloned MAC address for "
@@ -6707,58 +6938,65 @@ msgid ""
 "activation time. Currently, supported are \"${CONNECTION}\", \"${DEVICE}\", "
 "\"${MAC}\", \"${NETWORK_SSID}\", \"${BOOT}\", \"${RANDOM}\".  These "
 "effectively create unique IDs per-connection, per-device, per-SSID, per-"
-"boot, or every time.  The \"${CONNECTION}\" uses the profile's connection."
-"uuid, the \"${DEVICE}\" uses the interface name of the device and \"${MAC}\" "
-"the permanent MAC address of the device. \"${NETWORK_SSID}\" uses the SSID "
-"for Wi-Fi networks and falls back to \"${CONNECTION}\" on other networks. "
-"Any unrecognized patterns following '$' are treated verbatim, however are "
-"reserved for future use. You are thus advised to avoid '$' or escape it as "
-"\"$$\".  For example, set it to \"${CONNECTION}-${BOOT}-${DEVICE}\" to "
-"create a unique id for this connection that changes with every reboot and "
-"differs depending on the interface where the profile activates. If the value "
-"is unset, a global connection default is consulted. If the value is still "
-"unset, the default is \"default${CONNECTION}\" go generate an ID unique per "
-"connection profile."
+"boot, or every time.  The \"${CONNECTION}\" uses the profile's "
+"connection.uuid, the \"${DEVICE}\" uses the interface name of the device and "
+"\"${MAC}\" the permanent MAC address of the device. \"${NETWORK_SSID}\" uses "
+"the SSID for Wi-Fi networks and falls back to \"${CONNECTION}\" on other "
+"networks. Any unrecognized patterns following '$' are treated verbatim, "
+"however are reserved for future use. You are thus advised to avoid '$' or "
+"escape it as \"$$\".  For example, set it to \"${CONNECTION}-${BOOT}-$"
+"{DEVICE}\" to create a unique id for this connection that changes with every "
+"reboot and differs depending on the interface where the profile activates. "
+"If the value is unset, a global connection default is consulted. If the "
+"value is still unset, the default is \"default${CONNECTION}\" go generate an "
+"ID unique per connection profile."
 msgstr ""
 "Представляет собой идентификатор соединения, используется для различных "
-"целей. Позволяет настроить несколько профилей для совместного использования "
-"идентификатора. Кроме того, stable-id может содержать заполнители, "
-"наполняемые динамически и детерминированно, в зависимости от контекста. "
-"stable-id используется для создания стабильных закрытых адресов IPv6 с «ipv6."
-"addr-gen-mode=stable-privacy». Также используется для заполнения созданных "
-"клонированных адресов MAC для ethernet.cloned-mac-address=stable и wifi."
-"cloned-mac-address=stable. Также используется для получения идентификатора "
-"клиента DHCP с «ipv4.dhcp-client-id=stable», DUID DHCPv6 с «ipv6.dhcp-"
-"duid=stable-[llt,ll,uuid]» и IAID DHCP с «ipv4.iaid=stable» и «ipv6."
-"iaid=stable». Обратите внимание, что, в зависимости от контекста "
-"использования, в алгоритм создания закладываются и другие параметры. "
-"Например, как правило, закладываются ключи на каждый хост, чтобы разные "
-"системы создавали разные идентификаторы. Или, если используется «ipv6.addr-"
-"gen-mode=stable-privacy», включается также и имя устройства, чтобы разные "
-"интерфейсы получали разные адреса. Ключ на каждый хост является "
+"целей. Позволяет настроить несколько профилей для совместного "
+"использования идентификатора. Кроме того, stable-id может содержать "
+"заполнители, наполняемые динамически и детерминированно, в "
+"зависимости от контекста. stable-id используется для создания стабильных "
+"закрытых адресов IPv6 с «ipv6.addr-gen-mode=stable-privacy». Также "
+"используется для заполнения созданных клонированных адресов MAC для "
+"ethernet.cloned-mac-address=stable и wifi.cloned-mac-address=stable. Также "
+"используется для получения идентификатора клиента DHCP с «ipv4.dhcp-"
+"client-id=stable», DUID DHCPv6 с «ipv6.dhcp-duid=stable-[llt,ll,uuid]» и IAID "
+"DHCP с «ipv4.iaid=stable» и «ipv6.iaid=stable». Обратите внимание, что, в "
+"зависимости от контекста использования, в алгоритм создания закладываются и "
+"другие параметры. Например, как правило, закладываются ключи на каждый хост, "
+"чтобы разные системы создавали разные идентификаторы. Или, если используется "
+"«ipv6.addr-gen-mode=stable-privacy», включается также и имя устройства, чтобы "
+"разные интерфейсы получали разные адреса. Ключ на каждый хост является "
 "идентификатором вашей машины и хранится в файле /var/lib/NetworkManager/"
 "secret_key. Сведения о secret-key и идентификаторе хоста см. в руководстве "
-"NetworkManager(8). Символ '$' считается специальным, для выполнения "
-"динамических замен в момент активации. В настоящее время поддерживаются "
-"следующие значения: \"${CONNECTION}\", \"${DEVICE}\", \"${MAC}\", "
-"\"${NETWORK_SSID}\", \"${BOOT}\", \"${RANDOM}\".  Эти значения фактически "
-"создают уникальные идентификаторы на каждое соединение, устройство, SSID, на "
-"каждую загрузку системы или всегда. \"${CONNECTION}\" использует «connection."
-"uuid» профиля, \"${DEVICE}\" использует имя интерфейса устройства, "
-"\"${MAC}\" использует постоянный адрес MAC устройства. \"${NETWORK_SSID}\" "
-"использует SSID для сетей Wi-Fi и откатывается к значению \"${CONNECTION}\" "
-"в других сетях. Любые нераспознанные шаблоны, следующие за '$', "
-"истолковываются буквально, но резервируются для будущего использования. "
-"Поэтому рекомендуется избегать символ '$' или экранировать его как \"$$\".  "
-"Например, задайте значение \"${CONNECTION}-${BOOT}-${DEVICE}\", чтобы "
-"создать уникальный идентификатор соединения, который будет меняться при "
-"каждой перезагрузке и будет отличаться в зависимости от интерфейса, на "
-"котором активируется профиль. Если значение не установлено, используется "
-"глобальное значение подключения по умолчанию. Если и это значение не задано, "
-"по умолчанию будет использоваться \"default${CONNECTION}\" для создания "
-"уникального идентификатора на каждый из профилей подключения."
+"NetworkManager(8). Символ '$' считается специальным, для "
+"выполнения динамических замен в момент активации. В настоящее время "
+"поддерживаются следующие значения: \"${CONNECTION}\", \"${DEVICE}\", "
+"\"${MAC}\", \"${NETWORK_SSID}\", \"${BOOT}\", \"${RANDOM}\".  Эти значения фак"
+"тически "
+"создают уникальные идентификаторы на каждое соединение, устройство, SSID, "
+"на каждую загрузку системы или всегда. \"${CONNECTION}\" использует «connectio"
+"n.uuid» профиля, "
+"\"${DEVICE}\" использует имя интерфейса устройства, \"${MAC}\" использует пост"
+"оянный адрес MAC "
+"устройства. \"${NETWORK_SSID}\" использует SSID для сетей Wi-Fi и откатывается"
+" к значению "
+"\"${CONNECTION}\" в других сетях. Любые нераспознанные шаблоны, следующие "
+"за '$', истолковываются буквально, но резервируются для будущего "
+"использования. Поэтому рекомендуется избегать символ '$' или экранировать его "
+"как "
+"\"$$\".  Например, задайте значение \"${CONNECTION}-${BOOT}-${DEVICE}\", "
+"чтобы создать уникальный идентификатор соединения, который будет "
+"меняться при каждой перезагрузке и будет отличаться в зависимости от интерфейс"
+"а, "
+"на котором активируется профиль. Если значение не установлено, используется "
+"глобальное значение подключения по умолчанию. Если и это значение не задано, п"
+"о "
+"умолчанию будет использоваться \"default${CONNECTION}\" для создания уникально"
+"го "
+"идентификатора на каждый из профилей подключения."
 
-#: src/libnmc-setting/settings-docs.h.in:29
+#: src/libnmc-setting/settings-docs.h.in:32
 msgid ""
 "The time, in seconds since the Unix Epoch, that the connection was last "
 "_successfully_ fully activated. NetworkManager updates the connection "
@@ -6772,7 +7010,7 @@ msgstr ""
 "свойство предназначено только для чтения (вносимые изменения сохранены не "
 "будут)."
 
-#: src/libnmc-setting/settings-docs.h.in:30
+#: src/libnmc-setting/settings-docs.h.in:33
 msgid ""
 "Base type of the connection. For hardware-dependent connections, should "
 "contain the setting name of the hardware-type specific setting (ie, \"802-3-"
@@ -6787,7 +7025,7 @@ msgstr ""
 "необходимо указать имя параметра типа подключения (например, \"vpn\" или "
 "\"мост\" и т.д.)"
 
-#: src/libnmc-setting/settings-docs.h.in:31
+#: src/libnmc-setting/settings-docs.h.in:34
 msgid ""
 "The connection.uuid is the real identifier of a profile. It cannot change "
 "and it must be unique. It is therefore often best to refer to a profile by "
@@ -6802,7 +7040,7 @@ msgstr ""
 "случайного UUID допускаются специальные значения \"new\", \"generate\" и "
 "\"\"."
 
-#: src/libnmc-setting/settings-docs.h.in:32
+#: src/libnmc-setting/settings-docs.h.in:35
 msgid ""
 "Time in milliseconds to wait for connection to be considered activated. The "
 "wait will start after the pre-up dispatcher event. The value 0 means no wait "
@@ -6814,7 +7052,7 @@ msgstr ""
 "диспетчера. Значение «0» означает без ожидания. Значение по умолчанию: «-1», "
 "что на данный момент равно значению «без ожидания»."
 
-#: src/libnmc-setting/settings-docs.h.in:33
+#: src/libnmc-setting/settings-docs.h.in:36
 msgid ""
 "Timeout in milliseconds to wait for device at startup. During boot, devices "
 "may take a while to be detected by the driver. This property will cause to "
@@ -6834,7 +7072,7 @@ msgstr ""
 "не будет. Значением по умолчанию является «-1», что на данном этапе означает "
 "то же самое, что и отсутствие времени ожидания."
 
-#: src/libnmc-setting/settings-docs.h.in:34
+#: src/libnmc-setting/settings-docs.h.in:37
 msgid ""
 "The trust level of a the connection.  Free form case-insensitive string (for "
 "example \"Home\", \"Work\", \"Public\").  NULL or unspecified zone means the "
@@ -6848,7 +7086,7 @@ msgstr ""
 "умолчанию, как определено брандмауэром. При обновлении этого свойства в "
 "текущем подключении изменение вступает в силу немедленно."
 
-#: src/libnmc-setting/settings-docs.h.in:35
+#: src/libnmc-setting/settings-docs.h.in:38
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
 "which this 6LowPAN interface should be created."
@@ -6856,7 +7094,7 @@ msgstr ""
 "Если задано, указывает имя родительского интерфейса или UUID родительского "
 "подключения, на базе которого должен быть создан этот интерфейс 6LowPAN."
 
-#: src/libnmc-setting/settings-docs.h.in:36
+#: src/libnmc-setting/settings-docs.h.in:39
 msgid ""
 "List of strings to be matched against the altSubjectName of the certificate "
 "presented by the authentication server. If the list is empty, no "
@@ -6866,7 +7104,7 @@ msgstr ""
 "представленного сервером аутентификации. Если список пуст, проверка "
 "подлинности altSubjectName сертификата сервера не выполняется."
 
-#: src/libnmc-setting/settings-docs.h.in:37
+#: src/libnmc-setting/settings-docs.h.in:40
 msgid ""
 "Anonymous identity string for EAP authentication methods.  Used as the "
 "unencrypted identity with EAP types that support different tunneled identity "
@@ -6876,7 +7114,7 @@ msgstr ""
 "Используется в качестве незашифрованного идентификатора с типами EAP, "
 "поддерживающими различные туннелированные идентификации, например,  EAP-TTLS."
 
-#: src/libnmc-setting/settings-docs.h.in:38
+#: src/libnmc-setting/settings-docs.h.in:41
 msgid ""
 "A timeout for the authentication. Zero means the global default; if the "
 "global default is not set, the authentication timeout is 25 seconds."
@@ -6885,8 +7123,7 @@ msgstr ""
 "по умолчанию; если глобальное значение по умолчанию не установлено, время "
 "истечения ожидания аутентификации составляет 25 секунд."
 
-#: src/libnmc-setting/settings-docs.h.in:39
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:42
 msgid ""
 "Contains the path to the CA certificate if used by the EAP method specified "
 "in the 802-1x.eap property. This property can be unset even if the EAP "
@@ -6895,21 +7132,16 @@ msgid ""
 "override this setting to use the built-in path, if the built-in path is not "
 "a directory."
 msgstr ""
-"При использовании с методом EAP, указанным параметром \"eap\", здесь "
-"содержится сертификат ЦС. Данные сертификата указываются с помощью схемы "
-"(\"scheme\"); поддерживаются три схемы на данный момент: «blob», pkcs#11 UR "
-"и «path». При использовании схемы «blob» в этом свойстве необходимо указать "
-"зашифрованные данные DER сертификата. При использовании схемы «path» в "
-"данном значении нужно указать полный путь до сертификата в кодировке UTF-8, "
-"с префиксом \"file://\" и заканчивающийся завершающим байтом NUL. Данное "
+"При использовании с методом EAP, указанным параметром «802-1x.eap», здесь "
+"содержится путь к сертификату ЦС. Данное "
 "свойство может не иметь значения, даже если метод EAP поддерживает "
 "сертификаты ЦС, но в таком случае может быть выполнена атака  «злоумышленник "
 "в середине», поэтому это НЕ рекомендуется. Обратите внимание, что включение "
-"использования «NMSetting8021x:system-ca-cert» перезапишет данное свойство, и "
+"использования «802-1x.system-ca-certs» перезапишет данное свойство, и "
 "будет использоваться встроенный путь, если этот встроенный путь не является "
 "каталогом."
 
-#: src/libnmc-setting/settings-docs.h.in:40
+#: src/libnmc-setting/settings-docs.h.in:43
 msgid ""
 "The password used to access the CA certificate stored in \"ca-cert\" "
 "property. Only makes sense if the certificate is stored on a PKCS#11 token "
@@ -6919,12 +7151,12 @@ msgstr ""
 "«ca-cert». Имеет смысл только в том случае, если сертификат хранится в "
 "токене PKCS # 11, для которого требуется указание данных учётной записи."
 
-#: src/libnmc-setting/settings-docs.h.in:41
+#: src/libnmc-setting/settings-docs.h.in:44
 msgid "Flags indicating how to handle the \"ca-cert-password\" property."
 msgstr ""
 "Флаги, указывающие, как нужно обрабатывать свойство «ca-cert-password»."
 
-#: src/libnmc-setting/settings-docs.h.in:42
+#: src/libnmc-setting/settings-docs.h.in:45
 msgid ""
 "UTF-8 encoded path to a directory containing PEM or DER formatted "
 "certificates to be added to the verification chain in addition to the "
@@ -6938,13 +7170,15 @@ msgstr ""
 "игнорируется при использовании свойства «NMSetting8021x:system-ca-certs» и "
 "если встроенный путь до ЦС является существующим каталогом."
 
-#: src/libnmc-setting/settings-docs.h.in:43
+#: src/libnmc-setting/settings-docs.h.in:46
 msgid ""
 "Contains the path to the client certificate if used by the EAP method "
 "specified in the 802-1x.eap property."
 msgstr ""
+"При использовании с методом EAP, указанным параметром «802-1x.eap», здесь "
+"содержится путь к сертификату клиента."
 
-#: src/libnmc-setting/settings-docs.h.in:44
+#: src/libnmc-setting/settings-docs.h.in:47
 msgid ""
 "The password used to access the client certificate stored in \"client-cert\" "
 "property. Only makes sense if the certificate is stored on a PKCS#11 token "
@@ -6955,12 +7189,12 @@ msgstr ""
 "хранится в токене PKCS # 11, для которого требуется указание данных учётной "
 "записи."
 
-#: src/libnmc-setting/settings-docs.h.in:45
+#: src/libnmc-setting/settings-docs.h.in:48
 msgid "Flags indicating how to handle the \"client-cert-password\" property."
 msgstr ""
 "Флаги, указывающие, как нужно обрабатывать свойство «client-cert-password»."
 
-#: src/libnmc-setting/settings-docs.h.in:46
+#: src/libnmc-setting/settings-docs.h.in:49
 msgid ""
 "Constraint for server domain name. If set, this list of FQDNs is used as a "
 "match requirement for dNSName element(s) of the certificate presented by the "
@@ -6978,7 +7212,7 @@ msgstr ""
 "Несколько допустимых FQDN можно передать в списке, разделяемом точкой с "
 "запятой (;)."
 
-#: src/libnmc-setting/settings-docs.h.in:47
+#: src/libnmc-setting/settings-docs.h.in:50
 msgid ""
 "Constraint for server domain name. If set, this FQDN is used as a suffix "
 "match requirement for dNSName element(s) of the certificate presented by the "
@@ -6996,7 +7230,7 @@ msgstr ""
 "суффикса. Начиная с версии 1.24, несколько допустимых FQDN можно передать в "
 "списке, разделяемом точкой с запятой (;)."
 
-#: src/libnmc-setting/settings-docs.h.in:48
+#: src/libnmc-setting/settings-docs.h.in:51
 msgid ""
 "The allowed EAP method to be used when authenticating to the network with "
 "802.1x.  Valid methods are: \"leap\", \"md5\", \"tls\", \"peap\", \"ttls\", "
@@ -7010,7 +7244,7 @@ msgstr ""
 "свойств этого параметра; обратитесь к документации wpa_supplicant чтобы "
 "получить сведения о допустимых сочетаниях."
 
-#: src/libnmc-setting/settings-docs.h.in:49
+#: src/libnmc-setting/settings-docs.h.in:52
 msgid ""
 "Identity string for EAP authentication methods.  Often the user's user or "
 "login name."
@@ -7018,15 +7252,22 @@ msgstr ""
 "Строка идентификации для методов аутентификации EAP. Часто представляет "
 "собой имя пользователя или имя входа в систему."
 
-#: src/libnmc-setting/settings-docs.h.in:50
+#: src/libnmc-setting/settings-docs.h.in:53
 msgid ""
 "Define openssl_ciphers for wpa_supplicant. Openssl sometimes moves ciphers "
 "among SECLEVELs, thus compiled-in default value in wpa_supplicant (as "
 "modified by some linux distributions) sometimes prevents to connect to old "
 "servers that do not support new protocols."
 msgstr ""
+"Настраивает шифры openssl_ciphers для wpa_supplicant. Openssl иногда перемещае"
+"т шифры между "
+"разными уровнями безопасности (SECLEVEL), поэтому вкомпилированное в wpa_suppl"
+"icant значение "
+"по умолчанию (изменяемое разработчиками некоторых дистрибутивов linux) иногда "
+"препятствует "
+"подключениям к старым серверам, не поддерживающим новые протоколы."
 
-#: src/libnmc-setting/settings-docs.h.in:51
+#: src/libnmc-setting/settings-docs.h.in:54
 msgid ""
 "Whether the 802.1X authentication is optional. If TRUE, the activation will "
 "continue even after a timeout or an authentication failure. Setting the "
@@ -7039,13 +7280,13 @@ msgstr ""
 "Ethernet. Если ЛОЖНО, то активация может быть продолжена только после "
 "успешной аутентификации."
 
-#: src/libnmc-setting/settings-docs.h.in:52
+#: src/libnmc-setting/settings-docs.h.in:55
 msgid "UTF-8 encoded file path containing PAC for EAP-FAST."
 msgstr ""
 "Путь в кодировке UTF-8 до файла, содержащего PAC (учётные данные для "
 "защищённого доступа) для EAP-FAST."
 
-#: src/libnmc-setting/settings-docs.h.in:53
+#: src/libnmc-setting/settings-docs.h.in:56
 msgid ""
 "UTF-8 encoded password used for EAP authentication methods. If both the "
 "\"password\" property and the \"password-raw\" property are specified, "
@@ -7055,15 +7296,15 @@ msgstr ""
 "указано и свойство «password» и свойство «password-raw», то предпочтительным "
 "является «password»."
 
-#: src/libnmc-setting/settings-docs.h.in:54
-#: src/libnmc-setting/settings-docs.h.in:86
-#: src/libnmc-setting/settings-docs.h.in:128
-#: src/libnmc-setting/settings-docs.h.in:156
-#: src/libnmc-setting/settings-docs.h.in:308
+#: src/libnmc-setting/settings-docs.h.in:57
+#: src/libnmc-setting/settings-docs.h.in:89
+#: src/libnmc-setting/settings-docs.h.in:131
+#: src/libnmc-setting/settings-docs.h.in:168
+#: src/libnmc-setting/settings-docs.h.in:340
 msgid "Flags indicating how to handle the \"password\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «password»."
 
-#: src/libnmc-setting/settings-docs.h.in:55
+#: src/libnmc-setting/settings-docs.h.in:58
 msgid ""
 "Password used for EAP authentication methods, given as a byte array to allow "
 "passwords in other encodings than UTF-8 to be used. If both the \"password\" "
@@ -7075,11 +7316,11 @@ msgstr ""
 "Если указано и свойство «password» и свойство «password-raw», то "
 "предпочтительным является «password»."
 
-#: src/libnmc-setting/settings-docs.h.in:56
+#: src/libnmc-setting/settings-docs.h.in:59
 msgid "Flags indicating how to handle the \"password-raw\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «password-raw»."
 
-#: src/libnmc-setting/settings-docs.h.in:57
+#: src/libnmc-setting/settings-docs.h.in:60
 msgid ""
 "Specifies authentication flags to use in \"phase 1\" outer authentication "
 "using NMSetting8021xAuthFlags options. The individual TLS versions can be "
@@ -7096,7 +7337,7 @@ msgstr ""
 "параметры «tls_disable_tlsv1_x» и «tls_disable_time_checks». Подробности см. "
 "в документации к wpa_supplicant."
 
-#: src/libnmc-setting/settings-docs.h.in:58
+#: src/libnmc-setting/settings-docs.h.in:61
 msgid ""
 "Enables or disables in-line provisioning of EAP-FAST credentials when FAST "
 "is specified as the EAP method in the \"eap\" property. Recognized values "
@@ -7113,7 +7354,7 @@ msgstr ""
 "аутентификации, так и с аутентификацией). Дополнительную информацию см. в "
 "документации к wpa_supplicant."
 
-#: src/libnmc-setting/settings-docs.h.in:59
+#: src/libnmc-setting/settings-docs.h.in:62
 msgid ""
 "Forces use of the new PEAP label during key derivation.  Some RADIUS servers "
 "may require forcing the new PEAP label to interoperate with PEAPv1.  Set to "
@@ -7126,7 +7367,7 @@ msgstr ""
 "использовать новую метку PEAP. Дополнительную информацию см. в документации "
 "к wpa_supplicant."
 
-#: src/libnmc-setting/settings-docs.h.in:60
+#: src/libnmc-setting/settings-docs.h.in:63
 msgid ""
 "Forces which PEAP version is used when PEAP is set as the EAP method in the "
 "\"eap\" property.  When unset, the version reported by the server will be "
@@ -7142,7 +7383,7 @@ msgstr ""
 "можно установить либо на «0», либо на «1», чтобы принудительно указать "
 "именно эту версию PEAP."
 
-#: src/libnmc-setting/settings-docs.h.in:61
+#: src/libnmc-setting/settings-docs.h.in:64
 msgid ""
 "List of strings to be matched against the altSubjectName of the certificate "
 "presented by the authentication server during the inner \"phase 2\" "
@@ -7154,7 +7395,7 @@ msgstr ""
 "фазы 2. Если список пуст, проверка подлинности altSubjectName сертификата "
 "сервера не выполняется."
 
-#: src/libnmc-setting/settings-docs.h.in:62
+#: src/libnmc-setting/settings-docs.h.in:65
 msgid ""
 "Specifies the allowed \"phase 2\" inner authentication method when an EAP "
 "method that uses an inner TLS tunnel is specified in the \"eap\" property.  "
@@ -7177,7 +7418,7 @@ msgstr ""
 "документации к wpa_supplicant. Нельзя указывать одновременно и \"phase2-"
 "auth\" и \"phase2-autheap\"."
 
-#: src/libnmc-setting/settings-docs.h.in:63
+#: src/libnmc-setting/settings-docs.h.in:66
 msgid ""
 "Specifies the allowed \"phase 2\" inner EAP-based authentication method when "
 "TTLS is specified in the \"eap\" property.  Recognized EAP-based \"phase 2\" "
@@ -7191,8 +7432,7 @@ msgstr ""
 "прохождение аутентификации для каждого из внутренних методов фазы 2 требует "
 "конкретного параметра; подробности см. в документации к wpa_supplicant."
 
-#: src/libnmc-setting/settings-docs.h.in:64
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:67
 msgid ""
 "Contains the path to the \"phase 2\" CA certificate if used by the EAP "
 "method specified in the 802-1x.phase2-auth or 802-1x.phase2-autheap "
@@ -7201,21 +7441,17 @@ msgid ""
 "recommended. Note that enabling 802-1x.system-ca-certs will override this "
 "setting to use the built-in path, if the built-in path is not a directory."
 msgstr ""
-"При использовании с методом EAP, указанным в свойствах \"phase2-auth\" или "
-"\"phase2-autheap\", здесь содержится сертификат ЦС  фазы 2. Данные "
-"сертификата указываются с помощью схемы (\"scheme\"); поддерживаются три "
-"схемы на данный момент: «blob», pkcs#11 UR и «path». При использовании схемы "
-"«blob» в этом свойстве необходимо указать зашифрованные данные DER "
-"сертификата. При использовании схемы «path» в данном значении нужно указать "
-"полный путь до сертификата в кодировке UTF-8, с префиксом \"file://\" и "
-"заканчивающийся завершающим нулевым байтом. Данный параметр может быть не "
-"настроен, даже если метод EAP  поддерживает сертификаты ЦС, но в этом случае "
-"может быть выполнена атака  «злоумышленник в середине», поэтому это НЕ "
-"рекомендуется. Обратите внимание, что активация свойства «NMSetting8021x:"
-"system-ca-cert» переопределит данное свойство, и будет использоваться "
-"встроенный путь, если только этот встроенный путь не является каталогом."
+"При использовании с методом EAP, указанным параметром «802-1x.phase2-aut» или "
+"параметром «802-1x.phase2-authea», здесь содержится путь к сертификату ЦС втор"
+"ой фазы. "
+"Данное свойство может не иметь значения, даже если метод EAP поддерживает "
+"сертификаты ЦС, но в таком случае может быть выполнена атака «злоумышленник "
+"в середине», поэтому это НЕ рекомендуется. Обратите внимание, что включение "
+"использования «802-1x.system-ca-certs» перезапишет данное свойство, и "
+"будет использоваться встроенный путь, если этот встроенный путь не является "
+"каталогом."
 
-#: src/libnmc-setting/settings-docs.h.in:65
+#: src/libnmc-setting/settings-docs.h.in:68
 msgid ""
 "The password used to access the \"phase2\" CA certificate stored in \"phase2-"
 "ca-cert\" property. Only makes sense if the certificate is stored on a "
@@ -7226,20 +7462,20 @@ msgstr ""
 "хранится в токене PKCS # 11, для которого требуется указание данных учётной "
 "записи."
 
-#: src/libnmc-setting/settings-docs.h.in:66
+#: src/libnmc-setting/settings-docs.h.in:69
 msgid ""
 "Flags indicating how to handle the \"phase2-ca-cert-password\" property."
 msgstr ""
 "Флаги, указывающие, как нужно обрабатывать свойство «phase2-ca-cert-"
 "password»."
 
-#: src/libnmc-setting/settings-docs.h.in:67
+#: src/libnmc-setting/settings-docs.h.in:70
 msgid ""
 "UTF-8 encoded path to a directory containing PEM or DER formatted "
 "certificates to be added to the verification chain in addition to the "
-"certificate specified in the \"phase2-ca-cert\" property. If NMSetting8021x:"
-"system-ca-certs is enabled and the built-in CA path is an existing "
-"directory, then this setting is ignored."
+"certificate specified in the \"phase2-ca-cert\" property. If "
+"NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an "
+"existing directory, then this setting is ignored."
 msgstr ""
 "Путь в кодировке UTF-8 к каталогу, где хранятся сертификаты в форматах PEM "
 "или DER, добавляемые в цепочку проверки подлинности в дополнение к "
@@ -7247,14 +7483,19 @@ msgstr ""
 "игнорируется при включённом параметре «NMSetting8021x:system-ca-certs», и "
 "если встроенный путь до ЦС является существующим каталогом."
 
-#: src/libnmc-setting/settings-docs.h.in:68
+#: src/libnmc-setting/settings-docs.h.in:71
 msgid ""
 "Contains the path to the \"phase 2\" client certificate if used by the EAP "
 "method specified in the 802-1x.phase2-auth or 802-1x.phase2-autheap "
 "properties."
 msgstr ""
+"При использовании с методом EAP, указанным параметром «802-1x.phase2-auth» или"
+" "
+"параметром «802-1x.phase2-autheap», здесь содержится путь к сертификату клиент"
+"а "
+"второй фазы."
 
-#: src/libnmc-setting/settings-docs.h.in:69
+#: src/libnmc-setting/settings-docs.h.in:72
 msgid ""
 "The password used to access the \"phase2\" client certificate stored in "
 "\"phase2-client-cert\" property. Only makes sense if the certificate is "
@@ -7265,14 +7506,14 @@ msgstr ""
 "случае, если сертификат хранится в токене PKCS # 11, для которого требуется "
 "указание данных учётной записи."
 
-#: src/libnmc-setting/settings-docs.h.in:70
+#: src/libnmc-setting/settings-docs.h.in:73
 msgid ""
 "Flags indicating how to handle the \"phase2-client-cert-password\" property."
 msgstr ""
 "Флаги, указывающие, как нужно обрабатывать свойство \"phase2-client-cert-"
 "password\"."
 
-#: src/libnmc-setting/settings-docs.h.in:71
+#: src/libnmc-setting/settings-docs.h.in:74
 msgid ""
 "Constraint for server domain name. If set, this list of FQDNs is used as a "
 "match requirement for dNSName element(s) of the certificate presented by the "
@@ -7290,7 +7531,7 @@ msgstr ""
 "самое сравнение соответствия. Несколько допустимых FQDN можно передать в "
 "списке, разделяемом точкой с запятой (;)."
 
-#: src/libnmc-setting/settings-docs.h.in:72
+#: src/libnmc-setting/settings-docs.h.in:75
 msgid ""
 "Constraint for server domain name. If set, this FQDN is used as a suffix "
 "match requirement for dNSName element(s) of the certificate presented by the "
@@ -7310,31 +7551,34 @@ msgstr ""
 "действительных FQDN можно передавать списком, разделённым с помощью точки и "
 "запятой (;)."
 
-#: src/libnmc-setting/settings-docs.h.in:73
+#: src/libnmc-setting/settings-docs.h.in:76
 msgid ""
 "The path to the \"phase 2\" inner private key when the 802-1x.phase2-auth or "
 "802-1x.phase2-autheap property is set to \"tls\"."
 msgstr ""
+"Путь до внутреннего закрытого ключа фазы 2, если для параметра 802-1x.phase2-a"
+"uth или "
+"802-1x.phase2-autheap указано значение «tls»."
 
-#: src/libnmc-setting/settings-docs.h.in:74
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:77
 msgid ""
 "The password used to decrypt the \"phase 2\" private key specified in the "
 "802-1x.phase2-private-key property. This is normally used by secret agents, "
 "not directly by users."
 msgstr ""
 "Пароль, используемый для расшифровки закрытого ключа фазы 2, указанного в "
-"свойстве \"phase2-private-key\", если закрытый ключ либо использует схему "
-"path, либо является ключом в формате PKCS#12."
+"свойстве «802-1x.phase2-private-key». Этот параметр обычно используется агента"
+"ми "
+"секретов, а не напрямую пользователями."
 
-#: src/libnmc-setting/settings-docs.h.in:75
+#: src/libnmc-setting/settings-docs.h.in:78
 msgid ""
 "Flags indicating how to handle the \"phase2-private-key-password\" property."
 msgstr ""
 "Флаги, указывающие, как нужно обрабатывать свойство \"phase2-private-key-"
 "password\"."
 
-#: src/libnmc-setting/settings-docs.h.in:76
+#: src/libnmc-setting/settings-docs.h.in:79
 msgid ""
 "Substring to be matched against the subject of the certificate presented by "
 "the authentication server during the inner \"phase 2\" authentication. When "
@@ -7348,36 +7592,37 @@ msgstr ""
 "аутентификации не выполняется. Это свойство почти не обеспечивает защиты и "
 "использовать его не нужно."
 
-#: src/libnmc-setting/settings-docs.h.in:77
+#: src/libnmc-setting/settings-docs.h.in:80
 msgid "PIN used for EAP authentication methods."
 msgstr "PIN, используемый для методов аутентификации EAP."
 
-#: src/libnmc-setting/settings-docs.h.in:78
-#: src/libnmc-setting/settings-docs.h.in:158
+#: src/libnmc-setting/settings-docs.h.in:81
+#: src/libnmc-setting/settings-docs.h.in:170
 msgid "Flags indicating how to handle the \"pin\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «pin»."
 
-#: src/libnmc-setting/settings-docs.h.in:79
+#: src/libnmc-setting/settings-docs.h.in:82
 msgid ""
 "The path to the private key when the 802-1.eap property is set to \"tls\"."
 msgstr ""
+"Путь до внутреннего закрытого ключа, если для параметра 802-1.eap указано знач"
+"ение «tls»."
 
-#: src/libnmc-setting/settings-docs.h.in:80
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:83
 msgid ""
 "The password used to decrypt the private key specified in the 802-1x.private-"
 "key property. This is normally used by secret agents, not directly by users."
 msgstr ""
 "Пароль, используемый для расшифровки закрытого ключа, указанного в свойстве "
-"«private-key», если закрытый ключ использует схему path, или если закрытый "
-"ключ является ключом в формате PKCS#12."
+"«802-1x.private-key». Этот параметр обычно используется агентами "
+"секретов, а не напрямую пользователями."
 
-#: src/libnmc-setting/settings-docs.h.in:81
+#: src/libnmc-setting/settings-docs.h.in:84
 msgid "Flags indicating how to handle the \"private-key-password\" property."
 msgstr ""
 "Флаги, указывающие, как нужно обрабатывать свойство «private-key-password»."
 
-#: src/libnmc-setting/settings-docs.h.in:82
+#: src/libnmc-setting/settings-docs.h.in:85
 msgid ""
 "Substring to be matched against the subject of the certificate presented by "
 "the authentication server. When unset, no verification of the authentication "
@@ -7389,7 +7634,7 @@ msgstr ""
 "субъекта сертификата сервера аутентификации не выполняется. Это свойство "
 "почти не обеспечивает защиты и использовать его не нужно."
 
-#: src/libnmc-setting/settings-docs.h.in:83
+#: src/libnmc-setting/settings-docs.h.in:86
 msgid ""
 "When TRUE, overrides the \"ca-path\" and \"phase2-ca-path\" properties using "
 "the system CA directory specified at configure time with the --system-ca-"
@@ -7410,37 +7655,37 @@ msgstr ""
 "переопределяются параметры \"ca-cert\" и \"phase2-ca-cert\" (настраиваются "
 "параметры ca_cert/ca_cert2 для wpa_supplicant)."
 
-#: src/libnmc-setting/settings-docs.h.in:84
+#: src/libnmc-setting/settings-docs.h.in:87
 msgid "Encapsulation of ADSL connection.  Can be \"vcmux\" or \"llc\"."
 msgstr "Инкапсуляция подключения ADSL. Может быть «vcmux» или «llc»."
 
-#: src/libnmc-setting/settings-docs.h.in:85
+#: src/libnmc-setting/settings-docs.h.in:88
 msgid "Password used to authenticate with the ADSL service."
 msgstr "Пароль, используемый для аутентификации в службе ADSL."
 
-#: src/libnmc-setting/settings-docs.h.in:87
+#: src/libnmc-setting/settings-docs.h.in:90
 msgid "ADSL connection protocol.  Can be \"pppoa\", \"pppoe\" or \"ipoatm\"."
 msgstr ""
 "Протокол подключения ADSL.  Может быть: \"pppoa\", \"pppoe\" или \"ipoatm\"."
 
-#: src/libnmc-setting/settings-docs.h.in:88
+#: src/libnmc-setting/settings-docs.h.in:91
 msgid "Username used to authenticate with the ADSL service."
 msgstr ""
 "Имя пользователя, используемое для аутентификации с помощью службы ADSL."
 
-#: src/libnmc-setting/settings-docs.h.in:89
+#: src/libnmc-setting/settings-docs.h.in:92
 msgid "VCI of ADSL connection"
 msgstr "Идентификатор VCI подключения ADSL"
 
-#: src/libnmc-setting/settings-docs.h.in:90
+#: src/libnmc-setting/settings-docs.h.in:93
 msgid "VPI of ADSL connection"
 msgstr "Идентификатор VPI подключения ADSL"
 
-#: src/libnmc-setting/settings-docs.h.in:91
+#: src/libnmc-setting/settings-docs.h.in:94
 msgid "The Bluetooth address of the device."
 msgstr "Адрес Bluetooth устройства."
 
-#: src/libnmc-setting/settings-docs.h.in:92
+#: src/libnmc-setting/settings-docs.h.in:95
 msgid ""
 "Either \"dun\" for Dial-Up Networking connections or \"panu\" for Personal "
 "Area Networking connections to devices supporting the NAP profile."
@@ -7449,7 +7694,7 @@ msgstr ""
 "\"panu\" для подключений из персональной сети PAN к устройствам, "
 "поддерживающим профиль NAP."
 
-#: src/libnmc-setting/settings-docs.h.in:93
+#: src/libnmc-setting/settings-docs.h.in:96
 msgid ""
 "Dictionary of key/value pairs of bonding options.  Both keys and values must "
 "be strings. Option names must contain only alphanumeric characters (ie, [a-"
@@ -7459,16 +7704,16 @@ msgstr ""
 "значения должны быть представлены строками. Имена параметров должны "
 "содержать только буквенно-цифровые символы (т. е. [A-zA-Z0-9])."
 
-#: src/libnmc-setting/settings-docs.h.in:94
+#: src/libnmc-setting/settings-docs.h.in:97
 msgid "The Ethernet MAC address aging time, in seconds."
 msgstr "Период устаревания адресов MAC Ethernet, в секундах."
 
-#: src/libnmc-setting/settings-docs.h.in:95
+#: src/libnmc-setting/settings-docs.h.in:98
 msgid "The Spanning Tree Protocol (STP) forwarding delay, in seconds."
 msgstr ""
 "Задержка перенаправления для протокола Spanning Tree (STP), в секундах."
 
-#: src/libnmc-setting/settings-docs.h.in:96
+#: src/libnmc-setting/settings-docs.h.in:99
 msgid ""
 "If specified, The MAC address of the multicast group this bridge uses for "
 "STP. The address must be a link-local address in standard Ethernet MAC "
@@ -7480,7 +7725,7 @@ msgstr ""
 "local в стандартном формате Ethernet MAC, то есть «01:80:C2:00:00:0X», с X в "
 "[0, 4..F]. Если не указано, значением по умолчанию будет 01:80:C2:00:00:00."
 
-#: src/libnmc-setting/settings-docs.h.in:97
+#: src/libnmc-setting/settings-docs.h.in:100
 msgid ""
 "A mask of group addresses to forward. Usually, group addresses in the range "
 "from 01:80:C2:00:00:00 to 01:80:C2:00:00:0F are not forwarded according to "
@@ -7495,17 +7740,17 @@ msgstr ""
 "должен быть перенаправлен. Маска не может иметь биты 0, 1 или 2, потому что "
 "они используются для кадров STP, кадров паузы MAC и LACP."
 
-#: src/libnmc-setting/settings-docs.h.in:98
+#: src/libnmc-setting/settings-docs.h.in:101
 msgid "The Spanning Tree Protocol (STP) hello time, in seconds."
 msgstr "Время приветствия протокола Spanning Tree (STP), в секундах."
 
-#: src/libnmc-setting/settings-docs.h.in:99
+#: src/libnmc-setting/settings-docs.h.in:102
 msgid ""
 "If specified, the MAC address of bridge. When creating a new bridge, this "
-"MAC address will be set. If this field is left unspecified, the \"ethernet."
-"cloned-mac-address\" is referred instead to generate the initial MAC "
-"address. Note that setting \"ethernet.cloned-mac-address\" anyway overwrites "
-"the MAC address of the bridge later while activating the bridge."
+"MAC address will be set. If this field is left unspecified, the "
+"\"ethernet.cloned-mac-address\" is referred instead to generate the initial "
+"MAC address. Note that setting \"ethernet.cloned-mac-address\" anyway "
+"overwrites the MAC address of the bridge later while activating the bridge."
 msgstr ""
 "Если параметр настроен, то он обозначает адрес MAC моста. При создании "
 "нового моста будет указан этот адрес MAC. Если поле оставить без значения, "
@@ -7514,18 +7759,18 @@ msgstr ""
 "cloned-mac-address\" в любом случае перезаписывает MAC моста позже, во время "
 "активации моста."
 
-#: src/libnmc-setting/settings-docs.h.in:100
+#: src/libnmc-setting/settings-docs.h.in:103
 msgid "The Spanning Tree Protocol (STP) maximum message age, in seconds."
 msgstr ""
 "Максимальное время жизни сообщения протокола Spanning Tree (STP), в секундах."
 
-#: src/libnmc-setting/settings-docs.h.in:101
+#: src/libnmc-setting/settings-docs.h.in:104
 msgid "Set maximum size of multicast hash table (value must be a power of 2)."
 msgstr ""
 "Максимальный размер многоадресной хэш-таблицы (значение должно быть степенью "
 "числа два)."
 
-#: src/libnmc-setting/settings-docs.h.in:102
+#: src/libnmc-setting/settings-docs.h.in:105
 msgid ""
 "Set the number of queries the bridge will send before stopping forwarding a "
 "multicast group after a \"leave\" message has been received."
@@ -7533,7 +7778,7 @@ msgstr ""
 "Указывает число запросов, посылаемых мостом перед тем, как прекратить "
 "перенаправление многоадресной группы после получения сообщения \"leave\"."
 
-#: src/libnmc-setting/settings-docs.h.in:103
+#: src/libnmc-setting/settings-docs.h.in:106
 msgid ""
 "Set interval (in deciseconds) between queries to find remaining members of a "
 "group, after a \"leave\" message is received."
@@ -7541,7 +7786,7 @@ msgstr ""
 "Интервал (в децисекундах) между запросами по поиску оставшихся участников "
 "группы после получения сообщения \"leave\"."
 
-#: src/libnmc-setting/settings-docs.h.in:104
+#: src/libnmc-setting/settings-docs.h.in:107
 msgid ""
 "Set delay (in deciseconds) after which the bridge will leave a group, if no "
 "membership reports for this group are received."
@@ -7549,7 +7794,7 @@ msgstr ""
 "Время задержки (в децисекундах), после которой мост покинет группу при "
 "отсутствии получаемых отчётов о членстве в этой группе."
 
-#: src/libnmc-setting/settings-docs.h.in:105
+#: src/libnmc-setting/settings-docs.h.in:108
 msgid ""
 "Enable or disable sending of multicast queries by the bridge. If not "
 "specified the option is disabled."
@@ -7557,7 +7802,7 @@ msgstr ""
 "Включить или отключить отправку многоадресных запросов мостом. Если значение "
 "не указано — параметр отключён."
 
-#: src/libnmc-setting/settings-docs.h.in:106
+#: src/libnmc-setting/settings-docs.h.in:109
 msgid ""
 "If no queries are seen after this delay (in deciseconds) has passed, the "
 "bridge will start to send its own queries."
@@ -7565,7 +7810,7 @@ msgstr ""
 "Если после данной задержки (в децисекундах) не было обнаружено запросов, "
 "мост начнёт посылать свои собственные запросы."
 
-#: src/libnmc-setting/settings-docs.h.in:107
+#: src/libnmc-setting/settings-docs.h.in:110
 msgid ""
 "Interval (in deciseconds) between queries sent by the bridge after the end "
 "of the startup phase."
@@ -7573,7 +7818,7 @@ msgstr ""
 "Интервал (в децисекундах) между запросами, посылаемыми мостом после "
 "окончания начальной фазы."
 
-#: src/libnmc-setting/settings-docs.h.in:108
+#: src/libnmc-setting/settings-docs.h.in:111
 msgid ""
 "Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD "
 "queries sent by the bridge."
@@ -7581,7 +7826,7 @@ msgstr ""
 "Максимальное время для ответа/максимальная задержка ответа (в децисекундах) "
 "для запросов IGMP/MLD, посылаемых мостом."
 
-#: src/libnmc-setting/settings-docs.h.in:109
+#: src/libnmc-setting/settings-docs.h.in:112
 msgid ""
 "If enabled the bridge's own IP address is used as the source address for "
 "IGMP queries otherwise the default of 0.0.0.0 is used."
@@ -7590,7 +7835,7 @@ msgstr ""
 "используется собственный адрес IP моста, в противном случае используется "
 "адрес по умолчанию: 0.0.0.0."
 
-#: src/libnmc-setting/settings-docs.h.in:110
+#: src/libnmc-setting/settings-docs.h.in:113
 msgid ""
 "Sets bridge's multicast router. Multicast-snooping must be enabled for this "
 "option to work. Supported values are: 'auto', 'disabled', 'enabled' to which "
@@ -7603,7 +7848,7 @@ msgstr ""
 "0 и 2, соответственно. Если не указано, то значение по умолчанию — 'auto' "
 "(1)."
 
-#: src/libnmc-setting/settings-docs.h.in:111
+#: src/libnmc-setting/settings-docs.h.in:114
 msgid ""
 "Controls whether IGMP snooping is enabled for this bridge. Note that if "
 "snooping was automatically disabled due to hash collisions, the system may "
@@ -7614,11 +7859,11 @@ msgstr ""
 "отключается из-за хеш-коллизий, система может отказываться включить эту "
 "функцию до тех пор, пока конфликты не будут устранены."
 
-#: src/libnmc-setting/settings-docs.h.in:112
+#: src/libnmc-setting/settings-docs.h.in:115
 msgid "Set the number of IGMP queries to send during startup phase."
 msgstr "Указывает число запросов IGMP, посылаемых во время начальной фазы."
 
-#: src/libnmc-setting/settings-docs.h.in:113
+#: src/libnmc-setting/settings-docs.h.in:116
 msgid ""
 "Sets the time (in deciseconds) between queries sent out at startup to "
 "determine membership information."
@@ -7626,7 +7871,7 @@ msgstr ""
 "Время (в децисекундах) между запросами, посылаемыми в начальной фазе, для "
 "определения информации о членстве."
 
-#: src/libnmc-setting/settings-docs.h.in:114
+#: src/libnmc-setting/settings-docs.h.in:117
 msgid ""
 "Sets the Spanning Tree Protocol (STP) priority for this bridge.  Lower "
 "values are \"better\"; the lowest priority bridge will be elected the root "
@@ -7636,13 +7881,13 @@ msgstr ""
 "ниже значение, тем «лучше»; мост с наименьшим приоритетом будет выбран "
 "корневым мостом."
 
-#: src/libnmc-setting/settings-docs.h.in:115
+#: src/libnmc-setting/settings-docs.h.in:118
 msgid ""
 "Controls whether Spanning Tree Protocol (STP) is enabled for this bridge."
 msgstr ""
 "Управляет использованием протокола Spanning Tree (STP) для этого моста."
 
-#: src/libnmc-setting/settings-docs.h.in:116
+#: src/libnmc-setting/settings-docs.h.in:119
 msgid ""
 "The default PVID for the ports of the bridge, that is the VLAN id assigned "
 "to incoming untagged frames."
@@ -7650,11 +7895,11 @@ msgstr ""
 "Идентификатор PVID по умолчанию портов моста, то есть идентификатор VLAN, "
 "присвоенный входящим кадрам без тегов."
 
-#: src/libnmc-setting/settings-docs.h.in:117
+#: src/libnmc-setting/settings-docs.h.in:120
 msgid "Control whether VLAN filtering is enabled on the bridge."
 msgstr "Управляет включением фильтрации VLAN для этого моста."
 
-#: src/libnmc-setting/settings-docs.h.in:118
+#: src/libnmc-setting/settings-docs.h.in:121
 msgid ""
 "If specified, the protocol used for VLAN filtering. Supported values are: "
 "'802.1Q', '802.1ad'. If not specified the default value is '802.1Q'."
@@ -7663,11 +7908,11 @@ msgstr ""
 "VLAN. Поддерживаемые значения: '802.1Q', '802.1ad'. Если не настроено, то "
 "значением по умолчанию является '802.1Q'."
 
-#: src/libnmc-setting/settings-docs.h.in:119
+#: src/libnmc-setting/settings-docs.h.in:122
 msgid "Controls whether per-VLAN stats accounting is enabled."
 msgstr "Включён ли учёт статистики для каждой из VLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:120
+#: src/libnmc-setting/settings-docs.h.in:123
 msgid ""
 "Array of bridge VLAN objects. In addition to the VLANs specified here, the "
 "bridge will also have the default-pvid VLAN configured  by the bridge.vlan-"
@@ -7684,7 +7929,7 @@ msgstr ""
 "от 1 до 4094, либо диапазон, представленный как пара идентификаторов, "
 "разделённых с помощью тире."
 
-#: src/libnmc-setting/settings-docs.h.in:121
+#: src/libnmc-setting/settings-docs.h.in:124
 msgid ""
 "Enables or disables \"hairpin mode\" for the port, which allows frames to be "
 "sent back out through the port the frame was received on."
@@ -7692,18 +7937,18 @@ msgstr ""
 "Включает или отключает режим hairpin для порта. Режим позволяет отправлять "
 "кадры обратно через порт, на котором они были приняты."
 
-#: src/libnmc-setting/settings-docs.h.in:122
+#: src/libnmc-setting/settings-docs.h.in:125
 msgid ""
 "The Spanning Tree Protocol (STP) port cost for destinations via this port."
 msgstr ""
 "Стоимость порта протокола Spanning Tree (STP) для направления пакетов через "
 "этот порт."
 
-#: src/libnmc-setting/settings-docs.h.in:123
+#: src/libnmc-setting/settings-docs.h.in:126
 msgid "The Spanning Tree Protocol (STP) priority of this bridge port."
 msgstr "Приоритет протокола Spanning Tree (STP) для этого мостового порта."
 
-#: src/libnmc-setting/settings-docs.h.in:124
+#: src/libnmc-setting/settings-docs.h.in:127
 msgid ""
 "Array of bridge VLAN objects. In addition to the VLANs specified here, the "
 "port will also have the default-pvid VLAN configured on the bridge by the "
@@ -7720,9 +7965,9 @@ msgstr ""
 "идентификатор со значением между 1 и 4094, либо диапазон, представленный как "
 "пара идентификаторов, разделённых тире."
 
-#: src/libnmc-setting/settings-docs.h.in:125
-#: src/libnmc-setting/settings-docs.h.in:152
-#: src/libnmc-setting/settings-docs.h.in:163
+#: src/libnmc-setting/settings-docs.h.in:128
+#: src/libnmc-setting/settings-docs.h.in:164
+#: src/libnmc-setting/settings-docs.h.in:179
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
 "breaking larger packets up into multiple frames."
@@ -7730,7 +7975,7 @@ msgstr ""
 "При значении, отличном от нуля, будут передаваться пакеты только указанного "
 "или меньшего размера. Более крупные пакеты разбиваются на несколько кадров."
 
-#: src/libnmc-setting/settings-docs.h.in:126
+#: src/libnmc-setting/settings-docs.h.in:129
 msgid ""
 "The number to dial to establish the connection to the CDMA-based mobile "
 "broadband network, if any.  If not specified, the default number (#777) is "
@@ -7740,8 +7985,8 @@ msgstr ""
 "мобильной широкополосной сети на основе CDMA. Если не указано, используется "
 "номер по умолчанию (# 777)."
 
-#: src/libnmc-setting/settings-docs.h.in:127
-#: src/libnmc-setting/settings-docs.h.in:155
+#: src/libnmc-setting/settings-docs.h.in:130
+#: src/libnmc-setting/settings-docs.h.in:167
 msgid ""
 "The password used to authenticate with the network, if required.  Many "
 "providers do not require a password, or accept any password.  But if a "
@@ -7751,8 +7996,8 @@ msgstr ""
 "провайдеры не требуют пароля или принимают любой пароль. Но если требуется "
 "пароль, он указывается здесь."
 
-#: src/libnmc-setting/settings-docs.h.in:129
-#: src/libnmc-setting/settings-docs.h.in:161
+#: src/libnmc-setting/settings-docs.h.in:132
+#: src/libnmc-setting/settings-docs.h.in:173
 msgid ""
 "The username used to authenticate with the network, if required.  Many "
 "providers do not require a username, or accept any username.  But if a "
@@ -7762,7 +8007,7 @@ msgstr ""
 "требуется. Многие провайдеры не требуют имени пользователя или принимают "
 "любое. Но если имя пользователя требуется, оно указывается здесь."
 
-#: src/libnmc-setting/settings-docs.h.in:130
+#: src/libnmc-setting/settings-docs.h.in:133
 msgid ""
 "Specifies the NMSettingDcbFlags for the DCB FCoE application.  Flags may be "
 "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" "
@@ -7772,7 +8017,7 @@ msgstr ""
 "Возможна любая комбинация следующих флагов: \"enable\" (0x1), \"advertise\" "
 "(0x2) и \"willing\" (0x4)."
 
-#: src/libnmc-setting/settings-docs.h.in:131
+#: src/libnmc-setting/settings-docs.h.in:134
 msgid ""
 "The FCoE controller mode; either \"fabric\" or \"vn2vn\". Since 1.34, NULL "
 "is the default and means \"fabric\". Before 1.34, NULL was rejected as "
@@ -7782,7 +8027,7 @@ msgstr ""
 "умолчанию является NULL и означает \"fabric\". До версии 1.34 значение NULL "
 "отвергалось как недействительное, и значением по умолчанию было \"fabric\"."
 
-#: src/libnmc-setting/settings-docs.h.in:132
+#: src/libnmc-setting/settings-docs.h.in:135
 msgid ""
 "The highest User Priority (0 - 7) which FCoE frames should use, or -1 for "
 "default priority.  Only used when the \"app-fcoe-flags\" property includes "
@@ -7792,7 +8037,7 @@ msgstr ""
 "кадрами FCoE, либо «-1» для приоритета по умолчанию. Используется, только "
 "если свойство \"app-fcoe-flags\" включает в себя флаг \"enable\" (0x1)."
 
-#: src/libnmc-setting/settings-docs.h.in:133
+#: src/libnmc-setting/settings-docs.h.in:136
 msgid ""
 "Specifies the NMSettingDcbFlags for the DCB FIP application.  Flags may be "
 "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" "
@@ -7802,7 +8047,7 @@ msgstr ""
 "Возможно любое сочетание следующих флагов: \"enable\" (0x1), \"advertise\" "
 "(0x2) и \"willing\" (0x4)."
 
-#: src/libnmc-setting/settings-docs.h.in:134
+#: src/libnmc-setting/settings-docs.h.in:137
 msgid ""
 "The highest User Priority (0 - 7) which FIP frames should use, or -1 for "
 "default priority.  Only used when the \"app-fip-flags\" property includes "
@@ -7813,7 +8058,7 @@ msgstr ""
 "Используется, только если свойство \"app-fip-flags\" включает в себя флаг "
 "\"enable\" (0x1)."
 
-#: src/libnmc-setting/settings-docs.h.in:135
+#: src/libnmc-setting/settings-docs.h.in:138
 msgid ""
 "Specifies the NMSettingDcbFlags for the DCB iSCSI application.  Flags may be "
 "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" "
@@ -7823,7 +8068,7 @@ msgstr ""
 "любое сочетание следующих флагов: \"enable\" (0x1), \"advertise\" (0x2) и "
 "\"willing\" (0x4)."
 
-#: src/libnmc-setting/settings-docs.h.in:136
+#: src/libnmc-setting/settings-docs.h.in:139
 msgid ""
 "The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for "
 "default priority. Only used when the \"app-iscsi-flags\" property includes "
@@ -7833,7 +8078,7 @@ msgstr ""
 "кадрами iSCSI, либо «-1» для приоритета по умолчанию. Используется только, "
 "если свойство \"app-iscsi-flags\" включает в себя флаг \"enable\" (0x1)."
 
-#: src/libnmc-setting/settings-docs.h.in:137
+#: src/libnmc-setting/settings-docs.h.in:140
 msgid ""
 "An array of 8 uint values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates the percentage of bandwidth of the "
@@ -7847,7 +8092,7 @@ msgstr ""
 "приоритет. Сумма всех процентных долей приоритетов, принадлежащих одной и "
 "той же группе, должна составлять 100 процентов."
 
-#: src/libnmc-setting/settings-docs.h.in:138
+#: src/libnmc-setting/settings-docs.h.in:141
 msgid ""
 "An array of 8 boolean values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates whether or not the corresponding "
@@ -7857,7 +8102,7 @@ msgstr ""
 "пользователя (0 - 7), а значение указывает, должен ли соответствующий "
 "приоритет передавать кадр паузы."
 
-#: src/libnmc-setting/settings-docs.h.in:139
+#: src/libnmc-setting/settings-docs.h.in:142
 msgid ""
 "Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags "
 "may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and "
@@ -7867,7 +8112,7 @@ msgstr ""
 "(PFC) в соединениях DCB. Возможно любое сочетание следующих флагов: "
 "\"enable\" (0x1), \"advertise\" (0x2) и \"willing\" (0x4)."
 
-#: src/libnmc-setting/settings-docs.h.in:140
+#: src/libnmc-setting/settings-docs.h.in:143
 msgid ""
 "An array of 8 uint values, where the array index corresponds to the Priority "
 "Group ID (0 - 7) and the value indicates the percentage of link bandwidth "
@@ -7879,7 +8124,7 @@ msgstr ""
 "способности канала, выделенный для этой группы. Допустимые значения: 0 - "
 "100, а сумма всех значений должна составлять 100 процентов."
 
-#: src/libnmc-setting/settings-docs.h.in:141
+#: src/libnmc-setting/settings-docs.h.in:144
 msgid ""
 "Specifies the NMSettingDcbFlags for DCB Priority Groups.  Flags may be any "
 "combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4)."
@@ -7888,7 +8133,7 @@ msgstr ""
 "комбинация следующих флагов: \"enable\" (0x1), \"advertise\" (0x2) и "
 "\"willing\" (0x4)."
 
-#: src/libnmc-setting/settings-docs.h.in:142
+#: src/libnmc-setting/settings-docs.h.in:145
 msgid ""
 "An array of 8 uint values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates the Priority Group ID.  Allowed "
@@ -7899,7 +8144,7 @@ msgstr ""
 "Допустимые значения идентификатора группы приоритетов: 0-7 или 15 для "
 "неограниченной группы."
 
-#: src/libnmc-setting/settings-docs.h.in:143
+#: src/libnmc-setting/settings-docs.h.in:146
 msgid ""
 "An array of 8 boolean values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates whether or not the priority may use "
@@ -7909,7 +8154,7 @@ msgstr ""
 "пользователя (0 - 7), а значение указывает, может ли приоритет использовать "
 "всю ширину канала, выделенного присвоенной ему группе."
 
-#: src/libnmc-setting/settings-docs.h.in:144
+#: src/libnmc-setting/settings-docs.h.in:147
 msgid ""
 "An array of 8 uint values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which "
@@ -7919,7 +8164,7 @@ msgstr ""
 "пользователя (0-7), а значение означает класс трафика (0-7), на который "
 "отображается приоритет."
 
-#: src/libnmc-setting/settings-docs.h.in:145
+#: src/libnmc-setting/settings-docs.h.in:148
 msgid ""
 "Name of the device handler that will be invoked to add and delete the device "
 "for this connection. The name can only contain ASCII alphanumeric characters "
@@ -7930,9 +8175,21 @@ msgid ""
 "the device will be created at the time the connection is started by invoking "
 "the device-handler."
 msgstr ""
+"Название обработчика устройств, который будет вызываться для добавления и удал"
+"ения "
+"устройства для этого подключения. Название может состоять только из буквенно-ч"
+"исловых символов "
+"ASCII и символов «-», «_», «.». Название не может начинаться с точки («.»). По"
+"дробности о том, как "
+"написать обработчик устройств смотрите на страничке руководства NetworkManager"
+"-dispatcher(8). "
+"По факту применения данного параметра базовое подключение становится «виртуаль"
+"ным», это "
+"означает, что его можно активировать без существующих устройств; устройство бу"
+"дет создано с "
+"помощью вызова обработчика устройств в момент создания подключения."
 
-#: src/libnmc-setting/settings-docs.h.in:146
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:149
 msgid ""
 "The GPRS Access Point Name specifying the APN used when establishing a data "
 "session with the GSM-based network.  The APN often determines how the user "
@@ -7944,16 +8201,23 @@ msgid ""
 "\"auto-config\" setting. The property can be explicitly set to the empty "
 "string to prevent that and use no APN."
 msgstr ""
-"Имя точки доступа  GPRS, указывающее имя точки доступа (APN), используемое "
-"при при создании сеанса передачи данных в сети на базе GSM. APN часто "
-"определяет, как именно пользователь будет оплачивать трафик, и имеет ли "
-"пользователь доступ ко всему Интернету, или же пользуется только закрытой от "
-"остального Интернета областью, специально выделенной провайдером. Поэтому "
-"для плана мобильных интернет-услуг пользователя очень важно использовать "
-"правильный APN. Согласно разделу 14.9 спецификации GSM 03.60, имя точки "
-"доступа может состоять только из символов «a-z», «0-9», «.» и «-»."
+"Имя точки доступа (APN) GPRS, определяющее имя, используемое при создании сеан"
+"са "
+"передачи данных в сети на базе GSM. APN часто определяет метод расчёта платы п"
+"ользователя "
+"за использование сети, а также, будет ли пользователь иметь доступ ко всему Ин"
+"тернету, или только "
+"к огороженной конкретным поставщиком закрытой области, поэтому правильное имя "
+"точки доступа важно"
+"для мобильного широкополосного плана пользователя. Согласно разделу 14.9 "
+"спецификации GSM 03.60, APN может состоять только из символов «a-z», «0-9», "
+"«.» и «-». Если значение APN не настроено (по умолчанию), то его можно обнаруж"
+"ить согласно "
+"параметру \"auto-config\". Для предотвращения такого поведения в данном параме"
+"тре можно явно "
+"указать пустую строку и не использовать APN."
 
-#: src/libnmc-setting/settings-docs.h.in:147
+#: src/libnmc-setting/settings-docs.h.in:150
 msgid ""
 "When TRUE, the settings such as APN, username, or password will default to "
 "values that match the network the modem will register to in the Mobile "
@@ -7964,7 +8228,7 @@ msgstr ""
 "параметров в базе поставщиков широкополосных мобильных сетей, для той сети, "
 "в которой будет зарегистрирован модем."
 
-#: src/libnmc-setting/settings-docs.h.in:148
+#: src/libnmc-setting/settings-docs.h.in:151
 msgid ""
 "The device unique identifier (as given by the WWAN management service) which "
 "this connection applies to.  If given, the connection will only apply to the "
@@ -7974,7 +8238,7 @@ msgstr ""
 "WWAN), к которой относится это подключение. Если задано, подключение будет "
 "применяться только к указанному устройству."
 
-#: src/libnmc-setting/settings-docs.h.in:149
+#: src/libnmc-setting/settings-docs.h.in:152
 msgid ""
 "When TRUE, only connections to the home network will be allowed. Connections "
 "to roaming networks will not be made."
@@ -7982,7 +8246,7 @@ msgstr ""
 "Если ИСТИНА, разрешены только подключения к домашней сети. Подключения к "
 "роуминговым сетям не будут выполнены."
 
-#: src/libnmc-setting/settings-docs.h.in:150
+#: src/libnmc-setting/settings-docs.h.in:153
 msgid ""
 "For LTE modems, this sets the APN for the initial EPS bearer that is set up "
 "when attaching to the network.  Setting this parameter implies initial-eps-"
@@ -7993,7 +8257,7 @@ msgstr ""
 "для этого параметра подразумевает, что для параметра «initial-eps-bearer-"
 "configure» указано значение ИСТИНА."
 
-#: src/libnmc-setting/settings-docs.h.in:151
+#: src/libnmc-setting/settings-docs.h.in:154
 msgid ""
 "For LTE modems, this setting determines whether the initial EPS bearer shall "
 "be configured when bringing up the connection.  It is inferred TRUE if "
@@ -8003,7 +8267,99 @@ msgstr ""
 "активации подключения начальный носитель EPS. При настроенном параметре "
 "«initial-eps-bearer-apn» значением данного параметра считается ИСТИНА."
 
-#: src/libnmc-setting/settings-docs.h.in:153
+#: src/libnmc-setting/settings-docs.h.in:155
+msgid ""
+"For LTE modems, this sets NOAUTH authentication method for the initial EPS "
+"bearer that is set up when attaching to the network. If TRUE, do not require "
+"the other side to authenticate itself to the client. If FALSE, require "
+"authentication from the remote side.  In almost all cases, this should be "
+"TRUE."
+msgstr ""
+"При использовании модемов LTE данный параметр настраивает метод аутентификации"
+" NOAUTH "
+"для изначального носителя EPS, настраиваемого при прикреплении к сети. "
+"Если «ИСТИНА» — не требовать от другой стороны аутентифицировать себя клиенту."
+" "
+"Если «ЛОЖНО» — требовать от удалённой стороны аутентификацию. Почти "
+"во всех случаях здесь должно указываться значение «ИСТИНА»."
+
+#: src/libnmc-setting/settings-docs.h.in:156
+msgid ""
+"For LTE modems, this sets the password for the initial EPS bearer that is "
+"set up when attaching to the network.  Setting this parameter implies "
+"initial-eps-bearer-configure to be TRUE."
+msgstr ""
+"При использовании модемов LTE этот параметр задаёт пароль для начального "
+"носителя EPS, который настраивается при прикреплении к сети. Установка значени"
+"я "
+"для этого параметра подразумевает, что для параметра «initial-eps-bearer-"
+"configure» указано значение «ИСТИНА»."
+
+#: src/libnmc-setting/settings-docs.h.in:157
+msgid ""
+"Flags indicating how to handle the \"initial-eps-bearer-password\" property."
+msgstr ""
+"Флаги, указывающие, как нужно обрабатывать свойство «initial-eps-bearer-passwo"
+"rd»"
+
+#: src/libnmc-setting/settings-docs.h.in:158
+msgid ""
+"For LTE modems, this disables CHAP authentication method for the initial EPS "
+"bearer that is set up when attaching to the network."
+msgstr ""
+"При использовании модемов LTE данный параметр отключает аутентификацию по мето"
+"ду CHAP "
+"для изначального носителя EPS, настраиваемого при прикреплении к сети."
+
+#: src/libnmc-setting/settings-docs.h.in:159
+msgid ""
+"For LTE modems, this disables EAP authentication method for the initial EPS "
+"bearer that is set up when attaching to the network."
+msgstr ""
+"При использовании модемов LTE данный параметр отключает аутентификацию по мето"
+"ду EAP "
+"для изначального носителя EPS, настраиваемого при прикреплении к сети."
+
+#: src/libnmc-setting/settings-docs.h.in:160
+msgid ""
+"For LTE modems, this disables MSCHAP authentication method for the initial "
+"EPS bearer that is set up when attaching to the network."
+msgstr ""
+"При использовании модемов LTE данный параметр отключает аутентификацию по мето"
+"ду MSCHAP "
+"для изначального носителя EPS, настраиваемого при прикреплении к сети."
+
+#: src/libnmc-setting/settings-docs.h.in:161
+msgid ""
+"For LTE modems, this disables MSCHAPV2 authentication method for the initial "
+"EPS bearer that is set up when attaching to the network."
+msgstr ""
+"При использовании модемов LTE данный параметр отключает аутентификацию по мето"
+"ду MSCHAPV2 "
+"для изначального носителя EPS, настраиваемого при прикреплении к сети."
+
+#: src/libnmc-setting/settings-docs.h.in:162
+msgid ""
+"For LTE modems, this disables PAP authentication method for the initial EPS "
+"bearer that is set up when attaching to the network."
+msgstr ""
+"При использовании модемов LTE данный параметр отключает аутентификацию по мето"
+"ду PAP "
+"для изначального носителя EPS, настраиваемого при прикреплении к сети."
+
+#: src/libnmc-setting/settings-docs.h.in:163
+msgid ""
+"For LTE modems, this sets the username for the initial EPS bearer that is "
+"set up when attaching to the network.  Setting this parameter implies "
+"initial-eps-bearer-configure to be TRUE."
+msgstr ""
+"При использовании модемов LTE данный параметр задаёт имя пользователя для нача"
+"льного "
+"носителя EPS, который создаётся при подключении к сети. Установка значения "
+"для этого параметра подразумевает, что для параметра «initial-eps-bearer-"
+"configure» указано значение «ИСТИНА»."
+
+#: src/libnmc-setting/settings-docs.h.in:165
 msgid ""
 "The Network ID (GSM LAI format, ie MCC-MNC) to force specific network "
 "registration.  If the Network ID is specified, NetworkManager will attempt "
@@ -8018,7 +8374,7 @@ msgstr ""
 "перемещения устройства в тех случаях, когда прямой контроль роуминга "
 "невозможен иными способами."
 
-#: src/libnmc-setting/settings-docs.h.in:154
+#: src/libnmc-setting/settings-docs.h.in:166
 msgid ""
 "Legacy setting that used to help establishing PPP data sessions for GSM-"
 "based modems."
@@ -8026,7 +8382,7 @@ msgstr ""
 "Устаревший параметр, использовавшийся для помощи в создании сеансов данных "
 "PPP для модемов на базе GSM."
 
-#: src/libnmc-setting/settings-docs.h.in:157
+#: src/libnmc-setting/settings-docs.h.in:169
 msgid ""
 "If the SIM is locked with a PIN it must be unlocked before any other "
 "operations are requested.  Specify the PIN here to allow operation of the "
@@ -8036,7 +8392,7 @@ msgstr ""
 "до того, как будут запрошены другие операции. Укажите здесь PIN, чтобы "
 "разрешить работу устройства."
 
-#: src/libnmc-setting/settings-docs.h.in:159
+#: src/libnmc-setting/settings-docs.h.in:171
 msgid ""
 "The SIM card unique identifier (as given by the WWAN management service) "
 "which this connection applies to.  If given, the connection will apply to "
@@ -8049,7 +8405,7 @@ msgstr ""
 "параметром \"device-id\", содержащему сим-карту, соответствующую указанному "
 "идентификатору."
 
-#: src/libnmc-setting/settings-docs.h.in:160
+#: src/libnmc-setting/settings-docs.h.in:172
 msgid ""
 "A MCC/MNC string like \"310260\" or \"21601\" identifying the specific "
 "mobile network operator which this connection applies to.  If given, the "
@@ -8062,7 +8418,25 @@ msgstr ""
 "разрешённому параметрами \"device-id\" и \"sim-id\", и содержащему сим-"
 "карту, предоставленную данным оператором."
 
-#: src/libnmc-setting/settings-docs.h.in:162
+#: src/libnmc-setting/settings-docs.h.in:174
+msgid "The last byte of supervision address."
+msgstr "Последний байт адреса контроля."
+
+#: src/libnmc-setting/settings-docs.h.in:175
+msgid "The port1 interface name of the HSR. This property is mandatory."
+msgstr ""
+"Имя интерфейса порта port1 протокола HSR. Это свойство является обязательным."
+
+#: src/libnmc-setting/settings-docs.h.in:176
+msgid "The port2 interface name of the HSR. This property is mandatory."
+msgstr ""
+"Имя интерфейса порта port2 протокола HSR. Это свойство является обязательным."
+
+#: src/libnmc-setting/settings-docs.h.in:177
+msgid "The protocol used by the interface, whether it is PRP or HSR."
+msgstr "Протокол, используемый интерфейсом, PRP или HSR."
+
+#: src/libnmc-setting/settings-docs.h.in:178
 msgid ""
 "If specified, this connection will only apply to the IPoIB device whose "
 "permanent MAC address matches. This property does not change the MAC address "
@@ -8072,17 +8446,17 @@ msgstr ""
 "устройству IPoIB с совпадающим постоянным адресом MAC. Это свойство не "
 "изменяет адрес MAC устройства (так называемый спуфинг)."
 
-#: src/libnmc-setting/settings-docs.h.in:164
+#: src/libnmc-setting/settings-docs.h.in:180
 msgid ""
 "The InfiniBand p-key to use for this device. A value of -1 means to use the "
 "default p-key (aka \"the p-key at index 0\"). Otherwise, it is a 16-bit "
 "unsigned integer, whose high bit 0x8000 is set if it is a \"full "
 "membership\" p-key. The values 0 and 0x8000 are not allowed. With the p-key "
-"set, the interface name is always \"$parent.$p_key\". Setting \"connection."
-"interface-name\" to another name is not supported. Note that kernel will "
-"internally always set the full membership bit, although the interface name "
-"does not reflect that. Usually the user would want to configure a full "
-"membership p-key with 0x8000 flag set."
+"set, the interface name is always \"$parent.$p_key\". Setting "
+"\"connection.interface-name\" to another name is not supported. Note that "
+"kernel will internally always set the full membership bit, although the "
+"interface name does not reflect that. Usually the user would want to "
+"configure a full membership p-key with 0x8000 flag set."
 msgstr ""
 "Ключ InfiniBand p-key, который будет использоваться для этого устройства. "
 "Значение «-1» означает использование p-key по умолчанию (он же «p-key с "
@@ -8095,7 +8469,7 @@ msgstr ""
 "отражает. Обычно пользователи настраивают p-key полного членства с "
 "установленным флагом 0x8000."
 
-#: src/libnmc-setting/settings-docs.h.in:165
+#: src/libnmc-setting/settings-docs.h.in:181
 msgid ""
 "The interface name of the parent device of this device. Normally NULL, but "
 "if the \"p_key\" property is set, then you must specify the base device by "
@@ -8105,12 +8479,12 @@ msgstr ""
 "если настроено свойство «p_key», то необходимо указать базовое устройство, "
 "настроив либо это свойство, либо «mac-address»."
 
-#: src/libnmc-setting/settings-docs.h.in:166
+#: src/libnmc-setting/settings-docs.h.in:182
 msgid ""
 "The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\"."
 msgstr "Режим транспорта IP-over-InfiniBand. \"datagram\" или \"connected\"."
 
-#: src/libnmc-setting/settings-docs.h.in:167
+#: src/libnmc-setting/settings-docs.h.in:183
 msgid ""
 "A list of IPv4 addresses and their prefix length. Multiple addresses can be "
 "separated by comma. For example \"192.168.1.5/24, 10.1.0.5/24\". The "
@@ -8121,8 +8495,8 @@ msgstr ""
 "запятыми. Например, \"192.168.1.5/24, 10.1.0.5/24\". Адреса в поиске идут по "
 "снижению приоритета, то есть первый адрес будет первичным адресом."
 
-#: src/libnmc-setting/settings-docs.h.in:168
-#: src/libnmc-setting/settings-docs.h.in:200
+#: src/libnmc-setting/settings-docs.h.in:184
+#: src/libnmc-setting/settings-docs.h.in:222
 msgid ""
 "VPN connections will default to add the route automatically unless this "
 "setting is set to FALSE. For other connection types, adding such an "
@@ -8135,18 +8509,18 @@ msgstr ""
 "не поддерживается, и значение ИСТИНА для данного параметра ни на что не "
 "влияет."
 
-#: src/libnmc-setting/settings-docs.h.in:169
-#: src/libnmc-setting/settings-docs.h.in:201
+#: src/libnmc-setting/settings-docs.h.in:185
+#: src/libnmc-setting/settings-docs.h.in:223
 msgid ""
 "Maximum timeout in milliseconds used to check for the presence of duplicate "
 "IP addresses on the network.  If an address conflict is detected, the "
 "activation will fail. The property is currently implemented only for IPv4. A "
 "zero value means that no duplicate address detection is performed, -1 means "
-"the default value (either the value configured globally in NetworkManger."
-"conf or 200ms).  A value greater than zero is a timeout in milliseconds.  "
-"Note that the time intervals are subject to randomization as per RFC 5227 "
-"and so the actual duration can be between half and the full time specified "
-"in this property."
+"the default value (either the value configured globally in "
+"NetworkManger.conf or 200ms).  A value greater than zero is a timeout in "
+"milliseconds.  Note that the time intervals are subject to randomization as "
+"per RFC 5227 and so the actual duration can be between half and the full "
+"time specified in this property."
 msgstr ""
 "Максимальное время ожидания в миллисекундах, используемое для проверки "
 "наличия дублирующих IP-адресов в сети.  Если будет обнаружен конфликт "
@@ -8160,34 +8534,34 @@ msgstr ""
 "может быть от половины до полной длительности временно́го промежутка, "
 "указанного в этом свойстве."
 
-#: src/libnmc-setting/settings-docs.h.in:170
+#: src/libnmc-setting/settings-docs.h.in:186
 msgid ""
 "A string sent to the DHCP server to identify the local machine which the "
 "DHCP server may use to customize the DHCP lease and options. When the "
 "property is a hex string ('aa:bb:cc') it is interpreted as a binary client "
 "ID, in which case the first byte is assumed to be the 'type' field as per "
-"RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e."
-"g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a "
-"MAC address). If the property is not a hex string it is considered as a non-"
-"hardware-address client ID and the 'type' field is set to 0. The special "
+"RFC 2132 section 9.14 and the remaining bytes may be an hardware address "
+"(e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest "
+"is a MAC address). If the property is not a hex string it is considered as a "
+"non-hardware-address client ID and the 'type' field is set to 0. The special "
 "values \"mac\" and \"perm-mac\" are supported, which use the current or "
 "permanent MAC address of the device to generate a client identifier with "
 "type ethernet (01). Currently, these options only work for ethernet type of "
 "links. The special value \"ipv6-duid\" uses the DUID from \"ipv6.dhcp-duid\" "
-"property as an RFC4361-compliant client identifier. As IAID it uses \"ipv4."
-"dhcp-iaid\" and falls back to \"ipv6.dhcp-iaid\" if unset. The special value "
-"\"duid\" generates a RFC4361-compliant client identifier based on \"ipv4."
-"dhcp-iaid\" and uses a DUID generated by hashing /etc/machine-id. The "
-"special value \"stable\" is supported to generate a type 0 client identifier "
-"based on the stable-id (see connection.stable-id) and a per-host key. If you "
-"set the stable-id, you may want to include the \"${DEVICE}\" or \"${MAC}\" "
-"specifier to get a per-device key. The special value \"none\" prevents any "
-"client identifier from being sent. Note that this is normally not "
-"recommended. If unset, a globally configured default from NetworkManager."
-"conf is used. If still unset, the default depends on the DHCP plugin. The "
-"internal dhcp client will default to \"mac\" and the dhclient plugin will "
-"try to use one from its config file if present, or won't sent any client-id "
-"otherwise."
+"property as an RFC4361-compliant client identifier. As IAID it uses "
+"\"ipv4.dhcp-iaid\" and falls back to \"ipv6.dhcp-iaid\" if unset. The "
+"special value \"duid\" generates a RFC4361-compliant client identifier based "
+"on \"ipv4.dhcp-iaid\" and uses a DUID generated by hashing /etc/machine-id. "
+"The special value \"stable\" is supported to generate a type 0 client "
+"identifier based on the stable-id (see connection.stable-id) and a per-host "
+"key. If you set the stable-id, you may want to include the \"${DEVICE}\" or "
+"\"${MAC}\" specifier to get a per-device key. The special value \"none\" "
+"prevents any client identifier from being sent. Note that this is normally "
+"not recommended. If unset, a globally configured default from "
+"NetworkManager.conf is used. If still unset, the default depends on the DHCP "
+"plugin. The internal dhcp client will default to \"mac\" and the dhclient "
+"plugin will try to use one from its config file if present, or won't sent "
+"any client-id otherwise."
 msgstr ""
 "Строка, посылаемая на сервер DHCP для идентификации локальной машины, "
 "которую сервер может использовать для настройки аренды и параметров DHCP. "
@@ -8221,8 +8595,8 @@ msgstr ""
 "конфигурационного файла, если оно есть, или, в противном случае, не будет "
 "отправлять никакой client-id."
 
-#: src/libnmc-setting/settings-docs.h.in:171
-#: src/libnmc-setting/settings-docs.h.in:202
+#: src/libnmc-setting/settings-docs.h.in:187
+#: src/libnmc-setting/settings-docs.h.in:224
 msgid ""
 "Specifies the value for the DSCP field (traffic class) of the IP header. "
 "When empty, the global default value is used; if no global default is "
@@ -8230,8 +8604,16 @@ msgid ""
 "and \"CS6\". The property is currently valid only for IPv4, and it is "
 "supported only by the \"internal\" DHCP plugin."
 msgstr ""
+"Устанавливает значение поля DSCP (класс трафика) заголовка IP. При пустом "
+"поле используется глобальное значение по умолчанию; при отсутствии настроенных"
+" "
+"глобальных значений предполагается значение «CS0». Допускаемые значения: «CS0»"
+", "
+"«CS4» и «CS6». Данное свойство на текущий момент имеет значение только для IPv"
+"4 "
+"и поддерживается только «внутренним» модулем DHCP (\"internal\")."
 
-#: src/libnmc-setting/settings-docs.h.in:172
+#: src/libnmc-setting/settings-docs.h.in:188
 msgid ""
 "If the \"dhcp-send-hostname\" property is TRUE, then the specified FQDN will "
 "be sent to the DHCP server when acquiring a lease. This property and \"dhcp-"
@@ -8242,8 +8624,8 @@ msgstr ""
 "свойство «dhcp-hostname» являются взаимоисключающими и не могут быть "
 "настроены одновременно."
 
-#: src/libnmc-setting/settings-docs.h.in:173
-#: src/libnmc-setting/settings-docs.h.in:204
+#: src/libnmc-setting/settings-docs.h.in:189
+#: src/libnmc-setting/settings-docs.h.in:226
 msgid ""
 "If the \"dhcp-send-hostname\" property is TRUE, then the specified name will "
 "be sent to the DHCP server when acquiring a lease. This property and \"dhcp-"
@@ -8254,8 +8636,8 @@ msgstr ""
 "свойство «dhcp-fqdn» являются взаимоисключающими и не могут быть настроены "
 "одновременно."
 
-#: src/libnmc-setting/settings-docs.h.in:174
-#: src/libnmc-setting/settings-docs.h.in:205
+#: src/libnmc-setting/settings-docs.h.in:190
+#: src/libnmc-setting/settings-docs.h.in:227
 msgid ""
 "Flags for the DHCP hostname and FQDN. Currently, this property only includes "
 "flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN "
@@ -8283,8 +8665,8 @@ msgstr ""
 "умолчанию. Если и это значение не установлено или также равно \"none\" "
 "(0x0), то в запросах DHCP передаются стандартные флаги FQDN, описанные выше."
 
-#: src/libnmc-setting/settings-docs.h.in:175
-#: src/libnmc-setting/settings-docs.h.in:206
+#: src/libnmc-setting/settings-docs.h.in:191
+#: src/libnmc-setting/settings-docs.h.in:228
 msgid ""
 "A string containing the \"Identity Association Identifier\" (IAID) used by "
 "the DHCP client. The string can be a 32-bit number (either decimal, "
@@ -8324,8 +8706,38 @@ msgstr ""
 "MAC. Фактически используемый для активированного на данный момент интерфейса "
 "DHCPv6 IAID показывается в данных об аренде устройства."
 
-#: src/libnmc-setting/settings-docs.h.in:176
-#: src/libnmc-setting/settings-docs.h.in:208
+#: src/libnmc-setting/settings-docs.h.in:192
+msgid ""
+"Controls the \"IPv6-Only Preferred\" DHCPv4 option (RFC 8925). When set to "
+"\"yes\" (1), the host adds the option to the parameter request list; if the "
+"DHCP server sends the option back, the host stops the DHCP client for the "
+"time interval specified in the option. Enable this feature if the host "
+"supports an IPv6-only mode, i.e. either all applications are IPv6-only "
+"capable or there is a form of 464XLAT deployed. When set to \"default\" "
+"(-1), the actual value is looked up in the global configuration; if not "
+"specified, it defaults to \"no\" (0). If the connection has IPv6 method set "
+"to \"disabled\", this property does not have effect and the \"IPv6-Only "
+"Preferred\" option is always disabled."
+msgstr ""
+"Управляет параметром DHCPv4 «IPv6-Only Preferred» (согласно спецификации RFC 8"
+"925). При "
+"значении «да» (1), хост добавляет этот параметр к списку запрашиваемых парамет"
+"ров; если сервер "
+"DHCP отсылает параметр назад, хост останавливает работу клиента DHCP на время "
+"интервала, "
+"указанного в параметре. Включайте эту возможность, если хост поддерживает режи"
+"м IPv6-only, "
+"т.е. либо тогда, когда все приложения поддерживают IPv6-only, либо при развёрн"
+"утой форме 464XLAT. "
+"При значении «по умолчанию» (-1) фактическое значение будет взято из глобально"
+"й конфигурации; если "
+"значение не указано, по умолчанию используется «нет» (0). Если в параметрах по"
+"дключения метод IPv6 "
+"отключён, то данный параметр ни на что не влияет, и параметр «IPv6-Only Prefer"
+"red» будет всегда отключён."
+
+#: src/libnmc-setting/settings-docs.h.in:193
+#: src/libnmc-setting/settings-docs.h.in:230
 msgid ""
 "Array of servers from which DHCP offers must be rejected. This property is "
 "useful to avoid getting a lease from misconfigured or rogue servers. For "
@@ -8340,32 +8752,68 @@ msgstr ""
 "следовать косая черта и длина префикса (например, \"192.168.122.0/24\"). Для "
 "DHCPv6 на данный момент это свойство не реализовано."
 
-#: src/libnmc-setting/settings-docs.h.in:177
-#: src/libnmc-setting/settings-docs.h.in:209
+#: src/libnmc-setting/settings-docs.h.in:194
+#: src/libnmc-setting/settings-docs.h.in:231
+msgid ""
+"Since 1.52 this property is deprecated and is only used as fallback value "
+"for dhcp-send-hostname if it's set to 'default'. This is only done to avoid "
+"breaking existing configurations, the new property should be used from now "
+"on."
+msgstr ""
+"Данное свойство устарело в версии 1.52 и используется только как запасное знач"
+"ение для "
+"параметра dhcp-send-hostname, если его значение указано «по умолчанию». Это сд"
+"елано только "
+"для того, чтобы не нарушать существующие конфигурации, т.к. с этого момента не"
+"обходимо "
+"использовать новый параметр."
+
+#: src/libnmc-setting/settings-docs.h.in:195
+#: src/libnmc-setting/settings-docs.h.in:232
 msgid ""
 "If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some "
 "DHCP servers use this hostname to update DNS databases, essentially "
-"providing a static hostname for the computer.  If the \"dhcp-hostname\" "
-"property is NULL and this property is TRUE, the current persistent hostname "
-"of the computer is sent."
-msgstr ""
-"Если ИСТИНА, то при приобретении аренды на сервер DHCP отправляется имя "
-"хоста. Некоторые серверы DHCP используют это имя хоста для обновления баз "
-"DNS, фактически предоставляя статическое имя хоста для компьютера. Если "
-"свойство «dhcp-hostname» равно NULL, а данное свойство имеет значение "
-"ИСТИНА, то отправляется текущее постоянное имя компьютера."
+"providing a static hostname for the computer.  If the dhcp-hostname property "
+"is NULL and this property is TRUE, the current persistent hostname of the "
+"computer is sent. The default value is default (-1). In this case the global "
+"value from NetworkManager configuration is looked up. If it's not set, the "
+"value from dhcp-send-hostname-deprecated, which defaults to TRUE, is used "
+"for backwards compatibility. In the future this will change and, in absence "
+"of a global default, it will always fallback to TRUE."
+msgstr ""
+"Если указано значение «Истина», то при получении аренды имя хоста отправляется"
+" на сервер "
+"DHCP. Некоторые серверы DHCP используют это имя хоста для обновления баз данны"
+"х DNS, по сути "
+"предоставляя компьютеру статическое имя хоста. Если значение параметра dhcp-ho"
+"stname равно NULL, а "
+"значение данного параметра равно «истина», то отправляется текущее постоянное "
+"имя хоста компьютера. "
+"Значение по умолчанию: по умолчанию (-1), и в этом случае будет выбрано глобал"
+"ьно значение из конфигурации "
+"NetworkManager. Если оно не настроено, то для обратной совместимости используе"
+"тся значение dhcp-send-hostname-deprecated "
+"(его значение по умолчанию: «истина»). В будущем это изменится и в случае отсу"
+"тствия глобального значения по "
+"умолчанию всегда будет использоваться  «истина»."
 
-#: src/libnmc-setting/settings-docs.h.in:178
-#: src/libnmc-setting/settings-docs.h.in:210
+#: src/libnmc-setting/settings-docs.h.in:196
+#: src/libnmc-setting/settings-docs.h.in:233
 msgid ""
 "Whether the DHCP client will send RELEASE message when bringing the "
 "connection down. The default value is \"default\" (-1). When the default "
 "value is specified, then the global value from NetworkManager configuration "
 "is looked up, if not set, it is considered as FALSE."
 msgstr ""
+"Будет ли клиент DHCP отправлять сообщение RELEASE при прерывании подключения. "
+"Значение "
+"по умолчанию: по умолчанию (-1). При указании значения по умолчанию использует"
+"ся глобальное "
+"значение из конфигурации NetworkManager, если оно не настроено, используется з"
+"начение «ложно»."
 
-#: src/libnmc-setting/settings-docs.h.in:179
-#: src/libnmc-setting/settings-docs.h.in:211
+#: src/libnmc-setting/settings-docs.h.in:197
+#: src/libnmc-setting/settings-docs.h.in:234
 msgid ""
 "A timeout for a DHCP transaction in seconds. If zero (the default), a "
 "globally configured default is used. If still unspecified, a device specific "
@@ -8378,7 +8826,7 @@ msgstr ""
 "(как правило, 45 секунд). Для бесконечного времени ожидания укажите  "
 "2147483647 (MAXINT32)."
 
-#: src/libnmc-setting/settings-docs.h.in:180
+#: src/libnmc-setting/settings-docs.h.in:198
 msgid ""
 "The Vendor Class Identifier DHCP option (60). Special characters in the data "
 "string may be escaped using C-style escapes, nevertheless this property "
@@ -8392,18 +8840,26 @@ msgstr ""
 "профиля не указано (по умолчанию), то запрашивается глобальное значение по "
 "умолчанию. Если и оно не настроено, параметр DHCP серверу не отправляется."
 
-#: src/libnmc-setting/settings-docs.h.in:181
-#: src/libnmc-setting/settings-docs.h.in:212
+#: src/libnmc-setting/settings-docs.h.in:199
+#: src/libnmc-setting/settings-docs.h.in:235
 msgid ""
-"Array of IP addresses of DNS servers. For DoT (DNS over TLS), the SNI server "
-"name can be specified by appending \"#example.com\" to the IP address of the "
-"DNS server. This currently only has effect when using systemd-resolved."
-msgstr ""
-"Массив адресов IP серверов DNS. Для DoT (DNS over TLS), имя сервера (SNI) "
-"можно указать, добавив \"#example.com\" в конец адреса IP сервера DNS. На "
-"данный момент действует только, если используется systemd-resolved."
+"Array of DNS servers. Each server can be specified either as a plain IP "
+"address (optionally followed by a \"#\" and the SNI server name for DNS over "
+"TLS) or with a URI syntax. When it is specified as an URI, the following "
+"forms are supported: dns+udp://ADDRESS[:PORT], dns+tls://ADDRESS[:PORT]"
+"[SERVERNAME] . When using the URI syntax, IPv6 addresses must be enclosed in "
+"square brackets ('[', ']')."
+msgstr ""
+"Массив серверов DNS. Каждый сервер может быть указан либо в виде адреса IP (за"
+" ним опционально может "
+"следовать символ «#» и имя сервера SNI для DNS поверх TLS), либо в синтаксисе "
+"URI. При указании URI "
+"поддерживаются следующие формы: dns+udp://АДРЕС[:ПОРТ], dns+tls://АДРЕС[:ПОРТ]"
+"[ИМЯ_СЕРВЕРА] . При "
+"использовании синтаксиса URI, адреса IPv6 необходимо заключать в квадратные ск"
+"обки ('[', ']')."
 
-#: src/libnmc-setting/settings-docs.h.in:182
+#: src/libnmc-setting/settings-docs.h.in:200
 msgid ""
 "DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The "
 "currently supported options are \"attempts\", \"debug\", \"edns0\", "
@@ -8436,8 +8892,8 @@ msgstr ""
 "параметры \"edns0\" и \"trust-ad\" добавляются автоматически. Действительные "
 "\"ipv4.dns-options\" и \"ipv6.dns-options\" объединяются."
 
-#: src/libnmc-setting/settings-docs.h.in:183
-#: src/libnmc-setting/settings-docs.h.in:214
+#: src/libnmc-setting/settings-docs.h.in:201
+#: src/libnmc-setting/settings-docs.h.in:237
 msgid ""
 "DNS servers priority. The relative priority for DNS servers specified by "
 "this setting.  A lower numerical value is better (higher priority). Negative "
@@ -8519,8 +8975,8 @@ msgstr ""
 "приоритеты DNS и домены поиска так, чтобы настроены были только серверы имён "
 "для нужного интерфейса."
 
-#: src/libnmc-setting/settings-docs.h.in:184
-#: src/libnmc-setting/settings-docs.h.in:215
+#: src/libnmc-setting/settings-docs.h.in:202
+#: src/libnmc-setting/settings-docs.h.in:238
 msgid ""
 "List of DNS search domains. Domains starting with a tilde ('~') are "
 "considered 'routing' domains and are used only to decide the interface over "
@@ -8550,8 +9006,37 @@ msgstr ""
 "DNS не настроены, то запасные варианты будут получаться из домена, "
 "указанного для DHCP (параметр 15)."
 
-#: src/libnmc-setting/settings-docs.h.in:185
-#: src/libnmc-setting/settings-docs.h.in:216
+#: src/libnmc-setting/settings-docs.h.in:203
+#: src/libnmc-setting/settings-docs.h.in:239
+msgid ""
+"Whether to configure sysctl interface-specific forwarding. When enabled, the "
+"interface will act as a router to forward the packet from one interface to "
+"another. When set to \"default\" (-1), the value from global configuration "
+"is used; if no global default is defined, \"auto\" (2) will be used. The "
+"\"forwarding\" property is ignored when \"method\" is set to \"shared\", "
+"because forwarding is always enabled in this case. The accepted values are: "
+"\"default\" (-1): use global default. \"no\" (0): disabled. \"yes\" (1): "
+"enabled. \"auto\" (2): enable if any shared connection is active, use kernel "
+"default otherwise."
+msgstr ""
+"Нужно ли настраивать перенаправления для интерфейсов sysctl. При включённом па"
+"раметре интерфейсы "
+"будут выполнять роль маршрутизаторов и перенаправлять пакеты с одного интерфей"
+"са на другой. При "
+"значении «по умолчанию» (-1) используется значение из глобальной конфигурации;"
+" если глобальное значение "
+"не настроено, используется значение «автоматически» (2). Если для метода настр"
+"оено значение \"shared\", "
+"то свойство «forwarding» будет игнорироваться, т.к. в этом случае перенаправле"
+"ние всегда будет включённым. "
+"Принимаемые значение: \"по умолчанию\" (-1): использовать глобальное значение "
+"по умолчанию, \"нет\" (0): отключено, "
+"\"да\" (1): включено, \"автоматически\" (2): включить при существующих активны"
+"х разделяемых подключениях, "
+"в противном случае — использовать значения по умолчанию ядра."
+
+#: src/libnmc-setting/settings-docs.h.in:204
+#: src/libnmc-setting/settings-docs.h.in:240
 msgid ""
 "The gateway associated with this configuration. This is only meaningful if "
 "\"addresses\" is also set. Setting the gateway causes NetworkManager to "
@@ -8572,8 +9057,8 @@ msgstr ""
 "интерфейсов WireGuard, поэтому, как правило, в этих случаях шлюз настраивать "
 "не нужно. См. \"ip4-auto-default-route\"."
 
-#: src/libnmc-setting/settings-docs.h.in:186
-#: src/libnmc-setting/settings-docs.h.in:217
+#: src/libnmc-setting/settings-docs.h.in:205
+#: src/libnmc-setting/settings-docs.h.in:241
 msgid ""
 "When \"method\" is set to \"auto\" and this property to TRUE, automatically "
 "configured name servers and search domains are ignored and only name servers "
@@ -8586,8 +9071,8 @@ msgstr ""
 "поисковые домены (если таковые имеются), настроенные для свойств «dns» и "
 "«dns-search»."
 
-#: src/libnmc-setting/settings-docs.h.in:187
-#: src/libnmc-setting/settings-docs.h.in:218
+#: src/libnmc-setting/settings-docs.h.in:206
+#: src/libnmc-setting/settings-docs.h.in:242
 msgid ""
 "When \"method\" is set to \"auto\" and this property to TRUE, automatically "
 "configured routes are ignored and only routes specified in the \"routes\" "
@@ -8598,7 +9083,7 @@ msgstr ""
 "и используются только маршруты (если таковые имеются), настроенные для "
 "свойства «routes»."
 
-#: src/libnmc-setting/settings-docs.h.in:188
+#: src/libnmc-setting/settings-docs.h.in:207
 msgid ""
 "Enable and disable the IPv4 link-local configuration independently of the "
 "ipv4.method configuration. This allows a link-local address (169.254.x.y/16) "
@@ -8607,20 +9092,29 @@ msgid ""
 "is dependent on \"ipv4.method\". When set to \"default\", it honors the "
 "global connection default, before falling back to \"auto\". Note that if "
 "\"ipv4.method\" is \"disabled\", then link local addressing is always "
-"disabled too. The default is \"default\"."
-msgstr ""
-"Включает или отключает конфигурацию IPv4 для link-local вне зависимости от "
-"конфигурации ipv4.method. Это позволяет получать адрес link-local (169.254.x."
-"y/16) в дополнение к другим адресам, например, адресам, настроенным вручную, "
-"или полученным с сервера DHCP. При значении «автоматически», значение "
-"зависит от значения \"ipv4.method\". При значении «по умолчанию» принимаются "
-"к обработке глобальные параметры подключения по умолчанию, перед откатом к "
-"«автоматическому» значению. Обратите внимание, что если для \"ipv4.method\" "
-"указано значение «отключено», то адресация link local тоже всегда будет "
-"отключена. Исходное значение: по умолчанию."
+"disabled too. The default is \"default\". Since 1.52, when set to "
+"\"fallback\", a link-local address is obtained if no other IPv4 address is "
+"set."
+msgstr ""
+"Вкл-выкл. конфигурацию IPv4 link-local вне зависимости от конфигурации "
+"ipv4.method. Это позволяет получать адрес link-local (169.254.x.y/16) в дополн"
+"ение "
+"к другим адресам, например, адресам, настроенным вручную, или полученным с сер"
+"вера "
+"DHCP. При значении «автоматически», значение зависит от значения \"ipv4.method"
+"\". "
+"При значении «по умолчанию» учитываются глобальные параметры подключения по ум"
+"олчанию, "
+"перед откатом к «автоматическому» значению. Обратите внимание, что если для \""
+"ipv4.method\" "
+"указано значение «отключено», то адресация link local также тоже всегда будет "
+"отключена. "
+"Значение по умолчанию: «по умолчанию». С версии 1.52, при значении «fallback» "
+"и отсутствии настроенных "
+"адресов IPv4 принимается адрес link-local."
 
-#: src/libnmc-setting/settings-docs.h.in:189
-#: src/libnmc-setting/settings-docs.h.in:220
+#: src/libnmc-setting/settings-docs.h.in:208
+#: src/libnmc-setting/settings-docs.h.in:244
 msgid ""
 "If TRUE, allow overall network configuration to proceed even if the "
 "configuration specified by this property times out.  Note that at least one "
@@ -8637,12 +9131,12 @@ msgstr ""
 "параметра в NMSettingIP4Config позволяет успешно активировать общую сетевую "
 "конфигурацию в случае сбоя конфигурации IPv4, но успеха конфигурации IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:190
+#: src/libnmc-setting/settings-docs.h.in:209
 msgid "The IPv4 connection method."
 msgstr "Метод подключения по протоколу IPv4."
 
-#: src/libnmc-setting/settings-docs.h.in:191
-#: src/libnmc-setting/settings-docs.h.in:223
+#: src/libnmc-setting/settings-docs.h.in:210
+#: src/libnmc-setting/settings-docs.h.in:247
 msgid ""
 "If TRUE, this connection will never be the default connection for this IP "
 "type, meaning it will never be assigned the default route by NetworkManager."
@@ -8651,8 +9145,8 @@ msgstr ""
 "для данного типа IP, то есть NetworkManager никогда не назначит ему маршрута "
 "по умолчанию."
 
-#: src/libnmc-setting/settings-docs.h.in:192
-#: src/libnmc-setting/settings-docs.h.in:225
+#: src/libnmc-setting/settings-docs.h.in:211
+#: src/libnmc-setting/settings-docs.h.in:249
 msgid ""
 "Connections will default to keep the autogenerated priority 0 local rule "
 "unless this setting is set to TRUE."
@@ -8661,8 +9155,8 @@ msgstr ""
 "локального правила нулевого приоритета, если только значением для данного "
 "параметра не указано ИСТИНА/"
 
-#: src/libnmc-setting/settings-docs.h.in:193
-#: src/libnmc-setting/settings-docs.h.in:226
+#: src/libnmc-setting/settings-docs.h.in:212
+#: src/libnmc-setting/settings-docs.h.in:250
 msgid ""
 "The minimum time interval in milliseconds for which dynamic IP configuration "
 "should be tried before the connection succeeds. This property is useful for "
@@ -8692,8 +9186,8 @@ msgstr ""
 "— используется значение по умолчанию, т.е. либо превалирует конфигурация "
 "«ipvx.required-timeout», либо нуль."
 
-#: src/libnmc-setting/settings-docs.h.in:194
-#: src/libnmc-setting/settings-docs.h.in:227
+#: src/libnmc-setting/settings-docs.h.in:213
+#: src/libnmc-setting/settings-docs.h.in:251
 msgid ""
 "The default metric for routes that don't explicitly specify a metric. The "
 "default value -1 means that the metric is chosen automatically based on the "
@@ -8713,8 +9207,8 @@ msgstr ""
 "значения «0» для этого свойства фактически означает установку значения "
 "«1024». Для IPv4 нуль является обычным значением метрики."
 
-#: src/libnmc-setting/settings-docs.h.in:195
-#: src/libnmc-setting/settings-docs.h.in:228
+#: src/libnmc-setting/settings-docs.h.in:214
+#: src/libnmc-setting/settings-docs.h.in:252
 msgid ""
 "Enable policy routing (source routing) and set the routing table used when "
 "adding routes. This affects all routes, including device-routes, IPv4LL, "
@@ -8746,7 +9240,30 @@ msgstr ""
 "сохранения обратной совместимости для пользователей, настраивающих таблицы "
 "маршрутизации без использования NetworkManager."
 
-#: src/libnmc-setting/settings-docs.h.in:196
+#: src/libnmc-setting/settings-docs.h.in:215
+#: src/libnmc-setting/settings-docs.h.in:253
+msgid ""
+"Whether to add routes for DNS servers. When enabled, NetworkManager adds a "
+"route for each DNS server that is associated with this connection either "
+"statically (defined in the connection profile) or dynamically (for example, "
+"retrieved via DHCP). The route guarantees that the DNS server is reached via "
+"this interface. When set to \"default\" (-1), the value from global "
+"configuration is used; if no global default is defined, this feature is "
+"disabled."
+msgstr ""
+"Добавлять ли маршруты серверам DNS. При включённом параметре NetworkManager до"
+"бавляет "
+"маршруты для каждого сервера DNS, связанного с данным подключением либо статич"
+"ески (что "
+"настраивается в профиле подключения), либо динамически (например, получается с"
+" помощью DHCP). "
+"Наличие маршрута гарантирует, что сервер DNS будет доступен с этого интерфейса"
+". При значении "
+"«по умолчанию» (-1) используется значение из глобальной конфигурации; при отсу"
+"тствии глобального "
+"значения данный параметр отключён."
+
+#: src/libnmc-setting/settings-docs.h.in:216
 msgid ""
 "A list of IPv4 destination addresses, prefix length, optional IPv4 next hop "
 "addresses, optional route metric, optional attribute. The valid syntax is: "
@@ -8759,14 +9276,61 @@ msgstr ""
 "[attribute=val]...[,ip[/prefix]...]\". Например: \"192.0.2.0/24 10.1.1.1 77, "
 "198.51.100.0/24\"."
 
-#: src/libnmc-setting/settings-docs.h.in:197
-#: src/libnmc-setting/settings-docs.h.in:230
+#: src/libnmc-setting/settings-docs.h.in:217
+#: src/libnmc-setting/settings-docs.h.in:255
 msgid "A comma separated list of routing rules for policy routing."
 msgstr ""
 "Список, через запятую, правил маршрутизации для маршрутизации на основе "
 "политик."
 
-#: src/libnmc-setting/settings-docs.h.in:198
+#: src/libnmc-setting/settings-docs.h.in:218
+#: src/libnmc-setting/settings-docs.h.in:256
+msgid ""
+"This option allows you to specify a custom DHCP lease time for the shared "
+"connection method in seconds. The value should be either a number between "
+"120 and 31536000 (one year) If this option is not specified, 3600 (one hour) "
+"is used. Special values are 0 for default value of 1 hour and 2147483647 "
+"(MAXINT32) for infinite lease time."
+msgstr ""
+"Данный параметр даёт возможность указать пользовательское значение времени аре"
+"нды DHCP (в сек.) для метода разделяемых "
+"подключений. Значением должно быть число от 120 до 31536000 (один год). Если з"
+"начение не указано, используется 3600 (один час). "
+"Специальные значения: 0 — для значения по умолчанию в один час и 2147483647 (M"
+"AXINT32) — для бесконечного времени аренды."
+
+#: src/libnmc-setting/settings-docs.h.in:219
+#: src/libnmc-setting/settings-docs.h.in:257
+msgid ""
+"This option allows you to specify a custom DHCP range for the shared "
+"connection method. The value is expected to be in `<START_ADDRESS>,"
+"<END_ADDRESS>` format. The range should be part of network set by "
+"ipv4.address option and it should not contain network address or broadcast "
+"address. If this option is not specified, the DHCP range will be "
+"automatically determined based on the interface address. The range will be "
+"selected to be adjacent to the interface address, either before or after it, "
+"with the larger possible range being preferred. The range will be adjusted "
+"to fill the available address space, except for networks with a prefix "
+"length greater than 24, which will be treated as if they have a prefix "
+"length of 24."
+msgstr ""
+"Данный параметр даёт возможность указать пользовательский диапазон DHCP для ме"
+"тода "
+"разделяемых подключений. Значение ожидается в формате `<НАЧАЛЬНЫЙ_АДРЕС>,<КОНЕ"
+"ЧНЫЙ_АДРЕС>`. "
+"Диапазон должен быть частью сети, настроенной с помощью параметра ipv4.address"
+", и не должен "
+"содержать сетевых адресов или широковещательных адресов. Если параметр не наст"
+"роен, диапазон "
+"DHCP будет определён автоматически на базе адреса интерфейса. Выбранный диапаз"
+"он будет примыкать к адресу "
+"интерфейса, либо перед ним, либо за ним. Предпочитаются наиболее широкие диапа"
+"зоны. Диапазон будет "
+"настроен для вмещения доступных адресных пространств, кроме сетей с длиной пре"
+"фикса больше 24, префикс "
+"таких сетей будет считаться равным 24."
+
+#: src/libnmc-setting/settings-docs.h.in:220
 msgid ""
 "Configure method for creating the IPv6 interface identifier of addresses "
 "with RFC4862 IPv6 Stateless Address Autoconfiguration and Link Local "
@@ -8781,11 +9345,11 @@ msgid ""
 "address to generate addresses for stateless autoconfiguration. If the "
 "property is set to \"stable-privacy\", the interface identifier is generated "
 "as specified by RFC7217. This works by hashing a host specific key (see "
-"NetworkManager(8) manual), the interface name, the connection's \"connection."
-"stable-id\" property and the address prefix.  This improves privacy by "
-"making it harder to use the address to track the host's presence and the "
-"address is stable when the network interface hardware is replaced. The "
-"special values \"default\" and \"default-or-eui64\" will fallback to the "
+"NetworkManager(8) manual), the interface name, the connection's "
+"\"connection.stable-id\" property and the address prefix.  This improves "
+"privacy by making it harder to use the address to track the host's presence "
+"and the address is stable when the network interface hardware is replaced. "
+"The special values \"default\" and \"default-or-eui64\" will fallback to the "
 "global connection default as documented in the NetworkManager.conf(5) "
 "manual. If the global default is not specified, the fallback value is "
 "\"stable-privacy\" or \"eui64\", respectively. If not specified, when "
@@ -8822,13 +9386,13 @@ msgstr ""
 "конфиденциальности, настраиваемых свойством \"ip6-privacy\", и не влияет на "
 "временные адреса, настроенные с помощью этого параметра."
 
-#: src/libnmc-setting/settings-docs.h.in:199
+#: src/libnmc-setting/settings-docs.h.in:221
 msgid ""
 "A list of IPv6 addresses and their prefix length. Multiple addresses can be "
-"separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:"
-"db8:85a3::5/64\". The addresses are listed in decreasing priority, meaning "
-"the first address will be the primary address. This can make a difference "
-"with IPv6 source address selection (RFC 6724, section 5)."
+"separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, "
+"2001:db8:85a3::5/64\". The addresses are listed in decreasing priority, "
+"meaning the first address will be the primary address. This can make a "
+"difference with IPv6 source address selection (RFC 6724, section 5)."
 msgstr ""
 "Список адресов IPv6 и длин их префиксов. Несколько адресов разделяются "
 "запятыми. Например: \"2001:db8:85a3::8a2e:370:7334/64, 2001:"
@@ -8836,33 +9400,33 @@ msgstr ""
 "есть первый адрес будет первичным. Параметр может иметь существенное влияние "
 "на выбор исходных адресов IPv6 (стандарт RFC 6724, раздел 5)."
 
-#: src/libnmc-setting/settings-docs.h.in:203
+#: src/libnmc-setting/settings-docs.h.in:225
 msgid ""
 "A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp "
 "client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried "
-"in the Client Identifier option. If the property is a hex string ('aa:bb:"
-"cc') it is interpreted as a binary DUID and filled as an opaque value in the "
-"Client Identifier option. The special value \"lease\" will retrieve the DUID "
-"previously used from the lease file belonging to the connection. If no DUID "
-"is found and \"dhclient\" is the configured dhcp client, the DUID is "
-"searched in the system-wide dhclient lease file. If still no DUID is found, "
-"or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) "
-"will be generated based on the machine-id. The special values \"llt\" and "
-"\"ll\" will generate a DUID of type LLT or LL (see RFC 3315) based on the "
-"current MAC address of the device. In order to try providing a stable DUID-"
-"LLT, the time field will contain a constant timestamp that is used globally "
-"(for all profiles) and persisted to disk. The special values \"stable-llt\", "
-"\"stable-ll\" and \"stable-uuid\" will generate a DUID of the corresponding "
-"type, derived from the connection's stable-id and a per-host unique key. You "
-"may want to include the \"${DEVICE}\" or \"${MAC}\" specifier in the stable-"
-"id, in case this profile gets activated on multiple devices. So, the link-"
-"layer address of \"stable-ll\" and \"stable-llt\" will be a generated "
-"address derived from the stable id. The DUID-LLT time value in the \"stable-"
-"llt\" option will be picked among a static timespan of three years (the "
-"upper bound of the interval is the same constant timestamp used in \"llt\"). "
-"When the property is unset, the global value provided for \"ipv6.dhcp-duid\" "
-"is used. If no global value is provided, the default \"lease\" value is "
-"assumed."
+"in the Client Identifier option. If the property is a hex string "
+"('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque "
+"value in the Client Identifier option. The special value \"lease\" will "
+"retrieve the DUID previously used from the lease file belonging to the "
+"connection. If no DUID is found and \"dhclient\" is the configured dhcp "
+"client, the DUID is searched in the system-wide dhclient lease file. If "
+"still no DUID is found, or another dhcp client is used, a global and "
+"permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. "
+"The special values \"llt\" and \"ll\" will generate a DUID of type LLT or LL "
+"(see RFC 3315) based on the current MAC address of the device. In order to "
+"try providing a stable DUID-LLT, the time field will contain a constant "
+"timestamp that is used globally (for all profiles) and persisted to disk. "
+"The special values \"stable-llt\", \"stable-ll\" and \"stable-uuid\" will "
+"generate a DUID of the corresponding type, derived from the connection's "
+"stable-id and a per-host unique key. You may want to include the \"${DEVICE}"
+"\" or \"${MAC}\" specifier in the stable-id, in case this profile gets "
+"activated on multiple devices. So, the link-layer address of \"stable-ll\" "
+"and \"stable-llt\" will be a generated address derived from the stable id. "
+"The DUID-LLT time value in the \"stable-llt\" option will be picked among a "
+"static timespan of three years (the upper bound of the interval is the same "
+"constant timestamp used in \"llt\"). When the property is unset, the global "
+"value provided for \"ipv6.dhcp-duid\" is used. If no global value is "
+"provided, the default \"lease\" value is assumed."
 msgstr ""
 "Строка, содержащая уникальный идентификатор DHCPv6 (DUID), используемый "
 "клиентом dhcp для идентификации себя на серверах DHCPv6 (RFC 3315). DUID "
@@ -8892,7 +9456,7 @@ msgstr ""
 "«ipv6.dhcp-duid». Если глобальное значение не настроено, предполагается "
 "значение по умолчанию «lease»."
 
-#: src/libnmc-setting/settings-docs.h.in:207
+#: src/libnmc-setting/settings-docs.h.in:229
 msgid ""
 "A IPv6 address followed by a slash and a prefix length. If set, the value is "
 "sent to the DHCPv6 server as hint indicating the prefix delegation (IA_PD) "
@@ -8905,7 +9469,7 @@ msgstr ""
 "Чтобы указать только длину префикса без самого префикса, настройте часть с "
 "адресом как нулевой адрес (например, \"::/60\")."
 
-#: src/libnmc-setting/settings-docs.h.in:213
+#: src/libnmc-setting/settings-docs.h.in:236
 msgid ""
 "DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The "
 "currently supported options are \"attempts\", \"debug\", \"edns0\", "
@@ -8941,8 +9505,7 @@ msgstr ""
 "добавляются автоматически. Действительные \"ipv4.dns-options\" и \"ipv6.dns-"
 "options\" объединяются вместе."
 
-#: src/libnmc-setting/settings-docs.h.in:219
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:243
 msgid ""
 "Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941.  If "
 "enabled, it makes the kernel generate a temporary IPv6 address in addition "
@@ -8964,19 +9527,21 @@ msgstr ""
 "вызвать проблемы в некоторых приложениях. Допустимые значения: «-1» — "
 "неизвестно, «0» — отключено, «1» — включено (предпочитается общедоступный "
 "адрес), «2» — включено (предпочитаются временные адреса). Если для каждого "
-"подключения установлено значение «-1» (неизвестно), это означает откат к "
-"глобальной конфигурации «ipv6.ip6-privacy». Если глобальная конфигурация не "
-"указана или имеет значение «-1», будет прочитано значение из «/proc/sys/net/"
+"подключения установлено значение «-1» (по умолчанию), это означает откат к "
+"глобальной конфигурации «ipv6.ip6-privacy». Если глобальная конфигурация также"
+" не "
+"указана или имеет значение «-1», будет использоваться значение из «/proc/sys/n"
+"et/"
 "ipv6/conf/default/use_tempaddr». Обратите внимание, что этот параметр "
 "отличается от адресов Stable Privacy, активируемых с помощью значения "
 "\"stable-privacy\" параметра \"addr-gen-mode\" в качестве ещё одного способа "
 "избежать отслеживания хостов с адресами IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:221
+#: src/libnmc-setting/settings-docs.h.in:245
 msgid "The IPv6 connection method."
 msgstr "Метод подключения по протоколу IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:222
+#: src/libnmc-setting/settings-docs.h.in:246
 msgid ""
 "Maximum transmission unit size, in bytes. If zero (the default), the MTU is "
 "set automatically from router advertisements or is left equal to the link-"
@@ -8989,7 +9554,7 @@ msgstr ""
 "канального уровня, либо превышает нулевое значение, но не превышает мин. "
 "значения IPv6 MTU в 1280, то это значение ни на что не влияет."
 
-#: src/libnmc-setting/settings-docs.h.in:224
+#: src/libnmc-setting/settings-docs.h.in:248
 msgid ""
 "A timeout for waiting Router Advertisements in seconds. If zero (the "
 "default), a globally configured default is used. If still unspecified, the "
@@ -9002,11 +9567,11 @@ msgstr ""
 "ожидания зависит от параметров sysctl устройства. Для бесконечного времени "
 "ожидания укажите 2147483647 (MAXINT32)."
 
-#: src/libnmc-setting/settings-docs.h.in:229
+#: src/libnmc-setting/settings-docs.h.in:254
 msgid "Array of IP routes."
 msgstr "Массив маршрутов IP."
 
-#: src/libnmc-setting/settings-docs.h.in:231
+#: src/libnmc-setting/settings-docs.h.in:258
 msgid ""
 "The preferred lifetime of autogenerated temporary addresses, in seconds. "
 "Having a per-connection setting set to \"0\" (default) means fallback to "
@@ -9014,8 +9579,14 @@ msgid ""
 "also unspecified or set to \"0\", fallback to read \"/proc/sys/net/ipv6/conf/"
 "default/temp_prefered_lft\"."
 msgstr ""
+"Предпочтительное время жизни автоматически создаваемых временных адресов, в се"
+"кундах. Значение «0» (по умолчанию) "
+"для каждого подключения означает использование параметра из глобальной конфигу"
+"рации \"ipv6.temp-preferred-lifetime\". "
+"Если он также не настроен или имеет значение «0», значение ищется в файле \"/p"
+"roc/sys/net/ipv6/conf/default/temp_prefered_lft\"."
 
-#: src/libnmc-setting/settings-docs.h.in:232
+#: src/libnmc-setting/settings-docs.h.in:259
 msgid ""
 "The valid lifetime of autogenerated temporary addresses, in seconds. Having "
 "a per-connection setting set to \"0\" (default) means fallback to global "
@@ -9023,8 +9594,14 @@ msgid ""
 "unspecified or set to \"0\", fallback to read \"/proc/sys/net/ipv6/conf/"
 "default/temp_valid_lft\"."
 msgstr ""
+"Действительное время жизни автоматически создаваемых временных адресов, в секу"
+"ндах. Значение «0» (по умолчанию) "
+"для каждого подключения означает использование параметра из глобальной конфигу"
+"рации \"ipv6.temp-valid-lifetime\". Если он "
+"также не настроен или имеет значение «0», будет прочитан файл \"/proc/sys/net/"
+"ipv6/conf/default/temp_valid_lft\"."
 
-#: src/libnmc-setting/settings-docs.h.in:233
+#: src/libnmc-setting/settings-docs.h.in:260
 msgid ""
 "Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 "
 "tokenized interface identifiers. Useful with eui64 addr-gen-mode. When set, "
@@ -9039,7 +9616,7 @@ msgstr ""
 "адресам из автоконфигурации без сохранения изменений, но не к адресам IPv6 "
 "link local."
 
-#: src/libnmc-setting/settings-docs.h.in:234
+#: src/libnmc-setting/settings-docs.h.in:261
 msgid ""
 "How many additional levels of encapsulation are permitted to be prepended to "
 "packets. This property applies only to IPv6 tunnels. To disable this option, "
@@ -9049,7 +9626,7 @@ msgstr ""
 "пакета. Это свойство применяется только к туннелям IPv6. Чтобы отключить эту "
 "опцию, добавьте 0x1 (ip6-ign-encap-limit) к флагам ip-tunnel."
 
-#: src/libnmc-setting/settings-docs.h.in:235
+#: src/libnmc-setting/settings-docs.h.in:262
 msgid ""
 "Tunnel flags. Currently, the following values are supported: 0x1 (ip6-ign-"
 "encap-limit), 0x2 (ip6-use-orig-tclass), 0x4 (ip6-use-orig-flowlabel), 0x8 "
@@ -9061,7 +9638,7 @@ msgstr ""
 "0x8 (ip6-mip6-dev), 0x10 (ip6-rcv-dscp-copy) и 0x20 (ip6-use-orig-fwmark). "
 "Они действительны только для туннелей IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:236
+#: src/libnmc-setting/settings-docs.h.in:263
 msgid ""
 "The flow label to assign to tunnel packets. This property applies only to "
 "IPv6 tunnels."
@@ -9069,7 +9646,7 @@ msgstr ""
 "Метка потока для назначения туннельным пакетам. Это свойство применяется "
 "только к туннелям IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:237
+#: src/libnmc-setting/settings-docs.h.in:264
 msgid ""
 "The fwmark value to assign to tunnel packets. This property can be set to a "
 "non zero value only on VTI and VTI6 tunnels."
@@ -9077,7 +9654,7 @@ msgstr ""
 "Значение fwmark, назначаемое туннельным пакетам. Значение данного параметра, "
 "не равное нулю, можно настроить только для туннелей VTI и VTI6."
 
-#: src/libnmc-setting/settings-docs.h.in:238
+#: src/libnmc-setting/settings-docs.h.in:265
 msgid ""
 "The key used for tunnel input packets; the property is valid only for "
 "certain tunnel modes (GRE, IP6GRE). If empty, no key is used."
@@ -9086,7 +9663,7 @@ msgstr ""
 "для определённых туннельных режимов (GRE, IP6GRE). Если значение "
 "отсутствует, ключи не используются."
 
-#: src/libnmc-setting/settings-docs.h.in:239
+#: src/libnmc-setting/settings-docs.h.in:266
 msgid ""
 "The local endpoint of the tunnel; the value can be empty, otherwise it must "
 "contain an IPv4 or IPv6 address."
@@ -9094,7 +9671,7 @@ msgstr ""
 "Локальная конечная точка туннеля; значение может быть пустым, в противном "
 "случае оно должно содержать адрес IPv4 или IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:240
+#: src/libnmc-setting/settings-docs.h.in:267
 msgid ""
 "The tunneling mode. Valid values: ipip (1), gre (2), sit (3), isatap (4), "
 "vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap (10) and "
@@ -9104,7 +9681,7 @@ msgstr ""
 "isatap (4), vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap "
 "(10) и ip6gretap (11)"
 
-#: src/libnmc-setting/settings-docs.h.in:241
+#: src/libnmc-setting/settings-docs.h.in:268
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
 "breaking larger packets up into multiple fragments."
@@ -9113,7 +9690,7 @@ msgstr ""
 "или меньшего размера. Более крупные пакеты разбиваются на несколько "
 "фрагментов."
 
-#: src/libnmc-setting/settings-docs.h.in:242
+#: src/libnmc-setting/settings-docs.h.in:269
 msgid ""
 "The key used for tunnel output packets; the property is valid only for "
 "certain tunnel modes (GRE, IP6GRE). If empty, no key is used."
@@ -9122,7 +9699,7 @@ msgstr ""
 "только для определённых туннельных режимов (GRE, IP6GRE). Если значение "
 "отсутствует, ключи не используются."
 
-#: src/libnmc-setting/settings-docs.h.in:243
+#: src/libnmc-setting/settings-docs.h.in:270
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID the "
 "new device will be bound to so that tunneled packets will only be routed via "
@@ -9132,11 +9709,11 @@ msgstr ""
 "подключения, с которым будет объединено новое устройство, чтобы маршрут "
 "туннелируемых пакетов проходил только через этот интерфейс."
 
-#: src/libnmc-setting/settings-docs.h.in:244
+#: src/libnmc-setting/settings-docs.h.in:271
 msgid "Whether to enable Path MTU Discovery on this tunnel."
 msgstr "Включить ли обнаружение MTU пути в этом туннеле."
 
-#: src/libnmc-setting/settings-docs.h.in:245
+#: src/libnmc-setting/settings-docs.h.in:272
 msgid ""
 "The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 "
 "address."
@@ -9144,7 +9721,7 @@ msgstr ""
 "Удалённая конечная точка туннеля; значение должно содержать адрес IPv4 или "
 "IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:246
+#: src/libnmc-setting/settings-docs.h.in:273
 msgid ""
 "The type of service (IPv4) or traffic class (IPv6) field to be set on "
 "tunneled packets."
@@ -9152,7 +9729,7 @@ msgstr ""
 "Поле типа сервиса (IPv4) или класса трафика (IPv6), настраиваемое для "
 "туннелируемых пакетов."
 
-#: src/libnmc-setting/settings-docs.h.in:247
+#: src/libnmc-setting/settings-docs.h.in:274
 msgid ""
 "The TTL to assign to tunneled packets. 0 is a special value meaning that "
 "packets inherit the TTL value."
@@ -9161,11 +9738,35 @@ msgstr ""
 "специальным значением, означающим, что значение TTL пакетов будет "
 "наследуемым."
 
-#: src/libnmc-setting/settings-docs.h.in:248
+#: src/libnmc-setting/settings-docs.h.in:275
+msgid "The IPVLAN mode. Valid values: l2 (1), l3 (2), l3s (3)"
+msgstr "Режим IPVLAN. Действительные значения: l2 (1), l3 (2), l3s (3)"
+
+#: src/libnmc-setting/settings-docs.h.in:276
+msgid ""
+"If given, specifies the parent interface name or parent connection UUID from "
+"which this IPVLAN interface should be created. If this property is not "
+"specified, the connection must contain an \"802-3-ethernet\" setting with a "
+"\"mac-address\" property."
+msgstr ""
+"Если значение указано, то оно определяет имя интерфейса или UUID "
+"родительского подключения, на базе которого должен быть создан данный "
+"интерфейс IPVLAN. Если свойство не определено, то подключение должно иметь "
+"параметр \"802-3-ethernet\" со свойством \"mac-address\"."
+
+#: src/libnmc-setting/settings-docs.h.in:277
+msgid "Whether the interface should be put in private mode."
+msgstr "Должен ли интерфейс быть помещён в закрытый (private) режим."
+
+#: src/libnmc-setting/settings-docs.h.in:278
+msgid "Whether the interface should be put in VEPA mode."
+msgstr "Должен ли интерфейс быть переведён в режим VEPA."
+
+#: src/libnmc-setting/settings-docs.h.in:279
 msgid "Whether the transmitted traffic must be encrypted."
 msgstr "Нужно ли шифровать передаваемый трафик."
 
-#: src/libnmc-setting/settings-docs.h.in:249
+#: src/libnmc-setting/settings-docs.h.in:280
 msgid ""
 "The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement. "
 "Must be a string of 32 hexadecimal characters."
@@ -9174,11 +9775,11 @@ msgstr ""
 "о ключах MACsec. Должен представлять собой строку из 32 шестнадцатеричных "
 "символов."
 
-#: src/libnmc-setting/settings-docs.h.in:250
+#: src/libnmc-setting/settings-docs.h.in:281
 msgid "Flags indicating how to handle the \"mka-cak\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «mka-cak»."
 
-#: src/libnmc-setting/settings-docs.h.in:251
+#: src/libnmc-setting/settings-docs.h.in:282
 msgid ""
 "The pre-shared CKN (Connectivity-association Key Name) for MACsec Key "
 "Agreement. Must be a string of hexadecimal characters with a even length "
@@ -9188,7 +9789,7 @@ msgstr ""
 "о ключах MACsec. Должен представлять собой строку из шестнадцатеричных "
 "символов чётной длины от 2 до 64."
 
-#: src/libnmc-setting/settings-docs.h.in:252
+#: src/libnmc-setting/settings-docs.h.in:283
 msgid ""
 "Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key "
 "Agreement) is obtained."
@@ -9196,7 +9797,7 @@ msgstr ""
 "Определяет способ получения CAK (ключ ассоциации подключения) для MKA "
 "(соглашение о ключах MACsec)."
 
-#: src/libnmc-setting/settings-docs.h.in:253
+#: src/libnmc-setting/settings-docs.h.in:284
 msgid ""
 "Specifies the MACsec offload mode. \"off\" (0) disables MACsec offload. "
 "\"phy\" (1) and \"mac\" (2) request offload respectively to the PHY or to "
@@ -9205,8 +9806,16 @@ msgid ""
 "configuration; if no global default is defined, the built-in default is "
 "\"off\" (0)."
 msgstr ""
+"Настраивает режим выгрузки (offload) для MACsec. «off» (0) — отключает выгрузк"
+"у MACsec. \"phy\" (1) и \"mac\" (2) "
+"запрашивают выгрузку соответственно на PHY или на MAC; если выбранный режим не"
+"доступен, подключение "
+"не будет создано. \"default\" (-1) — использует глобальное значение по умолчан"
+"ию, указанное в конфигурации "
+"NetworkManager; если такое глобальное значение не настроено, встроенное значен"
+"ие по умолчанию — \"off\" (0)."
 
-#: src/libnmc-setting/settings-docs.h.in:254
+#: src/libnmc-setting/settings-docs.h.in:285
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
 "which this MACSEC interface should be created.  If this property is not "
@@ -9218,7 +9827,7 @@ msgstr ""
 "интерфейс MACSEC. Если свойство не указано, то подключение должно иметь "
 "параметр \"802-3-ethernet\" со свойством \"mac-address\"."
 
-#: src/libnmc-setting/settings-docs.h.in:255
+#: src/libnmc-setting/settings-docs.h.in:286
 msgid ""
 "The port component of the SCI (Secure Channel Identifier), between 1 and "
 "65534."
@@ -9226,7 +9835,7 @@ msgstr ""
 "Компонент порта идентификатора защищённого канала (SCI), значение от 1 до "
 "65534."
 
-#: src/libnmc-setting/settings-docs.h.in:256
+#: src/libnmc-setting/settings-docs.h.in:287
 msgid ""
 "Specifies whether the SCI (Secure Channel Identifier) is included in every "
 "packet."
@@ -9234,11 +9843,11 @@ msgstr ""
 "Указывает, будет ли идентификатор защищённого канала (SCI) включаться ​​в "
 "каждый пакет."
 
-#: src/libnmc-setting/settings-docs.h.in:257
+#: src/libnmc-setting/settings-docs.h.in:288
 msgid "Specifies the validation mode for incoming frames."
 msgstr "Определяет режим проверки для входящих кадров."
 
-#: src/libnmc-setting/settings-docs.h.in:258
+#: src/libnmc-setting/settings-docs.h.in:289
 msgid ""
 "The macvlan mode, which specifies the communication mechanism between "
 "multiple macvlans on the same lower device."
@@ -9246,7 +9855,7 @@ msgstr ""
 "Режим macvlan, который определяет механизм связи между несколькими macvlan "
 "на одном и том же нижнем устройстве."
 
-#: src/libnmc-setting/settings-docs.h.in:259
+#: src/libnmc-setting/settings-docs.h.in:290
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
 "which this MAC-VLAN interface should be created.  If this property is not "
@@ -9258,15 +9867,19 @@ msgstr ""
 "интерфейс MAC-VLAN. Если свойство не определено, то подключение должно иметь "
 "параметр \"802-3-ethernet\" со свойством \"mac-address\"."
 
-#: src/libnmc-setting/settings-docs.h.in:260
-msgid "Whether the interface should be put in promiscuous mode."
-msgstr "Помещать ли интерфейс в неизбирательный режим."
+#: src/libnmc-setting/settings-docs.h.in:291
+msgid ""
+"Whether the parent interface should be put in promiscuous mode (true by "
+"default)."
+msgstr ""
+"Должен ли родительский интерфейс быть помещён в неизбирательный режим "
+"(по умолчанию — «истина»)"
 
-#: src/libnmc-setting/settings-docs.h.in:261
+#: src/libnmc-setting/settings-docs.h.in:292
 msgid "Whether the interface should be a MACVTAP."
 msgstr "Должен ли интерфейс использовать MACVTAP."
 
-#: src/libnmc-setting/settings-docs.h.in:262
+#: src/libnmc-setting/settings-docs.h.in:293
 msgid ""
 "A list of driver names to match. Each element is a shell wildcard pattern. "
 "See NMSettingMatch:interface-name for how special characters '|', '&', '!' "
@@ -9279,7 +9892,7 @@ msgstr ""
 "необязательных совпадений, а также об инвертировании шаблонов ищите в "
 "NMSettingMatch:interface-name."
 
-#: src/libnmc-setting/settings-docs.h.in:263
+#: src/libnmc-setting/settings-docs.h.in:294
 msgid ""
 "A list of interface names to match. Each element is a shell wildcard "
 "pattern. An element can be prefixed with a pipe symbol (|) or an ampersand "
@@ -9312,7 +9925,7 @@ msgstr ""
 "специального символа) для зеркалирования начала шаблона. Например: \"&\\!a\" "
 "является обязательным совпадением для буквального \"!a\"."
 
-#: src/libnmc-setting/settings-docs.h.in:264
+#: src/libnmc-setting/settings-docs.h.in:295
 msgid ""
 "A list of kernel command line arguments to match. This may be used to check "
 "whether a specific kernel command line option is set (or unset, if prefixed "
@@ -9336,7 +9949,7 @@ msgstr ""
 "для обязательных и необязательных совпадений, а также об инвертировании "
 "совпадений ищите в NMSettingMatch:interface-name."
 
-#: src/libnmc-setting/settings-docs.h.in:265
+#: src/libnmc-setting/settings-docs.h.in:296
 msgid ""
 "A list of paths to match against the ID_PATH udev property of devices. "
 "ID_PATH represents the topological persistent path of a device. It typically "
@@ -9364,12 +9977,12 @@ msgstr ""
 "«\\» используются для обязательных и необязательных совпадений, смотрите в "
 "NMSettingMatch:interface-name."
 
-#: src/libnmc-setting/settings-docs.h.in:266
+#: src/libnmc-setting/settings-docs.h.in:297
 msgid "Channel on which the mesh network to join is located."
 msgstr ""
 "Канал, на котором расположена сеть mesh, к которой необходимо присоединиться."
 
-#: src/libnmc-setting/settings-docs.h.in:267
+#: src/libnmc-setting/settings-docs.h.in:298
 msgid ""
 "Anycast DHCP MAC address used when requesting an IP address via DHCP. The "
 "specific anycast address used determines which DHCP server class answers the "
@@ -9380,36 +9993,52 @@ msgstr ""
 "определяет класс сервера DHCP, отвечающего на запрос. На данный момент "
 "параметр реализован только в модуле dhclient DHCP."
 
-#: src/libnmc-setting/settings-docs.h.in:268
+#: src/libnmc-setting/settings-docs.h.in:299
 msgid "SSID of the mesh network to join."
 msgstr "SSID сети mesh, к которой нужно присоединиться."
 
-#: src/libnmc-setting/settings-docs.h.in:269
+#: src/libnmc-setting/settings-docs.h.in:300
 msgid "The data path type. One of \"system\", \"netdev\" or empty."
 msgstr "Тип пути данных. Один из: \"system\", \"netdev\" или пустое значение."
 
-#: src/libnmc-setting/settings-docs.h.in:270
+#: src/libnmc-setting/settings-docs.h.in:301
 msgid "The bridge failure mode. One of \"secure\", \"standalone\" or empty."
 msgstr ""
 "Режим сбоя моста. Один из: \"secure\", \"standalone\" или пустое значение."
 
-#: src/libnmc-setting/settings-docs.h.in:271
+#: src/libnmc-setting/settings-docs.h.in:302
 msgid "Enable or disable multicast snooping."
 msgstr "Включение или выключение multicast snooping."
 
-#: src/libnmc-setting/settings-docs.h.in:272
+#: src/libnmc-setting/settings-docs.h.in:303
 msgid "Enable or disable RSTP."
 msgstr "Включение или выключение RSTP."
 
-#: src/libnmc-setting/settings-docs.h.in:273
+#: src/libnmc-setting/settings-docs.h.in:304
 msgid "Enable or disable STP."
 msgstr "Включение или выключение STP."
 
-#: src/libnmc-setting/settings-docs.h.in:274
+#: src/libnmc-setting/settings-docs.h.in:305
 msgid "Open vSwitch DPDK device arguments."
 msgstr "Аргументы для устройства Open vSwitch DPDK."
 
-#: src/libnmc-setting/settings-docs.h.in:275
+#: src/libnmc-setting/settings-docs.h.in:306
+msgid ""
+"Configures the Link State Change (LSC) detection mode for the OVS DPDK "
+"interface. When set to \"ignore\" (-1), NetworkManager doesn't change the "
+"default value configured by Open vSwitch. \"enabled\" (1) enables "
+"interrupts. \"disabled\" (0) disables interrupts, thus setting the interface "
+"in poll mode."
+msgstr ""
+"Настраивает режим обнаружения изменения состояния канала связи (LSC) для интер"
+"фейсов OVS DPDK. "
+"При значении \"ignore\" (-1) NetworkManager не изменяет значение по умолчанию,"
+" настроенное Open vSwitch. "
+"Значение \"enabled\" (1) включает прерывания, \"disabled\" (0) — отключает пре"
+"рывания, тем самым помещая "
+"интерфейс в режим опросов."
+
+#: src/libnmc-setting/settings-docs.h.in:307
 msgid ""
 "Open vSwitch DPDK number of rx queues. Defaults to zero which means to leave "
 "the parameter in OVS unspecified and effectively configures one queue."
@@ -9417,7 +10046,7 @@ msgstr ""
 "Число очередей RX для Open vSwitch DPDK. По умолчанию — нуль, то есть "
 "параметр в OVS не настраивается, что по факту настраивает одну очередь."
 
-#: src/libnmc-setting/settings-docs.h.in:276
+#: src/libnmc-setting/settings-docs.h.in:308
 msgid ""
 "The rx queue size (number of rx descriptors) for DPDK ports. Must be zero or "
 "a power of 2 between 1 and 4096, and supported by the hardware. Defaults to "
@@ -9429,7 +10058,7 @@ msgstr ""
 "аппаратную поддержку. По умолчанию — ноль, т.е. параметр в OVS остаётся "
 "неуказанным и фактически настраивает 2048 дескрипторов."
 
-#: src/libnmc-setting/settings-docs.h.in:277
+#: src/libnmc-setting/settings-docs.h.in:309
 msgid ""
 "The tx queue size (number of tx descriptors) for DPDK ports. Must be zero or "
 "a power of 2 between 1 and 4096, and supported by the hardware. Defaults to "
@@ -9441,7 +10070,7 @@ msgstr ""
 "аппаратную поддержку. По умолчанию — ноль, т.е. параметр в OVS остаётся "
 "неуказанным и фактически настраивает 2048 дескрипторов."
 
-#: src/libnmc-setting/settings-docs.h.in:278
+#: src/libnmc-setting/settings-docs.h.in:310
 msgid ""
 "Open vSwitch openflow port number. Defaults to zero which means that port "
 "number will not be specified and it will be chosen randomly by ovs. OpenFlow "
@@ -9455,7 +10084,7 @@ msgstr ""
 "обработки их в OpenFlow. Коммутаторы OpenFlow логически подключены друг к "
 "другу с помощью своих портов OpenFlow."
 
-#: src/libnmc-setting/settings-docs.h.in:279
+#: src/libnmc-setting/settings-docs.h.in:311
 msgid ""
 "The interface type. Either \"internal\", \"system\", \"patch\", \"dpdk\", or "
 "empty."
@@ -9463,7 +10092,7 @@ msgstr ""
 "Тип интерфейса: \"internal\", \"system\", \"patch\", \"dpdk\", \"internal\", "
 "или пустое значение."
 
-#: src/libnmc-setting/settings-docs.h.in:280
+#: src/libnmc-setting/settings-docs.h.in:312
 msgid ""
 "Specifies the name of the interface for the other side of the patch. The "
 "patch on the other side must also set this interface as peer."
@@ -9471,36 +10100,36 @@ msgstr ""
 "Указывает имя интерфейса для другой стороны патч-порта. Интерфейс патча на "
 "другой стороне также должен быть настроен как одноранговый узел."
 
-#: src/libnmc-setting/settings-docs.h.in:281
+#: src/libnmc-setting/settings-docs.h.in:313
 msgid "The time port must be inactive in order to be considered down."
 msgstr ""
 "Время, в течение которого порт должен быть неактивным, чтобы считаться "
 "нерабочим."
 
-#: src/libnmc-setting/settings-docs.h.in:282
+#: src/libnmc-setting/settings-docs.h.in:314
 msgid ""
 "Bonding mode. One of \"active-backup\", \"balance-slb\", or \"balance-tcp\"."
 msgstr ""
 "Режим агрегации. Один из: \"active-backup\", \"balance-slb\" или \"balance-"
 "tcp\"."
 
-#: src/libnmc-setting/settings-docs.h.in:283
+#: src/libnmc-setting/settings-docs.h.in:315
 msgid "The time port must be active before it starts forwarding traffic."
 msgstr ""
 "Порт времени должен быть активным до того, как он начнёт перенаправление "
 "трафика."
 
-#: src/libnmc-setting/settings-docs.h.in:284
+#: src/libnmc-setting/settings-docs.h.in:316
 msgid "LACP mode. One of \"active\", \"off\", or \"passive\"."
 msgstr ""
 "Режим протокола агрегирования каналов (LACP). Один из: \"active\", \"off\" "
 "или \"passive\"."
 
-#: src/libnmc-setting/settings-docs.h.in:285
+#: src/libnmc-setting/settings-docs.h.in:317
 msgid "The VLAN tag in the range 0-4095."
 msgstr "Тег VLAN в диапазоне 0-4095."
 
-#: src/libnmc-setting/settings-docs.h.in:286
+#: src/libnmc-setting/settings-docs.h.in:318
 msgid ""
 "A list of VLAN ranges that this port trunks. The property is valid only for "
 "ports with mode \"trunk\", \"native-tagged\", or \"native-untagged port\". "
@@ -9510,7 +10139,7 @@ msgstr ""
 "только для портов с режимами  \"trunk\", \"native-tagged\" или \"native-"
 "untagged port\". Если значение не указано, порт обрезает все VLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:287
+#: src/libnmc-setting/settings-docs.h.in:319
 msgid ""
 "The VLAN mode. One of \"access\", \"native-tagged\", \"native-untagged\", "
 "\"trunk\", \"dot1q-tunnel\" or unset."
@@ -9518,7 +10147,7 @@ msgstr ""
 "Режим VLAN. Один из: \"access\", \"native-tagged\", \"native-untagged\", "
 "\"trunk\", \"dot1q-tunnel\", либо режим не указывается."
 
-#: src/libnmc-setting/settings-docs.h.in:288
+#: src/libnmc-setting/settings-docs.h.in:320
 msgid ""
 "If non-zero, instruct pppd to set the serial port to the specified "
 "baudrate.  This value should normally be left as 0 to automatically choose "
@@ -9528,7 +10157,7 @@ msgstr ""
 "последовательном порте указанную скорость передачи передачи (в бодах). "
 "Обычно оставляют «0», чтобы скорость была выбрана автоматически."
 
-#: src/libnmc-setting/settings-docs.h.in:289
+#: src/libnmc-setting/settings-docs.h.in:321
 msgid ""
 "If TRUE, specify that pppd should set the serial port to use hardware flow "
 "control with RTS and CTS signals.  This value should normally be set to "
@@ -9538,7 +10167,7 @@ msgstr ""
 "использование аппаратного контроля потока данных с помощью сигналов RTS и "
 "CTS. Обычно здесь указывается значение ЛОЖНО."
 
-#: src/libnmc-setting/settings-docs.h.in:290
+#: src/libnmc-setting/settings-docs.h.in:322
 msgid ""
 "If non-zero, instruct pppd to presume the connection to the peer has failed "
 "if the specified number of LCP echo-requests go unanswered by the peer.  The "
@@ -9550,7 +10179,7 @@ msgstr ""
 "пиру было прервано. При использовании данного свойства также необходимо "
 "установить отличное от нуля значение для параметра \"lcp-echo-interval\"."
 
-#: src/libnmc-setting/settings-docs.h.in:291
+#: src/libnmc-setting/settings-docs.h.in:323
 msgid ""
 "If non-zero, instruct pppd to send an LCP echo-request frame to the peer "
 "every n seconds (where n is the specified value).  Note that some PPP peers "
@@ -9562,7 +10191,7 @@ msgstr ""
 "Обратите внимание, что одни пиры PPP будут отвечать на эхо-запросы, а другие "
 "— нет, и что автоматически определить эти пиры невозможно."
 
-#: src/libnmc-setting/settings-docs.h.in:292
+#: src/libnmc-setting/settings-docs.h.in:324
 msgid ""
 "If TRUE, stateful MPPE is used.  See pppd documentation for more information "
 "on stateful MPPE."
@@ -9570,7 +10199,7 @@ msgstr ""
 "Если ИСТИНА, то используется MPPE с сохранением состояния. Подробности о "
 "MPPE с сохранением состояния смотрите в документации к pppd."
 
-#: src/libnmc-setting/settings-docs.h.in:293
+#: src/libnmc-setting/settings-docs.h.in:325
 msgid ""
 "If non-zero, instruct pppd to request that the peer send packets no larger "
 "than the specified size.  If non-zero, the MRU should be between 128 and "
@@ -9580,20 +10209,20 @@ msgstr ""
 "пакеты, не превышающие указанный размер. При значении, отличном от нуля, "
 "значение MRU должно находиться в диапазоне от 128 до 16384."
 
-#: src/libnmc-setting/settings-docs.h.in:294
+#: src/libnmc-setting/settings-docs.h.in:326
 msgid ""
 "If non-zero, instruct pppd to send packets no larger than the specified size."
 msgstr ""
 "При значении, отличном от нуля, pppd должен будет посылать пакеты, не "
 "превышающие указанный размер."
 
-#: src/libnmc-setting/settings-docs.h.in:295
+#: src/libnmc-setting/settings-docs.h.in:327
 msgid "If TRUE, Van Jacobsen TCP header compression will not be requested."
 msgstr ""
 "Если ИСТИНА, то метод Ван Якобсона для сжатия заголовков TCP запрашиваться "
 "не будет."
 
-#: src/libnmc-setting/settings-docs.h.in:296
+#: src/libnmc-setting/settings-docs.h.in:328
 msgid ""
 "If TRUE, do not require the other side (usually the PPP server) to "
 "authenticate itself to the client.  If FALSE, require authentication from "
@@ -9604,35 +10233,35 @@ msgstr ""
 "стороны аутентификацию. Почти во всех случаях здесь должно указываться "
 "значение ИСТИНА."
 
-#: src/libnmc-setting/settings-docs.h.in:297
+#: src/libnmc-setting/settings-docs.h.in:329
 msgid "If TRUE, BSD compression will not be requested."
 msgstr "Если ИСТИНА, сжатие BSD не будет запрашиваться."
 
-#: src/libnmc-setting/settings-docs.h.in:298
+#: src/libnmc-setting/settings-docs.h.in:330
 msgid "If TRUE, \"deflate\" compression will not be requested."
 msgstr "Если ИСТИНА, сжатие «deflate» не будет запрашиваться."
 
-#: src/libnmc-setting/settings-docs.h.in:299
+#: src/libnmc-setting/settings-docs.h.in:331
 msgid "If TRUE, the CHAP authentication method will not be used."
 msgstr "Если ИСТИНА, метод аутентификации CHAP не будет использоваться."
 
-#: src/libnmc-setting/settings-docs.h.in:300
+#: src/libnmc-setting/settings-docs.h.in:332
 msgid "If TRUE, the EAP authentication method will not be used."
 msgstr "Если ИСТИНА, метод аутентификации EAP не будет использоваться."
 
-#: src/libnmc-setting/settings-docs.h.in:301
+#: src/libnmc-setting/settings-docs.h.in:333
 msgid "If TRUE, the MSCHAP authentication method will not be used."
 msgstr "Если ИСТИНА, метод аутентификации MSCHAP не будет использоваться."
 
-#: src/libnmc-setting/settings-docs.h.in:302
+#: src/libnmc-setting/settings-docs.h.in:334
 msgid "If TRUE, the MSCHAPv2 authentication method will not be used."
 msgstr "Если ИСТИНА, метод аутентификации MSCHAPv2 не будет использоваться."
 
-#: src/libnmc-setting/settings-docs.h.in:303
+#: src/libnmc-setting/settings-docs.h.in:335
 msgid "If TRUE, the PAP authentication method will not be used."
 msgstr "Если ИСТИНА, метод аутентификации PAP не будет использоваться."
 
-#: src/libnmc-setting/settings-docs.h.in:304
+#: src/libnmc-setting/settings-docs.h.in:336
 msgid ""
 "If TRUE, MPPE (Microsoft Point-to-Point Encryption) will be required for the "
 "PPP session.  If either 64-bit or 128-bit MPPE is not available the session "
@@ -9643,7 +10272,7 @@ msgstr ""
 "не будет установлен. Обратите внимание, что MPPE не используется в мобильных "
 "широкополосных подключениях."
 
-#: src/libnmc-setting/settings-docs.h.in:305
+#: src/libnmc-setting/settings-docs.h.in:337
 msgid ""
 "If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encryption) will be required "
 "for the PPP session, and the \"require-mppe\" property must also be set to "
@@ -9654,7 +10283,7 @@ msgstr ""
 "значение ИСТИНА. Если 128-битный MPPE недоступен, то сеанс не будет "
 "установлен."
 
-#: src/libnmc-setting/settings-docs.h.in:306
+#: src/libnmc-setting/settings-docs.h.in:338
 msgid ""
 "If given, specifies the parent interface name on which this PPPoE connection "
 "should be created.  If this property is not specified, the connection is "
@@ -9666,11 +10295,11 @@ msgstr ""
 "подключение активируется на интерфейсе, настроенном свойством \"interface-"
 "name\" в NMSettingConnection."
 
-#: src/libnmc-setting/settings-docs.h.in:307
+#: src/libnmc-setting/settings-docs.h.in:339
 msgid "Password used to authenticate with the PPPoE service."
 msgstr "Пароль, используемый для аутентификации с помощью службы PPPoE."
 
-#: src/libnmc-setting/settings-docs.h.in:309
+#: src/libnmc-setting/settings-docs.h.in:341
 msgid ""
 "If specified, instruct PPPoE to only initiate sessions with access "
 "concentrators that provide the specified service.  For most providers, this "
@@ -9683,20 +10312,20 @@ msgstr ""
 "требуется только в случае наличия нескольких концентраторов доступа, или "
 "если известно, что потребуется конкретная служба."
 
-#: src/libnmc-setting/settings-docs.h.in:310
+#: src/libnmc-setting/settings-docs.h.in:342
 msgid "Username used to authenticate with the PPPoE service."
 msgstr ""
 "Имя пользователя, используемое для аутентификации с помощью службы PPPoE."
 
-#: src/libnmc-setting/settings-docs.h.in:311
+#: src/libnmc-setting/settings-docs.h.in:343
 msgid "Whether the proxy configuration is for browser only."
 msgstr "Используется ли конфигурация прокси-сервера только для браузера."
 
-#: src/libnmc-setting/settings-docs.h.in:312
+#: src/libnmc-setting/settings-docs.h.in:344
 msgid "Method for proxy configuration, Default is \"none\" (0)"
 msgstr "Способ настройки прокси-сервера, по умолчанию \"none\" (0)"
 
-#: src/libnmc-setting/settings-docs.h.in:313
+#: src/libnmc-setting/settings-docs.h.in:345
 msgid ""
 "The PAC script. In the profile this must be an UTF-8 encoded javascript code "
 "that defines a FindProxyForURL() function. When setting the property in "
@@ -9711,11 +10340,11 @@ msgstr ""
 "явных различий между двумя сценариями поддерживаются префиксы «file://» и "
 "«js://»."
 
-#: src/libnmc-setting/settings-docs.h.in:314
+#: src/libnmc-setting/settings-docs.h.in:346
 msgid "PAC URL for obtaining PAC file."
 msgstr "Адрес URL для получения файла PAC."
 
-#: src/libnmc-setting/settings-docs.h.in:315
+#: src/libnmc-setting/settings-docs.h.in:347
 msgid ""
 "Speed to use for communication over the serial port.  Note that this value "
 "usually has no effect for mobile broadband modems as they generally ignore "
@@ -9726,20 +10355,20 @@ msgstr ""
 "на мобильные широкополосные модемы, поскольку они обычно игнорируют "
 "настройки скорости и используют самую высокую доступную скорость."
 
-#: src/libnmc-setting/settings-docs.h.in:316
+#: src/libnmc-setting/settings-docs.h.in:348
 msgid "Byte-width of the serial communication. The 8 in \"8n1\" for example."
 msgstr "Байтовая ширина последовательного интерфейса. Например, 8 в «8n1»."
 
-#: src/libnmc-setting/settings-docs.h.in:317
+#: src/libnmc-setting/settings-docs.h.in:349
 msgid "Parity setting of the serial port."
 msgstr "Настройка чётности последовательного порта."
 
-#: src/libnmc-setting/settings-docs.h.in:318
+#: src/libnmc-setting/settings-docs.h.in:350
 msgid "Time to delay between each byte sent to the modem, in microseconds."
 msgstr ""
 "Время задержки между каждым байтом, отправленным на модем, в микросекундах."
 
-#: src/libnmc-setting/settings-docs.h.in:319
+#: src/libnmc-setting/settings-docs.h.in:351
 msgid ""
 "Number of stop bits for communication on the serial port.  Either 1 or 2. "
 "The 1 in \"8n1\" for example."
@@ -9747,7 +10376,7 @@ msgstr ""
 "Количество стоповых битов для связи по последовательному порту. Либо 1, либо "
 "2. Например, 1 в «8n1»."
 
-#: src/libnmc-setting/settings-docs.h.in:320
+#: src/libnmc-setting/settings-docs.h.in:352
 msgid ""
 "Whether to autoprobe virtual functions by a compatible driver. If set to "
 "\"true\" (1), the kernel will try to bind VFs to a compatible driver and if "
@@ -9766,15 +10395,21 @@ msgstr ""
 "глобальные параметры по умолчанию; если глобальные параметры не установлены, "
 "то предполагается значение \"true\" (1)."
 
-#: src/libnmc-setting/settings-docs.h.in:321
+#: src/libnmc-setting/settings-docs.h.in:353
 msgid ""
 "Select the eswitch encapsulation support. Currently it's only supported for "
 "PCI PF devices, and only if the eswitch device is managed from the same PCI "
 "address than the PF. If set to \"preserve\" (-1) (default) the eswitch encap-"
 "mode won't be modified by NetworkManager."
 msgstr ""
+"Выбор поддержки инкапсуляции для eswitch. На данный момент поддержка доступна "
+"только для устройств "
+"PCI PF, и только, если устройство eswitch управляется с того же адреса PCI, чт"
+"о и физическая функция (PF). "
+"При значении \"preserve\" (-1) (по умолчанию) NetworkManager не будет изменять"
+" режим инкапсуляции eswitch."
 
-#: src/libnmc-setting/settings-docs.h.in:322
+#: src/libnmc-setting/settings-docs.h.in:354
 msgid ""
 "Select the eswitch inline-mode of the device. Some HWs need the VF driver to "
 "put part of the packet headers on the TX descriptor so the e-switch can do "
@@ -9783,16 +10418,59 @@ msgid ""
 "than the PF. If set to \"preserve\" (-1) (default) the eswitch inline-mode "
 "won't be modified by NetworkManager."
 msgstr ""
+"Выбор встроенного режима eswitch для устройства. Для некоторых устройств требу"
+"ется драйвер "
+"вирт. функции, чтобы поместить часть заголовков пакета в дескриптор передачи, "
+"чтобы дать возможность "
+"e-switch выполнять качественную проверку соответствия пакетов и координации па"
+"кетов. На данный момент "
+"эта возможность поддерживается только для устройств PCI PF, и только, если уст"
+"ройство eswitch управляется "
+"с того же адреса PCI, что и физическая функция (PF). При значении \"preserve\""
+" (-1) (по умолчанию) "
+"NetworkManager не будет изменять встроенный режим eswitch."
 
-#: src/libnmc-setting/settings-docs.h.in:323
+#: src/libnmc-setting/settings-docs.h.in:355
 msgid ""
 "Select the eswitch mode of the device. Currently it's only supported for PCI "
 "PF devices, and only if the eswitch device is managed from the same PCI "
 "address than the PF. If set to \"preserve\" (-1) (default) the eswitch mode "
 "won't be modified by NetworkManager."
 msgstr ""
+"Выбор режима eswitch устройства. На данный момент поддержка доступна только дл"
+"я устройств "
+"PCI PF, и только, если устройство eswitch управляется с того же адреса PCI, чт"
+"о и физическая функция (PF). "
+"При значении \"preserve\" (-1) (по умолчанию) NetworkManager не будет изменять"
+" режим eswitch."
 
-#: src/libnmc-setting/settings-docs.h.in:324
+#: src/libnmc-setting/settings-docs.h.in:356
+msgid ""
+"This controls whether NetworkManager preserves the SR-IOV parameters set on "
+"the device when the connection is deactivated, or whether it resets them to "
+"their default value. The SR-IOV parameters are those specified in this "
+"setting (the \"sriov\" setting), like the number of VFs to create, the "
+"eswitch configuration, etc. If set to \"no\" (0), NetworkManager resets the "
+"SR-IOV parameters when the connection is deactivated. When set to \"yes\" "
+"(1), NetworkManager preserves those parameters on the device. If the value "
+"is \"default\" (-1), NetworkManager looks up a global default value in the "
+"configuration; in case no such value is defined, it uses \"no\" (0) as "
+"fallback."
+msgstr ""
+"Поведение NetworkManager относительно параметров SR-IOV при разрыве соединения"
+": сохранять параметры, "
+"либо сбрасывать до их значений по умолчанию. Значения для SR-IOV указываются в"
+" параметре \"sriov\" и определяют "
+"число создаваемых виртуальных функций, конфигурацию eswitch и т.д. При значени"
+"и «нет» (0) NetworkManager "
+"сбрасывает параметры SR-IOV при разрыве соединения. При значении «да» (1) Netw"
+"orkManager сохраняет параметры "
+"устройства. При значении «по умолчанию» (-1) NetworkManager использует глобаль"
+"ное значение по умолчанию "
+"из своей конфигурации, если оно отсутствует, в качестве запасного варианта исп"
+"ользуется «нет» (0)."
+
+#: src/libnmc-setting/settings-docs.h.in:357
 msgid ""
 "The total number of virtual functions to create. Note that when the sriov "
 "setting is present NetworkManager enforces the number of virtual functions "
@@ -9807,7 +10485,7 @@ msgstr ""
 "изменений в параметры SR-IOV, не добавляйте параметр sriov в параметры "
 "подключения."
 
-#: src/libnmc-setting/settings-docs.h.in:325
+#: src/libnmc-setting/settings-docs.h.in:358
 msgid ""
 "Array of virtual function descriptors. Each VF descriptor is a dictionary "
 "mapping attribute names to GVariant values. The 'index' entry is mandatory "
@@ -9832,7 +10510,7 @@ msgstr ""
 "PRIORITY[.PROTO]]\". PROTO может иметь значение либо «q» для 802.1Q (по "
 "умолчанию), либо «ad» для 802.1ad."
 
-#: src/libnmc-setting/settings-docs.h.in:326
+#: src/libnmc-setting/settings-docs.h.in:359
 msgid ""
 "Array of TC queueing disciplines. When the \"tc\" setting is present, qdiscs "
 "from this property are applied upon activation. If the property is empty, "
@@ -9848,7 +10526,7 @@ msgstr ""
 "sysctl \"net.core.default_qdisc\". Если параметр «tc» отсутствует, "
 "NetworkManager не касается алгоритмов, присутствующих на интерфейсе."
 
-#: src/libnmc-setting/settings-docs.h.in:327
+#: src/libnmc-setting/settings-docs.h.in:360
 msgid ""
 "Array of TC traffic filters. When the \"tc\" setting is present, filters "
 "from this property are applied upon activation. If the property is empty, "
@@ -9860,7 +10538,7 @@ msgstr ""
 "NetworkManager удаляет все фильтры. Если параметр «tc» отсутствует, "
 "NetworkManager не трогает фильтры, присутствующие на интерфейсе."
 
-#: src/libnmc-setting/settings-docs.h.in:328
+#: src/libnmc-setting/settings-docs.h.in:361
 msgid ""
 "The JSON configuration for the team network interface.  The property should "
 "contain raw JSON configuration data suitable for teamd, because the value is "
@@ -9872,8 +10550,8 @@ msgstr ""
 "значение передаётся напрямую в teamd. Если значение не указано, используется "
 "конфигурация по умолчанию. Подробности о формате см. в teamd.conf."
 
-#: src/libnmc-setting/settings-docs.h.in:329
-#: src/libnmc-setting/settings-docs.h.in:347
+#: src/libnmc-setting/settings-docs.h.in:362
+#: src/libnmc-setting/settings-docs.h.in:380
 msgid ""
 "Link watchers configuration for the connection: each link watcher is defined "
 "by a dictionary, whose keys depend upon the selected link watcher. Available "
@@ -9893,23 +10571,23 @@ msgstr ""
 "nsna_ping, а также 'source-host', 'validate-active', 'validate-inactive', "
 "'send-always'. Подробности см. в man teamd.conf."
 
-#: src/libnmc-setting/settings-docs.h.in:330
+#: src/libnmc-setting/settings-docs.h.in:363
 msgid "Corresponds to the teamd mcast_rejoin.count."
 msgstr "Соответствует mcast_rejoin.count в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:331
+#: src/libnmc-setting/settings-docs.h.in:364
 msgid "Corresponds to the teamd mcast_rejoin.interval."
 msgstr "Соответствует mcast_rejoin.interval в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:332
+#: src/libnmc-setting/settings-docs.h.in:365
 msgid "Corresponds to the teamd notify_peers.count."
 msgstr "Соответствует notify_peers.count в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:333
+#: src/libnmc-setting/settings-docs.h.in:366
 msgid "Corresponds to the teamd notify_peers.interval."
 msgstr "Соответствует notify_peers.interval в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:334
+#: src/libnmc-setting/settings-docs.h.in:367
 msgid ""
 "Corresponds to the teamd runner.name. Permitted values are: \"roundrobin\", "
 "\"broadcast\", \"activebackup\", \"loadbalance\", \"lacp\", \"random\"."
@@ -9917,43 +10595,43 @@ msgstr ""
 "Соответствует runner.name в teamd. Разрешённые значения: \"roundrobin\", "
 "\"broadcast\", \"activebackup\", \"loadbalance\", \"lacp\", \"random\"."
 
-#: src/libnmc-setting/settings-docs.h.in:335
+#: src/libnmc-setting/settings-docs.h.in:368
 msgid "Corresponds to the teamd runner.active."
 msgstr "Соответствует runner.active в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:336
+#: src/libnmc-setting/settings-docs.h.in:369
 msgid "Corresponds to the teamd runner.agg_select_policy."
 msgstr "Соответствует runner.agg_select_policy в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:337
+#: src/libnmc-setting/settings-docs.h.in:370
 msgid "Corresponds to the teamd runner.fast_rate."
 msgstr "Соответствует runner.fast_rate в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:338
+#: src/libnmc-setting/settings-docs.h.in:371
 msgid "Corresponds to the teamd runner.hwaddr_policy."
 msgstr "Соответствует runner.hwaddr_policy в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:339
+#: src/libnmc-setting/settings-docs.h.in:372
 msgid "Corresponds to the teamd runner.min_ports."
 msgstr "Соответствует run.min_ports в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:340
+#: src/libnmc-setting/settings-docs.h.in:373
 msgid "Corresponds to the teamd runner.sys_prio."
 msgstr "Соответствует runner.sys_prio в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:341
+#: src/libnmc-setting/settings-docs.h.in:374
 msgid "Corresponds to the teamd runner.tx_balancer.name."
 msgstr "Соответствует runner.tx_balancer.name в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:342
+#: src/libnmc-setting/settings-docs.h.in:375
 msgid "Corresponds to the teamd runner.tx_balancer.interval."
 msgstr "Соответствует runner.tx_balancer.interval в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:343
+#: src/libnmc-setting/settings-docs.h.in:376
 msgid "Corresponds to the teamd runner.tx_hash."
 msgstr "Соответствует runner.tx_hash в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:344
+#: src/libnmc-setting/settings-docs.h.in:377
 msgid ""
 "The JSON configuration for the team port. The property should contain raw "
 "JSON configuration data suitable for teamd, because the value is passed "
@@ -9965,19 +10643,19 @@ msgstr ""
 "напрямую в teamd. Если значение не указано, используется конфигурация по "
 "умолчанию. Подробности о формате см. в teamd.conf."
 
-#: src/libnmc-setting/settings-docs.h.in:345
+#: src/libnmc-setting/settings-docs.h.in:378
 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_key."
 msgstr "Соответствует ports.PORTIFNAME.lacp_key в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:346
+#: src/libnmc-setting/settings-docs.h.in:379
 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_prio."
 msgstr "Соответствует port.PORTIFNAME.lacp_prio в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:348
+#: src/libnmc-setting/settings-docs.h.in:381
 msgid "Corresponds to the teamd ports.PORTIFNAME.prio."
 msgstr "Соответствует port.PORTIFNAME.prio в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:349
+#: src/libnmc-setting/settings-docs.h.in:382
 msgid ""
 "Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the "
 "parameter is skipped from the json config."
@@ -9985,11 +10663,11 @@ msgstr ""
 "Соответствует port.PORTIFNAME.queue_id в teamd. Если установлено значение "
 "«-1», то параметр из конфигурации json пропускается."
 
-#: src/libnmc-setting/settings-docs.h.in:350
+#: src/libnmc-setting/settings-docs.h.in:383
 msgid "Corresponds to the teamd ports.PORTIFNAME.sticky."
 msgstr "Соответствует ports.PORTIFNAME.sticky в teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:351
+#: src/libnmc-setting/settings-docs.h.in:384
 msgid ""
 "The group ID which will own the device. If set to NULL everyone will be able "
 "to use the device."
@@ -9997,7 +10675,7 @@ msgstr ""
 "Идентификатор группы, которой будет принадлежать устройство. Если "
 "установлено значение NULL, устройство будет использоваться каждым."
 
-#: src/libnmc-setting/settings-docs.h.in:352
+#: src/libnmc-setting/settings-docs.h.in:385
 msgid ""
 "The operating mode of the virtual device. Allowed values are \"tun\" (1) to "
 "create a layer 3 device and \"tap\" (2) to create an Ethernet-like layer 2 "
@@ -10007,7 +10685,7 @@ msgstr ""
 "чтобы создать устройство уровня 3 и \"tap\" (2), чтобы создать слой 2, "
 "подобный Ethernet."
 
-#: src/libnmc-setting/settings-docs.h.in:353
+#: src/libnmc-setting/settings-docs.h.in:386
 msgid ""
 "If the property is set to TRUE, the interface will support multiple file "
 "descriptors (queues) to parallelize packet sending or receiving. Otherwise, "
@@ -10018,7 +10696,7 @@ msgstr ""
 "отправки или приёма пакетов. В противном случае интерфейс будет поддерживать "
 "только одну очередь."
 
-#: src/libnmc-setting/settings-docs.h.in:354
+#: src/libnmc-setting/settings-docs.h.in:387
 msgid ""
 "The user ID which will own the device. If set to NULL everyone will be able "
 "to use the device."
@@ -10026,7 +10704,7 @@ msgstr ""
 "Идентификатор пользователя, которому принадлежит устройство. Если "
 "установлено значение NULL, каждый сможет использовать устройство."
 
-#: src/libnmc-setting/settings-docs.h.in:355
+#: src/libnmc-setting/settings-docs.h.in:388
 msgid ""
 "If TRUE the interface will prepend a 4 byte header describing the physical "
 "interface to the packets."
@@ -10034,7 +10712,7 @@ msgstr ""
 "Если ИСТИНА, интерфейс добавит в начало пакетов 4-байтовый заголовок, "
 "описывающий физический интерфейс."
 
-#: src/libnmc-setting/settings-docs.h.in:356
+#: src/libnmc-setting/settings-docs.h.in:389
 msgid ""
 "If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network "
 "header."
@@ -10042,7 +10720,7 @@ msgstr ""
 "При значении ИСТИНА для флага IFF_VNET_HDR пакеты туннеля будут содержать "
 "заголовок сети virtio."
 
-#: src/libnmc-setting/settings-docs.h.in:357
+#: src/libnmc-setting/settings-docs.h.in:390
 msgid ""
 "A dictionary of key/value pairs with user data. This data is ignored by "
 "NetworkManager and can be used at the users discretion. The keys only "
@@ -10054,7 +10732,7 @@ msgstr ""
 "Ключи поддерживают только строгий формат ascii, но значения могут быть "
 "представлены произвольными строками в кодировке UTF-8 определённой длинны."
 
-#: src/libnmc-setting/settings-docs.h.in:358
+#: src/libnmc-setting/settings-docs.h.in:391
 msgid ""
 "For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p "
 "priorities.  The mapping is given in the format \"from:to\" where both "
@@ -10064,12 +10742,12 @@ msgstr ""
 "приоритетами 802.1p. Отображение задаётся в формате «from:to», где и «from», "
 "и «to» представляют собой беззнаковые целые, например «7:3»."
 
-#: src/libnmc-setting/settings-docs.h.in:359
+#: src/libnmc-setting/settings-docs.h.in:392
 msgid ""
 "One or more flags which control the behavior and features of the VLAN "
 "interface.  Flags include \"reorder-headers\" (0x1) (reordering of output "
 "packet headers), \"gvrp\" (0x2) (use of the GVRP protocol), and \"loose-"
-"binding\" (0x4) (loose binding of the interface to its master device's "
+"binding\" (0x4) (loose binding of the interface to its controller device's "
 "operating state). \"mvrp\" (0x8) (use of the MVRP protocol). The default "
 "value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. "
 "To preserve backward compatibility, the default-value in the D-Bus API "
@@ -10078,15 +10756,16 @@ msgstr ""
 "Один или несколько флагов, которые управляют поведением и функциями "
 "интерфейса VLAN. Возможные флаги: \"reorder-headers\" (0x1) "
 "(переупорядочение заголовков исходящих пакетов), \"gvrp\" (0x2) "
-"(использование протокола GVRP) и \"loose-binding\" (0x4) (свободное "
-"связывание интерфейса с рабочим состоянием его ведущего устройства). "
+"(использование протокола GVRP) и \"loose-binding\" (0x4) (свободная "
+"привязка интерфейса к рабочему состоянию устройства контроллера). "
 "\"mvrp\" (0x8) (использование протокола MVRP). Значением по умолчанию для "
-"этого свойства является NM_VLAN_FLAG_REORDER_HEADERS, но раньше оно обычно "
-"было равно «0». Чтобы сохранить обратную совместимость, значение по "
-"умолчанию в D-Bus API по-прежнему остаётся нулём, а недостающее свойство D-"
-"Bus по-прежнему считается нулём."
+"этого свойства является NM_VLAN_FLAG_REORDER_HEADERS, но раньше оно "
+"обычно было равно «0». Чтобы сохранить обратную совместимость, значение по умо"
+"лчанию в D-"
+"Bus API по-прежнему остаётся нулём, а недостающее свойство D-Bus по-прежнему "
+"считается нулём."
 
-#: src/libnmc-setting/settings-docs.h.in:360
+#: src/libnmc-setting/settings-docs.h.in:393
 msgid ""
 "The VLAN identifier that the interface created by this connection should be "
 "assigned. The valid range is from 0 to 4094, without the reserved id 4095."
@@ -10095,7 +10774,7 @@ msgstr ""
 "подключением. Действительный диапазон: от 0 до 4094, без зарезервированного "
 "идентификатора 4095."
 
-#: src/libnmc-setting/settings-docs.h.in:361
+#: src/libnmc-setting/settings-docs.h.in:394
 msgid ""
 "For incoming packets, a list of mappings from 802.1p priorities to Linux SKB "
 "priorities.  The mapping is given in the format \"from:to\" where both "
@@ -10105,7 +10784,7 @@ msgstr ""
 "приоритетами p. Отображение задаётся в формате «from:to», где и «from», и "
 "«to» представляют собой беззнаковые целые, например «7:3»."
 
-#: src/libnmc-setting/settings-docs.h.in:362
+#: src/libnmc-setting/settings-docs.h.in:395
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
 "which this VLAN interface should be created.  If this property is not "
@@ -10117,7 +10796,7 @@ msgstr ""
 "интерфейс VLAN. Если свойство не определено, то подключение должно иметь "
 "параметр \"802-3-ethernet\" со свойством \"mac-address\"."
 
-#: src/libnmc-setting/settings-docs.h.in:363
+#: src/libnmc-setting/settings-docs.h.in:396
 msgid ""
 "Specifies the VLAN protocol to use for encapsulation. Supported values are: "
 "'802.1Q', '802.1ad'. If not specified the default value is '802.1Q'."
@@ -10126,7 +10805,7 @@ msgstr ""
 "значения: '802.1Q', '802.1ad'. Если значение не указано, значением по "
 "умолчанию будет '802.1Q'."
 
-#: src/libnmc-setting/settings-docs.h.in:364
+#: src/libnmc-setting/settings-docs.h.in:397
 msgid ""
 "Dictionary of key/value pairs of VPN plugin specific data.  Both keys and "
 "values must be strings."
@@ -10134,7 +10813,7 @@ msgstr ""
 "Словарь пар «ключ/значение» данных, относящихся к модулю VPN. Как ключи, так "
 "и значения должны быть представлены строками."
 
-#: src/libnmc-setting/settings-docs.h.in:365
+#: src/libnmc-setting/settings-docs.h.in:398
 msgid ""
 "If the VPN service supports persistence, and this property is TRUE, the VPN "
 "will attempt to stay connected across link changes and outages, until "
@@ -10145,7 +10824,7 @@ msgstr ""
 "каналов и отключений питания, до тех пор, пока разрыв подключения не будет "
 "выполнен явным образом."
 
-#: src/libnmc-setting/settings-docs.h.in:366
+#: src/libnmc-setting/settings-docs.h.in:399
 msgid ""
 "Dictionary of key/value pairs of VPN plugin specific secrets like passwords "
 "or private keys.  Both keys and values must be strings."
@@ -10154,7 +10833,7 @@ msgstr ""
 "относящихся к модулю VPN. Как ключи, так и значения должны быть представлены "
 "строками."
 
-#: src/libnmc-setting/settings-docs.h.in:367
+#: src/libnmc-setting/settings-docs.h.in:400
 msgid ""
 "D-Bus service name of the VPN plugin that this setting uses to connect to "
 "its network.  i.e. org.freedesktop.NetworkManager.vpnc for the vpnc plugin."
@@ -10162,7 +10841,7 @@ msgstr ""
 "Имя службы D-Bus модуля VPN, используемого этим параметром для подключения к "
 "своей сети. Например, «org.freedesktop.NetworkManager.vpnc» для модуля vpnc."
 
-#: src/libnmc-setting/settings-docs.h.in:368
+#: src/libnmc-setting/settings-docs.h.in:401
 msgid ""
 "Timeout for the VPN service to establish the connection. Some services may "
 "take quite a long time to connect. Value of 0 means a default timeout, which "
@@ -10175,7 +10854,7 @@ msgstr ""
 "переопределено параметром vpn.timeout в файле конфигурации). Значения выше "
 "нуля означают значение в секундах."
 
-#: src/libnmc-setting/settings-docs.h.in:369
+#: src/libnmc-setting/settings-docs.h.in:402
 msgid ""
 "If the VPN connection requires a user name for authentication, that name "
 "should be provided here.  If the connection is available to more than one "
@@ -10190,17 +10869,17 @@ msgstr ""
 "других имя, оставьте это свойство пустым. При пустом свойстве NetworkManager "
 "автоматически укажет имя пользователя, запросившего подключение по VPN."
 
-#: src/libnmc-setting/settings-docs.h.in:370
+#: src/libnmc-setting/settings-docs.h.in:403
 msgid "The routing table for this VRF."
 msgstr ""
 "Таблица маршрутизации для данной виртуальной маршрутизации и переадресации "
 "(VRF)"
 
-#: src/libnmc-setting/settings-docs.h.in:371
+#: src/libnmc-setting/settings-docs.h.in:404
 msgid "Specifies the lifetime in seconds of FDB entries learnt by the kernel."
 msgstr "Указывает время жизни (в сек.) записей FDB, полученных ядром."
 
-#: src/libnmc-setting/settings-docs.h.in:372
+#: src/libnmc-setting/settings-docs.h.in:405
 msgid ""
 "Specifies the UDP destination port to communicate to the remote VXLAN tunnel "
 "endpoint."
@@ -10208,24 +10887,24 @@ msgstr ""
 "Указывает порт назначения UDP для связи с удалённой конечной точкой туннеля "
 "VXLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:373
+#: src/libnmc-setting/settings-docs.h.in:406
 msgid ""
 "Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use."
 msgstr ""
 "Указывает используемый идентификатор сети VXLAN (или идентификатор сегмента "
 "VXLAN)."
 
-#: src/libnmc-setting/settings-docs.h.in:374
+#: src/libnmc-setting/settings-docs.h.in:407
 msgid "Specifies whether netlink LL ADDR miss notifications are generated."
 msgstr ""
 "Указывает, создаются ли уведомления о пропуске LL ADDR сетевого канала."
 
-#: src/libnmc-setting/settings-docs.h.in:375
+#: src/libnmc-setting/settings-docs.h.in:408
 msgid "Specifies whether netlink IP ADDR miss notifications are generated."
 msgstr ""
 "Указывает, создаются ли уведомления о пропуске IP ADDR сетевого канала."
 
-#: src/libnmc-setting/settings-docs.h.in:376
+#: src/libnmc-setting/settings-docs.h.in:409
 msgid ""
 "Specifies whether unknown source link layer addresses and IP addresses are "
 "entered into the VXLAN device forwarding database."
@@ -10233,32 +10912,33 @@ msgstr ""
 "Указывает, будут ли добавляться в базу данных перенаправления устройства "
 "VXLAN адреса канального уровня и адреса IP от неизвестных источников."
 
-#: src/libnmc-setting/settings-docs.h.in:377
+#: src/libnmc-setting/settings-docs.h.in:410
 msgid ""
 "Specifies the maximum number of FDB entries. A value of zero means that the "
 "kernel will store unlimited entries."
 msgstr ""
-"Указывает максимальное количество записей FDB. Ноль означает, что ядро ​​будет "
+"Указывает максимальное количество записей FDB. Ноль означает, что ядро ​​будет"
+" "
 "хранить неограниченное число записей."
 
-#: src/libnmc-setting/settings-docs.h.in:378
+#: src/libnmc-setting/settings-docs.h.in:411
 msgid "If given, specifies the source IP address to use in outgoing packets."
 msgstr ""
 "Если задано, указывает адрес IP источника для использования в исходящих "
 "пакетах."
 
-#: src/libnmc-setting/settings-docs.h.in:379
+#: src/libnmc-setting/settings-docs.h.in:412
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID."
 msgstr ""
 "Если задано, указывает имя родительского интерфейса или UUID родительского "
 "подключения."
 
-#: src/libnmc-setting/settings-docs.h.in:380
+#: src/libnmc-setting/settings-docs.h.in:413
 msgid "Specifies whether ARP proxy is turned on."
 msgstr "Указывает, включён ли прокси-сервер ARP."
 
-#: src/libnmc-setting/settings-docs.h.in:381
+#: src/libnmc-setting/settings-docs.h.in:414
 msgid ""
 "Specifies the unicast destination IP address to use in outgoing packets when "
 "the destination link layer address is not known in the VXLAN device "
@@ -10268,11 +10948,11 @@ msgstr ""
 "если целевой адрес канального уровня неизвестен базе данных перенаправления "
 "устройства VXLAN, или же указывает многоадресный адрес IP для присоединения."
 
-#: src/libnmc-setting/settings-docs.h.in:382
+#: src/libnmc-setting/settings-docs.h.in:415
 msgid "Specifies whether route short circuit is turned on."
 msgstr "Указывает, включено ли сокращение маршрута."
 
-#: src/libnmc-setting/settings-docs.h.in:383
+#: src/libnmc-setting/settings-docs.h.in:416
 msgid ""
 "Specifies the maximum UDP source port to communicate to the remote VXLAN "
 "tunnel endpoint."
@@ -10280,7 +10960,7 @@ msgstr ""
 "Указывает максимальный номер исходного порта UDP для связи с удалённой "
 "конечной точкой туннеля VXLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:384
+#: src/libnmc-setting/settings-docs.h.in:417
 msgid ""
 "Specifies the minimum UDP source port to communicate to the remote VXLAN "
 "tunnel endpoint."
@@ -10288,18 +10968,18 @@ msgstr ""
 "Указывает минимальный номер исходного порта UDP для связи с удалённой "
 "конечной точкой туннеля VXLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:385
+#: src/libnmc-setting/settings-docs.h.in:418
 msgid "Specifies the TOS value to use in outgoing packets."
 msgstr ""
 "Указывает значение байта типа обслуживания (TOS) для использования в "
 "исходящих пакетах."
 
-#: src/libnmc-setting/settings-docs.h.in:386
+#: src/libnmc-setting/settings-docs.h.in:419
 msgid "Specifies the time-to-live value to use in outgoing packets."
 msgstr ""
 "Указывает значение времени жизни для использования в исходящих пакетах."
 
-#: src/libnmc-setting/settings-docs.h.in:387
+#: src/libnmc-setting/settings-docs.h.in:420
 msgid ""
 "The P2P device that should be connected to. Currently, this is the only way "
 "to create or join a group."
@@ -10307,7 +10987,7 @@ msgstr ""
 "Устройство P2P, к которому необходимо подключиться. На данный момент это "
 "единственный способ создания группы или присоединения к группе."
 
-#: src/libnmc-setting/settings-docs.h.in:388
+#: src/libnmc-setting/settings-docs.h.in:421
 msgid ""
 "The Wi-Fi Display (WFD) Information Elements (IEs) to set. Wi-Fi Display "
 "requires a protocol specific information element to be set in certain Wi-Fi "
@@ -10321,7 +11001,7 @@ msgstr ""
 "быть настроены здесь. Данный параметр используется только при реализации "
 "клиента Wi-Fi Display."
 
-#: src/libnmc-setting/settings-docs.h.in:389
+#: src/libnmc-setting/settings-docs.h.in:422
 msgid ""
 "Flags indicating which mode of WPS is to be used. There's little point in "
 "changing the default setting as NetworkManager will automatically determine "
@@ -10331,7 +11011,7 @@ msgstr ""
 "смысла изменять значение по умолчанию, поскольку используемый метод "
 "NetworkManager определит автоматически."
 
-#: src/libnmc-setting/settings-docs.h.in:390
+#: src/libnmc-setting/settings-docs.h.in:423
 msgid ""
 "If specified, this connection will only apply to the WiMAX device whose MAC "
 "address matches. This property does not change the MAC address of the device "
@@ -10341,7 +11021,7 @@ msgstr ""
 "устройству WiMAX с совпадающим адресом MAC. Это свойство не изменяет адрес "
 "MAC устройства (так называемый спуфинг)."
 
-#: src/libnmc-setting/settings-docs.h.in:391
+#: src/libnmc-setting/settings-docs.h.in:424
 msgid ""
 "Network Service Provider (NSP) name of the WiMAX network this connection "
 "should use."
@@ -10349,7 +11029,7 @@ msgstr ""
 "Имя поставщика сетевых услуг (NSP) сети WiMAX, которую должно использовать "
 "данное подключение."
 
-#: src/libnmc-setting/settings-docs.h.in:392
+#: src/libnmc-setting/settings-docs.h.in:425
 msgid ""
 "When TRUE, setup the interface to accept packets for all MAC addresses. This "
 "is enabling the kernel interface flag IFF_PROMISC. When FALSE, the interface "
@@ -10361,7 +11041,7 @@ msgstr ""
 "интерфейс будет принимать только пакеты с целевым адресом MAC этого "
 "интерфейса или широковещательные пакеты."
 
-#: src/libnmc-setting/settings-docs.h.in:393
+#: src/libnmc-setting/settings-docs.h.in:426
 msgid ""
 "When TRUE, enforce auto-negotiation of speed and duplex mode. If \"speed\" "
 "and \"duplex\" properties are both specified, only that single mode will be "
@@ -10380,7 +11060,7 @@ msgstr ""
 "При значении ЛОЖНО должны указываться оба свойства, и \"speed\" и "
 "\"duplex\", в противном случае настройка канала будет пропущена."
 
-#: src/libnmc-setting/settings-docs.h.in:394
+#: src/libnmc-setting/settings-docs.h.in:427
 msgid ""
 "If specified, request that the device use this MAC address instead. This is "
 "known as MAC cloning or spoofing. Beside explicitly specifying a MAC "
@@ -10413,7 +11093,7 @@ msgstr ""
 "выражается в виде \"assigned-mac-address\", либо (устаревшее значение) "
 "\"cloned-mac-address\"."
 
-#: src/libnmc-setting/settings-docs.h.in:395
+#: src/libnmc-setting/settings-docs.h.in:428
 msgid ""
 "When a value is set, either \"half\" or \"full\", configures the device to "
 "use the specified duplex mode. If \"auto-negotiate\" is \"yes\" the "
@@ -10442,36 +11122,36 @@ msgstr ""
 "\"speed\". Перед указанием режима дуплекса убедитесь в том, что устройство "
 "его поддерживает."
 
-#: src/libnmc-setting/settings-docs.h.in:396
-#: src/libnmc-setting/settings-docs.h.in:422
+#: src/libnmc-setting/settings-docs.h.in:429
+#: src/libnmc-setting/settings-docs.h.in:456
 msgid ""
 "With \"cloned-mac-address\" setting \"random\" or \"stable\", by default all "
 "bits of the MAC address are scrambled and a locally-administered, unicast "
-"MAC address is created. This property allows to specify that certain bits "
-"are fixed. Note that the least significant bit of the first MAC address will "
-"always be unset to create a unicast MAC address. If the property is NULL, it "
-"is eligible to be overwritten by a default connection setting. If the value "
-"is still NULL or an empty string, the default is to create a locally-"
-"administered, unicast MAC address. If the value contains one MAC address, "
-"this address is used as mask. The set bits of the mask are to be filled with "
-"the current MAC address of the device, while the unset bits are subject to "
-"randomization. Setting \"FE:FF:FF:00:00:00\" means to preserve the OUI of "
-"the current MAC address and only randomize the lower 3 bytes using the "
-"\"random\" or \"stable\" algorithm. If the value contains one additional MAC "
-"address after the mask, this address is used instead of the current MAC "
-"address to fill the bits that shall not be randomized. For example, a value "
-"of \"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" will set the OUI of the MAC "
-"address to 68:F7:28, while the lower bits are randomized. A value of "
-"\"02:00:00:00:00:00 00:00:00:00:00:00\" will create a fully scrambled "
+"MAC address is created. This property allows one to specify that certain "
+"bits are fixed. Note that the least significant bit of the first MAC address "
+"will always be unset to create a unicast MAC address. If the property is "
+"NULL, it is eligible to be overwritten by a default connection setting. If "
+"the value is still NULL or an empty string, the default is to create a "
+"locally-administered, unicast MAC address. If the value contains one MAC "
+"address, this address is used as mask. The set bits of the mask are to be "
+"filled with the current MAC address of the device, while the unset bits are "
+"subject to randomization. Setting \"FE:FF:FF:00:00:00\" means to preserve "
+"the OUI of the current MAC address and only randomize the lower 3 bytes "
+"using the \"random\" or \"stable\" algorithm. If the value contains one "
+"additional MAC address after the mask, this address is used instead of the "
+"current MAC address to fill the bits that shall not be randomized. For "
+"example, a value of \"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" will set the OUI "
+"of the MAC address to 68:F7:28, while the lower bits are randomized. A value "
+"of \"02:00:00:00:00:00 00:00:00:00:00:00\" will create a fully scrambled "
 "globally-administered, burned-in MAC address. If the value contains more "
 "than one additional MAC addresses, one of them is chosen randomly. For "
 "example, \"02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00\" will "
 "create a fully scrambled MAC address, randomly locally or globally "
 "administered."
 msgstr ""
-"Если параметр \"cloned-mac-address\" имеет значение \"random\" или "
-"\"stable\", то, по умолчанию, все биты адреса MAC скремблируются и создаётся "
-"локально администрируемый адрес MAC одноадресной передачи. Это свойство "
+"Если параметр \"cloned-mac-address\" имеет значение \"random\" or \"stable"
+"\", то, по умолчанию, все биты адреса MAC скремблируются, и создаётся "
+"локально администрируемый MAC-адрес одноадресной передачи. Это свойство "
 "предоставляет возможность фиксации некоторых указанных битов. Обратите "
 "внимание, что для создания адреса одноадресной передачи значение наименее "
 "важных битов первого адреса MAC будет отменено. При значении NULL оно "
@@ -10484,7 +11164,7 @@ msgstr ""
 "FF:00:00:00\" означает, что идентификатор OUI текущего адреса должен быть "
 "сохранён, а рандомизироваться должны нижние 3 байта с помощью алгоритмов "
 "\"random\" или \"stable\". Если значение после маски содержит один "
-"дополнительный адрес MAC, то этот адрес используется вместо текущего MAC для "
+"дополнительный адрес MAC, то этот адрес используется вместе текущего MAC для "
 "заполнения битов, которые не должны рандомизироваться. Например, значение "
 "\"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" настроит OUI адреса на 68:F7:28, а "
 "нижние биты будут рандомизированы. Значение \"02:00:00:00:00:00 "
@@ -10494,7 +11174,7 @@ msgstr ""
 "\"02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00\" создаст полностью "
 "скремблированный адрес, рандомно администрируемый локально или глобально."
 
-#: src/libnmc-setting/settings-docs.h.in:397
+#: src/libnmc-setting/settings-docs.h.in:430
 msgid ""
 "If specified, this connection will only apply to the Ethernet device whose "
 "permanent MAC address matches. This property does not change the MAC address "
@@ -10504,8 +11184,8 @@ msgstr ""
 "устройству Ethernet, с соответствующим постоянным адресом MAC. Это свойство "
 "не изменяет адрес MAC устройства (так называемый спуфинг)."
 
-#: src/libnmc-setting/settings-docs.h.in:398
-#: src/libnmc-setting/settings-docs.h.in:399
+#: src/libnmc-setting/settings-docs.h.in:431
+#: src/libnmc-setting/settings-docs.h.in:432
 msgid ""
 "If specified, this connection will never apply to the Ethernet device whose "
 "permanent MAC address matches an address in the list.  Each MAC address is "
@@ -10516,9 +11196,9 @@ msgstr ""
 "списке. Каждый MAC предоставляется в стандартной нотации шестнадцатеричных "
 "цифр и колоний (00: 11: 22: 33: 44: 55)."
 
-#: src/libnmc-setting/settings-docs.h.in:400
-#: src/libnmc-setting/settings-docs.h.in:429
-#: src/libnmc-setting/settings-docs.h.in:475
+#: src/libnmc-setting/settings-docs.h.in:433
+#: src/libnmc-setting/settings-docs.h.in:463
+#: src/libnmc-setting/settings-docs.h.in:505
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
 "breaking larger packets up into multiple Ethernet frames."
@@ -10527,7 +11207,7 @@ msgstr ""
 "или меньшего размера. Более крупные пакеты разбиваются на несколько кадров "
 "Ethernet."
 
-#: src/libnmc-setting/settings-docs.h.in:401
+#: src/libnmc-setting/settings-docs.h.in:434
 msgid ""
 "Specific port type to use if the device supports multiple attachment "
 "methods.  One of \"tp\" (Twisted Pair), \"aui\" (Attachment Unit Interface), "
@@ -10540,7 +11220,7 @@ msgstr ""
 "передачи интерфейс). Если устройство поддерживает только один тип порта, "
 "этот параметр игнорируется."
 
-#: src/libnmc-setting/settings-docs.h.in:402
+#: src/libnmc-setting/settings-docs.h.in:435
 msgid ""
 "s390 network device type; one of \"qeth\", \"lcs\", or \"ctc\", representing "
 "the different types of virtual network devices available on s390 systems."
@@ -10549,7 +11229,7 @@ msgstr ""
 "представляющие различные типы виртуальных сетевых устройств, доступных в "
 "системах s390."
 
-#: src/libnmc-setting/settings-docs.h.in:403
+#: src/libnmc-setting/settings-docs.h.in:436
 msgid ""
 "Dictionary of key/value pairs of s390-specific device options.  Both keys "
 "and values must be strings.  Allowed keys include \"portno\", \"layer2\", "
@@ -10566,7 +11246,7 @@ msgstr ""
 "s390utils поставляет правило udev, которое обрабатывает эти сведения и "
 "применяет их к интерфейсу."
 
-#: src/libnmc-setting/settings-docs.h.in:404
+#: src/libnmc-setting/settings-docs.h.in:437
 msgid ""
 "Identifies specific subchannels that this network device uses for "
 "communication with z/VM or s390 host.  Like the \"mac-address\" property for "
@@ -10583,7 +11263,7 @@ msgstr ""
 "списке должно присутствовать ровно 3 строки, и каждая строка должна состоять "
 "только из шестнадцатеричных символов и символа точки (.)."
 
-#: src/libnmc-setting/settings-docs.h.in:405
+#: src/libnmc-setting/settings-docs.h.in:438
 msgid ""
 "When a value greater than 0 is set, configures the device to use the "
 "specified speed. If \"auto-negotiate\" is \"yes\" the specified speed will "
@@ -10612,7 +11292,7 @@ msgstr ""
 "значением дуплекса. Перед указанием скорости убедитесь в том, что имеющееся "
 "устройство её поддерживает."
 
-#: src/libnmc-setting/settings-docs.h.in:406
+#: src/libnmc-setting/settings-docs.h.in:439
 msgid ""
 "The NMSettingWiredWakeOnLan options to enable. Not all devices support all "
 "options. May be any combination of \"phy\" (0x2), \"unicast\" (0x4), "
@@ -10627,7 +11307,7 @@ msgstr ""
 "(использовать глобальные настройки) и \"ignore\" (0x8000) (чтобы отключить "
 "управление Wake-on-LAN в NetworkManager)."
 
-#: src/libnmc-setting/settings-docs.h.in:407
+#: src/libnmc-setting/settings-docs.h.in:440
 msgid ""
 "If specified, the password used with magic-packet-based Wake-on-LAN, "
 "represented as an Ethernet MAC address.  If NULL, no password will be "
@@ -10637,7 +11317,7 @@ msgstr ""
 "on-LAN на базе магического пакета, представленный как адрес MAC Ethernet. "
 "Если NULL, пароль требоваться не будет."
 
-#: src/libnmc-setting/settings-docs.h.in:408
+#: src/libnmc-setting/settings-docs.h.in:441
 msgid ""
 "The use of fwmark is optional and is by default off. Setting it to 0 "
 "disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note "
@@ -10650,7 +11330,7 @@ msgstr ""
 "активация \"ip4-auto-default-route\" или \"ip6-auto-default-route\" "
 "подразумевает автоматический выбор fwmark."
 
-#: src/libnmc-setting/settings-docs.h.in:409
+#: src/libnmc-setting/settings-docs.h.in:442
 msgid ""
 "Whether to enable special handling of the IPv4 default route. If enabled, "
 "the IPv4 default route from wireguard.peer-routes will be placed to a "
@@ -10685,11 +11365,11 @@ msgstr ""
 "настроить свои собственные правила и маршрутизацию, этот параметр можно "
 "отключить."
 
-#: src/libnmc-setting/settings-docs.h.in:410
+#: src/libnmc-setting/settings-docs.h.in:443
 msgid "Like ip4-auto-default-route, but for the IPv6 default route."
 msgstr "Аналог ip4-auto-default-route, но для маршрута IPv6 по умолчанию."
 
-#: src/libnmc-setting/settings-docs.h.in:411
+#: src/libnmc-setting/settings-docs.h.in:444
 msgid ""
 "The listen-port. If listen-port is not specified, the port will be chosen "
 "randomly when the interface comes up."
@@ -10697,7 +11377,7 @@ msgstr ""
 "Порт для прослушивания (listen-port). Если listen-port не указан, порт будет "
 "выбираться автоматически во время запуска интерфейса."
 
-#: src/libnmc-setting/settings-docs.h.in:412
+#: src/libnmc-setting/settings-docs.h.in:445
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
 "breaking larger packets up into multiple fragments. If zero a default MTU is "
@@ -10711,7 +11391,7 @@ msgstr ""
 "параметр не принимает во внимание текущие маршруты, существующие на момент "
 "его активации."
 
-#: src/libnmc-setting/settings-docs.h.in:413
+#: src/libnmc-setting/settings-docs.h.in:446
 msgid ""
 "Whether to automatically add routes for the AllowedIPs ranges of the peers. "
 "If TRUE (the default), NetworkManager will automatically add routes in the "
@@ -10733,15 +11413,28 @@ msgstr ""
 "ipv6.never-default профиля, то маршрут этого пира не будет добавляться "
 "автоматически."
 
-#: src/libnmc-setting/settings-docs.h.in:414
+#: src/libnmc-setting/settings-docs.h.in:447
+msgid ""
+"A comma-separated list of WireGuard peers. Each peer has the following "
+"syntax: PUBLIC_KEY [ATTRIBUTE=VALUE [ATTRIBUTE=VALUE]...] The supported "
+"attributes are: endpoint, allowed-ips, persistent-keepalive,  preshared-key, "
+"preshared-key-flags."
+msgstr ""
+"Список пиров WireGuard через запятую. Синтаксис каждого пира: ОТКРЫТЫЙ_КЛЮЧ [А"
+"ТРИБУТ=ЗНАЧЕНИЕ "
+"[АТРИБУТ=ЗНАЧЕНИЕ]...] Поддерживаемые атрибуты: endpoint, allowed-ips, persist"
+"ent-keepalive,  preshared-key, "
+"preshared-key-flags."
+
+#: src/libnmc-setting/settings-docs.h.in:448
 msgid "The 256 bit private-key in base64 encoding."
 msgstr "Закрытый 256-битный ключ в кодировке base64."
 
-#: src/libnmc-setting/settings-docs.h.in:415
+#: src/libnmc-setting/settings-docs.h.in:449
 msgid "Flags indicating how to handle the \"private-key\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «private-key»."
 
-#: src/libnmc-setting/settings-docs.h.in:416
+#: src/libnmc-setting/settings-docs.h.in:450
 msgid ""
 "Configures AP isolation, which prevents communication between wireless "
 "devices connected to this AP. This property can be set to a value different "
@@ -10767,7 +11460,7 @@ msgstr ""
 "по умолчанию; в случае его отсутствия, подразумевается значение \"false\" "
 "(0)."
 
-#: src/libnmc-setting/settings-docs.h.in:417
+#: src/libnmc-setting/settings-docs.h.in:451
 msgid ""
 "802.11 frequency band of the network.  One of \"a\" for 5GHz 802.11a or "
 "\"bg\" for 2.4GHz 802.11.  This will lock associations to the Wi-Fi network "
@@ -10783,7 +11476,7 @@ msgstr ""
 "параметры сети совместимы. Данный параметр зависит от возможностей "
 "конкретных драйверов и может не работать со всеми драйверами."
 
-#: src/libnmc-setting/settings-docs.h.in:418
+#: src/libnmc-setting/settings-docs.h.in:452
 msgid ""
 "If specified, directs the device to only associate with the given access "
 "point.  This capability is highly driver dependent and not supported by all "
@@ -10800,7 +11493,7 @@ msgstr ""
 "предотвратит роуминг и также отключит фоновое сканирование. Параметр может "
 "оказаться удобным, если для SSID есть только одна точка доступа."
 
-#: src/libnmc-setting/settings-docs.h.in:419
+#: src/libnmc-setting/settings-docs.h.in:453
 msgid ""
 "Wireless channel to use for the Wi-Fi connection.  The device will only join "
 "(or create for Ad-Hoc networks) a Wi-Fi network on the specified channel.  "
@@ -10813,7 +11506,7 @@ msgstr ""
 "сигнала перекрывают друг-друга, при использовании этого свойства также "
 "необходимо настроить свойство «band»."
 
-#: src/libnmc-setting/settings-docs.h.in:420
+#: src/libnmc-setting/settings-docs.h.in:454
 msgid ""
 "Specifies width of the wireless channel in Access Point (AP) mode. When set "
 "to \"auto\" (0) (the default), the channel width is automatically "
@@ -10823,8 +11516,17 @@ msgid ""
 "This property can be set to a value different from \"auto\" (0) only when "
 "the interface is configured in AP mode."
 msgstr ""
+"Настраивает ширину беспроводного канала в режиме точки доступа (AP). При значе"
+"нии «автоматически» (0) (по умолчанию) "
+"ширина канала определяется автоматически. На текущий момент это означает, что "
+"будет выбрана самое надёжное (наименьшее) "
+"значение. При значении, отличном от «автоматически» (0) также необходимо настр"
+"оить свойство «channel». При использовании "
+"диапазона 2,4ГГц ширина может быть максимум 40МГц. Значение, отличное от «авто"
+"матически» для данного свойства можно указать, только если интерфейс настроен "
+"в режиме точки доступа."
 
-#: src/libnmc-setting/settings-docs.h.in:421
+#: src/libnmc-setting/settings-docs.h.in:455
 msgid ""
 "If specified, request that the device use this MAC address instead. This is "
 "known as MAC cloning or spoofing. Beside explicitly specifying a MAC "
@@ -10859,7 +11561,7 @@ msgstr ""
 "значение). Для D-Bus это поле выражается в виде \"assigned-mac-address\", "
 "либо (устаревшее значение) \"cloned-mac-address\"."
 
-#: src/libnmc-setting/settings-docs.h.in:423
+#: src/libnmc-setting/settings-docs.h.in:457
 msgid ""
 "If TRUE, indicates that the network is a non-broadcasting network that hides "
 "its SSID. This works both in infrastructure and AP mode. In infrastructure "
@@ -10883,7 +11585,7 @@ msgstr ""
 "режиме инфраструктуры) или станций клиента (в режиме точки доступа), "
 "поскольку явные пробные сканирования чётко опознаются в эфире."
 
-#: src/libnmc-setting/settings-docs.h.in:424
+#: src/libnmc-setting/settings-docs.h.in:458
 msgid ""
 "If specified, this connection will only apply to the Wi-Fi device whose "
 "permanent MAC address matches. This property does not change the MAC address "
@@ -10893,8 +11595,8 @@ msgstr ""
 "устройству Wi-Fi с соответствующим постоянным адресом MAC. Это свойство не "
 "изменяет адрес MAC устройства (так называемый спуфинг)."
 
-#: src/libnmc-setting/settings-docs.h.in:425
-#: src/libnmc-setting/settings-docs.h.in:426
+#: src/libnmc-setting/settings-docs.h.in:459
+#: src/libnmc-setting/settings-docs.h.in:460
 msgid ""
 "A list of permanent MAC addresses of Wi-Fi devices to which this connection "
 "should never apply.  Each MAC address should be given in the standard hex-"
@@ -10905,7 +11607,7 @@ msgstr ""
 "нотации шестнадцатеричных цифр и двоеточий (например, «00: 11: 22: 33: 44: "
 "55»)."
 
-#: src/libnmc-setting/settings-docs.h.in:427
+#: src/libnmc-setting/settings-docs.h.in:461
 msgid ""
 "One of \"default\" (0) (never randomize unless the user has set a global "
 "default to randomize and the supplicant supports randomization),  \"never\" "
@@ -10918,7 +11620,7 @@ msgstr ""
 "(1) (никогда не рандомизировать адрес MAC) или \"always\" (2) (всегда "
 "рандомизировать MAC)."
 
-#: src/libnmc-setting/settings-docs.h.in:428
+#: src/libnmc-setting/settings-docs.h.in:462
 msgid ""
 "Wi-Fi network mode; one of \"infrastructure\", \"mesh\", \"adhoc\" or "
 "\"ap\".  If blank, infrastructure is assumed."
@@ -10927,7 +11629,7 @@ msgstr ""
 "или \"ap\" (точка доступа). При отсутствии значения предполагается "
 "инфраструктура."
 
-#: src/libnmc-setting/settings-docs.h.in:430
+#: src/libnmc-setting/settings-docs.h.in:464
 msgid ""
 "One of \"disable\" (2) (disable Wi-Fi power saving), \"enable\" (3) (enable "
 "Wi-Fi power saving), \"ignore\" (1) (don't touch currently configure "
@@ -10939,12 +11641,12 @@ msgstr ""
 "трогать текущую конфигурацию) или \"default\" (0) (используется глобально "
 "настроенное значение). Все остальные значения зарезервированы."
 
-#: src/libnmc-setting/settings-docs.h.in:431
-#: src/libnmc-setting/settings-docs.h.in:434
+#: src/libnmc-setting/settings-docs.h.in:465
+#: src/libnmc-setting/settings-docs.h.in:468
 msgid "This property is not implemented and has no effect."
 msgstr "Это свойство не реализовано и ни на что не влияет"
 
-#: src/libnmc-setting/settings-docs.h.in:432
+#: src/libnmc-setting/settings-docs.h.in:466
 msgid ""
 "A list of BSSIDs (each BSSID formatted as a MAC address like "
 "\"00:11:22:33:44:55\") that have been detected as part of the Wi-Fi "
@@ -10965,11 +11667,11 @@ msgstr ""
 "и отслеживает внутренне с помощью файла \"/var/lib/NetworkManager/seen-"
 "bssids\"."
 
-#: src/libnmc-setting/settings-docs.h.in:433
+#: src/libnmc-setting/settings-docs.h.in:467
 msgid "SSID of the Wi-Fi network. Must be specified."
 msgstr "SSID сети Wi-Fi. Должен быть указан."
 
-#: src/libnmc-setting/settings-docs.h.in:435
+#: src/libnmc-setting/settings-docs.h.in:469
 msgid ""
 "The NMSettingWirelessWakeOnWLan options to enable. Not all devices support "
 "all options. May be any combination of \"any\" (0x2), \"disconnect\" (0x4), "
@@ -10986,7 +11688,7 @@ msgstr ""
 "(для использования глобальных настроек) и \"ignore\" (0x8000) (для "
 "отключения управления Wake-on-LAN в NetworkManager)."
 
-#: src/libnmc-setting/settings-docs.h.in:436
+#: src/libnmc-setting/settings-docs.h.in:470
 msgid ""
 "When WEP is used (ie, key-mgmt = \"none\" or \"ieee8021x\") indicate the "
 "802.11 authentication algorithm required by the AP here.  One of \"open\" "
@@ -11001,7 +11703,7 @@ msgstr ""
 "key-mgmt = \"ieee8021x\" и auth-alg = \"leap\") необходимо указать параметры "
 "\"leap-username\" и \"leap-password\"."
 
-#: src/libnmc-setting/settings-docs.h.in:437
+#: src/libnmc-setting/settings-docs.h.in:471
 msgid ""
 "Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the "
 "connection.  One of \"default\" (0) (use global default value), \"disable\" "
@@ -11018,7 +11720,7 @@ msgstr ""
 "При значении \"default\" (0) и в отсутствии настроенного глобального "
 "значения по умолчанию, FILS будет активирован по необходимости."
 
-#: src/libnmc-setting/settings-docs.h.in:438
+#: src/libnmc-setting/settings-docs.h.in:472
 msgid ""
 "A list of group/broadcast encryption algorithms which prevents connections "
 "to Wi-Fi networks that do not utilize one of the algorithms in the list.  "
@@ -11030,7 +11732,7 @@ msgstr ""
 "максимальной совместимости оставьте этот параметр пустым. Элементами списка "
 "могут быть: \"wep40\", \"wep104\", \"tkip\" или \"ccmp\"."
 
-#: src/libnmc-setting/settings-docs.h.in:439
+#: src/libnmc-setting/settings-docs.h.in:473
 msgid ""
 "Key management used for the connection. One of \"none\" (WEP or no password "
 "protection), \"ieee8021x\" (Dynamic WEP), \"owe\" (Opportunistic Wireless "
@@ -11046,7 +11748,7 @@ msgstr ""
 "\"wpa-eap-suite-b-192\" (только WPA3 enterprise). Данный параметр должен "
 "быть настроен для любого подключения Wi-Fi, использующего защиту."
 
-#: src/libnmc-setting/settings-docs.h.in:440
+#: src/libnmc-setting/settings-docs.h.in:474
 msgid ""
 "The login password for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" "
 "and auth-alg = \"leap\")."
@@ -11054,11 +11756,11 @@ msgstr ""
 "Пароль для входа в устаревших подключениях LEAP (например, key-mgmt = "
 "\"ieee8021x\" и auth-alg = \"leap\")."
 
-#: src/libnmc-setting/settings-docs.h.in:441
+#: src/libnmc-setting/settings-docs.h.in:475
 msgid "Flags indicating how to handle the \"leap-password\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «leap-password»."
 
-#: src/libnmc-setting/settings-docs.h.in:442
+#: src/libnmc-setting/settings-docs.h.in:476
 msgid ""
 "The login username for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" "
 "and auth-alg = \"leap\")."
@@ -11066,7 +11768,7 @@ msgstr ""
 "Имя пользователя для входа в устаревших подключениях LEAP (например, key-"
 "mgmt = \"ieee8021x\" и auth-alg = \"leap\")."
 
-#: src/libnmc-setting/settings-docs.h.in:443
+#: src/libnmc-setting/settings-docs.h.in:477
 msgid ""
 "A list of pairwise encryption algorithms which prevents connections to Wi-Fi "
 "networks that do not utilize one of the algorithms in the list. For maximum "
@@ -11078,7 +11780,7 @@ msgstr ""
 "совместимости оставьте этот параметр пустым. Элементами списка могут быть: "
 "\"tkip\" или \"ccmp\"."
 
-#: src/libnmc-setting/settings-docs.h.in:444
+#: src/libnmc-setting/settings-docs.h.in:478
 msgid ""
 "Indicates whether Protected Management Frames (802.11w) must be enabled for "
 "the connection.  One of \"default\" (0) (use global default value), "
@@ -11095,7 +11797,7 @@ msgstr ""
 "При значении \"default\" (0) и в отсутствии настроенного глобального "
 "значения по умолчанию, PMF будет активирован по необходимости."
 
-#: src/libnmc-setting/settings-docs.h.in:445
+#: src/libnmc-setting/settings-docs.h.in:479
 msgid ""
 "List of strings specifying the allowed WPA protocol versions to use. Each "
 "element may be one \"wpa\" (allow WPA) or \"rsn\" (allow WPA2/RSN).  If not "
@@ -11105,7 +11807,7 @@ msgstr ""
 "WPA. Каждый элемент может быть одним из: «wpa» (разрешить WPA) или «rsn» "
 "(разрешить WPA2 / RSN). Если не указано, разрешаются подключения и WPA и RSN."
 
-#: src/libnmc-setting/settings-docs.h.in:446
+#: src/libnmc-setting/settings-docs.h.in:480
 msgid ""
 "Pre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII "
 "passphrase of 8 to 63 characters that is (as specified in the 802.11i "
@@ -11119,11 +11821,11 @@ msgstr ""
 "шестнадцатеричных символов. В сетях WPA3-Personal для аутентификации SAE "
 "используются парольные фразы любой длины."
 
-#: src/libnmc-setting/settings-docs.h.in:447
+#: src/libnmc-setting/settings-docs.h.in:481
 msgid "Flags indicating how to handle the \"psk\" property."
 msgstr "Флаги, указывающие, как нужно обрабатывать свойство «psk»."
 
-#: src/libnmc-setting/settings-docs.h.in:448
+#: src/libnmc-setting/settings-docs.h.in:482
 msgid ""
 "Flags indicating how to handle the \"wep-key0\", \"wep-key1\", \"wep-key2\", "
 "and \"wep-key3\" properties."
@@ -11131,7 +11833,7 @@ msgstr ""
 "Флаги, указывающие, как нужно обрабатывать параметры «wep-key0», «wep-key1», "
 "«wep-key2» и «wep-key3»."
 
-#: src/libnmc-setting/settings-docs.h.in:449
+#: src/libnmc-setting/settings-docs.h.in:483
 msgid ""
 "Controls the interpretation of WEP keys.  Allowed values are \"key\" (1), in "
 "which case the key is either a 10- or 26-character hexadecimal string, or a "
@@ -11145,7 +11847,7 @@ msgstr ""
 "случае кодовая фраза предоставляется как строка и хешируется с "
 "использованием метода de-facto MD5 для получения фактического ключа WEP."
 
-#: src/libnmc-setting/settings-docs.h.in:450
+#: src/libnmc-setting/settings-docs.h.in:484
 msgid ""
 "Index 0 WEP key.  This is the WEP key used in most networks.  See the \"wep-"
 "key-type\" property for a description of how this key is interpreted."
@@ -11153,7 +11855,7 @@ msgstr ""
 "Индекс 0 ключа WEP. Это ключ WEP, используемый в большинстве сетей. Описание "
 "интерпретации этого ключа см. в свойстве \"wep-key-type\"."
 
-#: src/libnmc-setting/settings-docs.h.in:451
+#: src/libnmc-setting/settings-docs.h.in:485
 msgid ""
 "Index 1 WEP key.  This WEP index is not used by most networks.  See the "
 "\"wep-key-type\" property for a description of how this key is interpreted."
@@ -11161,7 +11863,7 @@ msgstr ""
 "Индекс 1 ключа WEP.  Данный индекс WEP не используется в большинстве сетей. "
 "Описание интерпретации этого ключа см. в свойстве \"wep-key-type\"."
 
-#: src/libnmc-setting/settings-docs.h.in:452
+#: src/libnmc-setting/settings-docs.h.in:486
 msgid ""
 "Index 2 WEP key.  This WEP index is not used by most networks.  See the "
 "\"wep-key-type\" property for a description of how this key is interpreted."
@@ -11169,7 +11871,7 @@ msgstr ""
 "Индекс 2 ключа WEP.  Данный индекс WEP не используется в большинстве сетей. "
 "Описание интерпретации этого ключа см. в свойстве \"wep-key-type\"."
 
-#: src/libnmc-setting/settings-docs.h.in:453
+#: src/libnmc-setting/settings-docs.h.in:487
 msgid ""
 "Index 3 WEP key.  This WEP index is not used by most networks.  See the "
 "\"wep-key-type\" property for a description of how this key is interpreted."
@@ -11177,7 +11879,7 @@ msgstr ""
 "Индекс 3 ключа WEP.  Данный индекс WEP не используется в большинстве сетей. "
 "Описание интерпретации этого ключа см. в свойстве \"wep-key-type\"."
 
-#: src/libnmc-setting/settings-docs.h.in:454
+#: src/libnmc-setting/settings-docs.h.in:488
 msgid ""
 "When static WEP is used (ie, key-mgmt = \"none\") and a non-default WEP key "
 "index is used by the AP, put that WEP key index here.  Valid values are 0 "
@@ -11190,7 +11892,7 @@ msgstr ""
 "по умолчанию) до 3. Обратите внимание, что в некоторых потребительских "
 "точках доступа (таких, как Linksys WRT54G) ключи нумеруются от 1 до 4."
 
-#: src/libnmc-setting/settings-docs.h.in:455
+#: src/libnmc-setting/settings-docs.h.in:489
 msgid ""
 "Flags indicating which mode of WPS is to be used if any. There's little "
 "point in changing the default setting as NetworkManager will automatically "
@@ -11204,7 +11906,7 @@ msgstr ""
 "начинать регистрацию WPS. WPS можно отключить, установив для данного "
 "свойства значение 1."
 
-#: src/libnmc-setting/settings-docs.h.in:456
+#: src/libnmc-setting/settings-docs.h.in:490
 msgid ""
 "IEEE 802.15.4 channel. A positive integer or -1, meaning \"do not set, use "
 "whatever the device is already set to\"."
@@ -11212,7 +11914,7 @@ msgstr ""
 "Канал EEE 802.15.4. Указывается положительное целое число, или «-1», что "
 "означает «не настраивать, использовать любое ранее настроенное устройство»."
 
-#: src/libnmc-setting/settings-docs.h.in:457
+#: src/libnmc-setting/settings-docs.h.in:491
 msgid ""
 "If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) "
 "MAC layer device whose permanent MAC address matches."
@@ -11221,7 +11923,7 @@ msgstr ""
 "устройству уровня MAC IEEE 802.15.4 (WPAN), с соответствующим постоянным "
 "адресом MAC."
 
-#: src/libnmc-setting/settings-docs.h.in:458
+#: src/libnmc-setting/settings-docs.h.in:492
 msgid ""
 "IEEE 802.15.4 channel page. A positive integer or -1, meaning \"do not set, "
 "use whatever the device is already set to\"."
@@ -11230,17 +11932,17 @@ msgstr ""
 "«-1», что означает «не настраивать, использовать любое ранее настроенное "
 "устройство»."
 
-#: src/libnmc-setting/settings-docs.h.in:459
+#: src/libnmc-setting/settings-docs.h.in:493
 msgid "IEEE 802.15.4 Personal Area Network (PAN) identifier."
 msgstr "Идентификатор персональной сети IEEE 802.15.4 (PAN)."
 
-#: src/libnmc-setting/settings-docs.h.in:460
+#: src/libnmc-setting/settings-docs.h.in:494
 msgid "Short IEEE 802.15.4 address to be used within a restricted environment."
 msgstr ""
 "Короткий адрес IEEE 802.15.4, который будет использоваться в ограниченной "
 "среде."
 
-#: src/libnmc-setting/settings-docs.h.in:461
+#: src/libnmc-setting/settings-docs.h.in:495
 msgid ""
 "The port priority for bond active port re-selection during failover. A "
 "higher number means a higher priority in selection. The primary port has the "
@@ -11252,7 +11954,7 @@ msgstr ""
 "выборе. Первичный порт имеет наивысший приоритет. Эта опция совместима "
 "только с режимами active-backup, balance-tlb и balance-alb."
 
-#: src/libnmc-setting/settings-docs.h.in:462
+#: src/libnmc-setting/settings-docs.h.in:496
 msgid ""
 "The queue ID of this bond port. The maximum value of queue ID is the number "
 "of TX queues currently active in device."
@@ -11260,7 +11962,7 @@ msgstr ""
 "ID очереди данного порта агрегации bond. Макс. значение ID очереди — число "
 "очередей TX, активных на устройстве на текущий момент."
 
-#: src/libnmc-setting/settings-docs.h.in:463
+#: src/libnmc-setting/settings-docs.h.in:497
 msgid ""
 "Whether the system hostname can be determined from DHCP on this connection. "
 "When set to \"default\" (-1), the value from global configuration is used. "
@@ -11272,7 +11974,7 @@ msgstr ""
 "конфигурации. Если для этого свойства значение в глобальной конфигурации "
 "отсутствует, то NetworkManager подразумевает значение \"true\" (1)."
 
-#: src/libnmc-setting/settings-docs.h.in:464
+#: src/libnmc-setting/settings-docs.h.in:498
 msgid ""
 "Whether the system hostname can be determined from reverse DNS lookup of "
 "addresses on this device. When set to \"default\" (-1), the value from "
@@ -11285,7 +11987,7 @@ msgstr ""
 "свойства значение в глобальной конфигурации отсутствует, то NetworkManager "
 "подразумевает значение \"true\" (1)."
 
-#: src/libnmc-setting/settings-docs.h.in:465
+#: src/libnmc-setting/settings-docs.h.in:499
 msgid ""
 "If set to \"true\" (1), NetworkManager attempts to get the hostname via "
 "DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has "
@@ -11304,7 +12006,7 @@ msgstr ""
 "Если в глобальной конфигурации значение для этого свойства отсутствует, "
 "NetworkManager подразумевает значение \"false\" (0)."
 
-#: src/libnmc-setting/settings-docs.h.in:466
+#: src/libnmc-setting/settings-docs.h.in:500
 msgid ""
 "The relative priority of this connection to determine the system hostname. A "
 "lower numerical value is better (higher priority).  A connection with higher "
@@ -11328,25 +12030,7 @@ msgstr ""
 "одного отрицательного значения для определения имени хоста будут "
 "использоваться только подключения с самыми низкими значениями приоритетов."
 
-#: src/libnmc-setting/settings-docs.h.in:467
-msgid "The last byte of supervision address."
-msgstr "Последний байт адреса контроля."
-
-#: src/libnmc-setting/settings-docs.h.in:468
-msgid "The port1 interface name of the HSR. This property is mandatory."
-msgstr ""
-"Имя интерфейса порта port1 протокола HSR. Это свойство является обязательным."
-
-#: src/libnmc-setting/settings-docs.h.in:469
-msgid "The port2 interface name of the HSR. This property is mandatory."
-msgstr ""
-"Имя интерфейса порта port2 протокола HSR. Это свойство является обязательным."
-
-#: src/libnmc-setting/settings-docs.h.in:470
-msgid "The protocol used by the interface, whether it is PRP or HSR."
-msgstr "Протокол, используемый интерфейсом, PRP или HSR."
-
-#: src/libnmc-setting/settings-docs.h.in:471
+#: src/libnmc-setting/settings-docs.h.in:501
 msgid ""
 "The maximum size of a packet built by the Generic Receive Offload stack for "
 "this device. The value must be between 0 and 4294967295. When set to -1, the "
@@ -11356,7 +12040,7 @@ msgstr ""
 "данного устройства. Значение должно быть между 0 и 4294967295. При установке "
 "значения «-1» сохраняется существующее значение."
 
-#: src/libnmc-setting/settings-docs.h.in:472
+#: src/libnmc-setting/settings-docs.h.in:502
 msgid ""
 "The maximum segments of a Generic Segment Offload packet the device should "
 "accept. The value must be between 0 and 4294967295. When set to -1, the "
@@ -11366,7 +12050,7 @@ msgstr ""
 "должно принять устройство. Значение должно быть между 0 и 4294967295. При "
 "установке значения «-1» сохраняется существующее значение."
 
-#: src/libnmc-setting/settings-docs.h.in:473
+#: src/libnmc-setting/settings-docs.h.in:503
 msgid ""
 "The maximum size of a Generic Segment Offload packet the device should "
 "accept. The value must be between 0 and 4294967295. When set to -1, the "
@@ -11376,7 +12060,7 @@ msgstr ""
 "устройство. Значение должно быть между 0 и 4294967295. При установке "
 "значения «-1» сохраняется существующее значение."
 
-#: src/libnmc-setting/settings-docs.h.in:474
+#: src/libnmc-setting/settings-docs.h.in:504
 msgid ""
 "The size of the transmit queue for the device, in number of packets. The "
 "value must be between 0 and 4294967295. When set to -1, the existing value "
@@ -11386,11 +12070,11 @@ msgstr ""
 "должно находиться в диапазоне от 0 до 4294967295. При установке значения "
 "«-1» сохраняется существующее значение."
 
-#: src/libnmc-setting/settings-docs.h.in:476
+#: src/libnmc-setting/settings-docs.h.in:506
 msgid "A dictionary of key/value pairs with external-ids for OVS."
 msgstr "Словарь пар «ключ/значение» с внешними идентификаторами для OVS."
 
-#: src/libnmc-setting/settings-docs.h.in:477
+#: src/libnmc-setting/settings-docs.h.in:507
 msgid ""
 "A dictionary of key/value pairs with other_config settings for OVS. See also "
 "\"other_config\" in the \"ovs-vswitchd.conf.db\" manual for the keys that "
@@ -11400,7 +12084,22 @@ msgstr ""
 "получения сведений о ключах, поддерживаемых OVS, см. также \"other_config\" "
 "в руководстве \"ovs-vswitchd.conf.db\"."
 
-#: src/libnmc-setting/settings-docs.h.in:478
+#: src/libnmc-setting/settings-docs.h.in:508
+msgid ""
+"The subnet ID to use on the interface from the prefix delegation received "
+"via an upstream interface. Set to a value between 0 and 0xffffffff (2^32 - "
+"1) to indicate a specific subnet ID; or set to -1 to automatically choose an "
+"available subnet ID."
+msgstr ""
+"Идентификатор подсети, используемый на интерфейсе, из делегированного префикса"
+", "
+"полученного с помощью вышележащего интерфейса. Для указания конкретного иденти"
+"фикатора подсети "
+"настройте значение от 0 до 0xffffffff (2^32 - 1); для автоматического выбора д"
+"оступного идентификатора "
+"подсети укажите «-1»."
+
+#: src/libnmc-setting/settings-docs.h.in:509
 msgid ""
 "This property specifies the peer interface name of the veth. This property "
 "is mandatory."
@@ -11408,7 +12107,7 @@ msgstr ""
 "Данное свойство указывает имя интерфейса пира veth и является обязательным "
 "свойством."
 
-#: src/libnmt-newt/nmt-newt-utils.c:267 src/nmtui/nmt-editor.c:445
+#: src/libnmt-newt/nmt-newt-utils.c:267 src/nmtui/nmt-editor.c:452
 #: src/nmtui/nmt-password-dialog.c:163 src/nmtui/nmt-route-editor.c:105
 #: src/nmtui/nmt-wireguard-peer-editor.c:154 src/nmtui/nmtui-hostname.c:53
 #: src/nmtui/nmtui.c:115
@@ -11421,9 +12120,9 @@ msgid "Could not create temporary file: %s"
 msgstr "Не удалось создать временный файл: %s"
 
 #: src/libnmt-newt/nmt-newt-utils.c:426
-#, fuzzy, c-format
+#, c-format
 msgid "Could not write to temporary file: %s"
-msgstr "Не удалось создать временный файл: %s"
+msgstr "Сбой записи во временный файл: %s"
 
 #: src/libnmt-newt/nmt-newt-utils.c:465
 #, c-format
@@ -11440,7 +12139,6 @@ msgid "Connecting"
 msgstr "Подключение"
 
 #: src/nm-online/nm-online.c:189
-#, c-format
 msgid "Error: timeout creating NMClient object\n"
 msgstr "Ошибка: истекло временя ожидания создания объекта NMClient\n"
 
@@ -11550,7 +12248,6 @@ msgid "nmcli successfully registered as a NetworkManager's secret agent.\n"
 msgstr "nmcli был успешно зарегистрирован как агент секретов NetworkManager.\n"
 
 #: src/nmcli/agent.c:143
-#, c-format
 msgid "Error: secret agent initialization failed"
 msgstr "Ошибка: сбой инициализации агента секретов"
 
@@ -11564,7 +12261,7 @@ msgid "Error: polkit agent initialization failed: %s"
 msgstr "Ошибка: не удалось инициализировать агента polkit: %s"
 
 #: src/nmcli/common.c:362 src/nmcli/common.c:363 src/nmcli/common.c:393
-#: src/nmcli/common.c:394 src/nmcli/connections.c:1768
+#: src/nmcli/common.c:394 src/nmcli/connections.c:1770
 msgid "GROUP"
 msgstr "ГРУППА"
 
@@ -11716,7 +12413,7 @@ msgstr "Шифрование WEP известно своей ненадёжно
 msgid "never"
 msgstr "никогда"
 
-#: src/nmcli/connections.c:1115
+#: src/nmcli/connections.c:1116
 msgid ""
 "Usage: nmcli connection { COMMAND | help }\n"
 "\n"
@@ -11731,7 +12428,7 @@ msgid ""
 "\n"
 "  down [id | uuid | path | apath] <ID> ...\n"
 "\n"
-"  add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- "
+"  add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS [-- "
 "([+|-]<setting>.<property> <value>)+]\n"
 "\n"
 "  modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> "
@@ -11763,12 +12460,12 @@ msgstr ""
 "  show [--active] [--order <order spec>]\n"
 "  show [--active] [id | uuid | path | apath] <ID> ...\n"
 "\n"
-"  up [[id | uuid | path] <ID>] [ifname <имя_интерфейса>] [ap <BSSID>] "
-"[passwd-file <файл с паролями>]\n"
+"  up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file "
+"<файл с паролями>]\n"
 "\n"
 "  down [id | uuid | path | apath] <ID> ...\n"
 "\n"
-"  add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [- ([+ | "
+"  add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS [- ([+ | "
 "-]<параметр><свойство> <значение>) +]\n"
 "\n"
 "  modify [--temporary] [id | uuid | path] <ID> ([+ | -]<параметр><свойство> "
@@ -11792,7 +12489,7 @@ msgstr ""
 "  export [id | uuid | path] <ID> [<файл_вывода>]\n"
 "\n"
 
-#: src/nmcli/connections.c:1141
+#: src/nmcli/connections.c:1142
 msgid ""
 "Usage: nmcli connection show { ARGUMENTS | help }\n"
 "\n"
@@ -11840,7 +12537,7 @@ msgstr ""
 "параметр\n"
 "«--show-secrets».\n"
 
-#: src/nmcli/connections.c:1163
+#: src/nmcli/connections.c:1164
 msgid ""
 "Usage: nmcli connection up { ARGUMENTS | help }\n"
 "\n"
@@ -11884,7 +12581,7 @@ msgstr ""
 "passwd-file - файл, содержащий пароли, требуемые для активации подключения\n"
 "\n"
 
-#: src/nmcli/connections.c:1187
+#: src/nmcli/connections.c:1188
 msgid ""
 "Usage: nmcli connection down { ARGUMENTS | help }\n"
 "\n"
@@ -11906,11 +12603,11 @@ msgstr ""
 "UUID или пути D-Bus.\n"
 "\n"
 
-#: src/nmcli/connections.c:1199
+#: src/nmcli/connections.c:1201
 msgid ""
 "Usage: nmcli connection add { ARGUMENTS | help }\n"
 "\n"
-"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS "
+"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS "
 "[-- ([+|-]<setting>.<property> <value>)+]\n"
 "\n"
 "  COMMON_OPTIONS:\n"
@@ -11919,8 +12616,9 @@ msgid ""
 "                  [con-name <connection name>]\n"
 "                  [autoconnect yes|no]\n"
 "                  [save yes|no]\n"
-"                  [master <master (ifname, or connection UUID or name)>]\n"
-"                  [slave-type <master connection type>]\n"
+"                  [controller <controller (ifname, or connection UUID or "
+"name)>]\n"
+"                  [port-type <controller connection type>]\n"
 "\n"
 "  TYPE_SPECIFIC_OPTIONS:\n"
 "    ethernet:     [mac <MAC address>]\n"
@@ -11977,12 +12675,14 @@ msgid ""
 "                  [arp-ip-target <num>]\n"
 "                  [lacp-rate slow (0) | fast (1)]\n"
 "\n"
-"    bond-slave:   master <master (ifname, or connection UUID or name)>\n"
+"    bond-slave:   controller <controller (ifname, or connection UUID or "
+"name)>\n"
 "                  [queue-id <0-65535>]\n"
 "\n"
 "    team:         [config <file>|<raw JSON data>]\n"
 "\n"
-"    team-slave:   master <master (ifname, or connection UUID or name)>\n"
+"    team-slave:   controller <controller (ifname, or connection UUID or "
+"name)>\n"
 "                  [config <file>|<raw JSON data>]\n"
 "\n"
 "    bridge:       [stp yes|no]\n"
@@ -11994,7 +12694,8 @@ msgid ""
 "                  [multicast-snooping yes|no]\n"
 "                  [mac <MAC address>]\n"
 "\n"
-"    bridge-slave: master <master (ifname, or connection UUID or name)>\n"
+"    bridge-slave: controller <controller (ifname, or connection UUID or "
+"name)>\n"
 "                  [priority <0-63>]\n"
 "                  [path-cost <1-65535>]\n"
 "                  [hairpin yes|no]\n"
@@ -12052,7 +12753,7 @@ msgid ""
 "    6lowpan:      dev <parent device (connection UUID, ifname, or MAC)>\n"
 "    dummy:\n"
 "\n"
-"  SLAVE_OPTIONS:\n"
+"  PORT_OPTIONS:\n"
 "    bridge:       [priority <0-63>]\n"
 "                  [path-cost <1-65535>]\n"
 "                  [hairpin yes|no]\n"
@@ -12068,17 +12769,18 @@ msgid ""
 msgstr ""
 "Использование: nmcli connection add { АРГУМЕНТЫ | help }\n"
 "\n"
-"АРГУМЕНТЫ := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS "
+"АРГУМЕНТЫ := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS "
 "[-- ([+|-]<setting>.<property> <value>)+]\n"
 "\n"
 "  COMMON_OPTIONS:\n"
 "                  type <тип>\n"
-"                  [ifname <имя_интерфейса> | \"*\"]\n"
+"                  [ifname <имя интерфейса> | \"*\"]\n"
 "                  [con-name <имя подключения>]\n"
 "                  [autoconnect yes|no]\n"
 "                  [save yes|no]\n"
-"                  [master <master (ifname, или UUID/имя подключения)>]\n"
-"                  [slave-type <тип главного подключения>]\n"
+"                  [controller <контроллер (имя интерфейса, UUID или имя подклю"
+"чения)>]\n"
+"                  [port-type <тип подключения контроллера>]\n"
 "\n"
 "  TYPE_SPECIFIC_OPTIONS:\n"
 "    ethernet:     [mac <адрес MAC>]\n"
@@ -12104,45 +12806,47 @@ msgstr ""
 "                  [user <имя пользователя>]\n"
 "                  [password <пароль>]\n"
 "\n"
-"    cdma:         [user <имя польователя>]\n"
+"    cdma:         [user <имя пользователя>]\n"
 "                  [password <пароль>]\n"
 "\n"
 "    infiniband:   [mac <адрес MAC>]\n"
 "                  [mtu <MTU>]\n"
 "                  [transport-mode datagram | connected]\n"
 "                  [parent <ifname>]\n"
-"                  [p-key <IPoIB P_Key>]\n"
+"                  [p-key <открытый ключ IPoIB>]\n"
 "\n"
 "    bluetooth:    [addr <адрес bluetooth>]\n"
 "                  [bt-type panu|nap|dun-gsm|dun-cdma]\n"
 "\n"
-"    vlan:         dev <родительское устройство (UUID подключения, ifname или "
-"MAC)>\n"
+"    vlan:         dev <родительское устройство (UUID подключения, имя интерфей"
+"са или MAC)>\n"
 "                  id <VLAN ID>\n"
 "                  [flags <флаги VLAN>]\n"
-"                  [ingress <приоритетное отображение входящих пакетов>]\n"
-"                  [egress <приоритетное отображение исходящих пакетов>]\n"
+"                  [ingress <сопоставление приоритета входящего траф.>]\n"
+"                  [egress <сопоставление приоритета исходящего траф.>]\n"
 "                  [mtu <MTU>]\n"
 "\n"
-"    bond:         [mode balance-rr (0) | active-backup (1) | balance-xor (2) "
-"| broadcast (3) |\n"
-"                        802.3ad    (4) | balance-tlb   (5) | balance-alb "
-"(6)]\n"
-"                  [primary <ifname>]\n"
-"                  [miimon <num>]\n"
-"                  [downdelay <num>]\n"
-"                  [updelay <num>]\n"
-"                  [arp-interval <num>]\n"
-"                  [arp-ip-target <num>]\n"
+"    bond:         [mode balance-rr (0) | active-backup (1) | balance-xor (2) |"
+" broadcast (3) |\n"
+"                        802.3ad    (4) | balance-tlb   (5) | balance-alb (6)]"
+"\n"
+"                  [primary <имя интерфейса>]\n"
+"                  [miimon <число>]\n"
+"                  [downdelay <число>]\n"
+"                  [updelay <число>]\n"
+"                  [arp-interval <число>]\n"
+"                  [arp-ip-target <число>]\n"
 "                  [lacp-rate slow (0) | fast (1)]\n"
 "\n"
-"    bond-slave:   master <master (ifname или UUID/имя подключения)>\n"
+"    bond-slave:   controller <контроллер (имя интерфейса, UUID или имя подключ"
+"ения)>\n"
 "                  [queue-id <0-65535>]\n"
 "\n"
 "    team:         [config <файл>|<необработанные данные в JSON>]\n"
 "\n"
-"    team-slave:   master <master (ifname или UUID/имя подключения)>\n"
-"                  [config <file>|<необработанные данные в JSON>]\n"
+"    team-slave:   controller <контроллер (имя интерфейса, UUID или имя подключ"
+"ения)>\n"
+"                  [config <файл>|<необработанные данные в JSON>]\n"
 "\n"
 "    bridge:       [stp yes|no]\n"
 "                  [priority <число>]\n"
@@ -12153,7 +12857,8 @@ msgstr ""
 "                  [multicast-snooping yes|no]\n"
 "                  [mac <адрес MAC>]\n"
 "\n"
-"    bridge-slave: master <master (ifname или UUID/имя подключения)>\n"
+"    bridge-slave: controller <контроллер (имя интерфейса, UUID или имя подключ"
+"ения)>\n"
 "                  [priority <0-63>]\n"
 "                  [path-cost <1-65535>]\n"
 "                  [hairpin yes|no]\n"
@@ -12181,27 +12886,28 @@ msgstr ""
 "    ip-tunnel:    mode ipip|gre|sit|isatap|vti|ip6ip6|ipip6|ip6gre|vti6\n"
 "                  remote <IP удалённой конечной точки>\n"
 "                  [local <IP локальной конечной точки>]\n"
-"                  [dev <родительское устройство (ifname UUID подключения)>]\n"
+"                  [dev <родительское устройство (имя интерфейса или UUID подкл"
+"ючения)>]\n"
 "\n"
-"    macsec:       dev <родительское устройство (UUID подключения, ifname или "
-"MAC)>\n"
+"    macsec:       dev <родительское устройство (UUID подключения, имя интерфей"
+"са или MAC)>\n"
 "                  mode <psk|eap>\n"
 "                  [cak <ключ> ckn <ключ>]\n"
 "                  [encrypt yes|no]\n"
 "                  [port 1-65534]\n"
 "\n"
 "\n"
-"    macvlan:      dev <родительское устройство (UUID подключения, ifname или "
-"MAC)>\n"
+"    macvlan:      dev <родительское устройство (UUID подключения, имя интерфей"
+"са или MAC)>\n"
 "                  mode vepa|bridge|private|passthru|source\n"
 "                  [tap yes|no]\n"
 "\n"
 "    vxlan:        id <VXLAN ID>\n"
-"                  [remote <IP широковещательной группы или удалённый "
-"адрес>]\n"
+"                  [remote <IP группы многоадресной рассылки или удалённый адре"
+"с>]\n"
 "                  [local <исходный IP>]\n"
-"                  [dev <родительское устройство (ifname или UUID "
-"подключения)>]\n"
+"                  [dev <родительское устройство (UUID подключения, имя интерфе"
+"йса или MAC)>]\n"
 "                  [source-port-min <0-65535>]\n"
 "                  [source-port-max <0-65535>]\n"
 "                  [destination-port <0-65535>]\n"
@@ -12210,13 +12916,13 @@ msgstr ""
 "                  [pan-id <0x0000-0xffff>]\n"
 "                  [page <default|0-31>]\n"
 "                  [channel <default|0-26>]\n"
-"                  [mac <MAC address>]\n"
+"                  [mac <адрес MAC>]\n"
 "\n"
-"    6lowpan:      dev <родительское устройство (UUID подключения, ifname или "
-"MAC)>\n"
+"    6lowpan:      dev <родительское устройство (UUID подключения, имя интерфей"
+"са или MAC)>\n"
 "    dummy:\n"
 "\n"
-"  SLAVE_OPTIONS:\n"
+"  PORT_OPTIONS:\n"
 "    bridge:       [priority <0-63>]\n"
 "                  [path-cost <1-65535>]\n"
 "                  [hairpin yes|no]\n"
@@ -12230,7 +12936,7 @@ msgstr ""
 "                  [ip6 <адрес IPv6>] [gw6 <шлюз IPv6>]\n"
 "\n"
 
-#: src/nmcli/connections.c:1329
+#: src/nmcli/connections.c:1331
 msgid ""
 "Usage: nmcli connection modify { ARGUMENTS | help }\n"
 "\n"
@@ -12287,7 +12993,7 @@ msgstr ""
 "nmcli con mod em1-1 remove sriov\n"
 "\n"
 
-#: src/nmcli/connections.c:1357
+#: src/nmcli/connections.c:1359
 msgid ""
 "Usage: nmcli connection clone { ARGUMENTS | help }\n"
 "\n"
@@ -12308,7 +13014,7 @@ msgstr ""
 "(будет создано) и id (указывается в виде аргумента <новое имя>).\n"
 "\n"
 
-#: src/nmcli/connections.c:1369
+#: src/nmcli/connections.c:1371
 msgid ""
 "Usage: nmcli connection edit { ARGUMENTS | help }\n"
 "\n"
@@ -12336,7 +13042,7 @@ msgstr ""
 "Добавляет новый профиль подключения в интерактивном редакторе.\n"
 "\n"
 
-#: src/nmcli/connections.c:1384
+#: src/nmcli/connections.c:1386
 msgid ""
 "Usage: nmcli connection delete { ARGUMENTS | help }\n"
 "\n"
@@ -12354,7 +13060,7 @@ msgstr ""
 "Профили идентифицируются по имени, UUID или пути D-Bus.\n"
 "\n"
 
-#: src/nmcli/connections.c:1395
+#: src/nmcli/connections.c:1397
 msgid ""
 "Usage: nmcli connection monitor { ARGUMENTS | help }\n"
 "\n"
@@ -12375,7 +13081,7 @@ msgstr ""
 "всех подключений.\n"
 "\n"
 
-#: src/nmcli/connections.c:1407
+#: src/nmcli/connections.c:1409
 msgid ""
 "Usage: nmcli connection reload { help }\n"
 "\n"
@@ -12387,7 +13093,7 @@ msgstr ""
 "Перезагрузка файлов всех подключений с диска.\n"
 "\n"
 
-#: src/nmcli/connections.c:1416
+#: src/nmcli/connections.c:1418
 msgid ""
 "Usage: nmcli connection load { ARGUMENTS | help }\n"
 "\n"
@@ -12408,7 +13114,7 @@ msgstr ""
 "чтобы NetworkManager получил сведения о его последнем состоянии.\n"
 "\n"
 
-#: src/nmcli/connections.c:1429
+#: src/nmcli/connections.c:1431
 msgid ""
 "Usage: nmcli connection import { ARGUMENTS | help }\n"
 "\n"
@@ -12432,7 +13138,7 @@ msgstr ""
 "только конфигурации VPN. Конфигурации импортируются модулями VPN "
 "NetworkManager.\n"
 
-#: src/nmcli/connections.c:1443
+#: src/nmcli/connections.c:1445
 msgid ""
 "Usage: nmcli connection export { ARGUMENTS | help }\n"
 "\n"
@@ -12451,7 +13157,7 @@ msgstr ""
 "или в файл, если указано имя файла.\n"
 "\n"
 
-#: src/nmcli/connections.c:1454
+#: src/nmcli/connections.c:1456
 msgid ""
 "Usage: nmcli connection migrate { ARGUMENTS | help }\n"
 "\n"
@@ -12469,80 +13175,80 @@ msgstr ""
 "например, \"keyfile\" (по умолчанию) или \"ifcfg-rh\".\n"
 "\n"
 
-#: src/nmcli/connections.c:1537
+#: src/nmcli/connections.c:1539
 #, c-format
 msgid "Error updating secrets for %s: %s\n"
 msgstr "Ошибка при обновлении секретов для %s: %s\n"
 
-#: src/nmcli/connections.c:1588
+#: src/nmcli/connections.c:1590
 msgid "Connection profile details"
 msgstr "Свойства профиля подключения"
 
-#: src/nmcli/connections.c:1606 src/nmcli/connections.c:1713
+#: src/nmcli/connections.c:1608 src/nmcli/connections.c:1715
 #, c-format
 msgid "Error: 'connection show': %s"
 msgstr "Ошибка: «connection show»: %s"
 
-#: src/nmcli/connections.c:1695
+#: src/nmcli/connections.c:1697
 msgid "Active connection details"
 msgstr "Подробности об активном подключении"
 
-#: src/nmcli/connections.c:1825 src/nmcli/devices.c:1681
+#: src/nmcli/connections.c:1827 src/nmcli/devices.c:1681
 #: src/nmcli/devices.c:1698 src/nmcli/devices.c:1716 src/nmcli/devices.c:1735
 #: src/nmcli/devices.c:1799 src/nmcli/devices.c:1928
 msgid "NAME"
 msgstr "ИМЯ"
 
-#: src/nmcli/connections.c:1925
+#: src/nmcli/connections.c:1942
 #, c-format
 msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
 msgstr "недействительное поле «%s»; допустимые поля: %s и %s или %s,%s"
 
-#: src/nmcli/connections.c:1942 src/nmcli/connections.c:1953
+#: src/nmcli/connections.c:1959 src/nmcli/connections.c:1970
 #, c-format
 msgid "'%s' has to be alone"
 msgstr "'%s' должен быть единственным"
 
-#: src/nmcli/connections.c:2209
+#: src/nmcli/connections.c:2226
 #, c-format
 msgid "incorrect string '%s' of '--order' option"
 msgstr "неверная строка «%s» для параметра «--order»"
 
-#: src/nmcli/connections.c:2233
+#: src/nmcli/connections.c:2250
 #, c-format
 msgid "incorrect item '%s' in '--order' option"
 msgstr "неверный элемент «%s» для параметра «--order»"
 
-#: src/nmcli/connections.c:2278
+#: src/nmcli/connections.c:2295
 msgid "No connection specified"
 msgstr "Не указано подключение"
 
-#: src/nmcli/connections.c:2291
+#: src/nmcli/connections.c:2308
 #, c-format
 msgid "%s argument is missing"
 msgstr "отсутствует аргумент %s"
 
-#: src/nmcli/connections.c:2312
+#: src/nmcli/connections.c:2329
 #, c-format
 msgid "unknown connection '%s'"
 msgstr "неизвестное подключение: «%s»"
 
-#: src/nmcli/connections.c:2341
+#: src/nmcli/connections.c:2358
 msgid "'--order' argument is missing"
 msgstr "отсутствует аргумент «--order»"
 
-#: src/nmcli/connections.c:2405
+#: src/nmcli/connections.c:2422
 msgid "NetworkManager active profiles"
 msgstr "Активные профили NetworkManager"
 
-#: src/nmcli/connections.c:2406
+#: src/nmcli/connections.c:2423
 msgid "NetworkManager connection profiles"
 msgstr "Профили подключений NetworkManager"
 
-#: src/nmcli/connections.c:2462 src/nmcli/connections.c:3189
-#: src/nmcli/connections.c:3201 src/nmcli/connections.c:3213
-#: src/nmcli/connections.c:3449 src/nmcli/connections.c:9703
-#: src/nmcli/connections.c:9722 src/nmcli/devices.c:3398
+#: src/nmcli/connections.c:2479 src/nmcli/connections.c:3200
+#: src/nmcli/connections.c:3212 src/nmcli/connections.c:3224
+#: src/nmcli/connections.c:3460 src/nmcli/connections.c:9919
+#: src/nmcli/connections.c:9938 src/nmcli/devices.c:3398
 #: src/nmcli/devices.c:3411 src/nmcli/devices.c:3423 src/nmcli/devices.c:3726
 #: src/nmcli/devices.c:3737 src/nmcli/devices.c:3756 src/nmcli/devices.c:3765
 #: src/nmcli/devices.c:3787 src/nmcli/devices.c:3798 src/nmcli/devices.c:3819
@@ -12554,14 +13260,14 @@ msgstr "Профили подключений NetworkManager"
 msgid "Error: %s argument is missing."
 msgstr "Ошибка: отсутствует аргумент %s."
 
-#: src/nmcli/connections.c:2497
+#: src/nmcli/connections.c:2514
 #, c-format
 msgid "Error: %s - no such connection profile."
 msgstr "Ошибка: профиль %s не существует."
 
-#: src/nmcli/connections.c:2589 src/nmcli/connections.c:3175
-#: src/nmcli/connections.c:3249 src/nmcli/connections.c:9207
-#: src/nmcli/connections.c:9291 src/nmcli/connections.c:9827
+#: src/nmcli/connections.c:2606 src/nmcli/connections.c:3186
+#: src/nmcli/connections.c:3260 src/nmcli/connections.c:9423
+#: src/nmcli/connections.c:9507 src/nmcli/connections.c:10043
 #: src/nmcli/devices.c:2028 src/nmcli/devices.c:2337 src/nmcli/devices.c:2504
 #: src/nmcli/devices.c:2630 src/nmcli/devices.c:2815 src/nmcli/devices.c:3598
 #: src/nmcli/devices.c:4549 src/nmcli/devices.c:5001 src/nmcli/general.c:1076
@@ -12569,81 +13275,81 @@ msgstr "Ошибка: профиль %s не существует."
 msgid "Error: %s."
 msgstr "Ошибка: %s."
 
-#: src/nmcli/connections.c:2687 src/nmcli/devices.c:4768
+#: src/nmcli/connections.c:2704 src/nmcli/devices.c:4768
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "на устройстве «%s» нет активных подключений"
 
-#: src/nmcli/connections.c:2695
+#: src/nmcli/connections.c:2712
 msgid "no active connection or device"
 msgstr "на устройстве нет активных подключений"
 
-#: src/nmcli/connections.c:2718
+#: src/nmcli/connections.c:2735
 #, c-format
 msgid "device '%s' not compatible with connection '%s': "
 msgstr "устройство «%s» несовместимо с подключением «%s»: "
 
-#: src/nmcli/connections.c:2756
+#: src/nmcli/connections.c:2773
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "устройство «%s» несовместимо с подключением «%s»"
 
-#: src/nmcli/connections.c:2763
+#: src/nmcli/connections.c:2780
 #, c-format
 msgid "device '%s' not found for connection '%s'"
 msgstr "устройство '%s' не найдено для подключения '%s'"
 
-#: src/nmcli/connections.c:2771
+#: src/nmcli/connections.c:2788
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "для подключения «%s» устройство не найдено"
 
-#: src/nmcli/connections.c:2822
+#: src/nmcli/connections.c:2839
 #, c-format
 msgid "Hint: use '%s' to get more details."
 msgstr "Подсказка: используйте «%s» для получения более подробной информации."
 
-#: src/nmcli/connections.c:2840
+#: src/nmcli/connections.c:2857
 #, c-format
 msgid "Connection successfully activated (%s) (D-Bus active path: %s)\n"
 msgstr "Подключение успешно активировано (%s) (активный путь D-Bus: %s)\n"
 
-#: src/nmcli/connections.c:2844 src/nmcli/connections.c:2995
-#: src/nmcli/connections.c:7446
+#: src/nmcli/connections.c:2861 src/nmcli/connections.c:3012
+#: src/nmcli/connections.c:7651
 #, c-format
 msgid "Connection successfully activated (D-Bus active path: %s)\n"
 msgstr "Подключение успешно активировано (активный путь D-Bus: %s)\n"
 
-#: src/nmcli/connections.c:2851 src/nmcli/connections.c:2974
+#: src/nmcli/connections.c:2868 src/nmcli/connections.c:2991
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Ошибка: сбой активации подключения: %s"
 
-#: src/nmcli/connections.c:2887
+#: src/nmcli/connections.c:2904
 #, c-format
 msgid "Error: Timeout expired (%d seconds)"
 msgstr "Ошибка: истекло время ожидания (%d сек.)."
 
-#: src/nmcli/connections.c:3069
+#: src/nmcli/connections.c:3086
 #, c-format
 msgid "unknown device '%s'."
 msgstr "неизвестное устройство '%s'."
 
-#: src/nmcli/connections.c:3077
+#: src/nmcli/connections.c:3094
 msgid "neither a valid connection nor device given"
 msgstr "не было указано ни устройства, ни действительного подключения"
 
-#: src/nmcli/connections.c:3092
+#: src/nmcli/connections.c:3109
 #, c-format
 msgid "invalid passwd-file '%s' at line %zd: %s"
 msgstr "недействительный passwd-file '%s' в строке %zd: %s"
 
-#: src/nmcli/connections.c:3100
+#: src/nmcli/connections.c:3117
 #, c-format
 msgid "invalid passwd-file '%s': %s"
 msgstr "недействительный passwd-file '%s': %s"
 
-#: src/nmcli/connections.c:3223 src/nmcli/connections.c:9731
+#: src/nmcli/connections.c:3234 src/nmcli/connections.c:9947
 #: src/nmcli/devices.c:1985 src/nmcli/devices.c:2034 src/nmcli/devices.c:2510
 #: src/nmcli/devices.c:2703 src/nmcli/devices.c:2770 src/nmcli/devices.c:2970
 #: src/nmcli/devices.c:3458 src/nmcli/devices.c:3835 src/nmcli/devices.c:4446
@@ -12652,144 +13358,144 @@ msgstr "недействительный passwd-file '%s': %s"
 msgid "Error: invalid extra argument '%s'."
 msgstr "Ошибка: недействительный дополнительный аргумент «%s»."
 
-#: src/nmcli/connections.c:3257
+#: src/nmcli/connections.c:3268
 msgid "preparing"
 msgstr "идёт подготовка"
 
-#: src/nmcli/connections.c:3365
+#: src/nmcli/connections.c:3376
 #, c-format
 msgid "Connection '%s' (%s) successfully deleted.\n"
 msgstr "Подключение «%s» (%s) успешно удалено.\n"
 
-#: src/nmcli/connections.c:3381
+#: src/nmcli/connections.c:3392
 #, c-format
 msgid "Connection '%s' successfully deactivated (D-Bus active path: %s)\n"
 msgstr "Подключение «%s» успешно деактивировано (активный путь D-Bus: %s)\n"
 
-#: src/nmcli/connections.c:3430 src/nmcli/connections.c:9387
-#: src/nmcli/connections.c:9424 src/nmcli/connections.c:9613
-#, c-format
+#: src/nmcli/connections.c:3441 src/nmcli/connections.c:9603
+#: src/nmcli/connections.c:9640 src/nmcli/connections.c:9829
 msgid "Error: No connection specified."
 msgstr "Ошибка: не указано подключение."
 
-#: src/nmcli/connections.c:3462
+#: src/nmcli/connections.c:3473
 #, c-format
 msgid "Error: '%s' is not an active connection.\n"
 msgstr "Ошибка: «%s» не является активным подключением.\n"
 
-#: src/nmcli/connections.c:3463
-#, c-format
+#: src/nmcli/connections.c:3474
 msgid "Error: not all active connections found."
 msgstr "Ошибка: не все активные подключения обнаружены."
 
-#: src/nmcli/connections.c:3471
-#, c-format
+#: src/nmcli/connections.c:3482
 msgid "Error: no active connection provided."
 msgstr "Ошибка: не было предоставлено активных подключений."
 
-#: src/nmcli/connections.c:3503
+#: src/nmcli/connections.c:3514
 #, c-format
 msgid "Connection '%s' deactivation failed: %s\n"
 msgstr "Сбой активации подключения «%s»: %s\n"
 
-#: src/nmcli/connections.c:3984
+#: src/nmcli/connections.c:4009
 #, c-format
-msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgid ""
+"Warning: controller '%s' doesn't refer to any existing profile of type "
+"'%s'.\n"
 msgstr ""
-"Предупреждение: master='%s' не относится ни к одному существующему профилю.\n"
+"Предупреждение: контроллер '%s' не относится ни к одному существующему профилю"
+" с типом '%s'.\n"
 
-#: src/nmcli/connections.c:4364
+#: src/nmcli/connections.c:4391
 #, c-format
 msgid "Error: invalid property '%s': %s."
 msgstr "Ошибка: недействительное свойство «%s»: %s."
 
-#: src/nmcli/connections.c:4382
+#: src/nmcli/connections.c:4409
 #, c-format
 msgid "Error: failed to modify %s.%s: %s."
 msgstr "Ошибка: не удалось изменить %s.%s: %s."
 
-#: src/nmcli/connections.c:4383
+#: src/nmcli/connections.c:4410
 #, c-format
 msgid "Error: failed to remove a value from %s.%s: %s."
 msgstr "Ошибка: не удалось удалить значение из %s.%s: %s."
 
-#: src/nmcli/connections.c:4463
+#: src/nmcli/connections.c:4490
 #, c-format
-msgid "Error: invalid slave type; %s."
-msgstr "Ошибка: недействительный тип ведомого подключения; %s."
+msgid "Error: invalid port type; %s."
+msgstr "Ошибка: недействительный тип порта; %s."
 
-#: src/nmcli/connections.c:4474
+#: src/nmcli/connections.c:4501
 #, c-format
 msgid "Error: invalid connection type; %s."
 msgstr "Ошибка: недействительный тип подключения; %s."
 
-#: src/nmcli/connections.c:4609
+#: src/nmcli/connections.c:4639
 #, c-format
 msgid "Error: bad connection type: %s"
 msgstr "Ошибка: неверный тип подключения: %s"
 
-#: src/nmcli/connections.c:4685
-msgid "Error: master is required"
-msgstr "Ошибка: требуется master"
+#: src/nmcli/connections.c:4715
+msgid "Error: controller is required"
+msgstr "Ошибка: требуется контроллер"
 
-#: src/nmcli/connections.c:4786
+#: src/nmcli/connections.c:4816
 #, c-format
 msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
 msgstr ""
 "Ошибка: «%s» не является действительным режимом мониторинга. Используйте "
 "«%s» или «%s».\n"
 
-#: src/nmcli/connections.c:4826
+#: src/nmcli/connections.c:4856
 #, c-format
 msgid "Error: 'bt-type': '%s' not valid; use [%s, %s, %s (%s), %s]."
 msgstr ""
 "Ошибка: «bt-type»: «%s» не является действительным; используйте [%s, %s, %s "
 "(%s), %s]."
 
-#: src/nmcli/connections.c:5180
+#: src/nmcli/connections.c:5210
 #, c-format
 msgid "Error: setting '%s' is mandatory and cannot be removed."
 msgstr "Ошибка: значение «%s» является обязательным и не может быть удалено."
 
-#: src/nmcli/connections.c:5196
+#: src/nmcli/connections.c:5226
 #, c-format
 msgid "Error: value for '%s' is missing."
 msgstr "Ошибка: отсутствует значение для «%s»."
 
-#: src/nmcli/connections.c:5247
-msgid "Error: <setting>.<property> argument is missing."
-msgstr "Ошибка: отсутствует аргумент <параметр>.<свойство>."
-
-#: src/nmcli/connections.c:5289
+#: src/nmcli/connections.c:5431
 msgid "Error: missing setting."
 msgstr "Ошибка: отсутствует параметр."
 
-#: src/nmcli/connections.c:5303
+#: src/nmcli/connections.c:5445
 #, c-format
 msgid "Error: invalid setting argument '%s'."
 msgstr "Ошибка: недействительный аргумент «%s» параметра."
 
-#: src/nmcli/connections.c:5334
+#: src/nmcli/connections.c:5506
+msgid "port connections cannot have IP configuration"
+msgstr "у подключений портов не может быть адреса IP"
+
+#: src/nmcli/connections.c:5514
 #, c-format
 msgid "Error: invalid or not allowed setting '%s': %s."
 msgstr "Ошибка: недействительный или недопустимый параметр «%s»: %s."
 
-#: src/nmcli/connections.c:5393 src/nmcli/connections.c:5414
+#: src/nmcli/connections.c:5569 src/nmcli/connections.c:5590
 #, c-format
 msgid "Error: '%s' is ambiguous (%s.%s or %s.%s)."
 msgstr "Ошибка: «%s» не является однозначным (%s.%s или %s.%s)."
 
-#: src/nmcli/connections.c:5438
+#: src/nmcli/connections.c:5614
 #, c-format
 msgid "Error: invalid <setting>.<property> '%s'."
 msgstr "Ошибка: недействительный <параметр>.<свойство> «%s»."
 
-#: src/nmcli/connections.c:5472 src/nmcli/devices.c:2217
+#: src/nmcli/connections.c:5647 src/nmcli/devices.c:2217
 #, c-format
 msgid "Warning: %s.\n"
 msgstr "Предупреждение: %s.\n"
 
-#: src/nmcli/connections.c:5488
+#: src/nmcli/connections.c:5663
 #, c-format
 msgid ""
 "Warning: There is another connection with the name '%1$s'. Reference the "
@@ -12807,7 +13513,7 @@ msgstr[2] ""
 "Предупреждение: есть ещё %3$u других подключений с именем '%1$s'. Ссылайтесь "
 "на подключение по его uuid '%2$s'\n"
 
-#: src/nmcli/connections.c:5510 src/nmcli/connections.c:9239
+#: src/nmcli/connections.c:5685 src/nmcli/connections.c:9455
 #, c-format
 msgid "Error: Failed to add '%s' connection: %s"
 msgstr "Ошибка: не удалось добавить подключение «%s»: %s"
@@ -12821,12 +13527,12 @@ msgstr "Ошибка: не удалось добавить подключени
 #. *
 #. * This is true for many messages that the user might parse. But this one
 #. * seems in particular interesting for a user to parse.
-#: src/nmcli/connections.c:5527
+#: src/nmcli/connections.c:5702
 #, c-format
 msgid "Connection '%s' (%s) successfully added.\n"
 msgstr "Подключение «%s» (%s) успешно добавлено.\n"
 
-#: src/nmcli/connections.c:5676
+#: src/nmcli/connections.c:5851
 msgid ""
 "You can specify this option more than once. Press <Enter> when you're done.\n"
 msgstr ""
@@ -12834,32 +13540,36 @@ msgstr ""
 "<Ввод>.\n"
 
 #. Ask for optional arguments.
-#: src/nmcli/connections.c:5787
+#: src/nmcli/connections.c:5962
 #, c-format
 msgid "There are %d optional settings for %s.\n"
 msgstr "Существует %d необязательных параметров для %s.\n"
 
-#: src/nmcli/connections.c:5789
+#: src/nmcli/connections.c:5964
 #, c-format
 msgid "Do you want to provide them? %s"
 msgstr "Хотите их указать? %s"
 
-#: src/nmcli/connections.c:5929 src/nmcli/utils.c:280
+#: src/nmcli/connections.c:6096
+msgid "Error: argument '--' can only be passed once"
+msgstr "Ошибка: аргумент «--» можно передать только один раз"
+
+#: src/nmcli/connections.c:6110 src/nmcli/utils.c:280
 #, c-format
 msgid "Error: value for '%s' argument is required."
 msgstr "Ошибка: требуется значение аргумента «%s»."
 
-#: src/nmcli/connections.c:5936
+#: src/nmcli/connections.c:6116
 #, c-format
 msgid "Error: 'save': %s."
 msgstr "Ошибка «save»: %s."
 
-#: src/nmcli/connections.c:6024 src/nmcli/connections.c:6037
+#: src/nmcli/connections.c:6220 src/nmcli/connections.c:6233
 #, c-format
 msgid "Error: '%s' argument is required."
 msgstr "Ошибка: требуется аргумент «%s»."
 
-#: src/nmcli/connections.c:6994
+#: src/nmcli/connections.c:7199
 #, c-format
 msgid "['%s' setting values]\n"
 msgstr "[значения параметра '%s']\n"
@@ -12867,7 +13577,7 @@ msgstr "[значения параметра '%s']\n"
 #. TRANSLATORS: do not translate command names and keywords before ::
 #. *              However, you should translate terms enclosed in <>.
 #.
-#: src/nmcli/connections.c:7105
+#: src/nmcli/connections.c:7310
 msgid ""
 "---[ Main menu ]---\n"
 "goto     [<setting> | <prop>]        :: go to a setting or property\n"
@@ -12904,7 +13614,7 @@ msgstr ""
 "nmcli    <параметр> <значение>                 :: конфигурация nmcli\n"
 "quit                                           :: выход из nmcli\n"
 
-#: src/nmcli/connections.c:7133
+#: src/nmcli/connections.c:7338
 msgid ""
 "goto <setting>[.<prop>] | <prop>  :: enter setting/property for editing\n"
 "\n"
@@ -12923,7 +13633,7 @@ msgstr ""
 "          nmcli connection> goto secondaries\n"
 "          nmcli> goto ipv4.addresses\n"
 
-#: src/nmcli/connections.c:7141
+#: src/nmcli/connections.c:7346
 msgid ""
 "remove <setting>[.<prop>]  :: remove setting or reset property value\n"
 "\n"
@@ -12944,7 +13654,7 @@ msgstr ""
 "Примеры: nmcli> remove wifi-sec\n"
 "          nmcli> remove eth.mtu\n"
 
-#: src/nmcli/connections.c:7148
+#: src/nmcli/connections.c:7353
 msgid ""
 "set [<setting>.<prop> <value>]  :: set property value\n"
 "\n"
@@ -12958,7 +13668,7 @@ msgstr ""
 "\n"
 "Пример: nmcli> nmcli> set con.id My connection\n"
 
-#: src/nmcli/connections.c:7153
+#: src/nmcli/connections.c:7358
 msgid ""
 "add [<setting>.<prop> <value>]  :: add property value\n"
 "\n"
@@ -12972,7 +13682,7 @@ msgstr ""
 "\n"
 "Пример: nmcli> add ipv4.addresses 192.168.1.1/24\n"
 
-#: src/nmcli/connections.c:7158
+#: src/nmcli/connections.c:7363
 msgid ""
 "describe [<setting>.<prop>]  :: describe property\n"
 "\n"
@@ -12984,7 +13694,7 @@ msgstr ""
 "Показывает описание свойства. Полный список параметров и свойств "
 "NetworkManager можно найти на справочной странице nm-settings(5).\n"
 
-#: src/nmcli/connections.c:7163
+#: src/nmcli/connections.c:7368
 msgid ""
 "print [all]  :: print setting or connection values\n"
 "\n"
@@ -12998,7 +13708,7 @@ msgstr ""
 "\n"
 "Пример: nmcli ipv4> print all\n"
 
-#: src/nmcli/connections.c:7169
+#: src/nmcli/connections.c:7374
 msgid ""
 "verify [all | fix]  :: verify setting or connection validity\n"
 "\n"
@@ -13022,7 +13732,7 @@ msgstr ""
 "          nmcli> verify fix\n"
 "          nmcli bond> verify\n"
 
-#: src/nmcli/connections.c:7179
+#: src/nmcli/connections.c:7384
 msgid ""
 "save [persistent|temporary]  :: save the connection\n"
 "\n"
@@ -13052,7 +13762,7 @@ msgstr ""
 "основе,\n"
 "необходимо удалить его профиль. \n"
 
-#: src/nmcli/connections.c:7190
+#: src/nmcli/connections.c:7395
 msgid ""
 "activate [<ifname>] [/<ap>|<nsp>]  :: activate the connection\n"
 "\n"
@@ -13072,7 +13782,7 @@ msgstr ""
 "/<ap>|<nsp> - AP (Wi-Fi) или NSP (WiMAX) (если <имя_интерфейса> не задано, в "
 "начале надо добавить /)\n"
 
-#: src/nmcli/connections.c:7198 src/nmcli/connections.c:7357
+#: src/nmcli/connections.c:7403 src/nmcli/connections.c:7562
 msgid ""
 "back  :: go to upper menu level\n"
 "\n"
@@ -13080,7 +13790,7 @@ msgstr ""
 "back  :: переход на уровень меню выше\n"
 "\n"
 
-#: src/nmcli/connections.c:7201
+#: src/nmcli/connections.c:7406
 msgid ""
 "help/? [<command>]  :: help for the nmcli commands\n"
 "\n"
@@ -13088,7 +13798,7 @@ msgstr ""
 "help/? [<команда>]  :: справка по командам nmcli\n"
 "\n"
 
-#: src/nmcli/connections.c:7204
+#: src/nmcli/connections.c:7409
 #, c-format
 msgid ""
 "nmcli [<conf-option> <value>]  :: nmcli configuration\n"
@@ -13115,7 +13825,7 @@ msgstr ""
 "          nmcli> nmcli save-confirmation no\n"
 "          nmcli> nmcli prompt-color 3\n"
 
-#: src/nmcli/connections.c:7226 src/nmcli/connections.c:7363
+#: src/nmcli/connections.c:7431 src/nmcli/connections.c:7568
 msgid ""
 "quit  :: exit nmcli\n"
 "\n"
@@ -13127,8 +13837,8 @@ msgstr ""
 "Данная команда выполняет выход из nmcli. Если изменения подключения не "
 "сохранены, будет выведен запрос о подтверждении действия.\n"
 
-#: src/nmcli/connections.c:7231 src/nmcli/connections.c:7368
-#: src/nmcli/connections.c:7760 src/nmcli/connections.c:8802
+#: src/nmcli/connections.c:7436 src/nmcli/connections.c:7573
+#: src/nmcli/connections.c:7965 src/nmcli/connections.c:9017
 #, c-format
 msgid "Unknown command: '%s'\n"
 msgstr "Неизвестная команда: «%s»\n"
@@ -13136,7 +13846,7 @@ msgstr "Неизвестная команда: «%s»\n"
 #. TRANSLATORS: do not translate command names and keywords before ::
 #. *              However, you should translate terms enclosed in <>.
 #.
-#: src/nmcli/connections.c:7296
+#: src/nmcli/connections.c:7501
 msgid ""
 "---[ Property menu ]---\n"
 "set      [<value>]               :: set new value\n"
@@ -13161,7 +13871,7 @@ msgstr ""
 "help/?   [<команда>]             :: показать справку или описание команды\n"
 "quit                             :: выход из nmcli\n"
 
-#: src/nmcli/connections.c:7320
+#: src/nmcli/connections.c:7525
 msgid ""
 "set [<value>]  :: set new value\n"
 "\n"
@@ -13171,7 +13881,7 @@ msgstr ""
 "\n"
 "Эта команда устанавливает новое <значение> данного свойства.\n"
 
-#: src/nmcli/connections.c:7324
+#: src/nmcli/connections.c:7529
 msgid ""
 "add [<value>]  :: append new value to the property\n"
 "\n"
@@ -13185,7 +13895,7 @@ msgstr ""
 "контейнер. Если свойство имеет единственное значение, оно будет заменено (по "
 "аналогии с «set»).\n"
 
-#: src/nmcli/connections.c:7330
+#: src/nmcli/connections.c:7535
 msgid ""
 "change  :: change current value\n"
 "\n"
@@ -13195,7 +13905,7 @@ msgstr ""
 "\n"
 "Показывает значение и позволяет его отредактировать.\n"
 
-#: src/nmcli/connections.c:7335
+#: src/nmcli/connections.c:7540
 msgid ""
 "remove [<value>|<index>|<option name>]  :: delete the value\n"
 "\n"
@@ -13228,7 +13938,7 @@ msgstr ""
 "          nmcli ipv4.dns> remove 2\n"
 "          nmcli bond.options> remove downdelay\n"
 
-#: src/nmcli/connections.c:7346
+#: src/nmcli/connections.c:7551
 msgid ""
 "describe  :: describe property\n"
 "\n"
@@ -13240,7 +13950,7 @@ msgstr ""
 "Возвращает описание свойства. Полный список параметров и их значений можно "
 "найти на справочной странице nm-settings(5).\n"
 
-#: src/nmcli/connections.c:7351
+#: src/nmcli/connections.c:7556
 msgid ""
 "print [property|setting|connection]  :: print property (setting, connection) "
 "value(s)\n"
@@ -13254,7 +13964,7 @@ msgstr ""
 "Показывает значение свойства. Если предоставить аргумент, то также можно "
 "просмотреть значения всех свойств или подключения целиком.\n"
 
-#: src/nmcli/connections.c:7360
+#: src/nmcli/connections.c:7565
 msgid ""
 "help/? [<command>]  :: help for nmcli commands\n"
 "\n"
@@ -13262,22 +13972,22 @@ msgstr ""
 "help/? [<команда>]  :: справка по командам nmcli\n"
 "\n"
 
-#: src/nmcli/connections.c:7452
+#: src/nmcli/connections.c:7657
 msgid "Error: Connection activation failed.\n"
 msgstr "Ошибка. Сбой активации подключения.\n"
 
 #. TRANSLATORS: status line in nmcli connection editor
-#: src/nmcli/connections.c:7550
+#: src/nmcli/connections.c:7755
 #, c-format
 msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
 msgstr "[Тип: %s | Имя: %s | UUID: %s | «Грязные»: %s | Временные.: %s ]\n"
 
-#: src/nmcli/connections.c:7588
+#: src/nmcli/connections.c:7793
 #, c-format
 msgid "The connection is not saved. Do you really want to quit? %s"
 msgstr "Подключение не сохранено. Точно выйти? %s"
 
-#: src/nmcli/connections.c:7632
+#: src/nmcli/connections.c:7837
 msgid ""
 "The connection profile has been removed from another client. You may type "
 "'save' in the main menu to restore it.\n"
@@ -13285,60 +13995,60 @@ msgstr ""
 "Профиль подключения был удалён из другого клиента. При желании его "
 "восстановить, введите «save» в главном меню.\n"
 
-#: src/nmcli/connections.c:7664 src/nmcli/connections.c:8060
-#: src/nmcli/connections.c:8133
+#: src/nmcli/connections.c:7869 src/nmcli/connections.c:8265
+#: src/nmcli/connections.c:8339
 #, c-format
 msgid "Allowed values for '%s' property: %s\n"
 msgstr "Допускаемые значения свойства «%s»: %s\n"
 
-#: src/nmcli/connections.c:7666 src/nmcli/connections.c:8065
-#: src/nmcli/connections.c:8137
+#: src/nmcli/connections.c:7871 src/nmcli/connections.c:8270
+#: src/nmcli/connections.c:8343
 #, c-format
 msgid "Enter '%s' value: "
 msgstr "Введите значение «%s»: "
 
-#: src/nmcli/connections.c:7679 src/nmcli/connections.c:7698
-#: src/nmcli/connections.c:8073 src/nmcli/connections.c:8148
+#: src/nmcli/connections.c:7884 src/nmcli/connections.c:7903
+#: src/nmcli/connections.c:8278 src/nmcli/connections.c:8354
 #, c-format
 msgid "Error: failed to set '%s' property: %s\n"
 msgstr "Ошибка. Не удалось установить свойство «%s»: %s\n"
 
-#: src/nmcli/connections.c:7690
+#: src/nmcli/connections.c:7895
 #, c-format
 msgid "Edit '%s' value: "
 msgstr "Измените значение «%s»: "
 
-#: src/nmcli/connections.c:7713 src/nmcli/settings.c:443
+#: src/nmcli/connections.c:7918 src/nmcli/settings.c:444
 #, c-format
 msgid "Error: %s\n"
 msgstr "Ошибка: %s\n"
 
-#: src/nmcli/connections.c:7732
+#: src/nmcli/connections.c:7937
 #, c-format
 msgid "Unknown command argument: '%s'\n"
 msgstr "Неизвестный аргумент команды: «%s»\n"
 
-#: src/nmcli/connections.c:7827
+#: src/nmcli/connections.c:8032
 #, c-format
 msgid "Available settings: %s\n"
 msgstr "Доступные параметры: %s\n"
 
-#: src/nmcli/connections.c:7838
+#: src/nmcli/connections.c:8043
 #, c-format
 msgid "Error: invalid setting name; %s\n"
 msgstr "Ошибка. Недействительное имя параметра: %s\n"
 
-#: src/nmcli/connections.c:7855
+#: src/nmcli/connections.c:8060
 #, c-format
 msgid "Available properties: %s\n"
 msgstr "Доступные свойства: %s\n"
 
-#: src/nmcli/connections.c:7863
+#: src/nmcli/connections.c:8068
 #, c-format
 msgid "Error: property %s\n"
 msgstr "Ошибка: свойство %s\n"
 
-#: src/nmcli/connections.c:7908
+#: src/nmcli/connections.c:8113
 #, c-format
 msgid ""
 "Saving the connection with 'autoconnect=yes'. That might result in an "
@@ -13349,12 +14059,12 @@ msgstr ""
 "немедленной активации подключения.\n"
 "Точно сохранить? %s"
 
-#: src/nmcli/connections.c:7994
+#: src/nmcli/connections.c:8199
 #, c-format
 msgid "You may edit the following settings: %s\n"
 msgstr "Возможно изменить следующие параметры: %s\n"
 
-#: src/nmcli/connections.c:8022
+#: src/nmcli/connections.c:8227
 msgid ""
 "The connection profile has been removed from another client. You may type "
 "'save' to restore it.\n"
@@ -13362,219 +14072,218 @@ msgstr ""
 "Профиль подключения был удалён из другого клиента. При желании его "
 "восстановить, введите «save».\n"
 
-#: src/nmcli/connections.c:8079 src/nmcli/connections.c:8365
-#: src/nmcli/connections.c:8400
+#: src/nmcli/connections.c:8284 src/nmcli/connections.c:8573
+#: src/nmcli/connections.c:8609
 #, c-format
 msgid "Error: no setting selected; valid are [%s]\n"
 msgstr "Ошибка: нет выбранных параметров; действительные: [%s]\n"
 
-#: src/nmcli/connections.c:8081
+#: src/nmcli/connections.c:8286
 msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
 msgstr ""
 "сначала используйте «goto <параметр>», или «set <параметр>.<свойство>»\n"
 
-#: src/nmcli/connections.c:8101 src/nmcli/connections.c:8281
-#: src/nmcli/connections.c:8389
+#: src/nmcli/connections.c:8307 src/nmcli/connections.c:8489
+#: src/nmcli/connections.c:8598
 #, c-format
 msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
 msgstr ""
 "Ошибка: недействительный аргумент «%s» параметра; действительные: [%s]\n"
 
-#: src/nmcli/connections.c:8111
+#: src/nmcli/connections.c:8317
 #, c-format
 msgid "Error: missing setting for '%s' property\n"
 msgstr "Ошибка: отсутствует параметр свойства «%s»\n"
 
-#: src/nmcli/connections.c:8118
+#: src/nmcli/connections.c:8324
 #, c-format
 msgid "Error: invalid property: %s\n"
 msgstr "Ошибка. Недействительное свойство: %s\n"
 
-#: src/nmcli/connections.c:8181
+#: src/nmcli/connections.c:8387
 #, c-format
 msgid "Error: unknown setting '%s'\n"
 msgstr "Ошибка: неизвестный параметр: %s\n"
 
-#: src/nmcli/connections.c:8207
+#: src/nmcli/connections.c:8413
 #, c-format
 msgid "You may edit the following properties: %s\n"
 msgstr "Возможно изменить следующие свойства: %s\n"
 
-#: src/nmcli/connections.c:8253 src/nmcli/connections.c:8315
+#: src/nmcli/connections.c:8459 src/nmcli/connections.c:8523
 #, c-format
 msgid "Error: failed to remove value of '%s': %s\n"
 msgstr "Ошибка. Не удалось удалить значение «%s»: %s\n"
 
-#: src/nmcli/connections.c:8259
+#: src/nmcli/connections.c:8465
 #, c-format
 msgid "Error: no argument given; valid are [%s]\n"
 msgstr "Ошибка: не предоставлено аргументов; действительные: [%s]\n"
 
-#: src/nmcli/connections.c:8278
+#: src/nmcli/connections.c:8485
 #, c-format
 msgid "Setting '%s' is not present in the connection.\n"
 msgstr "Параметр '%s' отсутствует в подключении.\n"
 
-#: src/nmcli/connections.c:8341
+#: src/nmcli/connections.c:8549
 #, c-format
 msgid "Error: %s properties, nor it is a setting name.\n"
 msgstr "Ошибка. %s не является именем параметра или свойства.\n"
 
-#: src/nmcli/connections.c:8368 src/nmcli/connections.c:8403
+#: src/nmcli/connections.c:8576 src/nmcli/connections.c:8612
 msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
 msgstr "используйте «goto <параметр>» или «describe <параметр>.<свойство>»\n"
 
-#: src/nmcli/connections.c:8426
+#: src/nmcli/connections.c:8635
 #, c-format
 msgid "Error: invalid property: %s, neither a valid setting name.\n"
 msgstr ""
 "Ошибка: недействительное свойство %s и недействительное имя параметра.\n"
 
-#: src/nmcli/connections.c:8456
+#: src/nmcli/connections.c:8665
 #, c-format
 msgid "Error: unknown setting: '%s'\n"
 msgstr "Ошибка. Неизвестный параметр: %s\n"
 
-#: src/nmcli/connections.c:8461
+#: src/nmcli/connections.c:8670
 #, c-format
 msgid "Error: '%s' setting not present in the connection\n"
 msgstr "Ошибка: в подключении отсутствует параметр «%s»\n"
 
-#: src/nmcli/connections.c:8493
+#: src/nmcli/connections.c:8702
 #, c-format
 msgid "Error: invalid property: %s%s\n"
 msgstr "Ошибка.Недействительное свойство: %s%s\n"
 
-#: src/nmcli/connections.c:8495
+#: src/nmcli/connections.c:8704
 msgid ", neither a valid setting name"
 msgstr "и не является действительным именем параметра"
 
-#: src/nmcli/connections.c:8511
+#: src/nmcli/connections.c:8720
 #, c-format
 msgid "Invalid verify option: %s\n"
 msgstr "Недействительный параметр проверки подлинности: %s\n"
 
-#: src/nmcli/connections.c:8519
+#: src/nmcli/connections.c:8728
 #, c-format
 msgid "Verify setting '%s': %s\n"
 msgstr "Проверьте подлинность параметра «%s»: %s\n"
 
-#: src/nmcli/connections.c:8534
+#: src/nmcli/connections.c:8745 src/nmcli/connections.c:8747
 #, c-format
 msgid "Verify connection: %s\n"
 msgstr "Проверьте подлинность подключения: %s\n"
 
-#: src/nmcli/connections.c:8536
+#: src/nmcli/connections.c:8751
 msgid "The error cannot be fixed automatically.\n"
 msgstr "Эта ошибка не может быть исправлена автоматически.\n"
 
-#: src/nmcli/connections.c:8556
+#: src/nmcli/connections.c:8771
 #, c-format
 msgid "Error: invalid argument '%s'\n"
 msgstr "Ошибка: недействительный аргумент «%s»\n"
 
-#: src/nmcli/connections.c:8613
+#: src/nmcli/connections.c:8828
 #, c-format
 msgid "Error: Failed to save '%s' (%s) connection: %s\n"
 msgstr "Ошибка. Не удалось сохранить подключение «%s» (%s): %s\n"
 
-#: src/nmcli/connections.c:8619
+#: src/nmcli/connections.c:8834
 #, c-format
 msgid "Error: Timeout saving '%s' (%s) connection\n"
 msgstr "Ошибка: истекло время ожидания сохранения подключения «%s» (%s)\n"
 
-#: src/nmcli/connections.c:8623
+#: src/nmcli/connections.c:8838
 #, c-format
 msgid "Connection '%s' (%s) successfully saved.\n"
 msgstr "Подключение «%s» (%s) успешно сохранено.\n"
 
-#: src/nmcli/connections.c:8624
+#: src/nmcli/connections.c:8839
 #, c-format
 msgid "Connection '%s' (%s) successfully updated.\n"
 msgstr "Подключение «%s» (%s) успешно обновлено.\n"
 
-#: src/nmcli/connections.c:8658
+#: src/nmcli/connections.c:8873
 #, c-format
 msgid "Error: connection verification failed: %s\n"
 msgstr "Ошибка: сбой проверки подлинности подключения: %s\n"
 
-#: src/nmcli/connections.c:8659
+#: src/nmcli/connections.c:8874
 msgid "(unknown error)"
 msgstr "(неизвестная ошибка)"
 
-#: src/nmcli/connections.c:8660
+#: src/nmcli/connections.c:8875
 msgid "You may try running 'verify fix' to fix errors.\n"
 msgstr "Для исправления ошибок можно попробовать выполнить «verify fix».\n"
 
 #. TRANSLATORS: do not translate 'save', leave it as it is
-#: src/nmcli/connections.c:8683
+#: src/nmcli/connections.c:8898
 msgid "Error: connection is not saved. Type 'save' first.\n"
 msgstr "Ошибка: подключение не сохранено. Сначала введите «save».\n"
 
-#: src/nmcli/connections.c:8687
+#: src/nmcli/connections.c:8902
 #, c-format
 msgid "Error: connection is not valid: %s\n"
 msgstr "Ошибка: недействительное подключение: %s\n"
 
-#: src/nmcli/connections.c:8703
+#: src/nmcli/connections.c:8918
 #, c-format
 msgid "Error: Cannot activate connection: %s.\n"
 msgstr "Ошибка: не удалось активировать подключение: %s\n"
 
-#: src/nmcli/connections.c:8712
+#: src/nmcli/connections.c:8927
 #, c-format
 msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
 msgstr "Ошибка: не удалось активировать подключение «%s» (%s): %s\n"
 
-#: src/nmcli/connections.c:8719
+#: src/nmcli/connections.c:8934
 msgid "Monitoring connection activation (press any key to continue)\n"
 msgstr ""
 "Активация мониторинга подключения (нажмите любую клавишу для продолжения)\n"
 
-#: src/nmcli/connections.c:8754
+#: src/nmcli/connections.c:8969
 #, c-format
 msgid "Error: status-line: %s\n"
 msgstr "Ошибка: status-line: %s\n"
 
-#: src/nmcli/connections.c:8762
+#: src/nmcli/connections.c:8977
 #, c-format
 msgid "Error: save-confirmation: %s\n"
 msgstr "Ошибка: save-confirmation: %s\n"
 
-#: src/nmcli/connections.c:8770
+#: src/nmcli/connections.c:8985
 #, c-format
 msgid "Error: show-secrets: %s\n"
 msgstr "Ошибка: show-secrets: %s\n"
 
-#: src/nmcli/connections.c:8778
+#: src/nmcli/connections.c:8993
 msgid "Current nmcli configuration:\n"
 msgstr "Текущая конфигурация nmcli:\n"
 
-#: src/nmcli/connections.c:8786
+#: src/nmcli/connections.c:9001
 #, c-format
 msgid "Invalid configuration option '%s'; allowed [%s]\n"
 msgstr "Недействительный параметр конфигурации «%s». Допускается: [%s]\n"
 
-#: src/nmcli/connections.c:9018
-#, c-format
+#: src/nmcli/connections.c:9233
 msgid "Error: only one of 'id', 'filename', uuid, or 'path' can be provided."
 msgstr ""
 "Ошибка: можно предоставить только одно значение из следующих: «id», "
 "«filename», uuid, «path»."
 
-#: src/nmcli/connections.c:9033
+#: src/nmcli/connections.c:9248
 #, c-format
 msgid "Error: Unknown connection '%s'."
 msgstr "Ошибка: неизвестное подключение: «%s»."
 
-#: src/nmcli/connections.c:9050
+#: src/nmcli/connections.c:9266
 #, c-format
 msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
 msgstr ""
 "Предупреждение: идёт редактирование существующего подключения «%s»; аргумент "
 "«type» игнорируется.\n"
 
-#: src/nmcli/connections.c:9054
+#: src/nmcli/connections.c:9270
 #, c-format
 msgid ""
 "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -13582,210 +14291,202 @@ msgstr ""
 "Предупреждение: идёт редактирование существующего подключения «%s»; аргумент "
 "«con-name» игнорируется.\n"
 
-#: src/nmcli/connections.c:9081
+#: src/nmcli/connections.c:9297
 #, c-format
 msgid "Valid connection types: %s\n"
 msgstr "Действительные типы подключений: %s\n"
 
-#: src/nmcli/connections.c:9083
+#: src/nmcli/connections.c:9299
 #, c-format
 msgid "Error: invalid connection type; %s\n"
 msgstr "Ошибка: недействительный тип подключения: %s.\n"
 
-#: src/nmcli/connections.c:9122
+#: src/nmcli/connections.c:9338
 msgid "===| nmcli interactive connection editor |==="
 msgstr "===| интерактивный редактор подключений nmcli |==="
 
-#: src/nmcli/connections.c:9125
+#: src/nmcli/connections.c:9341
 #, c-format
 msgid "Editing existing '%s' connection: '%s'"
 msgstr "Редактируется существующее подключение «%s»: «%s»"
 
-#: src/nmcli/connections.c:9127
+#: src/nmcli/connections.c:9343
 #, c-format
 msgid "Adding a new '%s' connection"
 msgstr "Добавление нового подключения «%s»"
 
 #. TRANSLATORS: do not translate 'help', leave it as it is
-#: src/nmcli/connections.c:9130
+#: src/nmcli/connections.c:9346
 msgid "Type 'help' or '?' for available commands."
 msgstr "Для просмотра доступных команд введите «help» или «?»."
 
 #. TRANSLATORS: do not translate 'print', leave it as it is
-#: src/nmcli/connections.c:9133
+#: src/nmcli/connections.c:9349
 msgid "Type 'print' to show all the connection properties."
 msgstr "Чтобы просмотреть все свойства подключения введите «print»."
 
 #. TRANSLATORS: do not translate 'describe', leave it as it is
-#: src/nmcli/connections.c:9136
+#: src/nmcli/connections.c:9352
 msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
 msgstr ""
 "Для просмотра описания свойства введите «describe [<параметр>.<свойство>]»."
 
-#: src/nmcli/connections.c:9163
+#: src/nmcli/connections.c:9379
 #, c-format
 msgid "Error: Failed to modify connection '%s': %s"
 msgstr "Ошибка: не удалось изменить подключение «%s»: %s"
 
-#: src/nmcli/connections.c:9171
+#: src/nmcli/connections.c:9387
 #, c-format
 msgid "Connection '%s' (%s) successfully modified.\n"
 msgstr "Подключение «%s» (%s) успешно изменено.\n"
 
-#: src/nmcli/connections.c:9244
+#: src/nmcli/connections.c:9460
 #, c-format
 msgid "%s (%s) cloned as %s (%s).\n"
 msgstr "%s (%s) было клонировано в %s (%s).\n"
 
-#: src/nmcli/connections.c:9302
+#: src/nmcli/connections.c:9518
 msgid "New connection name: "
 msgstr "Название нового подключения: "
 
-#: src/nmcli/connections.c:9304
-#, c-format
+#: src/nmcli/connections.c:9520
 msgid "Error: <new name> argument is missing."
 msgstr "Ошибка: отсутствует аргумент <новое имя>."
 
-#: src/nmcli/connections.c:9310 src/nmcli/connections.c:9838
+#: src/nmcli/connections.c:9526 src/nmcli/connections.c:10054
 #, c-format
 msgid "Error: unknown extra argument: '%s'."
 msgstr "Ошибка: неизвестный дополнительный аргумент: «%s»."
 
-#: src/nmcli/connections.c:9344
-#, c-format
+#: src/nmcli/connections.c:9560
 msgid "Error: not all connections deleted."
 msgstr "Ошибка: не все подключения были удалены."
 
-#: src/nmcli/connections.c:9345
+#: src/nmcli/connections.c:9561
 #, c-format
 msgid "Error: Connection deletion failed: %s\n"
 msgstr "Ошибка: сбой удаления подключения: %s\n"
 
-#: src/nmcli/connections.c:9400 src/nmcli/connections.c:9529
-#: src/nmcli/connections.c:9991
+#: src/nmcli/connections.c:9616 src/nmcli/connections.c:9745
+#: src/nmcli/connections.c:10207
 #, c-format
 msgid "Error: %s.\n"
 msgstr "Ошибка: %s.\n"
 
-#: src/nmcli/connections.c:9401 src/nmcli/connections.c:9530
-#: src/nmcli/connections.c:9992
-#, c-format
+#: src/nmcli/connections.c:9617 src/nmcli/connections.c:9746
+#: src/nmcli/connections.c:10208
 msgid "Error: not all connections found."
 msgstr "Ошибка: найдены не все подключения."
 
-#: src/nmcli/connections.c:9462
+#: src/nmcli/connections.c:9678
 #, c-format
 msgid "Error: cannot delete unknown connection(s): %s."
 msgstr "Ошибка: невозможно удалить неизвестные подключения: %s."
 
-#: src/nmcli/connections.c:9470
+#: src/nmcli/connections.c:9686
 #, c-format
 msgid "%s: connection profile changed\n"
 msgstr "%s: профиль подключения изменился\n"
 
-#: src/nmcli/connections.c:9496
+#: src/nmcli/connections.c:9712
 #, c-format
 msgid "%s: connection profile created\n"
 msgstr "%s: профиль подключения создан\n"
 
-#: src/nmcli/connections.c:9505
+#: src/nmcli/connections.c:9721
 #, c-format
 msgid "%s: connection profile removed\n"
 msgstr "%s: профиль подключения удалён\n"
 
-#: src/nmcli/connections.c:9573
+#: src/nmcli/connections.c:9789
 #, c-format
 msgid "Error: failed to reload connections: %s."
 msgstr "Ошибка: не удалось перезагрузить подключения: %s."
 
-#: src/nmcli/connections.c:9645
+#: src/nmcli/connections.c:9861
 #, c-format
 msgid "Error: failed to load connection: %s."
 msgstr "Ошибка: не удалось загрузить подключение: %s."
 
-#: src/nmcli/connections.c:9653
+#: src/nmcli/connections.c:9869
 #, c-format
 msgid "Could not load file '%s'\n"
 msgstr "Не удалось загрузить файл «%s»\n"
 
-#: src/nmcli/connections.c:9657
+#: src/nmcli/connections.c:9873
 msgid "File to import: "
 msgstr "Импортируемый файл: "
 
-#: src/nmcli/connections.c:9688
-#, c-format
+#: src/nmcli/connections.c:9904
 msgid "Error: No arguments provided."
 msgstr "Ошибка: не указаны аргументы."
 
-#: src/nmcli/connections.c:9743
-#, c-format
+#: src/nmcli/connections.c:9959
 msgid "Error: 'type' argument is required."
 msgstr "Ошибка: требуется аргумент «type»."
 
-#: src/nmcli/connections.c:9748
-#, c-format
+#: src/nmcli/connections.c:9964
 msgid "Error: 'file' argument is required."
 msgstr "Ошибка: требуется аргумент «file»."
 
-#: src/nmcli/connections.c:9758
+#: src/nmcli/connections.c:9974
 #, c-format
 msgid "Error: failed to find VPN plugin for %s."
 msgstr "Ошибка: не удалось найти модуль VPN для %s."
 
-#: src/nmcli/connections.c:9767 src/nmcli/connections.c:9859
+#: src/nmcli/connections.c:9983 src/nmcli/connections.c:10075
 #, c-format
 msgid "Error: failed to load VPN plugin: %s."
 msgstr "Ошибка: не удалось загрузить модуль VPN: %s."
 
-#: src/nmcli/connections.c:9778
+#: src/nmcli/connections.c:9994
 #, c-format
 msgid "Error: failed to import '%s': %s."
 msgstr "Ошибка: сбой импорта «%s»: %s."
 
-#: src/nmcli/connections.c:9844
+#: src/nmcli/connections.c:10060
 msgid "Output file name: "
 msgstr "Имя файла вывода: "
 
-#: src/nmcli/connections.c:9849
-#, c-format
+#: src/nmcli/connections.c:10065
 msgid "Error: the connection is not VPN."
 msgstr "Ошибка: подключение не является подключением VPN."
 
-#: src/nmcli/connections.c:9873
+#: src/nmcli/connections.c:10089
 #, c-format
 msgid "Error: failed to create temporary file %s."
 msgstr "Ошибка: не удалось создать временный файл %s."
 
-#: src/nmcli/connections.c:9883
+#: src/nmcli/connections.c:10099
 #, c-format
 msgid "Error: failed to export '%s': %s."
 msgstr "Ошибка: не удалось экспортировать «%s»: %s."
 
-#: src/nmcli/connections.c:9897
+#: src/nmcli/connections.c:10113
 #, c-format
 msgid "Error: failed to read temporary file '%s': %s."
 msgstr "Ошибка: не удалось прочитать временный файл «%s»: %s."
 
-#: src/nmcli/connections.c:9921
-#, c-format
+#: src/nmcli/connections.c:10137
 msgid "Error: not all connections migrated."
 msgstr "Ошибка: не все подключения мигрировали."
 
-#: src/nmcli/connections.c:9922
+#: src/nmcli/connections.c:10138
 #, c-format
 msgid "Error: Connection migration failed: %s\n"
 msgstr "Ошибка: сбой миграции подключения: %s\n"
 
-#: src/nmcli/connections.c:9926
+#: src/nmcli/connections.c:10142
 #, c-format
 msgid "Connection '%s' (%s) successfully migrated.\n"
 msgstr "Миграция подключения '%s' (%s) выполнена успешно.\n"
 
-#: src/nmcli/connections.c:9958
+#: src/nmcli/connections.c:10174
 msgid "'--plugin' argument is missing"
 msgstr "отсутствует аргумент «--plugin»"
 
-#: src/nmcli/connections.c:10054
+#: src/nmcli/connections.c:10270
 #, c-format
 msgid "Error: cannot migrate unknown connection(s): %s."
 msgstr "Ошибка: миграция неизвестных подключений невозможна: %s."
@@ -14262,7 +14963,6 @@ msgstr ""
 "\n"
 
 #: src/nmcli/devices.c:1162
-#, c-format
 msgid "Error: No interface specified."
 msgstr "Ошибка: не указан интерфейс."
 
@@ -14277,7 +14977,6 @@ msgid "Error: Device '%s' not found.\n"
 msgstr "Ошибка: устройство «%s» не обнаружено.\n"
 
 #: src/nmcli/devices.c:1196 src/nmcli/devices.c:5239
-#, c-format
 msgid "Error: not all devices found."
 msgstr "Ошибка: найдены не все устройства."
 
@@ -14403,7 +15102,6 @@ msgstr ""
 "Ошибка: сбой чтения применённого подключения на устройстве «%s» (%s): %s"
 
 #: src/nmcli/devices.c:2664
-#, c-format
 msgid "Error: not all devices disconnected."
 msgstr "Ошибка: не все устройства отключены."
 
@@ -14413,7 +15111,6 @@ msgid "Error: Device '%s' (%s) disconnecting failed: %s\n"
 msgstr "Ошибка: сбой отключения устройства '%s' (%s): %s\n"
 
 #: src/nmcli/devices.c:2742
-#, c-format
 msgid "Error: not all devices deleted."
 msgstr "Ошибка: удалены не все устройства."
 
@@ -14423,7 +15120,6 @@ msgid "Error: Device '%s' (%s) deletion failed: %s\n"
 msgstr "Ошибка: сбой удаления устройства «%s» (%s): %s\n"
 
 #: src/nmcli/devices.c:2821
-#, c-format
 msgid "Error: No property specified."
 msgstr "Ошибка: свойство не указано."
 
@@ -14509,7 +15205,6 @@ msgid "SSID or BSSID: "
 msgstr "SSID или BSSID: "
 
 #: src/nmcli/devices.c:3703
-#, c-format
 msgid "Error: SSID or BSSID are missing."
 msgstr "Ошибка: отсутствует SSID или BSSID."
 
@@ -14545,7 +15240,6 @@ msgstr "Ошибка: параметр «%s» не является ни SSID, 
 
 #: src/nmcli/devices.c:3873 src/nmcli/devices.c:4487 src/nmcli/devices.c:4622
 #: src/nmcli/devices.c:4854
-#, c-format
 msgid "Error: No Wi-Fi device found."
 msgstr "Ошибка: устройство Wi-Fi не найдено."
 
@@ -14595,7 +15289,6 @@ msgid "Hotspot password: %s\n"
 msgstr "Пароль хот-спота: %s\n"
 
 #: src/nmcli/devices.c:4400
-#, c-format
 msgid "Error: ssid is too long."
 msgstr "Ошибка: слишком длинный SSID."
 
@@ -14607,7 +15300,6 @@ msgstr ""
 "или «bg»."
 
 #: src/nmcli/devices.c:4462
-#, c-format
 msgid "Error: channel requires band too."
 msgstr "Ошибка: для канала тоже необходимо определить диапазон."
 
@@ -14651,7 +15343,6 @@ msgid "Error: 'device lldp list': %s"
 msgstr "Ошибка: «device lldp list»: %s"
 
 #: src/nmcli/devices.c:5096
-#, c-format
 msgid "Checkpoint was removed."
 msgstr "Снимок состояния был удалён."
 
@@ -14679,13 +15370,12 @@ msgstr "Ошибка: не удалось создать снимок состо
 msgid "Error: %s"
 msgstr "Ошибка: %s"
 
-#: src/nmcli/devices.c:5220 src/nmcli/nmcli.c:888
+#: src/nmcli/devices.c:5220 src/nmcli/nmcli.c:890
 #, c-format
 msgid "Error: '%s' is not a valid timeout."
 msgstr "Ошибка: «%s» не является действительным истечением времени ожидания."
 
 #: src/nmcli/devices.c:5247
-#, c-format
 msgid "Error: Expected a command to run after '--'"
 msgstr "Ошибка: после «--» ожидалась команда для выполнения"
 
@@ -15074,7 +15764,6 @@ msgstr "Ошибка: допускаются только следующие п
 
 #. NetworkManager quit while we were waiting.
 #: src/nmcli/general.c:562 src/nmtui/nmtui.c:243
-#, c-format
 msgid "NetworkManager is not running."
 msgstr "NetworkManager не запущен."
 
@@ -15257,11 +15946,11 @@ msgid "mtu"
 msgstr "mtu"
 
 #: src/nmcli/general.c:1429
-msgid "master"
-msgstr "основное"
+msgid "controller"
+msgstr "контроллер"
 
-#: src/nmcli/general.c:1433 src/nmtui/nm-editor-utils.c:255
-#: src/nmtui/nmt-connect-connection-list.c:393
+#: src/nmcli/general.c:1433 src/nmtui/nm-editor-utils.c:263
+#: src/nmtui/nmt-connect-connection-list.c:394
 msgid "VPN"
 msgstr "VPN"
 
@@ -15309,11 +15998,7 @@ msgstr ""
 msgid "Error: 'monitor' command '%s' is not valid."
 msgstr "Ошибка: команда «monitor» не является действительной: «%s»."
 
-# https://manpages.org/nmcli
-#  -e | --escape {yes | no}
-#     Whether to escape : and \ characters in terse tabular mode. The escape character is \.
-# ЮДр.
-#: src/nmcli/nmcli.c:244
+#: src/nmcli/nmcli.c:246
 msgid ""
 "Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }\n"
 "\n"
@@ -15374,77 +16059,73 @@ msgstr ""
 "  m[onitor]       мониторинг изменений в NetworkManager\n"
 "\n"
 
-#: src/nmcli/nmcli.c:316
+#: src/nmcli/nmcli.c:318
 #, c-format
 msgid "Error: missing argument for '%s' option."
 msgstr "Ошибка: отсутствует аргумент параметра «%s»."
 
-#: src/nmcli/nmcli.c:633
+#: src/nmcli/nmcli.c:635
 #, c-format
 msgid "Unexpected end of file following '%s'\n"
 msgstr "Неожиданный конец файла после «%s»\n"
 
-#: src/nmcli/nmcli.c:640
+#: src/nmcli/nmcli.c:642
 #, c-format
 msgid "Expected whitespace following '%s'\n"
 msgstr "После «%s» ожидался пробел\n"
 
-#: src/nmcli/nmcli.c:651
+#: src/nmcli/nmcli.c:653
 #, c-format
 msgid "Expected a value for '%s'\n"
 msgstr "Для «%s» ожидалось значение\n"
 
-#: src/nmcli/nmcli.c:667
+#: src/nmcli/nmcli.c:669
 #, c-format
 msgid "Expected a line break following '%s'\n"
 msgstr "После «%s» ожидался разрыв строки\n"
 
-#: src/nmcli/nmcli.c:795
-#, c-format
+#: src/nmcli/nmcli.c:797
 msgid "Error: Option '--terse' is specified the second time."
 msgstr "Ошибка: параметр «--terse» указан второй раз."
 
-#: src/nmcli/nmcli.c:801
-#, c-format
+#: src/nmcli/nmcli.c:803
 msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
 msgstr "Ошибка: параметры «--terse» и «--pretty» являются взаимоисключаемыми."
 
-#: src/nmcli/nmcli.c:809
-#, c-format
+#: src/nmcli/nmcli.c:811
 msgid "Error: Option '--pretty' is specified the second time."
 msgstr "Ошибка: параметр «--pretty» указан второй раз."
 
-#: src/nmcli/nmcli.c:815
-#, c-format
+#: src/nmcli/nmcli.c:817
 msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
 msgstr "Ошибка: параметры «--pretty» и «--terse» являются взаимоисключаемыми."
 
-#: src/nmcli/nmcli.c:830
+#: src/nmcli/nmcli.c:832
 #, c-format
 msgid "Error: '%s' is not a valid argument for '%s' option."
 msgstr "Ошибка: «%s» не является действительным аргументом для параметра «%s»."
 
-#: src/nmcli/nmcli.c:847 src/nmcli/nmcli.c:862
+#: src/nmcli/nmcli.c:849 src/nmcli/nmcli.c:864
 #, c-format
 msgid "Error: '%s' is not valid argument for '%s' option."
 msgstr "Ошибка: «%s» не является действительным аргументом для параметра «%s»."
 
-#: src/nmcli/nmcli.c:895
+#: src/nmcli/nmcli.c:897
 #, c-format
 msgid "nmcli tool, version %s\n"
 msgstr "утилита nmcli, версия %s\n"
 
-#: src/nmcli/nmcli.c:904
+#: src/nmcli/nmcli.c:906
 #, c-format
 msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
 msgstr "Ошибка: неизвестный параметр «%s». Попробуйте выполнить «nmcli -help»."
 
-#: src/nmcli/nmcli.c:962 src/nmcli/nmcli.c:971
+#: src/nmcli/nmcli.c:964 src/nmcli/nmcli.c:973
 #, c-format
 msgid "Error: nmcli terminated by signal %s (%d)"
 msgstr "Ошибка: nmcli завершён сигналом %s (%d)"
 
-#: src/nmcli/nmcli.c:1038
+#: src/nmcli/nmcli.c:1040
 msgid "Success"
 msgstr "Успешно"
 
@@ -15468,7 +16149,7 @@ msgstr "Нужно ли также присвоить «%s» значение «
 msgid "Do you also want to clear '%s'? [yes]: "
 msgstr "Нужно ли также очистить «%s»? [yes]: "
 
-#: src/nmcli/settings.c:249
+#: src/nmcli/settings.c:250
 #, c-format
 msgid ""
 "Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
@@ -15476,57 +16157,57 @@ msgstr ""
 "Предупреждение: для %s.%s настроено значение «%s», но в режиме "
 "инфраструктуры оно будет игнорироваться \n"
 
-#: src/nmcli/settings.c:269
+#: src/nmcli/settings.c:270
 #, c-format
 msgid "Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"
 msgstr ""
 "Предупреждение: настройка параметра %s.%s требует удаления параметров ipv4 и "
 "ipv6\n"
 
-#: src/nmcli/settings.c:272
+#: src/nmcli/settings.c:273
 msgid "Do you want to remove them? [yes] "
 msgstr "Хотите их удалить? [yes] "
 
-#: src/nmcli/settings.c:379
+#: src/nmcli/settings.c:380
 #, c-format
 msgid "Warning: %s is not an UUID of any existing connection profile\n"
 msgstr ""
 "Предупреждение: %s не является идентификатором UUID ни одного из "
 "существующих профилей подключений\n"
 
-#: src/nmcli/settings.c:384 src/nmcli/settings.c:397
+#: src/nmcli/settings.c:385 src/nmcli/settings.c:398
 #, c-format
 msgid "'%s' is not a VPN connection profile"
 msgstr "«%s» не является профилем подключения VPN"
 
-#: src/nmcli/settings.c:391
+#: src/nmcli/settings.c:392
 #, c-format
 msgid "'%s' is not a name of any existing profile"
 msgstr "«%s» не является именем существующего профиля"
 
-#: src/nmcli/settings.c:437
+#: src/nmcli/settings.c:438
 #, c-format
 msgid "Warning: %s\n"
 msgstr "Предупреждение: %s\n"
 
-#: src/nmcli/settings.c:440
+#: src/nmcli/settings.c:441
 #, c-format
 msgid "Info: %s\n"
 msgstr "Информация: %s\n"
 
-#: src/nmcli/settings.c:549
+#: src/nmcli/settings.c:552
 msgid "don't know how to get the property value"
 msgstr "неизвестно, как получить значение свойства"
 
-#: src/nmcli/settings.c:642
+#: src/nmcli/settings.c:648
 msgid "the property can't be changed"
 msgstr "свойство не может быть изменено"
 
-#: src/nmcli/settings.c:720
+#: src/nmcli/settings.c:734
 msgid "[NM property description]"
 msgstr "[описание свойства NM]"
 
-#: src/nmcli/settings.c:730
+#: src/nmcli/settings.c:744
 msgid "[nmcli specific description]"
 msgstr "[описание в nmcli]"
 
@@ -15551,26 +16232,25 @@ msgid "invalid field '%s%s%s'; allowed fields: [%s]"
 msgstr "недействительное поле «%s%s%s»; допустимые поля: [%s]"
 
 #: src/nmcli/utils.c:806
-#, c-format
 msgid "failure to select field"
 msgstr "сбой при выборе поля"
 
-#: src/nmcli/utils.c:1461
+#: src/nmcli/utils.c:1472
 #, c-format
 msgid "Failed to create pager pipe: %s\n"
 msgstr "Не удалось создать канал постраничного просмотра: %s\n"
 
-#: src/nmcli/utils.c:1475
+#: src/nmcli/utils.c:1486
 #, c-format
 msgid "Failed to fork pager: %s\n"
 msgstr "Не удалось создать форк постраничного просмотра: %s\n"
 
-#: src/nmcli/utils.c:1519 src/nmcli/utils.c:1523
+#: src/nmcli/utils.c:1530 src/nmcli/utils.c:1534
 #, c-format
 msgid "Failed to duplicate pager pipe: %s\n"
 msgstr "Не удалось дублировать канал постраничного просмотра: %s\n"
 
-#: src/nmcli/utils.c:1838
+#: src/nmcli/utils.c:1849
 #, c-format
 msgid ""
 "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Restarting "
@@ -15605,121 +16285,120 @@ msgstr "Подключение Veth %d"
 
 #: src/nmtui/nm-editor-utils.c:164
 #, c-format
+msgid "Loopback connection %d"
+msgstr "Подключение loopback %d"
+
+#: src/nmtui/nm-editor-utils.c:172
+#, c-format
 msgid "Wi-Fi connection %d"
 msgstr "Подключение Wi-Fi %d"
 
-#: src/nmtui/nm-editor-utils.c:173
+#: src/nmtui/nm-editor-utils.c:181
 #, c-format
 msgid "InfiniBand connection %d"
 msgstr "Подключение InfiniBand %d"
 
-#: src/nmtui/nm-editor-utils.c:181
+#: src/nmtui/nm-editor-utils.c:189
 #, c-format
 msgid "Mobile broadband connection %d"
 msgstr "Мобильное широкополосное подключение %d"
 
-#: src/nmtui/nm-editor-utils.c:187 src/nmtui/nmt-page-dsl.c:47
+#: src/nmtui/nm-editor-utils.c:195 src/nmtui/nmt-page-dsl.c:47
 msgid "DSL"
 msgstr "DSL"
 
-#: src/nmtui/nm-editor-utils.c:191
+#: src/nmtui/nm-editor-utils.c:199
 #, c-format
 msgid "DSL connection %d"
 msgstr "Подключение DSL %d"
 
-#: src/nmtui/nm-editor-utils.c:200
+#: src/nmtui/nm-editor-utils.c:208
 #, c-format
 msgid "Bond connection %d"
 msgstr "Агрегированное подключение bond %d"
 
-#: src/nmtui/nm-editor-utils.c:210
+#: src/nmtui/nm-editor-utils.c:218
 #, c-format
 msgid "Bridge connection %d"
 msgstr "Подключение мост %d"
 
-#: src/nmtui/nm-editor-utils.c:219
+#: src/nmtui/nm-editor-utils.c:227
 #, c-format
 msgid "Team connection %d"
 msgstr "Подключение team %d"
 
-#: src/nmtui/nm-editor-utils.c:227
+#: src/nmtui/nm-editor-utils.c:235
 #, c-format
 msgid "VLAN connection %d"
 msgstr "Подключение VLAN %d"
 
-#: src/nmtui/nm-editor-utils.c:231 src/nmtui/nmt-page-ip-tunnel.c:113
+#: src/nmtui/nm-editor-utils.c:239 src/nmtui/nmt-page-ip-tunnel.c:113
 msgid "IP tunnel"
 msgstr "Туннель IP"
 
-#: src/nmtui/nm-editor-utils.c:235
+#: src/nmtui/nm-editor-utils.c:243
 #, c-format
 msgid "IP tunnel connection %d"
 msgstr "Туннельное подключение IP %d"
 
-#: src/nmtui/nm-editor-utils.c:243
+#: src/nmtui/nm-editor-utils.c:251
 #, c-format
 msgid "MACsec connection %d"
 msgstr "Подключение MACsec %d"
 
-#: src/nmtui/nm-editor-utils.c:258
+#: src/nmtui/nm-editor-utils.c:266
 #, c-format
 msgid "VPN connection %d"
 msgstr "Подключение VPN %d"
 
-#: src/nmtui/nm-editor-utils.c:275
+#: src/nmtui/nm-editor-utils.c:283
 #, c-format
 msgid "WireGuard connection %d"
 msgstr "Подключение WireGuard %d"
 
 #: src/nmtui/nmt-8021x-fields.c:209 src/nmtui/nmt-8021x-fields.c:214
-#, fuzzy
 msgid "Default"
-msgstr "по умолчанию"
+msgstr "По умолчанию"
 
 #: src/nmtui/nmt-8021x-fields.c:210 src/nmtui/nmt-8021x-fields.c:215
-#, fuzzy
 msgid "Disable"
-msgstr "Отключено"
+msgstr "Отключить"
 
 #: src/nmtui/nmt-8021x-fields.c:211
-#, fuzzy
 msgid "Enable"
-msgstr "Включено"
+msgstr "Включить"
 
 #: src/nmtui/nmt-8021x-fields.c:302
 msgid "TLS 1.0"
-msgstr ""
+msgstr "TLS 1.0"
 
 #: src/nmtui/nmt-8021x-fields.c:303
 msgid "TLS 1.1"
-msgstr ""
+msgstr "TLS 1.1"
 
 #: src/nmtui/nmt-8021x-fields.c:304
 msgid "TLS 1.2"
-msgstr ""
+msgstr "TLS 1.2"
 
 #: src/nmtui/nmt-8021x-fields.c:305
 msgid "TLS 1.3"
-msgstr ""
+msgstr "TLS 1.3"
 
 #: src/nmtui/nmt-8021x-fields.c:307
 msgid "Disable time checks"
-msgstr ""
+msgstr "Отключить проверки времени"
 
 #: src/nmtui/nmt-8021x-fields.c:318
-#, fuzzy
 msgid "Show expert TLS options"
-msgstr "Показать параметры NetworkManager"
+msgstr "Показать параметры TLS для специалистов"
 
 #: src/nmtui/nmt-8021x-fields.c:331
-#, fuzzy
 msgid "Wpa_supplicant settings:"
-msgstr "повторяющееся имя параметра"
+msgstr "Параметры wpa_supplicant:"
 
 #: src/nmtui/nmt-8021x-fields.c:333
-#, fuzzy
 msgid "Cipher string"
-msgstr "Параметры пользователя"
+msgstr "Строка шифра"
 
 #: src/nmtui/nmt-8021x-fields.c:373 src/nmtui/nmt-8021x-fields.c:562
 msgid "Domain"
@@ -15832,7 +16511,7 @@ msgid "Add"
 msgstr "Добавить"
 
 #: src/nmtui/nmt-edit-connection-list.c:104 src/nmtui/nmt-page-ip4.c:163
-#: src/nmtui/nmt-page-ip6.c:162 src/nmtui/nmt-page-team-port.c:92
+#: src/nmtui/nmt-page-ip6.c:163 src/nmtui/nmt-page-team-port.c:92
 #: src/nmtui/nmt-page-team.c:145 src/nmtui/nmt-wireguard-peer-list.c:129
 msgid "Edit..."
 msgstr "Изменить..."
@@ -15850,53 +16529,53 @@ msgstr "Скрыть"
 msgid "Show"
 msgstr "Показать"
 
-#: src/nmtui/nmt-editor.c:92
+#: src/nmtui/nmt-editor.c:93
 #, c-format
 msgid "Could not create editor for connection '%s' of type '%s'."
 msgstr "Не удалось открыть окно редактора для подключения «%s» типа «%s»."
 
-#: src/nmtui/nmt-editor.c:96
+#: src/nmtui/nmt-editor.c:97
 #, c-format
 msgid "Could not create editor for invalid connection '%s'."
 msgstr ""
 "Не удалось открыть окно редактора для недействительного подключения «%s»."
 
-#: src/nmtui/nmt-editor.c:109
+#: src/nmtui/nmt-editor.c:110
 msgid "Edit Connection"
 msgstr "Изменить подключение"
 
-#: src/nmtui/nmt-editor.c:167
+#: src/nmtui/nmt-editor.c:168
 #, c-format
 msgid "Unable to save connection: %s"
 msgstr "Не удалось сохранить подключение: %s"
 
-#: src/nmtui/nmt-editor.c:184
+#: src/nmtui/nmt-editor.c:185
 #, c-format
 msgid "Unable to add new connection: %s"
 msgstr "Не удалось добавить новое подключение: %s"
 
-#: src/nmtui/nmt-editor.c:333
+#: src/nmtui/nmt-editor.c:334
 msgid "Profile name"
 msgstr "Имя профиля"
 
-#: src/nmtui/nmt-editor.c:344
+#: src/nmtui/nmt-editor.c:348
 msgid "Ethernet device"
 msgstr "Устройство Ethernet"
 
-#: src/nmtui/nmt-editor.c:346
+#: src/nmtui/nmt-editor.c:350
 msgid "Device"
 msgstr "Устройство"
 
 #. And finally the bottom widgets
-#: src/nmtui/nmt-editor.c:416
+#: src/nmtui/nmt-editor.c:423
 msgid "Automatically connect"
 msgstr "Подключаться автоматически"
 
-#: src/nmtui/nmt-editor.c:424
+#: src/nmtui/nmt-editor.c:431
 msgid "Available to all users"
 msgstr "Доступно всем пользователям"
 
-#: src/nmtui/nmt-editor.c:442 src/nmtui/nmt-password-dialog.c:160
+#: src/nmtui/nmt-editor.c:449 src/nmtui/nmt-password-dialog.c:160
 #: src/nmtui/nmt-route-editor.c:97 src/nmtui/nmt-wireguard-peer-editor.c:146
 #: src/nmtui/nmtui-edit.c:199 src/nmtui/nmtui-edit.c:510
 #: src/nmtui/nmtui-hostname.c:51
@@ -15958,8 +16637,8 @@ msgstr "АГРЕГАЦИЯ (BOND)"
 
 #: src/nmtui/nmt-page-bond.c:346 src/nmtui/nmt-page-bridge.c:63
 #: src/nmtui/nmt-page-team.c:126
-msgid "Slaves"
-msgstr "Ведомые"
+msgid "Ports"
+msgstr "Порты"
 
 #: src/nmtui/nmt-page-bond.c:356 src/nmtui/nmt-page-ip-tunnel.c:128
 #: src/nmtui/nmt-page-macsec.c:113 src/nmtui/nmt-page-wifi.c:224
@@ -15997,7 +16676,8 @@ msgid "ARP targets"
 msgstr "Цели ARP"
 
 #: src/nmtui/nmt-page-bond.c:404 src/nmtui/nmt-page-ethernet.c:116
-#: src/nmtui/nmt-page-vlan.c:92 src/nmtui/nmt-page-wifi.c:387
+#: src/nmtui/nmt-page-veth.c:72 src/nmtui/nmt-page-vlan.c:92
+#: src/nmtui/nmt-page-wifi.c:387
 msgid "Cloned MAC address"
 msgstr "Клонированный адрес MAC"
 
@@ -16034,7 +16714,7 @@ msgstr "Период устаревания"
 msgid "Enable STP (Spanning Tree Protocol)"
 msgstr "Включить STP (Spanning Tree Protocol)"
 
-#: src/nmtui/nmt-page-ethernet.c:107
+#: src/nmtui/nmt-page-ethernet.c:107 src/nmtui/nmt-page-veth.c:63
 msgid "ETHERNET"
 msgstr "ETHERNET"
 
@@ -16059,10 +16739,6 @@ msgstr "Подключено"
 msgid "INFINIBAND"
 msgstr "INFINIBAND"
 
-#: src/nmtui/nmt-page-infiniband.c:73
-msgid "Transport mode"
-msgstr "Режим транспорта"
-
 #. The order must match the NM_IP_TUNNEL_MODE_* enum
 #: src/nmtui/nmt-page-ip-tunnel.c:65
 msgid "IPIP"
@@ -16120,7 +16796,7 @@ msgstr "Ключ на входе"
 msgid "Output key"
 msgstr "Ключ на выходе"
 
-#: src/nmtui/nmt-page-ip4.c:27 src/nmtui/nmt-page-ip6.c:32
+#: src/nmtui/nmt-page-ip4.c:27 src/nmtui/nmt-page-ip6.c:33
 #: src/nmtui/nmt-page-macsec.c:69 src/nmtui/nmtui-radio.c:68
 #: src/nmtui/nmtui-radio.c:77 src/nmtui/nmtui-radio.c:96
 #: src/nmtui/nmtui-radio.c:105
@@ -16135,15 +16811,15 @@ msgstr "Link-Local"
 msgid "Manual"
 msgstr "Вручную"
 
-#: src/nmtui/nmt-page-ip4.c:31
+#: src/nmtui/nmt-page-ip4.c:31 src/nmtui/nmt-page-ip6.c:32
 msgid "Shared"
 msgstr "Разделяемый ресурс"
 
-#: src/nmtui/nmt-page-ip4.c:66 src/nmtui/nmt-page-ip6.c:67
+#: src/nmtui/nmt-page-ip4.c:66 src/nmtui/nmt-page-ip6.c:68
 msgid "(No custom routes)"
 msgstr "(Нет маршрутов, настраиваемых пользователем)"
 
-#: src/nmtui/nmt-page-ip4.c:69 src/nmtui/nmt-page-ip6.c:70
+#: src/nmtui/nmt-page-ip4.c:69 src/nmtui/nmt-page-ip6.c:71
 #, c-format
 msgid "One custom route"
 msgid_plural "%d custom routes"
@@ -16155,35 +16831,35 @@ msgstr[2] "%d маршрутов, настроенных пользовател
 msgid "IPv4 CONFIGURATION"
 msgstr "КОНФИГУРАЦИЯ IPv4"
 
-#: src/nmtui/nmt-page-ip4.c:123 src/nmtui/nmt-page-ip6.c:124
+#: src/nmtui/nmt-page-ip4.c:123 src/nmtui/nmt-page-ip6.c:125
 msgid "Addresses"
 msgstr "Адреса"
 
-#: src/nmtui/nmt-page-ip4.c:132 src/nmtui/nmt-page-ip6.c:133
+#: src/nmtui/nmt-page-ip4.c:132 src/nmtui/nmt-page-ip6.c:134
 msgid "Gateway"
 msgstr "Шлюз"
 
-#: src/nmtui/nmt-page-ip4.c:141 src/nmtui/nmt-page-ip6.c:142
+#: src/nmtui/nmt-page-ip4.c:141 src/nmtui/nmt-page-ip6.c:143
 msgid "DNS servers"
 msgstr "Серверы DNS"
 
-#: src/nmtui/nmt-page-ip4.c:149 src/nmtui/nmt-page-ip6.c:150
+#: src/nmtui/nmt-page-ip4.c:149 src/nmtui/nmt-page-ip6.c:151
 msgid "Search domains"
 msgstr "Домены поиска"
 
-#: src/nmtui/nmt-page-ip4.c:165 src/nmtui/nmt-page-ip6.c:164
+#: src/nmtui/nmt-page-ip4.c:165 src/nmtui/nmt-page-ip6.c:165
 msgid "Routing"
 msgstr "Маршрутизация"
 
-#: src/nmtui/nmt-page-ip4.c:167 src/nmtui/nmt-page-ip6.c:166
+#: src/nmtui/nmt-page-ip4.c:167 src/nmtui/nmt-page-ip6.c:167
 msgid "Never use this network for default route"
 msgstr "Не использовать эту сеть для маршрута по умолчанию"
 
-#: src/nmtui/nmt-page-ip4.c:175 src/nmtui/nmt-page-ip6.c:174
+#: src/nmtui/nmt-page-ip4.c:175 src/nmtui/nmt-page-ip6.c:175
 msgid "Ignore automatically obtained routes"
 msgstr "Игнорировать автоматически полученные маршруты"
 
-#: src/nmtui/nmt-page-ip4.c:183 src/nmtui/nmt-page-ip6.c:182
+#: src/nmtui/nmt-page-ip4.c:183 src/nmtui/nmt-page-ip6.c:183
 msgid "Ignore automatically obtained DNS parameters"
 msgstr "Игнорировать автоматически полученные параметры DNS"
 
@@ -16199,14 +16875,18 @@ msgstr "Игнорировать"
 msgid "Automatic (DHCP-only)"
 msgstr "Автоматически (только DHCP)"
 
-#: src/nmtui/nmt-page-ip6.c:113
+#: src/nmtui/nmt-page-ip6.c:114
 msgid "IPv6 CONFIGURATION"
 msgstr "КОНФИГУРАЦИЯ IPv6"
 
-#: src/nmtui/nmt-page-ip6.c:192
+#: src/nmtui/nmt-page-ip6.c:193
 msgid "Require IPv6 addressing for this connection"
 msgstr "Подключение требует адресацию IPv6"
 
+#: src/nmtui/nmt-page-loopback.c:47
+msgid "LOOPBACK"
+msgstr "LOOPBACK"
+
 #: src/nmtui/nmt-page-macsec.c:67
 msgid "PSK"
 msgstr "PSK"
@@ -16291,6 +16971,10 @@ msgstr "Конфигурация JSON"
 msgid "TEAM"
 msgstr "АГРЕГАЦИЯ (TEAM)"
 
+#: src/nmtui/nmt-page-veth.c:50
+msgid "VETH"
+msgstr "VETH"
+
 #: src/nmtui/nmt-page-vlan.c:82
 msgid "VLAN id"
 msgstr "Идентификатор VLAN"
@@ -16451,8 +17135,8 @@ msgid "Show password"
 msgstr "Показать пароль"
 
 #: src/nmtui/nmt-port-list.c:127
-msgid "Select the type of slave connection you wish to add."
-msgstr "Выберите тип добавляемого ведомого подключения."
+msgid "Select the type of port connection you wish to add."
+msgstr "Выберите тип добавляемого подключения порта"
 
 #: src/nmtui/nmt-route-table.c:169
 msgid "Destination"
@@ -16693,366 +17377,3 @@ msgstr "Не удалось проанализировать аргументы"
 #, c-format
 msgid "Could not contact NetworkManager: %s.\n"
 msgstr "Не удалось связаться с NetworkManager: %s.\n"
-
-#, c-format
-#~ msgid "this property cannot be empty for '%s=%s'"
-#~ msgstr "при «%s=%s» это свойство не может быть пустым"
-
-#~ msgid ""
-#~ "Enter file path to CA certificate (optionally prefixed with file://).\n"
-#~ "  [file://]<file path>\n"
-#~ "Note that nmcli does not support specifying certificates as raw blob "
-#~ "data.\n"
-#~ "Example: /home/cimrman/cacert.crt\n"
-#~ msgstr ""
-#~ "Укажите путь к файлу сертификата ЦС (опционально указывается префикс "
-#~ "file://).\n"
-#~ "  [file://]<путь_к_файлу>\n"
-#~ "Обратите внимание, что nmcli не поддерживает указание сертификатов\n"
-#~ "в виде необработанных blob-данных.\n"
-#~ "Пример: /home/cimrman/cacert.crt\n"
-
-#~ msgid ""
-#~ "Enter file path to client certificate (optionally prefixed with "
-#~ "file://).\n"
-#~ "  [file://]<file path>\n"
-#~ "Note that nmcli does not support specifying certificates as raw blob "
-#~ "data.\n"
-#~ "Example: /home/cimrman/jara.crt\n"
-#~ msgstr ""
-#~ "Укажите путь к файлу сертификата клиента (опционально указывается префикс "
-#~ "file://)\n"
-#~ "  [file://]<путь_к_файлу>\n"
-#~ "Обратите внимание, что nmcli не поддерживает указание сертификатов в виде "
-#~ "необработанных blob-данных.\n"
-#~ "Пример: /home/cimrman/jara.crt\n"
-
-#~ msgid ""
-#~ "Enter file path to CA certificate for inner authentication (optionally "
-#~ "prefixed\n"
-#~ "with file://).\n"
-#~ "  [file://]<file path>\n"
-#~ "Note that nmcli does not support specifying certificates as raw blob "
-#~ "data.\n"
-#~ "Example: /home/cimrman/ca-zweite-phase.crt\n"
-#~ msgstr ""
-#~ "Укажите путь к файлу сертификата ЦС для внутренней аутентификации "
-#~ "(опционально\n"
-#~ "указывается префикс file://)\n"
-#~ "  [file://]<путь_к_файлу>\n"
-#~ "Обратите внимание, что nmcli не поддерживает указание сертификатов в виде "
-#~ "необработанных blob-данных.\n"
-#~ "Пример: /home/cimrman/ca-zweite-phase.crt\n"
-
-#~ msgid ""
-#~ "Enter file path to client certificate for inner authentication "
-#~ "(optionally prefixed\n"
-#~ "with file://).\n"
-#~ "  [file://]<file path>\n"
-#~ "Note that nmcli does not support specifying certificates as raw blob "
-#~ "data.\n"
-#~ "Example: /home/cimrman/jara-zweite-phase.crt\n"
-#~ msgstr ""
-#~ "Укажите путь к файлу сертификата клиента для внутренней аутентификации "
-#~ "(опционально\n"
-#~ "указывается префикс file://)\n"
-#~ "  [file://]<путь_к_файлу>\n"
-#~ "Обратите внимание, что nmcli не поддерживает указание сертификатов в виде "
-#~ "необработанных blob-данных.\n"
-#~ "Пример: /home/cimrman/jara-zweite-phase.crt\n"
-
-#~ msgid ""
-#~ "Enter path to a private key and the key password (if not set yet):\n"
-#~ "  [file://]<file path> [<password>]\n"
-#~ "Note that nmcli does not support specifying private key as raw blob "
-#~ "data.\n"
-#~ "Example: /home/cimrman/jara-priv-key Dardanely\n"
-#~ msgstr ""
-#~ "Укажите путь к закрытому ключу и пароль ключа (если он ещё не настроен):\n"
-#~ "  [file://]<путь_к_файлу> [<пароль>]\n"
-#~ "Обратите внимание, что nmcli не поддерживает указание закрытого ключа в "
-#~ "виде\n"
-#~ "необработанных blob-данных.\n"
-#~ "Пример: /home/cimrman/jara-priv-key Dardanely\n"
-
-#~ msgid ""
-#~ "Contains the client certificate if used by the EAP method specified in "
-#~ "the \"eap\" property. Certificate data is specified using a \"scheme\"; "
-#~ "two are currently supported: blob and path. When using the blob scheme "
-#~ "(which is backwards compatible with NM 0.7.x) this property should be set "
-#~ "to the certificate's DER encoded data. When using the path scheme, this "
-#~ "property should be set to the full UTF-8 encoded path of the certificate, "
-#~ "prefixed with the string \"file://\" and ending with a terminating NUL "
-#~ "byte."
-#~ msgstr ""
-#~ "При использовании с методом EAP, указанным в свойстве \"eap\", здесь "
-#~ "содержится клиентский сертификат. Данные сертификата указываются с "
-#~ "помощью схемы (\"scheme\"); поддерживаются две схемы на данный момент: "
-#~ "«blob» и «path». При использовании схемы «blob» (которая имеет обратную "
-#~ "совместимость с NM 0.7.x), в этом свойстве необходимо указать "
-#~ "зашифрованные данные DER сертификата. При использовании схемы «path» в "
-#~ "данном свойстве нужно указать полный путь до сертификата в кодировке "
-#~ "UTF-8, с префиксом \"file://\" и заканчивающийся завершающим байтом NUL."
-
-#~ msgid ""
-#~ "Contains the \"phase 2\" client certificate if used by the EAP method "
-#~ "specified in the \"phase2-auth\" or \"phase2-autheap\" properties. "
-#~ "Certificate data is specified using a \"scheme\"; two are currently "
-#~ "supported: blob and path. When using the blob scheme (which is backwards "
-#~ "compatible with NM 0.7.x) this property should be set to the "
-#~ "certificate's DER encoded data. When using the path scheme, this property "
-#~ "should be set to the full UTF-8 encoded path of the certificate, prefixed "
-#~ "with the string \"file://\" and ending with a terminating NUL byte. This "
-#~ "property can be unset even if the EAP method supports CA certificates, "
-#~ "but this allows man-in-the-middle attacks and is NOT recommended."
-#~ msgstr ""
-#~ "При использовании с методом EAP, указанным свойствами \"phase2-auth\" или "
-#~ "\"phase2-autheap\", здесь содержится клиентский сертификат фазы 2. Данные "
-#~ "сертификата указываются с помощью схемы (\"scheme\"); поддерживаются две "
-#~ "схемы на данный момент: «blob» и «path». При использовании схемы «blob» "
-#~ "(которая имеет обратную совместимость с NM 0.7.x), в этом свойстве "
-#~ "необходимо указать зашифрованные данные сертификата в формате DER. При "
-#~ "использовании схемы «path» в данном свойстве нужно указать полный путь до "
-#~ "сертификата в кодировке UTF-8, с префиксом \"file://\" и  заканчивающийся "
-#~ "завершающим байтом NUL. Данное свойство может не иметь значения, даже "
-#~ "если метод EAP поддерживает сертификаты ЦС, но в таком случае может быть "
-#~ "выполнена атака «злоумышленник в середине», поэтому это НЕ рекомендуется."
-
-#~ msgid ""
-#~ "Contains the \"phase 2\" inner private key when the \"phase2-auth\" or "
-#~ "\"phase2-autheap\" property is set to \"tls\". Key data is specified "
-#~ "using a \"scheme\"; two are currently supported: blob and path. When "
-#~ "using the blob scheme and private keys, this property should be set to "
-#~ "the key's encrypted PEM encoded data. When using private keys with the "
-#~ "path scheme, this property should be set to the full UTF-8 encoded path "
-#~ "of the key, prefixed with the string \"file://\" and ending with a "
-#~ "terminating NUL byte. When using PKCS#12 format private keys and the blob "
-#~ "scheme, this property should be set to the PKCS#12 data and the \"phase2-"
-#~ "private-key-password\" property must be set to password used to decrypt "
-#~ "the PKCS#12 certificate and key. When using PKCS#12 files and the path "
-#~ "scheme, this property should be set to the full UTF-8 encoded path of the "
-#~ "key, prefixed with the string \"file://\" and ending with a terminating "
-#~ "NUL byte, and as with the blob scheme the \"phase2-private-key-password\" "
-#~ "property must be set to the password used to decode the PKCS#12 private "
-#~ "key and certificate."
-#~ msgstr ""
-#~ "Содержит внутренний закрытый ключ для фазы 2, если для свойств \"phase2-"
-#~ "auth\" или \"phase2-autheap\" указано значение \"tls\". Данные ключа "
-#~ "указываются с помощью схемы (\"scheme\"), поддерживаются на данный момент "
-#~ "две схемы:  blob и path. Если используется схема blob и закрытые ключи, "
-#~ "то в качестве значения данного свойства надо указывать зашифрованные в "
-#~ "формате PEM данные ключей. При использовании со схемой \"path\" закрытых "
-#~ "ключей, для данного свойства необходимо указывать значение в виде полного "
-#~ "пути до ключа в кодировке UTF-8, с префиксом в виде строки \"file://\" и "
-#~ "оканчивающимся на завершающий нулевой байт. При использовании со схемой "
-#~ "\"blob\" и с закрытыми ключами в формате PKCS#12, для данного свойства "
-#~ "необходимо указывать значение в виде данных по стандарту PKCS#12, а для "
-#~ "свойства \"phase2-private-key-password\" необходимо указывать значение в  "
-#~ "виде пароля, используемого для расшифровки ключа и сертификата в формате "
-#~ "PKCS#12. При использовании файлов в формате PKCS#12 и схемы \"path\", для "
-#~ "данного свойства необходимо указывать значение в виде полного пути до "
-#~ "ключа в кодировке UTF-8, с префиксом в виде строки \"file://\" и "
-#~ "оканчивающимся на завершающий нулевой байт, а для схемы \"blob\" "
-#~ "значением свойства \"phase2-private-key-password\" должен быть пароль, "
-#~ "используемый для расшифровки закрытого ключа и сертификата в формате "
-#~ "PKCS#12."
-
-#~ msgid ""
-#~ "Contains the private key when the \"eap\" property is set to \"tls\". Key "
-#~ "data is specified using a \"scheme\"; two are currently supported: blob "
-#~ "and path. When using the blob scheme and private keys, this property "
-#~ "should be set to the key's encrypted PEM encoded data. When using private "
-#~ "keys with the path scheme, this property should be set to the full UTF-8 "
-#~ "encoded path of the key, prefixed with the string \"file://\" and ending "
-#~ "with a terminating NUL byte. When using PKCS#12 format private keys and "
-#~ "the blob scheme, this property should be set to the PKCS#12 data and the "
-#~ "\"private-key-password\" property must be set to password used to decrypt "
-#~ "the PKCS#12 certificate and key. When using PKCS#12 files and the path "
-#~ "scheme, this property should be set to the full UTF-8 encoded path of the "
-#~ "key, prefixed with the string \"file://\" and ending with a terminating "
-#~ "NUL byte, and as with the blob scheme the \"private-key-password\" "
-#~ "property must be set to the password used to decode the PKCS#12 private "
-#~ "key and certificate. WARNING: \"private-key\" is not a \"secret\" "
-#~ "property, and thus unencrypted private key data using the BLOB scheme may "
-#~ "be readable by unprivileged users.  Private keys should always be "
-#~ "encrypted with a private key password to prevent unauthorized access to "
-#~ "unencrypted private key data."
-#~ msgstr ""
-#~ "Содержит закрытый ключ, если для свойства \"eap\" указано значение "
-#~ "\"tls\". Данные ключа указываются с помощью схемы (\"scheme\"), "
-#~ "поддерживаются на данный момент две схемы: blob и path. Если используется "
-#~ "схема blob и закрытые ключи, то в качестве значения данного свойства надо "
-#~ "указывать зашифрованные в формате PEM данные ключей. При использовании "
-#~ "закрытых ключей со схемой \"path, для данного свойства необходимо "
-#~ "указывать значение в виде полного пути до ключа в кодировке UTF-8, с "
-#~ "префиксом в виде строки \"file://\" и оканчивающимся на завершающий "
-#~ "нулевой байт. При использовании со схемой \"blob\" и с закрытыми ключами "
-#~ "в формате PKCS#12, для данного свойства необходимо указывать значение в "
-#~ "виде данных по стандарту PKCS#12, а для свойства \"private-key-password\" "
-#~ "необходимо указывать значение в виде пароля, используемого для "
-#~ "расшифровки ключа и сертификата в формате PKCS#12. При использовании "
-#~ "файлов в формате PKCS#12 и схемы \"path\", для данного свойства "
-#~ "необходимо указывать значение в виде полного пути до ключа в кодировке "
-#~ "UTF-8, с префиксом в виде строки \"file://\" и оканчивающимся на "
-#~ "завершающий байт NUL, а для схемы \"blob\" значением свойства \"private-"
-#~ "key-password\" должен быть пароль, используемый для расшифровки закрытого "
-#~ "ключа и сертификата в формате PKCS#12. ПРЕДУПРЕЖДЕНИЕ: свойство \"private-"
-#~ "key\" не относится к секретам, и, соответственно, при использовании схемы "
-#~ "blob незашифрованные данные закрытого ключа могут быть прочтены "
-#~ "пользователями без привилегий. Для предотвращения неавторизованного "
-#~ "доступа к незашифрованным данным закрытого ключа ключи всегда должны "
-#~ "шифроваться паролем."
-
-#~ msgid "Password: "
-#~ msgstr "Пароль: "
-
-#~ msgid "hsr supervision address"
-#~ msgstr "адрес супервизора hsr"
-
-#~ msgid "The supervision MAC address."
-#~ msgstr "MAC-адрес супервизора."
-
-#~ msgid ""
-#~ "The NMSettingWirelessWakeOnWLan options to enable. Not all devices "
-#~ "support all options. May be any combination of "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY (0x2), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT (0x4), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC (0x8), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE (0x10), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST (0x20), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE (0x40), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE (0x80), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP (0x100) or the special values "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) "
-#~ "and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable "
-#~ "management of Wake-on-LAN in NetworkManager)."
-#~ msgstr ""
-#~ "Параметры NMSettingWirelessWakeOnWLan для включения. Не все устройства "
-#~ "поддерживают все параметры. Возможна любая комбинация следующих "
-#~ "возможностей: NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY (0x2), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT (0x4), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC (0x8), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE (0x10), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST (0x20), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE (0x40), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE (0x80), "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP (0x100) или специальные значения "
-#~ "NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT ( 0x1) (для использования "
-#~ "глобальных параметров) и NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) "
-#~ "(чтобы отключить управление Wake-on-LAN в NetworkManager)."
-
-#~ msgid ""
-#~ "Tunnel flags. Currently, the following values are supported: "
-#~ "NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT (0x1), "
-#~ "NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS (0x2), "
-#~ "NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL (0x4), "
-#~ "NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV (0x8), NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY "
-#~ "(0x10), NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK (0x20). They are valid only "
-#~ "for IPv6 tunnels."
-#~ msgstr ""
-#~ "Туннельные флаги. В настоящее время поддерживаются следующие значения: "
-#~ "NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT (0x1), "
-#~ "NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS (0x2), "
-#~ "NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL (0x4), "
-#~ "NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV (0x8), NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY "
-#~ "(0x10), NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK (0x20). Действительны "
-#~ "только для туннелей IPv6."
-
-#~ msgid ""
-#~ "The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or "
-#~ "NM_IP_TUNNEL_MODE_GRE (2)."
-#~ msgstr ""
-#~ "Режим туннелирования, например NM_IP_TUNNEL_MODE_IPIP (1) или "
-#~ "NM_IP_TUNNEL_MODE_GRE (2)."
-
-#~ msgid ""
-#~ "The InfiniBand P_Key to use for this device. A value of -1 means to use "
-#~ "the default P_Key (aka \"the P_Key at index 0\"). Otherwise, it is a 16-"
-#~ "bit unsigned integer, whose high bit is set if it is a \"full "
-#~ "membership\" P_Key."
-#~ msgstr ""
-#~ "Ключ InfiniBand P_Key для использования с эти устройством. Значение «-1» "
-#~ "означает, что нужно использовать изначальный P_Key (он же \"P_Key в "
-#~ "индексе 0\"). В противном случае используется неподписанное 16-битное "
-#~ "целое число, чей старший бит настроен в виде ключа P_Key «полного "
-#~ "членства»."
-
-#~ msgid ""
-#~ "IP configuration method. NMSettingIP4Config and NMSettingIP6Config both "
-#~ "support \"disabled\", \"auto\", \"manual\", and \"link-local\". See the "
-#~ "subclass-specific documentation for other values. In general, for the "
-#~ "\"auto\" method, properties such as \"dns\" and \"routes\" specify "
-#~ "information that is added on to the information returned from automatic "
-#~ "configuration.  The \"ignore-auto-routes\" and \"ignore-auto-dns\" "
-#~ "properties modify this behavior. For methods that imply no upstream "
-#~ "network, such as \"shared\" or \"link-local\", these properties must be "
-#~ "empty. For IPv4 method \"shared\", the IP subnet can be configured by "
-#~ "adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note "
-#~ "that the shared method must be configured on the interface which shares "
-#~ "the internet to a subnet, not on the uplink which is shared."
-#~ msgstr ""
-#~ "Метод конфигурации IP. Как NMSettingIP4Config, так и NMSettingIP6Config "
-#~ "поддерживают значения \"disabled\", \"auto\", \"manual\" и \"link-"
-#~ "local\". Другие значения смотрите в документации, относящейся к "
-#~ "конкретному подклассу. В целом, для метода \"auto\", такие свойства, как "
-#~ "\"dns\" и \"routes\" указывают сведения, добавляемые к сведениям, "
-#~ "возвращаемым автоматической конфигурацией. Параметры \"ignore-auto-"
-#~ "routes\" и \"ignore-auto-dns\" изменяют это поведение. Для методов, не "
-#~ "подразумевающих вышестоящую сеть, таких, как \"shared\" или \"link-"
-#~ "local\", эти параметры должны быть пустыми. Для метода IPv4 \"shared\" "
-#~ "подсеть IP может быть настроена с помощью ручного добавления одного "
-#~ "адреса IPv4, в противном случае выбирается 10.42.x.0/24. Обратите "
-#~ "внимание, что разделяемый метод должен конфигурироваться на том "
-#~ "интерфейсе, который раздаёт Интернет в подсеть, а не в раздаваемом канале."
-
-#~ msgid ""
-#~ "Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 "
-#~ "IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode."
-#~ msgstr ""
-#~ "Настройка токенов для идентификаторов IPv6 draft-chown-6man-tokenised-"
-#~ "ipv6-identifiers-02 интерфейсов с токеном. Удобно использовать совместно "
-#~ "с eui64 addr-gen-mode."
-
-#, c-format
-#~ msgid "Error: openconnect failed with status %d\n"
-#~ msgstr "Ошибка: выполнение openconnect завершилось неудачей. Код: %d\n"
-
-#, c-format
-#~ msgid "Error: openconnect failed with signal %d\n"
-#~ msgstr "Ошибка: выполнение openconnect завершилось неудачей. Сигнал: %d\n"
-
-#, c-format
-#~ msgid "openconnect failed with signal %d"
-#~ msgstr "Сбой openconnect с сигналом %d"
-
-#~ msgid ""
-#~ "FALSE if the connection can be modified using the provided settings "
-#~ "service's D-Bus interface with the right privileges, or TRUE if the "
-#~ "connection is read-only and cannot be modified."
-#~ msgstr ""
-#~ "ЛОЖНО — если подключение может быть изменено с использованием "
-#~ "предоставляемых параметров интерфейса D-BUS службы с необходимыми "
-#~ "полномочиями, или ВЕРНО — если подключение доступно только для чтения и "
-#~ "не может быть изменено."
-
-#~ msgid ""
-#~ "If non-zero, directs the device to only use the specified bitrate for "
-#~ "communication with the access point.  Units are in Kb/s, ie 5500 = 5.5 "
-#~ "Mbit/s.  This property is highly driver dependent and not all devices "
-#~ "support setting a static bitrate."
-#~ msgstr ""
-#~ "При значении, отличном от нуля, то при обмене информацией с точкой "
-#~ "доступа устройство инструктируется на использование только указанной "
-#~ "скорости передачи. Единица измерения — Кб/сек, то есть 5500 = 5.5 Мбит/с. "
-#~ "Данное свойство очень сильно зависит от драйвера, и не все устройства "
-#~ "поддерживают установку статической скорости."
-
-#~ msgid ""
-#~ "If non-zero, directs the device to use the specified transmit power. "
-#~ "Units are dBm.  This property is highly driver dependent and not all "
-#~ "devices support setting a static transmit power."
-#~ msgstr ""
-#~ "При значении, отличном от нуля, устройство инструктируется на "
-#~ "использование указанной мощности передачи. Единицы измерения — дБм "
-#~ "(децибел на милливатт). Данное свойство очень сильно зависит от драйвера, "
-#~ "и не все устройства поддерживают установку статической мощности передачи."
diff --git a/po/sk.po b/po/sk.po
index e755a052..0d250262 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -7,13 +7,14 @@
 # Lubomir Rintel <lkundrak@v3.sk>, 2016. #zanata
 # Lubomir Rintel <lkundrak@v3.sk>, 2017. #zanata
 # Thomas Haller <thaller@redhat.com>, 2017. #zanata
+# Jose Riha <jose1711@gmail.com>, 2025.
 msgid ""
 msgstr ""
 "Project-Id-Version: NetworkManager\n"
 "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/"
 "NetworkManager/issues\n"
 "POT-Creation-Date: 2022-08-15 18:14-0300\n"
-"PO-Revision-Date: 2019-05-15 16:46+0200\n"
+"PO-Revision-Date: 2025-09-26 17:33+0200\n"
 "Last-Translator: Jose Riha <jose1711@gmail.com>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "Language: sk\n"
@@ -24,22 +25,20 @@ msgstr ""
 "X-Generator: Poedit 2.2.1\n"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:13
-#, fuzzy
 msgid "Enable or disable system networking"
-msgstr "Povoliť _sieť"
+msgstr "Zapnúť alebo vypnúť sieťovanie v systéme"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:14
 msgid "System policy prevents enabling or disabling system networking"
-msgstr ""
+msgstr "Systémová politika zabraňuje zapnutiu alebo vypnutiu siete v systéme"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:22
-#, fuzzy
 msgid "Reload NetworkManager configuration"
-msgstr "NetworkManager nebeží"
+msgstr "Opätovne načítať konfiguráciu NetworkManagera"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:23
 msgid "System policy prevents reloading NetworkManager"
-msgstr ""
+msgstr "Systémová politika zabraňuje opätovnému načítaniu NetworkManagera"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:32
 msgid ""
@@ -53,11 +52,11 @@ msgstr ""
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:41
 msgid "Enable or disable Wi-Fi devices"
-msgstr ""
+msgstr "Zapnúť alebo vypnúť zariadenia Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:42
 msgid "System policy prevents enabling or disabling Wi-Fi devices"
-msgstr ""
+msgstr "Systémová politika neumožňuje zapnúť alebo vypnúť zariadenia Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:50
 msgid "Enable or disable mobile broadband devices"
@@ -77,65 +76,63 @@ msgid ""
 msgstr ""
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:68
-#, fuzzy
 msgid "Allow control of network connections"
-msgstr "Bez sieťového spojenia"
+msgstr "Povoliť ovládanie sieťových pripojení"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:69
 msgid "System policy prevents control of network connections"
-msgstr ""
+msgstr "Systémová politika neumožňuje ovládať sieťové pripojenia"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:78
-#, fuzzy
 msgid "Allow control of Wi-Fi scans"
-msgstr "Bez sieťového spojenia"
+msgstr "Povoliť ovládanie skenovania sietí Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:79
 msgid "System policy prevents Wi-Fi scans"
-msgstr ""
+msgstr "Systémová politika neumožňuje skenovanie sietí Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:88
 msgid "Connection sharing via a protected Wi-Fi network"
-msgstr ""
+msgstr "Zdieľanie pripojenia prostredníctvom zabezpečenej siete Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:89
 msgid ""
 "System policy prevents sharing connections via a protected Wi-Fi network"
 msgstr ""
+"Systémová politika neumožňuje zdieľanie pripojenia prostredníctvom zabezpečenej siete Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:97
 msgid "Connection sharing via an open Wi-Fi network"
-msgstr ""
+msgstr "Zdieľanie pripojenia prostredníctvom nezabezpečnej siete Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:98
 msgid "System policy prevents sharing connections via an open Wi-Fi network"
 msgstr ""
+"Systémová politika neumožňuje zdieľanie pripojenia prostredníctvom nezabezpečnej siete Wi-Fi"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:106
-#, fuzzy
 msgid "Modify personal network connections"
-msgstr "Bez sieťového spojenia"
+msgstr "Upraviť osobné sieťové pripojenia"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:107
 msgid "System policy prevents modification of personal network settings"
-msgstr ""
+msgstr "Systémová politika neumožňuje meniť osobné nastavenia siete"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:116
-#, fuzzy
 msgid "Modify network connections for all users"
-msgstr "Bez sieťového spojenia"
+msgstr "Upraviť sieťové pripojenia pre všetkých používateľov"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:117
 msgid "System policy prevents modification of network settings for all users"
-msgstr ""
+msgstr "Systémová politika neumožňuje meniť nastavenia siete pre všetkých používateľov"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:126
 msgid "Modify persistent system hostname"
-msgstr "Zmenit perzistentné systémové meno hostiteľa"
+msgstr "Zmeniť perzistentné systémové meno hostiteľa"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:127
 msgid "System policy prevents modification of the persistent system hostname"
-msgstr ""
+msgstr "Systémová politika neumožňuje zmenu perzistentného systémového mena hostiteľa"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:136
 msgid "Modify persistent global DNS configuration"
@@ -164,13 +161,12 @@ msgid "System policy prevents enabling or disabling device statistics"
 msgstr ""
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:165
-#, fuzzy
 msgid "Enable or disable connectivity checking"
-msgstr "Povoliť _sieť"
+msgstr "Zapnúť alebo vypnúť kontrolu pripojenia"
 
 #: data/org.freedesktop.NetworkManager.policy.in.in:166
 msgid "System policy prevents enabling or disabling connectivity checking"
-msgstr ""
+msgstr "Systémová politika neumožňuje zapnutie alebo vypnutie kontroly pripojenia"
 
 #. TRANSLATORS: the first %s is a prefix for the connection id, such
 #. * as "Wired Connection" or "VPN Connection". The %d is a number
@@ -180,26 +176,25 @@ msgstr ""
 #, c-format
 msgctxt "connection id fallback"
 msgid "%s %u"
-msgstr ""
+msgstr "%s %u"
 
 #: src/core/devices/adsl/nm-device-adsl.c:115
 #: src/libnmc-setting/nm-meta-setting-desc.c:8265
 msgid "ADSL connection"
-msgstr "ADSL spojenie"
+msgstr "ADSL pripojenie"
 
 #: src/core/devices/bluetooth/nm-bluez-manager.c:1315
-#, fuzzy, c-format
+#, c-format
 msgid "%s Network"
-msgstr "Bezdrôtových sietí"
+msgstr "%s sieť"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:300
 msgid "NAP requested, but Bluetooth device does not support NAP"
 msgstr ""
 
 #: src/core/devices/bluetooth/nm-device-bt.c:313
-#, fuzzy
 msgid "NAP connection"
-msgstr "VPN spojenia"
+msgstr "NAP pripojenie"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:320
 msgid "PAN requested, but Bluetooth device does not support NAP"
@@ -210,9 +205,8 @@ msgid "PAN connections cannot specify GSM, CDMA, or serial settings"
 msgstr ""
 
 #: src/core/devices/bluetooth/nm-device-bt.c:348
-#, fuzzy
 msgid "PAN connection"
-msgstr "VPN spojenia"
+msgstr "PAN pripojenie"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:355
 msgid "DUN requested, but Bluetooth device does not support DUN"
@@ -224,38 +218,33 @@ msgstr ""
 
 #: src/core/devices/bluetooth/nm-device-bt.c:379
 #: src/core/devices/wwan/nm-modem-broadband.c:814
-#, fuzzy
 msgid "GSM connection"
-msgstr "VPN spojenia"
+msgstr "GSM pripojenie"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:381
 #: src/core/devices/wwan/nm-modem-broadband.c:835
-#, fuzzy
 msgid "CDMA connection"
-msgstr "VPN spojenia"
+msgstr "CDMA pripojenie"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:389
 msgid "Unknown/unhandled Bluetooth connection type"
-msgstr ""
+msgstr "Neznámy/neobsluhovaný typ Bluetooth pripojenia"
 
 #: src/core/devices/bluetooth/nm-device-bt.c:414
 msgid "connection does not match device"
-msgstr ""
+msgstr "pripojenie nezodpovedá zariadeniu"
 
 #: src/core/devices/nm-device-6lowpan.c:191
-#, fuzzy
 msgid "6LOWPAN connection"
-msgstr "VPN spojenia"
+msgstr "6LOWPAN pripojenie"
 
 #: src/core/devices/nm-device-bond.c:91
-#, fuzzy
 msgid "Bond connection"
-msgstr "Bez sieťového spojenia"
+msgstr "Previazané pripojenie (bond)"
 
 #: src/core/devices/nm-device-bridge.c:161
-#, fuzzy
 msgid "Bridge connection"
-msgstr "Pripojenie k drôtovej sieti"
+msgstr "Premostené pripojenie (bridge)"
 
 #: src/core/devices/nm-device-dummy.c:56
 #, fuzzy
@@ -269,75 +258,69 @@ msgstr "Drôtové pripojenie %d"
 
 #: src/core/devices/nm-device-ethernet.c:1628
 #: src/libnmc-setting/nm-meta-setting-desc.c:8303
-#, fuzzy
 msgid "Veth connection"
-msgstr "VPN spojenia"
+msgstr "Veth pripojenie"
 
 #: src/core/devices/nm-device-ethernet.c:1686
-#, fuzzy
 msgid "PPPoE connection"
-msgstr "VPN spojenia"
+msgstr "PPPoE pripojenie"
 
 #: src/core/devices/nm-device-ethernet.c:1686
 msgid "Wired connection"
-msgstr "Pripojenie k drôtovej sieti"
+msgstr "Drôtové pripojenie"
 
 #: src/core/devices/nm-device-infiniband.c:157
 #: src/libnmc-setting/nm-meta-setting-desc.c:8279
 msgid "InfiniBand connection"
-msgstr "Spojenie InfiniBand"
+msgstr "InfiniBand pripojenie"
 
 #: src/core/devices/nm-device-ip-tunnel.c:399
 msgid "IP tunnel connection"
 msgstr "Pripojenie IP tunela"
 
 #: src/core/devices/nm-device-macvlan.c:389
-#, fuzzy
 msgid "MACVLAN connection"
-msgstr "VPN spojenia"
+msgstr "MACVLAN pripojenie"
 
 #: src/core/devices/nm-device-tun.c:144
 msgid "TUN connection"
-msgstr "Spojenie TUN"
+msgstr "TUN pripojenie"
 
 #: src/core/devices/nm-device-vlan.c:398
 #: src/libnmc-setting/nm-meta-setting-desc.c:8304
-#, fuzzy
 msgid "VLAN connection"
-msgstr "VPN spojenia"
+msgstr "VLAN pripojenie"
 
 #: src/core/devices/nm-device-vrf.c:182
 #: src/libnmc-setting/nm-meta-setting-desc.c:8306
-#, fuzzy
 msgid "VRF connection"
-msgstr "VPN spojenia"
+msgstr "VRF pripojenie"
 
 #: src/core/devices/nm-device-vxlan.c:382
 #: src/libnmc-setting/nm-meta-setting-desc.c:8307
-#, fuzzy
 msgid "VXLAN connection"
-msgstr "VPN spojenia"
+msgstr "VXLAN pripojenie"
 
 #: src/core/devices/nm-device-wpan.c:54
 msgid "WPAN connection"
-msgstr "WPAN spojenie"
+msgstr "WPAN pripojenie"
 
 #: src/core/devices/team/nm-device-team.c:130
 msgid "Team connection"
-msgstr "Team spojenie"
+msgstr "Team pripojenie"
 
 #: src/core/devices/wifi/nm-device-olpc-mesh.c:112 src/nmcli/devices.c:1397
 msgid "Mesh"
-msgstr ""
+msgstr "Mesh"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:33
 #, c-format
 msgid "%s is incompatible with static WEP keys"
-msgstr ""
+msgstr "%s nie je kompatibilné so statickými kľúčmi WEP"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:68
 msgid "LEAP authentication requires a LEAP username"
-msgstr ""
+msgstr "LEAP autentifikácia vyžaduje meno používateľa LEAP"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:80
 msgid "LEAP username requires 'leap' authentication"
@@ -374,62 +357,60 @@ msgstr ""
 #: src/core/devices/wifi/nm-wifi-utils.c:213
 #, c-format
 msgid "a connection using '%s' authentication cannot specify a WPA password"
-msgstr ""
+msgstr "v pripojení využívajúcom autentifikáciu '%s' nie je možné zadať WPA"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:246
 msgid "Dynamic WEP requires an 802.1x setting"
-msgstr ""
+msgstr "Dynamický WEP vyžaduje nastavenie 802.1x"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:256
 #: src/core/devices/wifi/nm-wifi-utils.c:288
 msgid "Dynamic WEP requires 'open' authentication"
-msgstr ""
+msgstr "Dynamický WEP vyžaduje autentifikáciu 'Open'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:273
 msgid "Dynamic WEP requires 'ieee8021x' key management"
-msgstr ""
+msgstr "Dynamický WEP vyžaduje správu kľúčov 'ieee8021x'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:324
 msgid "WPA-PSK authentication is incompatible with 802.1x"
-msgstr ""
+msgstr "WPA-PSK autentifikácia nie je kompatibilná s 802.1x"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:334
 msgid "WPA-PSK requires 'open' authentication"
-msgstr ""
+msgstr "WPA-PSK vyžaduje 'otvorenú' autentifikáciu"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:348
 msgid "Access point does not support PSK but setting requires it"
-msgstr ""
+msgstr "Prístupový bod nepodporuje PSK, ale nastavenie ho vyžaduje"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:363
-#, fuzzy
 msgid "WPA Ad-Hoc authentication requires 'rsn' protocol"
-msgstr "Bezdrôtová sieť vyžaduje overenie totožnosti"
+msgstr "WPA Ad-Hoc autentifikácia vyžaduje protokol 'rsn'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:376
-#, fuzzy
 msgid "WPA Ad-Hoc authentication requires 'ccmp' pairwise cipher"
-msgstr "Bezdrôtová sieť vyžaduje overenie totožnosti"
+msgstr "WPA Ad-Hoc autentifikácia vyžaduje párovú šifru 'ccmp'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:389
 msgid "WPA Ad-Hoc requires 'ccmp' group cipher"
-msgstr ""
+msgstr "WPA Ad-Hoc vyžaduje skupinovú šifru 'ccmp'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:420
 msgid "WPA-EAP authentication requires an 802.1x setting"
-msgstr ""
+msgstr "WPA-EAP autentifikácia vyžaduje nastavenie 802.1x"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:430
 msgid "WPA-EAP requires 'open' authentication"
-msgstr ""
+msgstr "WPA-EAP vyžaduje 'otvorenú' autentifikáciu"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:443
 msgid "802.1x setting requires 'wpa-eap' key management"
-msgstr ""
+msgstr "Nastavenie 802.1x vyžaduje správu kľúčov 'wpa-eap'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:457
 msgid "Access point does not support 802.1x but setting requires it"
-msgstr ""
+msgstr "Prístupový bod nepodporuje 802.1x, ale nastavenie ho vyžaduje"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:487
 msgid "Ad-Hoc mode requires 'none' or 'wpa-psk' key management"
@@ -636,9 +617,8 @@ msgid "Show NetworkManager options"
 msgstr "Applet NetworkManager"
 
 #: src/core/nm-manager.c:6162 src/libnmc-setting/nm-meta-setting-desc.c:8305
-#, fuzzy
 msgid "VPN connection"
-msgstr "VPN spojenia"
+msgstr "VPN pripojenie"
 
 #: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5612
 #: src/libnm-client-impl/nm-device.c:1779
@@ -701,9 +681,9 @@ msgid "invalid secret '%s' at %s:%zu"
 msgstr "neplatné smerovanie: %s. %s"
 
 #: src/libnm-client-impl/nm-conn-utils.c:587
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to create WireGuard connection: %s"
-msgstr "Nepodarilo sa spustiť VPN spojenie '%s'"
+msgstr "Nepodarilo sa vytvoriť WireGuard pripojenie: %s"
 
 #: src/libnm-client-impl/nm-device-adsl.c:66
 #, fuzzy
@@ -1052,26 +1032,25 @@ msgstr "USB"
 #, c-format
 msgctxt "long device name"
 msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
 
 #: src/libnm-client-impl/nm-device.c:2857
-#, fuzzy, c-format
+#, c-format
 msgid "The connection was not valid: %s"
-msgstr "VPN spojenie '%s' nebolo správne nakonfigurované."
+msgstr "Pripojenie bolo neplatné: %s"
 
 #: src/libnm-client-impl/nm-device.c:2869
 msgid "The interface names of the device and the connection didn't match"
 msgstr ""
 
 #: src/libnm-client-impl/nm-secret-agent-old.c:1384
-#, fuzzy
 msgid "registration failed"
-msgstr "Žiadosť o registráciu bola zamietnutá."
+msgstr "registrácia zlyhala"
 
 #: src/libnm-client-impl/nm-vpn-plugin-old.c:817
 #: src/libnm-client-impl/nm-vpn-service-plugin.c:1025
 msgid "No service name specified"
-msgstr ""
+msgstr "Nezadali ste názov služby"
 
 #: src/libnm-core-aux-extern/nm-libnm-core-aux.c:287
 #, c-format
@@ -1915,7 +1894,7 @@ msgstr ""
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:311
 msgid "unsupported ethtool setting"
-msgstr ""
+msgstr "nepodporované nastavenie ethtoolu"
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:320
 #, fuzzy
@@ -1931,9 +1910,9 @@ msgid "pause-autoneg cannot be enabled when setting rx/tx options"
 msgstr ""
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:374
-#, fuzzy, c-format
+#, c-format
 msgid "unknown ethtool option '%s'"
-msgstr "(neznáme)"
+msgstr "neznáma voľba ethtoolu '%s'"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:311
 #, c-format
@@ -1953,15 +1932,15 @@ msgstr ""
 #: src/libnm-core-impl/nm-setting-gsm.c:381
 #, c-format
 msgid "'%s' is not a number"
-msgstr ""
+msgstr "'%s' nie je číslo"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:418
 msgid "property is empty or wrong size"
-msgstr ""
+msgstr "vlastnosť je prázdna alebo má nesprávnu veľkosť"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:431
 msgid "property must contain only digits"
-msgstr ""
+msgstr "vlastnosť môže obsahovať iba číslice"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:445
 msgid "can't be enabled when manual configuration is present"
@@ -1977,7 +1956,7 @@ msgstr ""
 
 #: src/libnm-core-impl/nm-setting-infiniband.c:248
 msgid "the values 0 and 0x8000 are not allowed"
-msgstr ""
+msgstr "hodnoty 0 a 0x8000 nie sú povolené"
 
 #: src/libnm-core-impl/nm-setting-infiniband.c:274
 #, c-format
@@ -1996,35 +1975,35 @@ msgstr ""
 #: src/libnm-core-impl/nm-setting-infiniband.c:310
 #, c-format
 msgid "mtu can be at most %u but it is %u"
-msgstr ""
+msgstr "najvyššie mtu môže byť %u, ale je %u"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:80
 msgid "Missing IPv4 address"
-msgstr ""
+msgstr "Chýbajúca adresa IPv4"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:80
 msgid "Missing IPv6 address"
-msgstr ""
+msgstr "Chýbajúca adresa IPv6"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:87
 #, c-format
 msgid "Invalid IPv4 address '%s'"
-msgstr ""
+msgstr "Neplatná adresa IPv4: '%s'"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:88
 #, c-format
 msgid "Invalid IPv6 address '%s'"
-msgstr ""
+msgstr "Neplatná adresa IPv6: '%s'"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:105
 #, c-format
 msgid "Invalid IPv4 address prefix '%u'"
-msgstr ""
+msgstr "Neplatný prefix adresy IPv4: '%u'"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:106
 #, c-format
 msgid "Invalid IPv6 address prefix '%u'"
-msgstr ""
+msgstr "Neplatný prefix adresy IPv6: '%u'"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:123
 #, c-format
@@ -4110,11 +4089,11 @@ msgstr "Pripojenie už nie je aktívne na zariadení"
 
 #: src/libnmc-base/nm-client-utils.c:417
 msgid "Device disconnected by user or client"
-msgstr "Zariadenie bolo odpojené užívaťeľom"
+msgstr "Zariadenie bolo odpojené používaťeľom"
 
 #: src/libnmc-base/nm-client-utils.c:418
 msgid "Carrier/link changed"
-msgstr "Stav spojenia sa zmenil"
+msgstr "Stav pripojenia sa zmenil"
 
 #: src/libnmc-base/nm-client-utils.c:420
 msgid "The device's existing connection was assumed"
@@ -4170,7 +4149,7 @@ msgstr "Nebolo možné nájsť Wi-Fi sieť"
 
 #: src/libnmc-base/nm-client-utils.c:445
 msgid "A secondary connection of the base connection failed"
-msgstr "Zlyhalo nadviazanie druhotného spojenia"
+msgstr "Zlyhalo nadviazanie druhotného pripojenia"
 
 #: src/libnmc-base/nm-client-utils.c:446
 msgid "DCB or FCoE setup failed"
@@ -4232,11 +4211,11 @@ msgstr "Dôvod neznámy"
 
 #: src/libnmc-base/nm-client-utils.c:476
 msgid "The connection was disconnected"
-msgstr "Spojenie bolo rozpojené."
+msgstr "Pripojenie bolo rozpojené."
 
 #: src/libnmc-base/nm-client-utils.c:478
 msgid "Disconnected by user"
-msgstr "Odpojené užívateľom"
+msgstr "Odpojené používateľom"
 
 #: src/libnmc-base/nm-client-utils.c:480
 #, fuzzy
@@ -4253,7 +4232,7 @@ msgstr "Služba VPN vrátila neplatnú konfiguráciu"
 
 #: src/libnmc-base/nm-client-utils.c:486
 msgid "The connection attempt timed out"
-msgstr "Vypršal čas pri pokuse o spojenie"
+msgstr "Vypršal čas pri pokuse o pripojenie"
 
 #: src/libnmc-base/nm-client-utils.c:488
 msgid "The VPN service did not start in time"
@@ -4274,15 +4253,15 @@ msgstr "nesprávna smerová adresa '%s'"
 
 #: src/libnmc-base/nm-client-utils.c:494
 msgid "The connection was removed"
-msgstr "Spojenie bolo odstránené"
+msgstr "Pripojenie bolo odstránené"
 
 #: src/libnmc-base/nm-client-utils.c:496
 msgid "Master connection failed"
-msgstr "Master spojenie zlyhalo"
+msgstr "Master pripojenie zlyhalo"
 
 #: src/libnmc-base/nm-client-utils.c:498
 msgid "Could not create a software link"
-msgstr "Nepodarilo sa vytvoriť softvérové spojenie"
+msgstr "Nepodarilo sa vytvoriť softvérové pripojenie"
 
 #: src/libnmc-base/nm-client-utils.c:500
 msgid "The device disappeared"
@@ -4748,7 +4727,7 @@ msgstr ""
 #. * we're setting (type) has been removed.
 #: src/libnmc-setting/nm-meta-setting-desc.c:2646
 msgid "Can not change the connection type"
-msgstr "Nie je možné zmeniť typ spojenia"
+msgstr "Nie je možné zmeniť typ pripojenia"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:2729
 #, fuzzy, c-format
@@ -4817,7 +4796,7 @@ msgstr ""
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:3259
 msgid "default"
-msgstr "východzie"
+msgstr "predvolené"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:3420
 #, fuzzy, c-format
@@ -4836,13 +4815,14 @@ msgstr "'%s' nie je platným kanálom; použite <1-13>"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:3777
 msgid "The valid syntax is: vf [attribute=value]... [,vf [attribute=value]...]"
-msgstr ""
+msgstr "Platná syntax je: vf [atribút=hodnota]... [,vf [atribút=hodnota]...]"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:3803
 #: src/libnmc-setting/nm-meta-setting-desc.c:3885
 msgid ""
 "The valid syntax is: '[root | parent <handle>] [handle <handle>] <kind>'"
 msgstr ""
+"Platná syntax je: '[root | parent <ovládač>] [handle <ovládač>] <typ>'"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:3829
 msgid "The valid syntax is: '<vid>[-<vid>] [pvid] [untagged]'"
@@ -5501,7 +5481,7 @@ msgstr ""
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8266
 msgid "bluetooth connection"
-msgstr "spojenie bluetooth"
+msgstr "bluetooth pripojenie"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8267
 msgid "Bond device"
@@ -5573,13 +5553,12 @@ msgid "MACsec connection"
 msgstr ""
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8284
-#, fuzzy
 msgid "macvlan connection"
-msgstr "Bez sieťového spojenia"
+msgstr "macvlan pripojenie"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8285
 msgid "Match"
-msgstr ""
+msgstr "Zhoda"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8286
 #, fuzzy
@@ -5657,20 +5636,19 @@ msgstr "Wi-Fi spojenie"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8309
 msgid "WiMAX connection"
-msgstr "Spojenie WiMAX"
+msgstr "WiMAX pripojenie"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8310
 msgid "Wired Ethernet"
 msgstr "Ethernet po drôte"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8311
-#, fuzzy
 msgid "WireGuard VPN settings"
-msgstr "Nastavenia WPAN"
+msgstr "Nastavenia VPN WireGuard"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8312
 msgid "Wi-Fi connection"
-msgstr "Wi-Fi spojenie"
+msgstr "Wi-Fi pripojenie"
 
 #: src/libnmc-setting/nm-meta-setting-desc.c:8313
 msgid "Wi-Fi security settings"
@@ -8911,7 +8889,7 @@ msgstr ""
 "\n"
 "Spustí nmcli v režime prostredníka prístupových oprávnení. V prípade, že\n"
 "NetworkManager potrebuje heslo, vyžiada si ho od prostredníka. Tento\n"
-"príkaz spôsobí, že nmcli ostane bežať a vyžiada si od užívateľa heslo keď\n"
+"príkaz spôsobí, že nmcli ostane bežať a vyžiada si od používateľa heslo keď\n"
 "ho NetworkManager potrebuje.\n"
 
 #: src/nmcli/agent.c:42
@@ -8941,7 +8919,7 @@ msgstr ""
 "\n"
 "Spustí agenta, ktorý bude obsluhovať požiadavky od polkitu aj "
 "NetworkManagera.\n"
-"Keď bude vyžadovaná autorizácia užívateľa alebo siete, nmcli ju obslúži.\n"
+"Keď bude vyžadovaná autorizácia používateľa alebo siete, nmcli ju obslúži.\n"
 "\n"
 
 #: src/nmcli/agent.c:141
@@ -9048,7 +9026,7 @@ msgstr "Vlastnosť? "
 
 #: src/nmcli/connections.c:63
 msgid "Enter connection type: "
-msgstr "Druh spojenia: "
+msgstr "Zadajte typ pripojenia: "
 
 #. define some other prompts
 #: src/nmcli/connections.c:67
@@ -9101,7 +9079,7 @@ msgstr "VPN pripojená"
 
 #: src/nmcli/connections.c:97
 msgid "VPN connection failed"
-msgstr "VPN spojenie zlyhalo"
+msgstr "VPN pripojenie zlyhalo"
 
 #: src/nmcli/connections.c:98
 msgid "VPN disconnected"
@@ -9532,7 +9510,7 @@ msgstr "Nepodarilo sa zmeniť heslo pre %s: %s\n"
 
 #: src/nmcli/connections.c:1559
 msgid "Connection profile details"
-msgstr "Detaily spojenia"
+msgstr "Podrobnosti profilu pripojenia"
 
 #: src/nmcli/connections.c:1577 src/nmcli/connections.c:1684
 #, fuzzy, c-format
@@ -9540,9 +9518,8 @@ msgid "Error: 'connection show': %s"
 msgstr "VPN spojenie s '%s'"
 
 #: src/nmcli/connections.c:1666
-#, fuzzy
 msgid "Active connection details"
-msgstr "Bez aktívnych sieťových spojení!"
+msgstr "Podrobnosti aktívneho pripojenia"
 
 #: src/nmcli/connections.c:1795 src/nmcli/devices.c:1663
 #: src/nmcli/devices.c:1680 src/nmcli/devices.c:1698 src/nmcli/devices.c:1717
@@ -9572,7 +9549,7 @@ msgstr ""
 
 #: src/nmcli/connections.c:2248
 msgid "No connection specified"
-msgstr "Nebolo špecifikované spojenie"
+msgstr "Nebolo špecifikované pripojenie"
 
 #: src/nmcli/connections.c:2261
 #, c-format
@@ -9582,7 +9559,7 @@ msgstr "%s parameter chýba"
 #: src/nmcli/connections.c:2282
 #, c-format
 msgid "unknown connection '%s'"
-msgstr "neznáme spojenie '%s'"
+msgstr "neznáme pripojenie '%s'"
 
 #: src/nmcli/connections.c:2311
 msgid "'--order' argument is missing"
@@ -9594,7 +9571,7 @@ msgstr "Aktívne profily NetworkManagera"
 
 #: src/nmcli/connections.c:2376
 msgid "NetworkManager connection profiles"
-msgstr "Profily spojení NetworkManagera"
+msgstr "Profily pripojení NetworkManagera"
 
 #: src/nmcli/connections.c:2432 src/nmcli/connections.c:3153
 #: src/nmcli/connections.c:3165 src/nmcli/connections.c:3177
@@ -9629,11 +9606,11 @@ msgstr "Chyba: %s."
 #: src/nmcli/connections.c:2651 src/nmcli/devices.c:4730
 #, c-format
 msgid "no active connection on device '%s'"
-msgstr "žiadne aktívne spojenie na zariadení '%s'"
+msgstr "žiadne aktívne pripojenie na zariadení '%s'"
 
 #: src/nmcli/connections.c:2659
 msgid "no active connection or device"
-msgstr "nie je aktívne spojenie alebo zariadenie"
+msgstr "nie je aktívne pripojenie alebo zariadenie"
 
 #: src/nmcli/connections.c:2682
 #, fuzzy, c-format
@@ -9643,7 +9620,7 @@ msgstr "Nepodarilo sa spustiť VPN spojenie '%s'"
 #: src/nmcli/connections.c:2720
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
-msgstr "zariadenie '%s' nie je kompatibilné so spojením '%s'"
+msgstr "zariadenie '%s' nie je kompatibilné s pripojením '%s'"
 
 #: src/nmcli/connections.c:2727
 #, fuzzy, c-format
@@ -9663,18 +9640,18 @@ msgstr "Tip: použite '%s' pre zistenie podrobností."
 #: src/nmcli/connections.c:2804
 #, c-format
 msgid "Connection successfully activated (%s) (D-Bus active path: %s)\n"
-msgstr "Spojenie úspešne aktivované (%s) (aktívna cesta D-Bus: %s)\n"
+msgstr "Pripojenie bolo úspešne aktivované (%s) (aktívna cesta D-Bus: %s)\n"
 
 #: src/nmcli/connections.c:2808 src/nmcli/connections.c:2959
 #: src/nmcli/connections.c:7399
 #, c-format
 msgid "Connection successfully activated (D-Bus active path: %s)\n"
-msgstr "Spojenie úspešne aktivované (aktívna cesta D-Bus: %s)\n"
+msgstr "Pripojenie bolo úspešne aktivované (aktívna cesta D-Bus: %s)\n"
 
 #: src/nmcli/connections.c:2815 src/nmcli/connections.c:2938
 #, c-format
 msgid "Error: Connection activation failed: %s"
-msgstr "Chyba: Aktivácia spojenia zlyhala: %s"
+msgstr "Chyba: Aktivácia pripojenia zlyhala: %s"
 
 #: src/nmcli/connections.c:2851
 #, c-format
@@ -9716,17 +9693,17 @@ msgstr "pripravujem"
 #: src/nmcli/connections.c:3329
 #, c-format
 msgid "Connection '%s' (%s) successfully deleted.\n"
-msgstr "Spojenie '%s' (%s) úspešne vymazané.\n"
+msgstr "Pripojenie '%s' (%s) bolo úspešne vymazané.\n"
 
 #: src/nmcli/connections.c:3345
 #, c-format
 msgid "Connection '%s' successfully deactivated (D-Bus active path: %s)\n"
-msgstr "Spojenie '%s' úspešne deaktivované (aktívna cesta D-Bus: %s)\n"
+msgstr "Pripojenie '%s' bolo úspešne deaktivované (aktívna cesta D-Bus: %s)\n"
 
 #: src/nmcli/connections.c:3394 src/nmcli/connections.c:9326
 #: src/nmcli/connections.c:9361 src/nmcli/connections.c:9550
 msgid "Error: No connection specified."
-msgstr "Chyba: Nebolo špecifikované spojenie."
+msgstr "Chyba: Nebolo špecifikované pripojenie."
 
 #: src/nmcli/connections.c:3426
 #, fuzzy, c-format
@@ -9865,7 +9842,7 @@ msgstr "Chyba: Nepodarilo sa pridať spojenie '%s': %s"
 #: src/nmcli/connections.c:5484
 #, c-format
 msgid "Connection '%s' (%s) successfully added.\n"
-msgstr "Spojenie '%s' (%s) úspešne pridané.\n"
+msgstr "Pripojenie '%s' (%s) bolo úspešne pridané.\n"
 
 #: src/nmcli/connections.c:5632
 msgid ""
@@ -10163,7 +10140,7 @@ msgstr "[ Typ: %s | Názov: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
 #: src/nmcli/connections.c:7541
 #, c-format
 msgid "The connection is not saved. Do you really want to quit? %s"
-msgstr "Spojenie nie je uložené. Naozaj chcete skončiť? %s"
+msgstr "Pripojenie nie je uložené. Naozaj chcete skončiť? %s"
 
 #: src/nmcli/connections.c:7585
 msgid ""
@@ -10338,9 +10315,9 @@ msgid "Verify setting '%s': %s\n"
 msgstr ""
 
 #: src/nmcli/connections.c:8473
-#, fuzzy, c-format
+#, c-format
 msgid "Verify connection: %s\n"
-msgstr "VPN spojenie s '%s'"
+msgstr "Overiť pripojenie: %s\n"
 
 #: src/nmcli/connections.c:8475
 msgid "The error cannot be fixed automatically.\n"
@@ -10509,7 +10486,7 @@ msgstr ""
 
 #: src/nmcli/connections.c:9241
 msgid "New connection name: "
-msgstr "Názov nového spojenia: "
+msgstr "Názov nového pripojenia: "
 
 #: src/nmcli/connections.c:9243
 msgid "Error: <new name> argument is missing."
@@ -10549,17 +10526,17 @@ msgstr ""
 #: src/nmcli/connections.c:9407
 #, c-format
 msgid "%s: connection profile changed\n"
-msgstr "%s: profil spojenie sa zmenil\n"
+msgstr "%s: profil pripojenia sa zmenil\n"
 
 #: src/nmcli/connections.c:9433
 #, c-format
 msgid "%s: connection profile created\n"
-msgstr "%s: profil spojenia bol vytvorený\n"
+msgstr "%s: profil pripojenia bol vytvorený\n"
 
 #: src/nmcli/connections.c:9442
 #, c-format
 msgid "%s: connection profile removed\n"
-msgstr "%s: profil spojenia bol odstránený\n"
+msgstr "%s: profil pripojenia bol odstránený\n"
 
 #: src/nmcli/connections.c:9510
 #, fuzzy, c-format
@@ -11119,7 +11096,7 @@ msgstr ""
 #: src/nmcli/devices.c:2867
 #, c-format
 msgid "%s: using connection '%s'\n"
-msgstr "%s: použiva sa spojenie %s'\n"
+msgstr "%s: použiva sa pripojenie %s'\n"
 
 #: src/nmcli/devices.c:2893
 #, c-format
@@ -11718,11 +11695,11 @@ msgstr "Meno hostiteľa nastavené na '%s'\n"
 #: src/nmcli/general.c:1262
 #, c-format
 msgid "'%s' is now the primary connection\n"
-msgstr "'%s' je teraz primárnym spojením\n"
+msgstr "'%s' je teraz primárnym pripojením\n"
 
 #: src/nmcli/general.c:1264
 msgid "There's no primary connection\n"
-msgstr "Primárne spojenie neexistuje\n"
+msgstr "Primárne pripojenie neexistuje\n"
 
 #: src/nmcli/general.c:1277
 #, c-format
@@ -11736,11 +11713,11 @@ msgstr "NetworkManager je teraz v stave '%s'\n"
 
 #: src/nmcli/general.c:1312
 msgid "connection available"
-msgstr "dostupné spojenie"
+msgstr "dostupné pripojenie"
 
 #: src/nmcli/general.c:1314
 msgid "connections available"
-msgstr "dostupné spojenia"
+msgstr "dostupné pripojenia"
 
 #: src/nmcli/general.c:1330
 msgid "autoconnect"
@@ -11893,7 +11870,7 @@ msgstr ""
 "  g[eneral]       všeobecný stav a operácie NetworkManagera\n"
 "  n[etworking]    celkové ovládanie siete\n"
 "  r[adio]         prepínače vysielania NetworkManagera\n"
-"  c[onnection]    spojenia NetworkManagera\n"
+"  c[onnection]    pripojenia NetworkManagera\n"
 "  d[evice]        zariadenia spravované NetworkManagerom\n"
 "  a[gent]         NetworkManager secret agent alebo agent polkit-u\n"
 "  m[onitor]       sledovanie zmien NetworkManagera\n"
@@ -12112,7 +12089,7 @@ msgstr ""
 #: src/nmtui/nm-editor-utils.c:148
 #, c-format
 msgid "Ethernet connection %d"
-msgstr "Ethernetové spojenie %d"
+msgstr "Ethernetové pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:156
 #, fuzzy, c-format
@@ -12122,17 +12099,17 @@ msgstr "VPN spojenie %d"
 #: src/nmtui/nm-editor-utils.c:164
 #, c-format
 msgid "Wi-Fi connection %d"
-msgstr "Wi-Fi spojenie %d"
+msgstr "Wi-Fi pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:173
 #, c-format
 msgid "InfiniBand connection %d"
-msgstr "InfiniBand spojenie %d"
+msgstr "InfiniBand pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:181
 #, c-format
 msgid "Mobile broadband connection %d"
-msgstr "Mobilné broadbandové spojenie %d"
+msgstr "Mobilné broadbandové pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:187 src/nmtui/nmt-page-dsl.c:47
 msgid "DSL"
@@ -12141,7 +12118,7 @@ msgstr "DSL"
 #: src/nmtui/nm-editor-utils.c:191
 #, c-format
 msgid "DSL connection %d"
-msgstr "DSL spojenie %d"
+msgstr "DSL pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:200
 #, fuzzy, c-format
@@ -12156,12 +12133,12 @@ msgstr "Premostenie (bridge) %d"
 #: src/nmtui/nm-editor-utils.c:219
 #, c-format
 msgid "Team connection %d"
-msgstr "Teamové spojenie %d"
+msgstr "Teamové pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:227
 #, c-format
 msgid "VLAN connection %d"
-msgstr "VLAN spojenie %d"
+msgstr "VLAN pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:231 src/nmtui/nmt-page-ip-tunnel.c:113
 msgid "IP tunnel"
@@ -12170,12 +12147,12 @@ msgstr "IP tunel"
 #: src/nmtui/nm-editor-utils.c:235
 #, c-format
 msgid "IP tunnel connection %d"
-msgstr "IP tunel spojenie %d"
+msgstr "IP tunel pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:250
 #, c-format
 msgid "VPN connection %d"
-msgstr "VPN spojenie %d"
+msgstr "VPN pripojenie %d"
 
 #: src/nmtui/nm-editor-utils.c:267
 #, fuzzy, c-format
@@ -12222,17 +12199,17 @@ msgstr ""
 
 #: src/nmtui/nmt-editor.c:107
 msgid "Edit Connection"
-msgstr "Upraviť Spojenie"
+msgstr "Upraviť pripojenie"
 
 #: src/nmtui/nmt-editor.c:165
 #, c-format
 msgid "Unable to save connection: %s"
-msgstr "Nepodarilo sa uložiť spojenie: %s"
+msgstr "Nepodarilo sa uložiť pripojenie: %s"
 
 #: src/nmtui/nmt-editor.c:182
 #, c-format
 msgid "Unable to add new connection: %s"
-msgstr "Zlyhalo pridanie nového spojenia: %s"
+msgstr "Zlyhalo pridanie nového pripojenia: %s"
 
 #: src/nmtui/nmt-editor.c:331
 msgid "Profile name"
@@ -12253,7 +12230,7 @@ msgstr "Automaticky pripojiť"
 
 #: src/nmtui/nmt-editor.c:418
 msgid "Available to all users"
-msgstr "Dostupné všetkým užívateľom"
+msgstr "Dostupné všetkým používateľom"
 
 #: src/nmtui/nmt-editor.c:436 src/nmtui/nmt-password-dialog.c:162
 #: src/nmtui/nmt-route-editor.c:97 src/nmtui/nmt-wireguard-peer-editor.c:146
@@ -12264,11 +12241,11 @@ msgstr "Zrušiť"
 
 #: src/nmtui/nmt-mtu-entry.c:70
 msgid "(default)"
-msgstr "(východzie)"
+msgstr "(predvolené)"
 
 #: src/nmtui/nmt-mtu-entry.c:72 src/nmtui/nmt-mtu-entry.c:102
 msgid "bytes"
-msgstr ""
+msgstr "bajtov"
 
 #: src/nmtui/nmt-page-bond-port.c:42
 msgid "BOND PORT"
@@ -12537,7 +12514,7 @@ msgstr "Ignorovať automaticky obdržané parametre DNS"
 
 #: src/nmtui/nmt-page-ip4.c:193
 msgid "Require IPv4 addressing for this connection"
-msgstr "Vyžadovať IPv4 adresovanie pre toto spojenie"
+msgstr "Vyžadovať IPv4 adresovanie pre toto pripojenie"
 
 #: src/nmtui/nmt-page-ip6.c:27
 msgid "Ignore"
@@ -12553,7 +12530,7 @@ msgstr "Konfigurácia IPv6"
 
 #: src/nmtui/nmt-page-ip6.c:192
 msgid "Require IPv6 addressing for this connection"
-msgstr "Vyžadovať IPv6 adresovanie pre toto spojenie"
+msgstr "Vyžadovať IPv6 adresovanie pre toto pripojenie"
 
 #: src/nmtui/nmt-page-ppp.c:116
 msgid "PPP CONFIGURATION"
@@ -12687,32 +12664,31 @@ msgstr "Dynamický WEP (802.1x)"
 
 #: src/nmtui/nmt-page-wifi.c:68
 msgid "LEAP"
-msgstr ""
+msgstr "LEAP"
 
 #: src/nmtui/nmt-page-wifi.c:69
 msgid "Enhanced Open (OWE)"
-msgstr ""
+msgstr "Enhanced Open (OWE)"
 
 #: src/nmtui/nmt-page-wifi.c:72
-#, fuzzy
 msgctxt "WEP key index"
 msgid "1 (Default)"
-msgstr "Automatické (Predvolené)"
+msgstr "1 (Predvolené)"
 
 #: src/nmtui/nmt-page-wifi.c:73
 msgctxt "WEP key index"
 msgid "2"
-msgstr ""
+msgstr "2"
 
 #: src/nmtui/nmt-page-wifi.c:74
 msgctxt "WEP key index"
 msgid "3"
-msgstr ""
+msgstr "3"
 
 #: src/nmtui/nmt-page-wifi.c:75
 msgctxt "WEP key index"
 msgid "4"
-msgstr ""
+msgstr "4"
 
 #: src/nmtui/nmt-page-wifi.c:78
 msgid "Open System"
@@ -12806,7 +12782,7 @@ msgstr "Nie sú definované žiane vlastné smerovania."
 
 #: src/nmtui/nmt-port-list.c:126
 msgid "Select the type of slave connection you wish to add."
-msgstr "Vyberte typ podriadeného spojenia, ktoré si želáte pridať."
+msgstr "Vyberte typ podriadeného pripojenia, ktoré si želáte pridať."
 
 #: src/nmtui/nmt-widget-list.c:131
 msgid "Add..."
@@ -12881,7 +12857,7 @@ msgstr "Pripájam sa..."
 #: src/nmtui/nmtui-connect.c:290 src/nmtui/nmtui-connect.c:330
 #, c-format
 msgid "Could not activate connection: %s"
-msgstr "Nepodarilo sa aktivovať spojenie: %s"
+msgstr "Nepodarilo sa aktivovať pripojenie: %s"
 
 #: src/nmtui/nmtui-connect.c:390 src/nmtui/nmtui-connect.c:443
 msgid "Activate"
@@ -12903,11 +12879,11 @@ msgstr "Späť"
 #: src/nmtui/nmtui-connect.c:471
 #, c-format
 msgid "No such connection '%s'"
-msgstr "Také spojenie neexistuje '%s'"
+msgstr "Také pripojenie neexistuje '%s'"
 
 #: src/nmtui/nmtui-connect.c:473
 msgid "Connection is already active"
-msgstr "Spojenie už je nadviazané"
+msgstr "Pripojenie už je aktívne"
 
 #: src/nmtui/nmtui-edit.c:215
 msgid "Create"
@@ -12915,7 +12891,7 @@ msgstr "Vytvoriť"
 
 #: src/nmtui/nmtui-edit.c:356
 msgid "Select the type of connection you wish to create."
-msgstr "Vyberte typ spojenia, ktoré si želáte vytvoriť."
+msgstr "Vyberte typ pripojenia, ktoré si želáte vytvoriť."
 
 #: src/nmtui/nmtui-edit.c:365
 msgid ""
@@ -12925,12 +12901,12 @@ msgstr ""
 
 #: src/nmtui/nmtui-edit.c:401 src/nmtui/nmtui-edit.c:417
 msgid "New Connection"
-msgstr "Nové spojenie"
+msgstr "Nové pripojenie"
 
 #: src/nmtui/nmtui-edit.c:459
 #, c-format
 msgid "Unable to delete connection: %s"
-msgstr "Nepodarilo sa odstrániť spojenie: %s"
+msgstr "Nepodarilo sa odstrániť pripojenie: %s"
 
 #: src/nmtui/nmtui-edit.c:497
 #, fuzzy, c-format
@@ -12940,7 +12916,7 @@ msgstr "Nepodarilo sa spustiť VPN spojenie '%s'"
 #: src/nmtui/nmtui-edit.c:519
 #, c-format
 msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "Naozaj chcete vymazať spojenie '%s'?"
+msgstr "Naozaj chcete vymazať pripojenie '%s'?"
 
 #: src/nmtui/nmtui-hostname.c:31
 msgid "Set Hostname"
@@ -12963,15 +12939,15 @@ msgstr "Nepodarilo sa nastaviť meno hostiteľa: %s"
 
 #: src/nmtui/nmtui.c:40 src/nmtui/nmtui.c:41
 msgid "connection"
-msgstr "spojenie"
+msgstr "pripojenie"
 
 #: src/nmtui/nmtui.c:40
 msgid "Edit a connection"
-msgstr "Upraviť spojenie"
+msgstr "Upraviť pripojenie"
 
 #: src/nmtui/nmtui.c:41
 msgid "Activate a connection"
-msgstr "Aktivovať spojenie"
+msgstr "Aktivovať pripojenie"
 
 #: src/nmtui/nmtui.c:42
 msgid "new hostname"
diff --git a/po/sl.po b/po/sl.po
index 70af0203..05308951 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -3,7 +3,7 @@
 #
 # Matic Žgur <mr.zgur@gmail.com>, 2007.
 # Andrej Žnidaršič <andrej.znidarsic@gmail.com>, 2009 - 2010.
-# Martin Srebotnjak  <miles@filmsi.net>, 2011 - 2012.
+# Martin Srebotnjak  <miles@filmsi.net>, 2011 - 2012, 2024 - 2025.
 # Matej Urbančič <matej.urban@gmail.com>, 2010 - 2012.
 # Lubomir Rintel <lkundrak@v3.sk>, 2016. #zanata
 # Thomas Haller <thaller@redhat.com>, 2017. #zanata
@@ -12,8 +12,8 @@ msgstr ""
 "Project-Id-Version: NetworkManager\n"
 "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/"
 "NetworkManager/issues\n"
-"POT-Creation-Date: 2025-02-09 15:27+0000\n"
-"PO-Revision-Date: 2025-02-09 18:16+0100\n"
+"POT-Creation-Date: 2025-09-27 03:32+0000\n"
+"PO-Revision-Date: 2025-09-28 19:02+0200\n"
 "Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
 "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
 "Language: sl\n"
@@ -204,7 +204,7 @@ msgid "%s %u"
 msgstr "%s %u"
 
 #: src/core/devices/adsl/nm-device-adsl.c:118
-#: src/libnmc-setting/nm-meta-setting-desc.c:8900
+#: src/libnmc-setting/nm-meta-setting-desc.c:8993
 msgid "ADSL connection"
 msgstr "Povezava ADSL"
 
@@ -260,11 +260,11 @@ msgstr "Neznana/neobdelana vrsta povezave Bluetooth"
 msgid "connection does not match device"
 msgstr "povezava se ne ujema z napravo"
 
-#: src/core/devices/nm-device-6lowpan.c:162
+#: src/core/devices/nm-device-6lowpan.c:154
 msgid "6LOWPAN connection"
 msgstr "Povezava 6LOWPAN"
 
-#: src/core/devices/nm-device-bond.c:95
+#: src/core/devices/nm-device-bond.c:94
 msgid "Bond connection"
 msgstr "Povezava vezi"
 
@@ -282,35 +282,33 @@ msgstr "Lažna povezava"
 msgid "Wired connection %d"
 msgstr "Žična povezava %d"
 
-#: src/core/devices/nm-device-ethernet.c:1641
-#: src/libnmc-setting/nm-meta-setting-desc.c:8943
+#: src/core/devices/nm-device-ethernet.c:1640
+#: src/libnmc-setting/nm-meta-setting-desc.c:9037
 msgid "Veth connection"
 msgstr "Povezava Veth"
 
-#: src/core/devices/nm-device-ethernet.c:1698
+#: src/core/devices/nm-device-ethernet.c:1697
 msgid "PPPoE connection"
 msgstr "Povezava PPPoE"
 
-#: src/core/devices/nm-device-ethernet.c:1698
+#: src/core/devices/nm-device-ethernet.c:1697
 msgid "Wired connection"
 msgstr "Žična povezava"
 
 #: src/core/devices/nm-device-infiniband.c:160
-#: src/libnmc-setting/nm-meta-setting-desc.c:8915
+#: src/libnmc-setting/nm-meta-setting-desc.c:9008
 msgid "InfiniBand connection"
 msgstr "Povezava InfiniBand"
 
 #: src/core/devices/nm-device-ip-tunnel.c:403
-#, fuzzy
 msgid "IP tunnel connection"
-msgstr "Povezava IP-tunel %d"
+msgstr "Povezava IP-tunela"
 
 #: src/core/devices/nm-device-loopback.c:67
-#, fuzzy
 msgid "Loopback connection"
 msgstr "Povezava s povratno zanko"
 
-#: src/core/devices/nm-device-macvlan.c:365
+#: src/core/devices/nm-device-macvlan.c:355
 msgid "MACVLAN connection"
 msgstr "Povezava MACVLAN"
 
@@ -318,18 +316,18 @@ msgstr "Povezava MACVLAN"
 msgid "TUN connection"
 msgstr "Povezava TUN"
 
-#: src/core/devices/nm-device-vlan.c:380
-#: src/libnmc-setting/nm-meta-setting-desc.c:8944
+#: src/core/devices/nm-device-vlan.c:370
+#: src/libnmc-setting/nm-meta-setting-desc.c:9038
 msgid "VLAN connection"
 msgstr "Povezava VLAN"
 
 #: src/core/devices/nm-device-vrf.c:185
-#: src/libnmc-setting/nm-meta-setting-desc.c:8946
+#: src/libnmc-setting/nm-meta-setting-desc.c:9040
 msgid "VRF connection"
 msgstr "Povezava VRF"
 
 #: src/core/devices/nm-device-vxlan.c:385
-#: src/libnmc-setting/nm-meta-setting-desc.c:8947
+#: src/libnmc-setting/nm-meta-setting-desc.c:9041
 msgid "VXLAN connection"
 msgstr "Povezava VXLAN"
 
@@ -420,17 +418,14 @@ msgid "Access point does not support PSK but setting requires it"
 msgstr "Dostopna točka ne podpira PSK, vendar nastavitev to zahteva"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:364
-#, fuzzy
 msgid "WPA Ad-Hoc authentication requires 'rsn' protocol"
-msgstr "WPA Ad-Hoc preverjanje pristnosti zahteva protokol 'rsn'"
+msgstr "Preverjanje pristnosti WPA Ad-Hoc zahteva protokol 'rsn'"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:377
-#, fuzzy
 msgid "WPA Ad-Hoc authentication requires 'ccmp' pairwise cipher"
-msgstr "WPA Ad-Hoc preverjanje pristnosti zahteva parno šifro »ccmp«"
+msgstr "Preverjanje pristnosti WPA Ad-Hoc zahteva parno šifro »ccmp«"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:390
-#, fuzzy
 msgid "WPA Ad-Hoc requires 'ccmp' group cipher"
 msgstr "WPA Ad-Hoc zahteva skupinsko šifro »ccmp«"
 
@@ -452,24 +447,20 @@ msgstr ""
 "Dostopna točka ne podpira standarda 802.1x, vendar jo nastavitev zahteva"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:488
-#, fuzzy
 msgid "Ad-Hoc mode requires 'none' or 'wpa-psk' key management"
 msgstr "Način Ad-Hoc zahteva upravljanje ključev »none« ali »wpa-psk«"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:500
-#, fuzzy
 msgid "Ad-Hoc mode is incompatible with 802.1x security"
 msgstr "Način Ad-Hoc ni združljiv z varnostjo 802.1x"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:509
-#, fuzzy
 msgid "Ad-Hoc mode is incompatible with LEAP security"
 msgstr "Način Ad-Hoc ni združljiv z varnostjo LEAP"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:521
-#, fuzzy
 msgid "Ad-Hoc mode requires 'open' authentication"
-msgstr "Način Ad-Hoc zahteva »odprto« preverjanje pristnosti"
+msgstr "Način Ad-Hoc zahteva preverjanje pristnosti »open«"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:565
 #: src/core/devices/wifi/nm-wifi-utils.c:600
@@ -486,12 +477,11 @@ msgid "Access point is unencrypted but setting specifies security"
 msgstr "Dostopna točka ni šifrirana, vendar nastavitev določa varnost"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:761
-#, fuzzy
 msgid ""
 "WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic "
 "WEP"
 msgstr ""
-"Preverjanje pristnosti WPA ni združljivo z LEAP, ki ni EAP (izvirnik) ali "
+"Preverjanje pristnosti WPA ni združljivo z LEAP brez EAP (izvirnik) ali "
 "dinamičnim WEP"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:774
@@ -501,9 +491,8 @@ msgstr ""
 "v skupni rabi"
 
 #: src/core/devices/wifi/nm-wifi-utils.c:849
-#, fuzzy
 msgid "Failed to determine AP security information"
-msgstr "Nastavljanje simetričnega ključa za opis je spodletelo."
+msgstr "Varnostnih podatkov AP ni bilo mogoče določiti"
 
 #: src/core/dhcp/nm-dhcp-dhclient-utils.c:323
 msgid "# Created by NetworkManager\n"
@@ -590,98 +579,93 @@ msgstr ""
 msgid "Could not daemonize: %s [error %u]\n"
 msgstr "Opravila ni mogoče pretvoriti za ozadnje delovanje: %s [napaka %u]\n"
 
-#: src/core/nm-config.c:544 src/libnm-core-impl/nm-setting-ovs-bridge.c:187
-#: src/libnmc-setting/nm-meta-setting-desc.c:2164
-#: src/libnmc-setting/nm-meta-setting-desc.c:4310
+#: src/core/nm-config.c:545 src/libnm-core-impl/nm-setting-ovs-bridge.c:187
+#: src/libnmc-setting/nm-meta-setting-desc.c:2176
+#: src/libnmc-setting/nm-meta-setting-desc.c:4366
 #, c-format
 msgid "'%s' is not valid"
 msgstr "»%s« ni veljavno"
 
-#: src/core/nm-config.c:566
+#: src/core/nm-config.c:567
 #, c-format
 msgid "Bad '%s' option: "
 msgstr "Slaba možnost »%s«: "
 
-#: src/core/nm-config.c:583
+#: src/core/nm-config.c:584
 msgid "Config file location"
 msgstr "Mesto datoteke nastavitev"
 
-#: src/core/nm-config.c:590
+#: src/core/nm-config.c:591
 msgid "Config directory location"
 msgstr "Mesto mape prilagoditev"
 
-#: src/core/nm-config.c:597
-#, fuzzy
+#: src/core/nm-config.c:598
 msgid "System config directory location"
-msgstr "Mesto datoteke nastavitev"
+msgstr "Mesto mape za prilagoditev sistema"
 
-#: src/core/nm-config.c:604
-#, fuzzy
+#: src/core/nm-config.c:605
 msgid "Internal config file location"
-msgstr "Mesto datoteke nastavitev"
+msgstr "Mesto notranje datoteke nastavitev"
 
-#: src/core/nm-config.c:611
+#: src/core/nm-config.c:612
 msgid "State file location"
 msgstr "Mesto datoteke stanja"
 
-#: src/core/nm-config.c:618
-#, fuzzy
+#: src/core/nm-config.c:619
 msgid "State file for no-auto-default devices"
-msgstr "Državna datoteka za naprave brez samodejnega privzetega stanja"
+msgstr "Datoteka stanja za no-auto-default"
 
-#: src/core/nm-config.c:625
+#: src/core/nm-config.c:626
 msgid "List of plugins separated by ','"
 msgstr "Seznam vstavkov, ločenih z vejico"
 
-#: src/core/nm-config.c:632
-#, fuzzy
+#: src/core/nm-config.c:633
 msgid "Quit after initial configuration"
-msgstr "Zaprite po začetni konfiguraciji"
+msgstr "Izhod po začetni prilagoditvi"
 
-#: src/core/nm-config.c:639
-#, fuzzy
+#: src/core/nm-config.c:640
 msgid "Don't become a daemon, and log to stderr"
-msgstr "Ne postani ozadnji program"
+msgstr "Ne postani prikriti proces in beleži na stderr"
 
-#: src/core/nm-config.c:648
+#: src/core/nm-config.c:649
 msgid "An http(s) address for checking internet connectivity"
 msgstr "Naslov HTTP(s) za preverjanje povezljivosti v omrežje"
 
-#: src/core/nm-config.c:655
+#: src/core/nm-config.c:656
 msgid "The interval between connectivity checks (in seconds)"
 msgstr "Čas med preverjanji povezave v sekundah"
 
-#: src/core/nm-config.c:662
+#: src/core/nm-config.c:663
 msgid "The expected start of the response"
 msgstr "Pričakovan začetek odziva"
 
-#: src/core/nm-config.c:671
+#: src/core/nm-config.c:672
 msgid "NetworkManager options"
 msgstr "Možnosti programa NetworkManager"
 
-#: src/core/nm-config.c:672
+#: src/core/nm-config.c:673
 msgid "Show NetworkManager options"
 msgstr "Pokaži možnosti programa NetworkManager"
 
-#: src/core/nm-manager.c:6986 src/libnmc-setting/nm-meta-setting-desc.c:8945
+#: src/core/nm-manager.c:6998 src/libnmc-setting/nm-meta-setting-desc.c:9039
 msgid "VPN connection"
 msgstr "Povezava VPN"
 
-#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5653
+#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5657
 #: src/libnm-client-impl/nm-device.c:1782
-#: src/libnm-core-impl/nm-connection.c:3343 src/nmtui/nm-editor-utils.c:196
+#: src/libnm-core-impl/nm-connection.c:3343 src/nmtui/nm-editor-utils.c:204
 msgid "Bond"
 msgstr "Vez"
 
-#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5724
+#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5728
 #: src/libnm-client-impl/nm-device.c:1784
-#: src/libnm-core-impl/nm-connection.c:3345 src/nmtui/nm-editor-utils.c:214
+#: src/libnm-core-impl/nm-connection.c:3345 src/nmtui/nm-editor-utils.c:222
 msgid "Team"
 msgstr "Skupina"
 
-#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:6061
+#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:6065
 #: src/libnm-client-impl/nm-device.c:1786
-#: src/libnm-core-impl/nm-connection.c:3347 src/nmtui/nm-editor-utils.c:205
+#: src/libnm-core-impl/nm-connection.c:3347 src/nmtui/nm-editor-utils.c:213
 msgid "Bridge"
 msgstr "Most"
 
@@ -690,20 +674,20 @@ msgstr "Most"
 msgid "invalid json"
 msgstr "Neveljaven JSON"
 
-#: src/libnm-client-impl/nm-client.c:3817
+#: src/libnm-client-impl/nm-client.c:3818
 #, c-format
 msgid "request succeeded with %s but object is in an unsuitable state"
 msgstr "Zahteva je uspela z %s, vendar je predmet v neprimernem stanju"
 
-#: src/libnm-client-impl/nm-client.c:3909
+#: src/libnm-client-impl/nm-client.c:3910
 #, c-format
 msgid "operation succeeded but object %s does not exist"
 msgstr "Operacija je bila uspešna, vendar predmet %s ne obstaja"
 
 #: src/libnm-client-impl/nm-conn-utils.c:40
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid peer starting at %s:%zu: %s"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven vrstnik, ki se začne pri %s:%zu: %s"
 
 #: src/libnm-client-impl/nm-conn-utils.c:171
 msgid ""
@@ -738,9 +722,8 @@ msgid "The connection was not an ADSL connection."
 msgstr "Povezava ni bila povezava ADSL."
 
 #: src/libnm-client-impl/nm-device-bond.c:104
-#, fuzzy
 msgid "The connection was not a bond connection."
-msgstr "Povezava ni bila povezava z vezjo."
+msgstr "Povezava ni bila povezava vezi."
 
 #: src/libnm-client-impl/nm-device-bridge.c:108
 msgid "The connection was not a bridge connection."
@@ -770,7 +753,7 @@ msgstr "Naprava nima zmogljivosti Bluetooth, ki jih zahteva povezava."
 #: src/libnm-client-impl/nm-device-dummy.c:62
 #, fuzzy
 msgid "The connection was not a dummy connection."
-msgstr "povezava je odstranjena"
+msgstr "Povezava ni bila lažna povezava."
 
 #: src/libnm-client-impl/nm-device-dummy.c:71
 #: src/libnm-client-impl/nm-device-generic.c:89
@@ -827,14 +810,12 @@ msgid "The MACs of the device and the connection didn't match."
 msgstr "Kode MAC naprave in povezave se niso ujemale."
 
 #: src/libnm-client-impl/nm-device-ip-tunnel.c:285
-#, fuzzy
 msgid "The connection was not an IP tunnel connection."
 msgstr "Povezava ni bila povezava IP tunela."
 
 #: src/libnm-client-impl/nm-device-loopback.c:41
-#, fuzzy
 msgid "The connection was not a loopback connection."
-msgstr "Povezava ni bila povratna zanka."
+msgstr "Povezava ni bila povezava s povratno zanko."
 
 #: src/libnm-client-impl/nm-device-macvlan.c:151
 msgid "The connection was not a MAC-VLAN connection."
@@ -869,9 +850,8 @@ msgid "The connection was not a ovs_port connection."
 msgstr "Povezava ni bila povezava ovs_port."
 
 #: src/libnm-client-impl/nm-device-team.c:124
-#, fuzzy
 msgid "The connection was not a team connection."
-msgstr "povezava je odstranjena"
+msgstr "Povezava ni bila povezava skupine."
 
 #: src/libnm-client-impl/nm-device-tun.c:204
 msgid "The connection was not a tun connection."
@@ -933,7 +913,7 @@ msgstr "Povezava ni bila povezava wpan."
 msgid "Ethernet"
 msgstr "Ethernet"
 
-#: src/libnm-client-impl/nm-device.c:1764 src/nmtui/nm-editor-utils.c:160
+#: src/libnm-client-impl/nm-device.c:1764 src/nmtui/nm-editor-utils.c:168
 #: src/nmtui/nmtui-radio.c:58
 msgid "Wi-Fi"
 msgstr "Wi-Fi"
@@ -962,17 +942,17 @@ msgstr "Odpri most vSwitch"
 msgid "WiMAX"
 msgstr "WiMAX"
 
-#: src/libnm-client-impl/nm-device.c:1778 src/nmtui/nm-editor-utils.c:178
+#: src/libnm-client-impl/nm-device.c:1778 src/nmtui/nm-editor-utils.c:186
 msgid "Mobile Broadband"
 msgstr "Mobilni širokopasovni dostop"
 
 #: src/libnm-client-impl/nm-device.c:1780
-#: src/libnm-core-impl/nm-connection.c:3351 src/nmtui/nm-editor-utils.c:169
+#: src/libnm-core-impl/nm-connection.c:3351 src/nmtui/nm-editor-utils.c:177
 msgid "InfiniBand"
 msgstr "InfiniBand"
 
 #: src/libnm-client-impl/nm-device.c:1788
-#: src/libnm-core-impl/nm-connection.c:3349 src/nmtui/nm-editor-utils.c:223
+#: src/libnm-core-impl/nm-connection.c:3349 src/nmtui/nm-editor-utils.c:231
 #: src/nmtui/nmt-page-vlan.c:57
 msgid "VLAN"
 msgstr "VLAN"
@@ -1002,7 +982,7 @@ msgstr "Tun"
 msgid "Veth"
 msgstr "Veth"
 
-#: src/libnm-client-impl/nm-device.c:1802 src/nmtui/nm-editor-utils.c:239
+#: src/libnm-client-impl/nm-device.c:1802 src/nmtui/nm-editor-utils.c:247
 #: src/nmtui/nmt-page-macsec.c:99
 msgid "MACsec"
 msgstr "MACsec"
@@ -1024,7 +1004,7 @@ msgid "6LoWPAN"
 msgstr "6LoWPAN"
 
 #: src/libnm-client-impl/nm-device.c:1812
-#: src/libnm-core-impl/nm-connection.c:3357 src/nmtui/nm-editor-utils.c:271
+#: src/libnm-core-impl/nm-connection.c:3357 src/nmtui/nm-editor-utils.c:279
 #: src/nmtui/nmt-page-wireguard.c:57
 msgid "WireGuard"
 msgstr "WireGuard"
@@ -1038,6 +1018,7 @@ msgid "VRF"
 msgstr "VRF"
 
 #: src/libnm-client-impl/nm-device.c:1818
+#: src/libnm-core-impl/nm-connection.c:3363 src/nmtui/nm-editor-utils.c:160
 msgid "Loopback"
 msgstr "Povratna zanka"
 
@@ -1052,7 +1033,7 @@ msgstr "IPVLAN"
 #. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
 #. TRANSLATORS: Unknown reason for a connection state change (NMActiveConnectionStateReason)
 #: src/libnm-client-impl/nm-device.c:1829 src/libnmc-base/nm-client-utils.c:352
-#: src/libnmc-base/nm-client-utils.c:502 src/nmcli/utils.c:1852
+#: src/libnmc-base/nm-client-utils.c:503 src/nmcli/utils.c:1852
 msgid "Unknown"
 msgstr "Neznano"
 
@@ -1101,46 +1082,46 @@ msgstr "registracija ni uspela"
 msgid "No service name specified"
 msgstr "Ime storitve ni določeno"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:287
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:288
 #, c-format
 msgid "'%s' is not valid: properties should be specified as 'key=value'"
 msgstr "»%s« ni veljaven: lastnosti morajo biti določene kot »ključ=vrednost«"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:301
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:302
 #, c-format
 msgid "'%s' is not a valid key"
 msgstr "»%s« ni veljaven ključ"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:306
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:307
 #, c-format
 msgid "duplicate key '%s'"
 msgstr "podvojeni ključ »%s«"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:320
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:321
 #, c-format
 msgid "number for '%s' is out of range"
 msgstr "število za »%s« je izven obsega"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:325
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:326
 #, c-format
 msgid "value for '%s' must be a number"
 msgstr "vrednost za »%s« mora biti število"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:338
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:339
 #, c-format
 msgid "value for '%s' must be a boolean"
 msgstr "vrednost za »%s« mora biti logična vrednost"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:347
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:348
 msgid "missing 'name' attribute"
 msgstr "manjkajoči atribut »name«"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:356
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:357
 #, c-format
 msgid "invalid 'name' \"%s\""
 msgstr "neveljavno ime »name« »%s«"
 
-#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:369
+#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:370
 #, c-format
 msgid "attribute '%s' is invalid for \"%s\""
 msgstr "atribut »%s« ni veljaven za »%s«"
@@ -1162,14 +1143,12 @@ msgid "invalid DSCP value; allowed values are: 'CS0', 'CS4', 'CS6'"
 msgstr "neveljavna vrednost DSCP; dovoljene vrednosti so: »CS0«, »CS4«, »CS6«"
 
 #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:508
-#, fuzzy
 msgid "NULL DHCP range; it should be provided as <START_IP>,<END_IP>."
-msgstr "Območje NULL DHCP; navesti ga je treba kot <ZAČETNI_IP>,<KONČNI_IP>."
+msgstr "Obseg DHCP NULL; navesti ga je treba kot <ZAČETNI_IP>,<KONČNI_IP>."
 
 #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:520
-#, fuzzy
 msgid "Non-NULL range and NULL addresses detected."
-msgstr "Zaznan obseg in naslovi NULL, ki niso NULL."
+msgstr "Zaznan obseg brez NULL in naslovi NULL."
 
 #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:529
 msgid "Invalid DHCP range; it should be provided as <START_IP>,<END_IP>."
@@ -1193,12 +1172,11 @@ msgid "Start IP should be lower than the end IP."
 msgstr "Začetni IP mora biti nižji od končnega IP-ja."
 
 #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:594
-#, fuzzy
 msgid "Requested range is not in any network configured on the interface."
-msgstr "Zahtevani obseg ni v nobenem omrežju, ki je prilagojeno v vmesniku."
+msgstr "Zahtevani obseg ni v nobenem omrežju, ki je prilagojeno na vmesniku."
 
 #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:615
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Invalid DHCP lease time value; it should be either default or a positive "
 "number between %u and %u or %s."
@@ -1206,43 +1184,88 @@ msgstr ""
 "Neveljavna vrednost časa najema DHCP; To mora biti privzeto ali pozitivno "
 "število med %u in %u ali %s."
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1019
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:754
+msgid "the string is empty"
+msgstr "niz je prazen"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:777
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:805
+msgid "the DNS-over-TLS server name is empty"
+msgstr "ime strežnika DNS-over-TLS je prazno"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:785
+#, c-format
+msgid "\"%s\" is not a valid IP address or a supported URI"
+msgstr "»%s« ni veljaven naslov IP ali podprti URI"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:822
+msgid "unterminated square bracket"
+msgstr "nekončani oglati oklepaj"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:836
+msgid "the interface name is too long"
+msgstr "ime vmesnika je predolgo"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:850
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:871
+#, c-format
+msgid "\"%s\" is not a valid port number"
+msgstr "»%s« ni veljavna številka vrat"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:880
+msgid "IPv6 addresses must be enclosed in square brackets"
+msgstr "Naslovi IPv6 morajo biti v oglatih oklepajih"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:888
+#, c-format
+msgid "\"%s\" is not a valid IP address"
+msgstr "»%s« ni veljaven naslov IP"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:897
+msgid "the server name is only supported for DNS-over-TLS"
+msgstr "ime strežnika je podprto samo za DNS-over-TLS"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:907
+msgid "the scope-id is only supported for IPv6 link-local addresses"
+msgstr "scope-id je podprt samo za naslove link-local IPv6"
+
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1077
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:82
 #: src/libnm-core-impl/nm-setting-user.c:93
 msgid "missing key"
 msgstr "manjkajoči ključ"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1027
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1085
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:90
 #: src/libnm-core-impl/nm-setting-user.c:101
 msgid "key is too long"
 msgstr "ključ je predolg"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1034
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1092
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:97
 #: src/libnm-core-impl/nm-setting-user.c:108
 msgid "key must be UTF8"
 msgstr "ključ mora biti UTF8"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1043
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1101
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:106
 #: src/libnm-core-impl/nm-setting-user.c:155
 msgid "key contains invalid characters"
 msgstr "ključ vsebuje neveljavne znake"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1071
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1129
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:195
 #: src/libnm-core-impl/nm-setting-user.c:182
 msgid "value is missing"
 msgstr "manjka vrednost"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1080
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1138
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:204
 #: src/libnm-core-impl/nm-setting-user.c:191
 msgid "value is too large"
 msgstr "vrednost je prevelika"
 
-#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1088
+#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:1146
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:212
 #: src/libnm-core-impl/nm-setting-user.c:199
 msgid "value is not valid UTF8"
@@ -1279,9 +1302,8 @@ msgstr "nastavitve ni mogoče najti"
 #: src/libnm-core-impl/nm-connection.c:1990
 #: src/libnm-core-impl/nm-connection.c:2015
 #: src/libnm-core-impl/nm-connection.c:2040
-#, fuzzy
 msgid "setting is required for non-port connections"
-msgstr "nastavitev je potrebna za povezave, ki niso vrat"
+msgstr "nastavitev je potrebna za povezav mimo vrat"
 
 #: src/libnm-core-impl/nm-connection.c:2003
 #: src/libnm-core-impl/nm-connection.c:2028
@@ -1315,7 +1337,7 @@ msgstr "nepričakovan uuid %s namesto %s"
 #: src/libnm-core-impl/nm-setting-connection.c:1424
 #: src/libnm-core-impl/nm-setting-connection.c:1462
 #: src/libnm-core-impl/nm-setting-connection.c:1961
-#: src/libnm-core-impl/nm-setting-ip-config.c:5596
+#: src/libnm-core-impl/nm-setting-ip-config.c:5632
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:405
 #: src/libnm-core-impl/nm-setting-olpc-mesh.c:97
 #: src/libnm-core-impl/nm-setting-ovs-patch.c:75
@@ -1405,7 +1427,7 @@ msgid "missing prefix length for %s '%s', defaulting to %d"
 msgstr "manjkajoča dolžina predpone za %s »%s«, vrnjeno na privzeto %d"
 
 #: src/libnm-core-impl/nm-keyfile.c:959
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "ignoring gateway \"%s\" from \"address*\" keys because the \"gateway\" key "
 "is set"
@@ -1421,177 +1443,183 @@ msgstr ""
 msgid "invalid value for \"%s\": %s"
 msgstr "Neveljavna vrednost za »%s«: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:1166
-#, fuzzy, c-format
-msgid "ignoring invalid DNS server IPv%c address '%s'"
-msgstr "neveljavno polje '%s'"
+#: src/libnm-core-impl/nm-keyfile.c:1168
+#, c-format
+msgid "ignoring invalid DNS server IPv%c address '%s': %s"
+msgstr "prezrtje  neveljavnega naslova IPv%c strežnika DNS »%s«: %s"
+
+#: src/libnm-core-impl/nm-keyfile.c:1217
+#, c-format
+msgid ""
+"normalizing invalid separator ',' or ' ' in DNS search value '%s', only ';' "
+"will be valid separators in keyfiles in the future"
+msgstr ""
+"normalizacija neveljavnega ločila ',' ali ' ' v vrednosti iskanja DNS '%s', "
+"samo ';' bodo v prihodnosti veljavna ločila v datotekah s ključi"
 
-#: src/libnm-core-impl/nm-keyfile.c:1203
-#: src/libnmc-setting/nm-meta-setting-desc.c:1654
+#: src/libnm-core-impl/nm-keyfile.c:1246
+#: src/libnmc-setting/nm-meta-setting-desc.c:1666
 #, c-format
 msgid "invalid option '%s', use one of [%s]"
 msgstr "neveljavna možnost »%s«, uporabite eno izmed [%s]"
 
-#: src/libnm-core-impl/nm-keyfile.c:1283
+#: src/libnm-core-impl/nm-keyfile.c:1326
 msgid "ignoring invalid MAC address"
 msgstr "ignoriranje neveljavnega naslova MAC"
 
-#: src/libnm-core-impl/nm-keyfile.c:1359
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:1402
+#, c-format
 msgid "ignoring invalid bond option %s%s%s = %s%s%s: %s"
-msgstr "ignoriranje možnosti neveljavne obveznice %s%s%s = %s%s%s: %s"
+msgstr "Prezrtje možnosti neveljavne vezave %s%s%s = %s%s%s: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:1549
+#: src/libnm-core-impl/nm-keyfile.c:1592
 msgid "ignoring invalid SSID"
 msgstr "ignoriranje neveljavnega SSID-ja"
 
-#: src/libnm-core-impl/nm-keyfile.c:1567
-#, fuzzy
+#: src/libnm-core-impl/nm-keyfile.c:1610
 msgid "ignoring invalid raw password"
-msgstr "Ignoriranje neveljavnega neobdelanega gesla"
+msgstr "prezrtje neveljavnega neobdelanega gesla"
 
-#: src/libnm-core-impl/nm-keyfile.c:1712
+#: src/libnm-core-impl/nm-keyfile.c:1755
 msgid "invalid key/cert value"
 msgstr "Neveljavna vrednost ključa/potrdila"
 
-#: src/libnm-core-impl/nm-keyfile.c:1727
+#: src/libnm-core-impl/nm-keyfile.c:1770
 #, c-format
 msgid "invalid key/cert value path \"%s\""
 msgstr "Neveljavna pot do vrednosti ključa/potrdila »%s«"
 
-#: src/libnm-core-impl/nm-keyfile.c:1752 src/libnm-core-impl/nm-keyfile.c:1849
+#: src/libnm-core-impl/nm-keyfile.c:1795 src/libnm-core-impl/nm-keyfile.c:1892
 #, c-format
 msgid "certificate or key file '%s' does not exist"
 msgstr "Datoteka s potrdilom ali ključem »%s« ne obstaja"
 
-#: src/libnm-core-impl/nm-keyfile.c:1765
+#: src/libnm-core-impl/nm-keyfile.c:1808
 #, c-format
 msgid "invalid PKCS#11 URI \"%s\""
 msgstr "neveljaven URI PKCS#11 »%s«"
 
-#: src/libnm-core-impl/nm-keyfile.c:1811
+#: src/libnm-core-impl/nm-keyfile.c:1854
 msgid "invalid key/cert value data:;base64, is not base64"
 msgstr "neveljavni podatki o vrednosti ključa/potrdila; base64, ni base64"
 
-#: src/libnm-core-impl/nm-keyfile.c:1824
+#: src/libnm-core-impl/nm-keyfile.c:1867
 msgid "invalid key/cert value data:;base64,file://"
 msgstr "neveljavni podatki o vrednosti ključa/potrdila; base64,file://"
 
-#: src/libnm-core-impl/nm-keyfile.c:1865
-#, fuzzy
+#: src/libnm-core-impl/nm-keyfile.c:1908
 msgid "invalid key/cert value is not a valid blob"
-msgstr "Neveljavna vrednost ključa/potrdila ni veljavna zbirka dvojiške zbirke"
+msgstr "nneveljavna vrednost ključa/potrdila (key/cert) ni veljaven blob"
 
-#: src/libnm-core-impl/nm-keyfile.c:1967
+#: src/libnm-core-impl/nm-keyfile.c:2010
 #, c-format
 msgid "invalid parity value '%s'"
 msgstr "neveljavna vrednost paritete »%s«"
 
-#: src/libnm-core-impl/nm-keyfile.c:1989 src/libnm-core-impl/nm-keyfile.c:3566
+#: src/libnm-core-impl/nm-keyfile.c:2032 src/libnm-core-impl/nm-keyfile.c:3611
 #, c-format
 msgid "invalid setting: %s"
 msgstr "Neveljavna nastavitev: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:2009
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:2052
+#, c-format
 msgid "ignoring invalid team configuration: %s"
-msgstr "Ignoriranje neveljavne konfiguracije ekipe: %s"
+msgstr "prezrtje neveljavne prilagoditve skupine: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:2130
+#: src/libnm-core-impl/nm-keyfile.c:2173
 #, c-format
 msgid "invalid qdisc: %s"
 msgstr "Neveljaven qdisc: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:2180
+#: src/libnm-core-impl/nm-keyfile.c:2223
 #, c-format
 msgid "invalid tfilter: %s"
 msgstr "Neveljaven tfilter: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:3391
+#: src/libnm-core-impl/nm-keyfile.c:3436
 #, c-format
 msgid "error loading setting value: %s"
 msgstr "Napaka pri nalaganju vrednosti nastavitve: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:3422 src/libnm-core-impl/nm-keyfile.c:3434
-#: src/libnm-core-impl/nm-keyfile.c:3453 src/libnm-core-impl/nm-keyfile.c:3465
-#: src/libnm-core-impl/nm-keyfile.c:3477 src/libnm-core-impl/nm-keyfile.c:3539
-#: src/libnm-core-impl/nm-keyfile.c:3551
+#: src/libnm-core-impl/nm-keyfile.c:3467 src/libnm-core-impl/nm-keyfile.c:3479
+#: src/libnm-core-impl/nm-keyfile.c:3498 src/libnm-core-impl/nm-keyfile.c:3510
+#: src/libnm-core-impl/nm-keyfile.c:3522 src/libnm-core-impl/nm-keyfile.c:3584
+#: src/libnm-core-impl/nm-keyfile.c:3596
 msgid "value cannot be interpreted as integer"
 msgstr "vrednosti ni mogoče tolmačiti kot celo število"
 
-#: src/libnm-core-impl/nm-keyfile.c:3507
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3552
+#, c-format
 msgid "ignoring invalid byte element '%u' (not between 0 and 255 inclusive)"
 msgstr ""
-"ignoriranje neveljavnega bajtnega elementa '%u' (ne med 0 in vključno 255)"
+"prezrtje neveljavnega bajtnega elementa '%u' (ni med vključno 0 in 255)"
 
-#: src/libnm-core-impl/nm-keyfile.c:3601
-#, fuzzy, c-format
-#| msgid "invalid value for key '%s'"
+#: src/libnm-core-impl/nm-keyfile.c:3646
+#, c-format
 msgid "invalid value for '%s.dhcp-send-hostname'"
-msgstr "neveljavna vrednost za »%s.dhcp-send-hostname-deprecated«"
+msgstr "neveljavna vrednost za »%s.dhcp-send-hostname«"
 
-#: src/libnm-core-impl/nm-keyfile.c:3622
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3667
+#, c-format
 msgid "invalid value for '%s.dhcp-send-hostname-deprecated'"
 msgstr "neveljavna vrednost za »%s.dhcp-send-hostname-deprecated«"
 
-#: src/libnm-core-impl/nm-keyfile.c:3647
+#: src/libnm-core-impl/nm-keyfile.c:3692
 #, c-format
 msgid "invalid setting name '%s'"
 msgstr "Neveljavno ime nastavitve »%s«"
 
-#: src/libnm-core-impl/nm-keyfile.c:3696
+#: src/libnm-core-impl/nm-keyfile.c:3741
 #, c-format
 msgid "invalid key '%s.%s'"
 msgstr "Neveljaven ključ »%s.%s«"
 
-#: src/libnm-core-impl/nm-keyfile.c:3712
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3757
+#, c-format
 msgid "key '%s.%s' is not boolean"
-msgstr "Ključ »%s.%s« ni logična vrednost"
+msgstr "ključ »%s.%s« ni logična vrednost"
 
-#: src/libnm-core-impl/nm-keyfile.c:3729
+#: src/libnm-core-impl/nm-keyfile.c:3774
 #, c-format
 msgid "key '%s.%s' is not a uint32"
 msgstr "Ključ »%s.%s« ni uint32"
 
-#: src/libnm-core-impl/nm-keyfile.c:3786
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3831
+#, c-format
 msgid "invalid peer public key in section '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven javni ključ vrstnika v razdelku »%s«"
 
-#: src/libnm-core-impl/nm-keyfile.c:3801
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3846
+#, c-format
 msgid "key '%s.%s' is not a valid 256 bit key in base64 encoding"
-msgstr "Ključ '%s. %s' ni veljaven 256-bitni ključ v kodiranju base64"
+msgstr "ključ »%s.%s« ni veljaven 256-bitni ključ v kodiranju base64"
 
-#: src/libnm-core-impl/nm-keyfile.c:3824
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3869
+#, c-format
 msgid "key '%s.%s' is not a valid secret flag"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "ključ »%s.%s« ni veljavna skrivna zastava"
 
-#: src/libnm-core-impl/nm-keyfile.c:3847
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3892
+#, c-format
 msgid "key '%s.%s' is not a integer in range 0 to 2^32"
-msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+msgstr "ključ »%s.%s« ni celo število v območju od 0 do 2^32"
 
-#: src/libnm-core-impl/nm-keyfile.c:3863
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3908
+#, c-format
 msgid "key '%s.%s' is not a valid endpoint"
-msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+msgstr "ključ »%s.%s« ni veljavna končna točka"
 
-#: src/libnm-core-impl/nm-keyfile.c:3889
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3934
+#, c-format
 msgid "key '%s.%s' has invalid allowed-ips"
-msgstr "Ključ '%s. %s' ima neveljavne dovoljene IP-je"
+msgstr "ključ »%s.%s« ima neveljavne dovoljene IP-je"
 
-#: src/libnm-core-impl/nm-keyfile.c:3904
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-keyfile.c:3949
+#, c-format
 msgid "peer '%s' is invalid: %s"
-msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+msgstr "vrstnik »%s« je neveljaven: %s"
 
-#: src/libnm-core-impl/nm-keyfile.c:4454
+#: src/libnm-core-impl/nm-keyfile.c:4499
 #, c-format
 msgid "unsupported option \"%s.%s\" of variant type %s"
 msgstr "Nepodprta možnost »%s.%s« variante vrste %s"
@@ -1612,23 +1640,22 @@ msgstr "Vrednost »%s« se ne ujema z »%s=%s«"
 
 #: src/libnm-core-impl/nm-setting-6lowpan.c:120
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:378
+#: src/libnm-core-impl/nm-setting-ipvlan.c:134
 #: src/libnm-core-impl/nm-setting-macsec.c:349
 #: src/libnm-core-impl/nm-setting-macvlan.c:138
 #: src/libnm-core-impl/nm-setting-vlan.c:641
 #: src/libnm-core-impl/nm-setting-vxlan.c:377
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is neither an UUID nor an interface name"
 msgstr "»%s« ni niti UUID niti ime vmesnika"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:237
-#, fuzzy
 msgid "binary data missing"
 msgstr "manjkajo binarni podatki"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:269
-#, fuzzy
 msgid "URI not NUL terminated"
-msgstr "URI ni NUL ukinjen"
+msgstr "URI ni zaključen z NUL"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:278
 msgid "URI is empty"
@@ -1683,7 +1710,7 @@ msgstr "geslo ni podprto, če potrdilo ni v žetonu PKCS#11"
 #: src/libnm-core-impl/nm-setting-gsm.c:557
 #: src/libnm-core-impl/nm-setting-gsm.c:600
 #: src/libnm-core-impl/nm-setting-gsm.c:609
-#: src/libnm-core-impl/nm-setting-ip-config.c:5605
+#: src/libnm-core-impl/nm-setting-ip-config.c:5641
 #: src/libnm-core-impl/nm-setting-ip4-config.c:307
 #: src/libnm-core-impl/nm-setting-ip4-config.c:319
 #: src/libnm-core-impl/nm-setting-pppoe.c:149
@@ -1698,19 +1725,17 @@ msgid "property is empty"
 msgstr "Lastnost je prazna"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:2719
-#, fuzzy, c-format
+#, c-format
 msgid "has to match '%s' property for PKCS#12"
-msgstr "se ujema z lastnostjo '%s' za PKCS#12"
+msgstr "se mora ujemati z lastnostjo »%s« za PKCS#12"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:2742
-#, fuzzy
 msgid "exactly one property must be set"
-msgstr "Nastavljena mora biti točno ena lastnost"
+msgstr "nastavljena mora biti natanko ena lastnost"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:2822
-#, fuzzy
 msgid "can be enabled only on Ethernet connections"
-msgstr "skupini netlink se ni mogoče pridružiti: %s"
+msgstr "je mogoče omogočiti samo na žičnih omrežnih povezavah"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:2843
 #: src/libnm-core-impl/nm-setting-bluetooth.c:108
@@ -1751,15 +1776,15 @@ msgstr "Lastnina je neveljavna"
 #: src/libnm-core-impl/nm-setting-adsl.c:204
 #: src/libnm-core-impl/nm-setting-bluetooth.c:143
 #: src/libnm-core-impl/nm-setting-wireless-security.c:924
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid value for the property"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljavna vrednost za lastnost"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:2928
-#, fuzzy, c-format
+#, c-format
 msgid "invalid auth flags: '%d' contains unknown flags"
 msgstr ""
-"Neveljavne zastavice za preverjanje pristnosti: »%d« vsebuje neznane "
+"neveljavne zastavice za preverjanje pristnosti: »%d« vsebuje neznane "
 "zastavice"
 
 #: src/libnm-core-impl/nm-setting-8021x.c:2953
@@ -1839,47 +1864,47 @@ msgstr "»%s« ni veljavna vrednost za »%s«"
 
 #: src/libnm-core-impl/nm-setting-bond.c:946
 #: src/libnm-core-impl/nm-setting-bond.c:957
-#, fuzzy, c-format
+#, c-format
 msgid "'%s=%s' is incompatible with '%s > 0'"
-msgstr "naprava '%s' ni združljiva s povezavo '%s'"
+msgstr "'%s=%s' ni združljivo z '%s > 0'"
 
 #: src/libnm-core-impl/nm-setting-bond.c:974
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not valid for the '%s' option: %s"
-msgstr "\"%s\" ne velja za možnost \"%s\": %s"
+msgstr "»%s« ne velja za možnost »%s«: %s"
 
 #: src/libnm-core-impl/nm-setting-bond.c:986
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' option is only valid for '%s=%s'"
-msgstr "Možnost '%s' je veljavna samo za '%s=%s'"
+msgstr "Možnost »%s« je veljavna samo za »%s=%s«"
 
 #: src/libnm-core-impl/nm-setting-bond.c:999
-#, fuzzy, c-format
+#, c-format
 msgid "'%s=%s' is not a valid configuration for '%s'"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s=%s« ni veljavna prilagoditev za »%s«."
 
 #: src/libnm-core-impl/nm-setting-bond.c:1014
 #: src/libnm-core-impl/nm-setting-bond.c:1025
 #: src/libnm-core-impl/nm-setting-bond.c:1038
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' option requires '%s' option to be enabled"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "Možnost »%s« zahteva, da je možnost »%s« omogočena"
 
 #: src/libnm-core-impl/nm-setting-bond.c:1055
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' option needs to be a value multiple of '%s' value"
-msgstr "Napaka: naprava '%s' ni naprava Wi-Fi."
+msgstr "Možnost »%s« mora biti večkratnik vrednosti »%s«"
 
 #: src/libnm-core-impl/nm-setting-bond.c:1073
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' option requires '%s' or '%s'option to be set"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "Možnost »%s« zahteva nastavitev možnosti »%s« ali »%s«"
 
 #: src/libnm-core-impl/nm-setting-bond.c:1085
 #: src/libnm-core-impl/nm-setting-bond.c:1095
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' option requires '%s' option to be set"
-msgstr "Možnost '%s' zahteva nastavitev možnosti '%s'"
+msgstr "Možnost »%s« zahteva nastavitev možnosti »%s«"
 
 #: src/libnm-core-impl/nm-setting-bond.c:1108
 #: src/libnm-core-impl/nm-setting-bond.c:1120
@@ -1943,7 +1968,6 @@ msgid "'%s' option must be a power of 2"
 msgstr "Možnost »%s« mora biti potenca števila 2"
 
 #: src/libnm-core-impl/nm-setting-bridge.c:1325
-#, fuzzy
 msgid "bridge connection should have a ethernet setting as well"
 msgstr "Mostna povezava mora imeti tudi ethernetno nastavitev"
 
@@ -2034,42 +2058,41 @@ msgid "is incompatible with '%s'"
 msgstr "ni združljivo z »%s«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1846
-#, fuzzy, c-format
+#, c-format
 msgid "contains IPv4 address '%s', %s.%s cannot be 'disabled'"
-msgstr "vsebuje naslov IPv4 »%s«, %s. %s ni možno onemogočiti (»disabled«)"
+msgstr "vsebuje naslov IPv4 »%s«, %s.%s ni možno onemogočiti (»disabled«)"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1860
-#, fuzzy, c-format
+#, c-format
 msgid "contains IPv4 address '%s', %s.%s cannot be 'true'"
-msgstr "vsebuje naslov IPv4 »%s«, %s. %s ne more biti »true«"
+msgstr "vsebuje naslov IPv4 »%s«, %s.%s ne more biti »true«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1874
-#, fuzzy, c-format
+#, c-format
 msgid "contains IPv4 address '%s', %s.%s must be set to 'false' explicitly"
 msgstr ""
-"vsebuje naslov IPv4 »%s«, %s. %s mora biti izrecno nastavljen na »false«"
+"vsebuje naslov IPv4 »%s«, %s.%s mora biti izrecno nastavljen na »false«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1899
-#, fuzzy, c-format
+#, c-format
 msgid "contains IPv6 address '%s', %s.%s cannot be '%s'"
-msgstr "vsebuje naslov IPv6 »%s«, %s. %s ne more biti »%s«"
+msgstr "vsebuje naslov IPv6 »%s«, %s.%s ne more biti »%s«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1914
-#, fuzzy, c-format
+#, c-format
 msgid "contains IPv6 address '%s', %s.%s cannot be 'true'"
-msgstr "vsebuje naslov IPv6 »%s«, %s. %s ne more biti »true«"
+msgstr "vsebuje naslov IPv6 »%s«, %s.%s ne more biti »true«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1928
-#, fuzzy, c-format
+#, c-format
 msgid "contains IPv6 address '%s', %s.%s must be set to 'false' explicitly"
 msgstr ""
-"vsebuje naslov IPv6 »%s«, %s. %s mora biti izrecno nastavljen na »false«"
+"vsebuje naslov IPv6 »%s«, %s.%s mora biti izrecno nastavljen na »false«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1944
-#, fuzzy, c-format
-#| msgid "invalid IP address: %s"
+#, c-format
 msgid "has an invalid IP address '%s'"
-msgstr "neveljaven naslov IP: %s"
+msgstr "ima neveljaven naslov IP »%s«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1973
 #, c-format
@@ -2077,9 +2100,9 @@ msgid "property type should be set to '%s'"
 msgstr "Vrsta lastnosti mora biti nastavljena na »%s«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:1991
-#, fuzzy, c-format
+#, c-format
 msgid "port-type '%s' requires a '%s' setting in the connection"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "Vrsta vrat port-type »%s« zahteva nastavitev »%s« v povezavi"
 
 #: src/libnm-core-impl/nm-setting-connection.c:2002
 #, fuzzy, c-format
@@ -2091,20 +2114,18 @@ msgstr ""
 "moralo biti nastavljeno na »%s«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:2028
-#, fuzzy, c-format
+#, c-format
 msgid "A port connection with '%s' set to '%s' cannot have a '%s' setting"
 msgstr ""
-"Podrejena povezava z »%s«, nastavljena na »%s«, ne more imeti nastavitve »%s«"
+"Povezava vrat z »%s«, nastavljena na »%s«, ne more imeti nastavitve »%s«"
 
 #: src/libnm-core-impl/nm-setting-connection.c:2045
 msgid "UUID needs normalization"
 msgstr "UUID potrebuje normalizacijo"
 
 #: src/libnm-core-impl/nm-setting-connection.c:2062
-#, fuzzy
-#| msgid "has duplicate UUIDs"
 msgid "has duplicate addresses"
-msgstr "ima podvojene UUID-je"
+msgstr "ima podvojene naslove"
 
 #: src/libnm-core-impl/nm-setting-connection.c:2074
 msgid "read-only is deprecated and not settable for the user"
@@ -2141,25 +2162,22 @@ msgid "unsupported ethtool setting"
 msgstr "nepodprta nastavitev ethtool"
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:354
-#, fuzzy
 msgid "setting has invalid variant type"
-msgstr "neveljavno polje '%s'"
+msgstr "nastavitev ima neveljavno vrsto različice"
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:366
-#, fuzzy
 msgid "coalesce option must be either 0 or 1"
 msgstr "možnost združevanja mora biti 0 ali 1"
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:385
-#, fuzzy
 msgid "pause-autoneg cannot be enabled when setting rx/tx options"
-msgstr "Pause-Autoneg ni mogoče omogočiti pri nastavitvi možnosti RX/TX"
+msgstr "pause-autoneg ni mogoče omogočiti pri nastavitvi možnosti rx/tx"
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:410
-#: src/libnmc-setting/nm-meta-setting-desc.c:4552
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:4608
+#, c-format
 msgid "'%s' is not valid FEC modes, valid modes are combinations of %s"
-msgstr "oznake \"%u\" niso veljavne; uporabite kombinacijo %s"
+msgstr "»%s« ni veljaven način FEC, veljavni načini so kombinacije %s"
 
 #: src/libnm-core-impl/nm-setting-ethtool.c:436
 #, c-format
@@ -2195,248 +2213,218 @@ msgid "'%s' is not a number"
 msgstr "»%s« ni število"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:622
-#, fuzzy
 msgid "property is empty or wrong size"
-msgstr "Lastnina je prazna ali napačne velikosti"
+msgstr "lastnost je prazna ali napačne velikosti"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:635
-#, fuzzy
 msgid "property must contain only digits"
-msgstr "Lastnost mora vsebovati samo števke"
+msgstr "lastnost mora vsebovati samo števke"
 
 #: src/libnm-core-impl/nm-setting-gsm.c:649
-#, fuzzy
 msgid "can't be enabled when manual configuration is present"
-msgstr "Ni mogoče omogočiti, če je na voljo ročna konfiguracija"
+msgstr "Ni mogoče omogočiti, če je na voljo ročna prilagoditev"
 
 #: src/libnm-core-impl/nm-setting-hsr.c:139
 #: src/libnm-core-impl/nm-setting-hsr.c:157
 #: src/libnm-core-impl/nm-setting-veth.c:90
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid interface name"
-msgstr "Napaka: %s ni veljavno ime vmesnika.\n"
+msgstr "»%s« ni veljavno ime vmesnika"
 
 #: src/libnm-core-impl/nm-setting-infiniband.c:213
-#, fuzzy
 msgid "Must specify a P_Key if specifying parent"
 msgstr "Če navedete nadrejeno, morate navesti P_Key"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:224
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-infiniband.c:225
 msgid "InfiniBand P_Key connection did not specify parent interface name"
 msgstr "Povezava InfiniBand P_Key ni določila imena nadrejenega vmesnika"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:232
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-infiniband.c:233
 msgid "the values 0 and 0x8000 are not allowed"
 msgstr "vrednosti 0 in 0x8000 nista dovoljeni"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:260
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-infiniband.c:261
+#, c-format
 msgid ""
 "interface name of software infiniband device must be '%s' or unset (instead "
 "it is '%s')"
 msgstr ""
-"Ime vmesnika programske opreme Infiniband mora biti »%s« ali nenastavljeno "
-"(namesto tega »%s«)"
+"Ime vmesnika naprave programske opreme infiniband mora biti »%s« ali ne "
+"nastavljeno (namesto tega je »%s«)"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:268
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-infiniband.c:269
+#, c-format
 msgid ""
 "interface name of software infiniband device with MAC address must be unset "
 "(instead it is '%s')"
 msgstr ""
-"ime vmesnika programske opreme infiniband naprave z naslovom MAC mora biti "
-"nastavljeno (namesto tega je '%s')"
+"ime vmesnika naprave programske opreme infiniband z naslovom MAC mora biti "
+"ne nastavljeno (namesto tega je »%s«)"
 
-#: src/libnm-core-impl/nm-setting-infiniband.c:294
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-infiniband.c:295
+#, c-format
 msgid "mtu can be at most %u but it is %u"
-msgstr "MTU je lahko največ %u vendar je %u"
+msgstr "mtu je lahko največ %u, vendar je %u"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:83
-#, fuzzy
 msgid "Missing IPv4 address"
-msgstr "Manjka naslov IPv4"
+msgstr "Manjkajoči naslov IPv4"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:83
-#, fuzzy
 msgid "Missing IPv6 address"
 msgstr "Manjkajoči naslov IPv6"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:90
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid IPv4 address '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "Neveljaven naslov IPv4 »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:91
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid IPv6 address '%s'"
-msgstr "Neveljaven naslov IPv6 »%.*s« v naslovu URI"
+msgstr "Neveljaven naslov IPv6 »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:108
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid IPv4 address prefix '%u'"
 msgstr "Neveljavna predpona naslova IPv4 »%u«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:109
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid IPv6 address prefix '%u'"
 msgstr "Neveljavna predpona naslova IPv6 »%u«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:126
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid routing metric '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna meritev usmerjanja »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1339
-#: src/libnm-core-impl/nm-setting-sriov.c:410
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-sriov.c:412
 msgid "unknown attribute"
-msgstr "neznan atribut »%s«"
+msgstr "neznani atribut"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1349
-#: src/libnm-core-impl/nm-setting-sriov.c:420
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-sriov.c:422
+#, c-format
 msgid "invalid attribute type '%s'"
-msgstr "Neveljavna vrsta atributa »%s«"
+msgstr "neveljavna vrsta atributa »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1358
-#, fuzzy
 msgid "attribute is not valid for a IPv4 route"
 msgstr "atribut ni veljaven za pot IPv4"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1359
-#, fuzzy
 msgid "attribute is not valid for a IPv6 route"
 msgstr "atribut ni veljaven za pot IPv6"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1370
 #: src/libnm-core-impl/nm-setting-ip-config.c:1402
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid IPv4 address"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljaven naslov IPv4"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1371
 #: src/libnm-core-impl/nm-setting-ip-config.c:1403
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid IPv6 address"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljaven naslov IPv6"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1393
-#, fuzzy, c-format
+#, c-format
 msgid "invalid prefix %s"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna predpona %s"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1425
-#, fuzzy, c-format
+#, c-format
 msgid "%s is not a valid route type"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "%s ni veljavna vrsta načrtovane poti"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1444
-#, fuzzy
 msgid "route weight cannot be larger than 256"
 msgstr "teža poti ne sme biti večja od 256"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1531
-#, fuzzy
 msgid "route scope is invalid for local route"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "obseg poti ni veljaven za krajevno pot"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1543
-#, fuzzy, c-format
+#, c-format
 msgid "a %s route cannot have a next-hop"
-msgstr "%s pot ne more imeti naslednjega skoka"
+msgstr "Pot %s ne more imeti naslednjega skoka"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:1555
-#, fuzzy, c-format
+#, c-format
 msgid "a %s route cannot have a ECMP multi-hop \"weight\""
-msgstr "%s pot ne more imeti ECMP multi-hop \"teže\""
+msgstr "Pot %s ne more imeti »teže« ECMP multi-hop"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2743
-#, fuzzy
 msgid "missing priority"
-msgstr "neveljavno polje '%s'"
+msgstr "manjkajoča prednost"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2756
-#, fuzzy
 msgid "missing table"
-msgstr "Manjka atribut razpredelnice v vsebini priljubljenih"
+msgstr "manjkajoča tabela"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2766
-#, fuzzy
 msgid "invalid action type"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna vrsta dejanja"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2775
-#, fuzzy
 msgid "has from/src but the prefix-length is zero"
 msgstr "ima from/src, vendar je dolžina predpone nič"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2783
-#, fuzzy
 msgid "missing from/src for a non zero prefix-length"
-msgstr "manjka from/src za dolžino predpone, ki ni ničelna"
+msgstr "manjka from/src za ne ničelno dolžino predpone"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2790
-#, fuzzy
 msgid "invalid from/src"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavno from/src"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2797
-#, fuzzy
 msgid "invalid prefix length for from/src"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna dolžina predpone za from/src"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2806
-#, fuzzy
 msgid "has to/dst but the prefix-length is zero"
-msgstr "mora to/dst, vendar je dolžina predpone nič"
+msgstr "ima to/dst, vendar je dolžina predpone prefix-length nič"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2814
-#, fuzzy
 msgid "missing to/dst for a non zero prefix-length"
-msgstr "manjka to/dst za dolžino predpone, ki ni ničelna"
+msgstr "manjka to/dst za ne ničelno dolžino predpone"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2821
-#, fuzzy
 msgid "invalid to/dst"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven to/dst"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2828
-#, fuzzy
 msgid "invalid prefix length for to/dst"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna dolžina predpone za to/DST"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2838
-#, fuzzy
 msgid "invalid iifname"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven iifname"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2848
-#, fuzzy
 msgid "invalid oifname"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven oifname"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2856
-#, fuzzy
 msgid "invalid source port range"
-msgstr "Odšifriranje zasebnega ključa je spodletelo."
+msgstr "neveljaven obseg izvornih vrat"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2864
-#, fuzzy
 msgid "invalid destination port range"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven obseg ciljnih vrat"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2874
-#, fuzzy
 msgid "suppress_prefixlength out of range"
-msgstr "suppress_prefixlength izven dosega"
+msgstr "suppress_prefixlength je izven obsega"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:2882
-#, fuzzy
 msgid "suppress_prefixlength is only allowed with the to-table action"
-msgstr "suppress_prefixlength je dovoljeno samo z dejanjem za mizo"
+msgstr "suppress_prefixlength je dovoljen samo z dejanjem to-table"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3025
 #, c-format
@@ -2454,22 +2442,18 @@ msgid "invalid variant type '%s' for \"%s\""
 msgstr "neveljavna različica vrste »%s« za »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3064
-#, fuzzy
 msgid "missing \"family\""
-msgstr "ime datoteke"
+msgstr "manjka »family«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3072
-#, fuzzy
 msgid "invalid \"family\""
-msgstr "Neveljavna »družina«"
+msgstr "neveljaven »family«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3129
-#, fuzzy
 msgid "\"uid-range-start\" is greater than \"uid-range-end\""
 msgstr "»uid-range-start« je večji od »uid-range-end«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3323
-#, fuzzy
 msgid "Unsupported to-string-flags argument"
 msgstr "Nepodprt argument to-string-flags"
 
@@ -2502,137 +2486,134 @@ msgid "missing argument for \"%s\""
 msgstr "manjkajoči argument za »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3681
-#, fuzzy
 msgid "invalid \"from\" part"
-msgstr "Neveljaven del »od«"
+msgstr "neveljaven del »from«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3697
-#, fuzzy
 msgid "invalid \"to\" part"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven del »to«"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3708
-#, fuzzy
 msgid "cannot detect address family for rule"
-msgstr "Ni mogoče zaznati družine naslovov za pravilo"
+msgstr "mi mogoče zaznati družine naslovov za pravilo"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3775
 #: src/libnm-core-impl/nm-setting-ip-config.c:3865
-#, fuzzy, c-format
+#, c-format
 msgid "rule is invalid: %s"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "pravilo je neveljavno: %s"
 
 #: src/libnm-core-impl/nm-setting-ip-config.c:3846
-#, fuzzy
 msgid "invalid address family"
-msgstr "neveljavne VPN skrivnosti"
+msgstr "neveljavna družina naslovov"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5114
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5134
+#, c-format
 msgid "rule #%u is invalid: %s"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "pravilo #%u je neveljavno: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5622
-#, fuzzy, c-format
-msgid "%u. DNS server address is invalid"
-msgstr "%u. Naslov strežnika DNS je neveljaven"
+#: src/libnm-core-impl/nm-setting-ip-config.c:5662
+#, c-format
+msgid "%u. DNS server address is invalid: %s"
+msgstr "%u. Naslov strežnika DNS je neveljaven: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5642
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5685
+#, c-format
+msgid "DNS search domain '%s' is invalid"
+msgstr "Iskalna domena DNS »%s« je neveljavna"
+
+#: src/libnm-core-impl/nm-setting-ip-config.c:5705
+#, c-format
 msgid "%d. IP address is invalid"
-msgstr "%d. Naslov IP je neveljaven"
+msgstr "%d. naslov IP je neveljaven"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5657
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5720
+#, c-format
 msgid "%d. IP address has 'label' property with invalid type"
-msgstr "%d. Naslov IP ima lastnost »label« z neveljavno vrsto"
+msgstr "%d. naslov IP ima lastnost »label« z neveljavno vrsto"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5669
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5732
+#, c-format
 msgid "%d. IP address has invalid label '%s'"
 msgstr "%d. Naslov IP ima neveljavno oznako »%s«"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5687
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-ip-config.c:5750
 msgid "gateway cannot be set if there are no addresses configured"
-msgstr "Prehoda ni mogoče nastaviti, če ni konfiguriranih naslovov"
+msgstr "prehoda ni mogoče nastaviti, če ni nastavljenih naslovov"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5699
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-ip-config.c:5762
 msgid "gateway is invalid"
-msgstr "Prehod IPv4 »%s« ni veljaven"
+msgstr "prehod je neveljaven"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5717
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5780
+#, c-format
 msgid "%d. route is invalid"
 msgstr "%d. pot je neveljavna"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5730
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5793
+#, c-format
 msgid "invalid attribute: %s"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven atribut: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5750
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5813
+#, c-format
 msgid "%u. rule has wrong address-family"
-msgstr "%u. pravilo ima napačen naslov-družina"
+msgstr "%u. pravilo ima napačen address-family"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5762
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5825
+#, c-format
 msgid "%u. rule is invalid: %s"
 msgstr "%u. pravilo je neveljavno: %s"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5778
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5841
+#, c-format
 msgid "'%s' is not a valid IAID"
-msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+msgstr "»%s« ni veljaven IAID"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5792
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5855
+#, c-format
 msgid "the property cannot be set when '%s' is disabled"
-msgstr "Lastnosti ni mogoče nastaviti, če je možnost »%s« onemogočena"
+msgstr "lastnosti ni mogoče nastaviti, če je »%s« onemogočeno"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5818
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-ip-config.c:5881
 msgid "the property is currently supported only for DHCPv4"
 msgstr "lastnost je trenutno podprta le za DHCPv4"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5835
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5898
+#, c-format
 msgid "'%s' is not a valid IP or subnet"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljaven IP ali podomrežje"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5879
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5942
+#, c-format
 msgid "a gateway is incompatible with '%s'"
-msgstr "naprava '%s' ni združljiva s povezavo '%s'"
+msgstr "prehod ni združljiv z »%s«"
 
-#: src/libnm-core-impl/nm-setting-ip-config.c:5893
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-ip-config.c:5956
+#, c-format
 msgid "the value is inconsistent with '%s'"
-msgstr "naprava '%s' ni združljiva s povezavo '%s'"
+msgstr "vrednost ni skladna z »%s«"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:364
-#, fuzzy, c-format
+#, c-format
 msgid "'%d' is not a valid tunnel mode"
 msgstr "»%d« ni veljaven način tunela"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:391
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:417
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid IPv%c address"
 msgstr "»%s« ni veljaven naslov IPv%c"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:438
-#, fuzzy
 msgid "tunnel keys can only be specified for GRE and VTI tunnels"
-msgstr "ključe predorov je mogoče določiti samo za predore GRE in VTI"
+msgstr "ključe tunelov je mogoče določiti samo za tunele GRE in VTI"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:451
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:469
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid tunnel key"
-msgstr "\"%s\" ni veljaven ključ za predor"
+msgstr "»%s« ni veljaven ključ tunela"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:483
 #, fuzzy
@@ -2642,25 +2623,41 @@ msgstr ""
 "odkrivanje MTU poti"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:502
-#, fuzzy, c-format
+#, c-format
 msgid "some flags are invalid for the select mode: %s"
-msgstr "Nekatere zastavice niso veljavne za način izbire: %s"
+msgstr "nekatere zastavice niso veljavne za način izbora: %s"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:515
-#, fuzzy
 msgid "can be set only on VTI tunnels"
-msgstr "skupini netlink se ni mogoče pridružiti: %s"
+msgstr "lahko se nastavi samo na predorih VTI"
 
 #: src/libnm-core-impl/nm-setting-ip-tunnel.c:527
-#, fuzzy, c-format
+#, c-format
 msgid "wired setting not allowed for mode %s"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "žična nastavitev ni dovoljena za način %s"
+
+#: src/libnm-core-impl/nm-setting-ipvlan.c:148
+#: src/libnm-core-impl/nm-setting-macsec.c:365
+#: src/libnm-core-impl/nm-setting-macvlan.c:154
+#: src/libnm-core-impl/nm-setting-vlan.c:654
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "lastnost ni določena in tudi ne »%s:%s«"
+
+#: src/libnm-core-impl/nm-setting-ipvlan.c:166
+#, c-format
+msgid "unsupported mode %u"
+msgstr "nepodprti način %u"
+
+#: src/libnm-core-impl/nm-setting-ipvlan.c:176
+msgid "private and VEPA cannot be enabled at the same time"
+msgstr "zasebnega in VEPA ni mogoče omogočiti hkrati"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:193
 #: src/libnm-core-impl/nm-setting-ip6-config.c:278
-#, fuzzy, c-format
+#, c-format
 msgid "method '%s' requires at least an address or a route"
-msgstr "Za metodo \"%s\" je potreben vsaj naslov ali pot"
+msgstr "za metodo »%s« je potreben vsaj naslov ali pot"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:208
 #: src/libnm-core-impl/nm-setting-ip4-config.c:222
@@ -2668,53 +2665,47 @@ msgstr "Za metodo \"%s\" je potreben vsaj naslov ali pot"
 #: src/libnm-core-impl/nm-setting-ip6-config.c:297
 #: src/libnm-core-impl/nm-setting-ip6-config.c:311
 #: src/libnm-core-impl/nm-setting-ip6-config.c:325
-#, fuzzy, c-format
+#, c-format
 msgid "this property is not allowed for '%s=%s'"
-msgstr "Ta nastanitev ni dovoljena za '%s=%s'"
+msgstr "ta nastavitev ni dovoljena za »%s=%s«"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:283
-#, fuzzy
 msgid "cannot enable ipv4.link-local with ipv4.method=disabled"
-msgstr "Ni mogoče omogočiti ipv4.link-local z ipv4.method=disabled"
+msgstr "ni mogoče omogočiti ipv4.link-local z ipv4.method=disabled"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:295
-#, fuzzy
 msgid "cannot disable ipv4.link-local with ipv4.method=link-local"
-msgstr "Ni mogoče onemogočiti ipv4.link-local z ipv4.method=link-local"
+msgstr "ni mogoče onemogočiti ipv4.link-local z ipv4.method=link-local"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:331
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid FQDN"
-msgstr "»%s« ni veljavna FQDN"
+msgstr "»%s« ni veljaven FQDN"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:344
-#, fuzzy
 msgid "property cannot be set when dhcp-hostname is also set"
-msgstr "Lastnosti ni mogoče nastaviti, če je nastavljen tudi dhcp-hostname"
+msgstr "lastnosti ni mogoče nastaviti, če je nastavljen tudi dhcp-hostname"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:359
-#, fuzzy
 msgid "FQDN flags requires a FQDN set"
 msgstr "Zastavice FQDN zahtevajo nabor FQDN"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:378
-#, fuzzy, c-format
+#, c-format
 msgid "multiple addresses are not allowed for '%s=%s'"
-msgstr "Več naslovov ni dovoljeno za »%s=%s«"
+msgstr "več naslovov ni dovoljeno za »%s=%s«"
 
 #: src/libnm-core-impl/nm-setting-ip4-config.c:395
-#, fuzzy
 msgid "property should be TRUE when method is set to disabled"
-msgstr "mora biti TRUE, ko je metoda nastavljena na onemogočeno"
+msgstr "lastnost mora biti TRUE, ko je metoda nastavljena na onemogočeno"
 
 #: src/libnm-core-impl/nm-setting-ip6-config.c:377
 msgid "value is not a valid token"
 msgstr "vrednost ni veljaven žeton"
 
 #: src/libnm-core-impl/nm-setting-ip6-config.c:391
-#, fuzzy
 msgid "only makes sense with EUI64 address generation mode"
-msgstr "smiselno je samo z načinom generiranja naslovov EUI64"
+msgstr "smiselno je samo z načinom tvorjenja naslovov EUI64"
 
 #: src/libnm-core-impl/nm-setting-ip6-config.c:405
 msgid "invalid DUID"
@@ -2733,7 +2724,6 @@ msgid "Shared DHCP range is not supported for IPv6"
 msgstr "Obseg DHCP v skupni rabi ni podprt za IPv6"
 
 #: src/libnm-core-impl/nm-setting-ip6-config.c:459
-#, fuzzy
 msgid "Shared DHCP lease time is not supported for IPv6"
 msgstr "Čas zakupa DHCP v skupni rabi ni podprt za IPv6"
 
@@ -2742,29 +2732,28 @@ msgid "token is not in canonical form"
 msgstr "žeton ni v kanonični obliki"
 
 #: src/libnm-core-impl/nm-setting-ip6-config.c:490
-#, fuzzy
 msgid "property should be TRUE when method is set to ignore or disabled"
-msgstr "mora biti TRUE, če je metoda nastavljena na prezrti ali onemogočena"
+msgstr ""
+"lastnost mora biti TRUE, če je metoda nastavljena na prezri/ignore ali "
+"onemogočeno/disabled"
 
 #: src/libnm-core-impl/nm-setting-loopback.c:86
-#, fuzzy, c-format
+#, c-format
 msgid "ipv4 method \"%s\" is not supported for loopback"
-msgstr "Metoda IPv4 »%s« ni podprta za povratno zanko"
+msgstr "metoda IPv4 »%s« ni podprta za povratno zanko"
 
 #: src/libnm-core-impl/nm-setting-loopback.c:101
-#, fuzzy
 msgid "ipv4.link-local cannot be enabled for loopback"
 msgstr "ipv4.link-local ni mogoče omogočiti za povratno zanko"
 
 #: src/libnm-core-impl/nm-setting-loopback.c:117
-#, fuzzy, c-format
+#, c-format
 msgid "ipv6 method \"%s\" is not supported for loopback"
-msgstr "IPv6 metoda »%s« ni podprta za povratno zanko"
+msgstr "metoda IPv6 »%s« ni podprta za povratno zanko"
 
 #: src/libnm-core-impl/nm-setting-loopback.c:133
-#, fuzzy
 msgid "a loopback profile cannot be a port"
-msgstr "Profil povratne zanke ne more biti vrata"
+msgstr "profil povratne zanke ne morejo biti vrata"
 
 #: src/libnm-core-impl/nm-setting-macsec.c:267
 msgid "the key is empty"
@@ -2776,55 +2765,41 @@ msgid "the key must be %d characters"
 msgstr "Ključ mora imeti %d znakov"
 
 #: src/libnm-core-impl/nm-setting-macsec.c:287
-#, fuzzy
-#| msgid "IV must be an even number of bytes in length."
 msgid "the key must have an even number of characters between 2 and 64"
-msgstr "IV mora biti dolg sodo število bajtov."
+msgstr "ključ mora imeti sodo število znakov med 2 in 64"
 
 #: src/libnm-core-impl/nm-setting-macsec.c:296
-#, fuzzy
 msgid "the key contains non-hexadecimal characters"
-msgstr "IV vsebuje ne-šestnajstiške številke."
-
-#: src/libnm-core-impl/nm-setting-macsec.c:365
-#: src/libnm-core-impl/nm-setting-macvlan.c:154
-#: src/libnm-core-impl/nm-setting-vlan.c:654
-#, fuzzy, c-format
-msgid "property is not specified and neither is '%s:%s'"
-msgstr "lastnina ni določena in tudi \"%s:%s\""
+msgstr "ključ vsebuje nešestnajstiške znake"
 
 #: src/libnm-core-impl/nm-setting-macsec.c:396
-#, fuzzy, c-format
+#, c-format
 msgid "EAP key management requires '%s' setting presence"
 msgstr "Upravljanje ključev EAP zahteva prisotnost nastavitve »%s«"
 
 #: src/libnm-core-impl/nm-setting-macsec.c:405
-#, fuzzy
 msgid "must be either psk (0) or eap (1)"
-msgstr "Mora biti PSK (0) ali EAP (1)"
+msgstr "mora biti psk (0) ali eap (1)"
 
 #: src/libnm-core-impl/nm-setting-macsec.c:416
-#, fuzzy
 msgid "only valid for psk mode"
-msgstr "Velja samo za način PSK"
+msgstr "velja samo za način psk"
 
 #: src/libnm-core-impl/nm-setting-macvlan.c:169
-#, fuzzy
 msgid "non promiscuous operation is allowed only in passthru mode"
-msgstr "Nepromiskuitetno delovanje je dovoljeno samo v načinu passthru"
+msgstr "nepromiskuitetno delovanje je dovoljeno samo v načinu passthru"
 
-#: src/libnm-core-impl/nm-setting-match.c:644
-#: src/libnm-core-impl/nm-setting-match.c:660
-#: src/libnm-core-impl/nm-setting-match.c:676
-#: src/libnm-core-impl/nm-setting-match.c:692
+#: src/libnm-core-impl/nm-setting-match.c:645
+#: src/libnm-core-impl/nm-setting-match.c:661
+#: src/libnm-core-impl/nm-setting-match.c:677
+#: src/libnm-core-impl/nm-setting-match.c:693
 msgid "is empty"
 msgstr "je prazno"
 
 #: src/libnm-core-impl/nm-setting-olpc-mesh.c:110
 #: src/libnm-core-impl/nm-setting-wireless.c:1113
-#, fuzzy
 msgid "SSID length is out of range <1-32> bytes"
-msgstr "Dolžina SSID-ja je izven <1-32> bajtov</1-32> obsega"
+msgstr "Dolžina SSID-ja je izven obsega <1-32> bajtov"
 
 #: src/libnm-core-impl/nm-setting-olpc-mesh.c:122
 #: src/libnm-core-impl/nm-setting-wireless.c:1166
@@ -2833,17 +2808,17 @@ msgid "'%d' is not a valid channel"
 msgstr "»%d« ni veljaven kanal"
 
 #: src/libnm-core-impl/nm-setting-ovs-bridge.c:160
-#, fuzzy, c-format
+#, c-format
 msgid "A connection with a '%s' setting must not have a controller."
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "Povezava z nastavitvijo »%s« ne sme imeti krmilnika."
 
 #: src/libnm-core-impl/nm-setting-ovs-bridge.c:174
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not allowed in fail_mode"
-msgstr "Napaka: naprava '%s' ni naprava Wi-Fi."
+msgstr "»%s« ni dovoljeno v fail_mode"
 
-#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:124
-#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:136
+#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:145
+#: src/libnm-core-impl/nm-setting-ovs-dpdk.c:157
 msgid "must be a power of two"
 msgstr "mora biti potenca števila 2"
 
@@ -2863,20 +2838,20 @@ msgstr ""
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:363
 #: src/libnm-core-impl/nm-setting-ovs-other-config.c:201
 #: src/libnm-core-impl/nm-setting-user.c:361
-#, fuzzy, c-format
+#, c-format
 msgid "invalid key \"%s\": %s"
-msgstr "Neveljaven ključ »%s.%s«"
+msgstr "Neveljaven ključ »%s«: %s"
 
 #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:387
 #: src/libnm-core-impl/nm-setting-ovs-other-config.c:225
-#, fuzzy, c-format
+#, c-format
 msgid "maximum number of entries reached (%u instead of %u)"
-msgstr "največje doseženo število vstopov (%u namesto %u)"
+msgstr "doseženo največje število vstopov (%u namesto %u)"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:110
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid interface type"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljavna vrsta vmesnika"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:137
 #, fuzzy, c-format
@@ -2885,19 +2860,19 @@ msgstr ""
 "Povezava z nastavitvijo »%s« zahteva eksplicitno nastavljeno povezavo.type"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:151
-#, fuzzy, c-format
+#, c-format
 msgid "A connection of type '%s' cannot have ovs-interface.type \"system\""
-msgstr "Povezava tipa '%s' ne more imeti ovs-interface.type \"system\""
+msgstr "Povezava vrste »%s« ne more imeti ovs-interface.type »system«"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:165
-#, fuzzy, c-format
+#, c-format
 msgid "A connection of type '%s' cannot have an ovs-interface.type \"%s\""
-msgstr "Povezava tipa '%s' ne more imeti ovs-interface.type '%s'"
+msgstr "Povezava vrste »%s« ne more imeti ovs-interface.type »%s«"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:187
-#, fuzzy, c-format
+#, c-format
 msgid "A connection can not have both '%s' and '%s' settings at the same time"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "Povezava ne more imeti hkrati nastavitev »%s« in »%s«"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:201
 #, fuzzy, c-format
@@ -2905,14 +2880,14 @@ msgid ""
 "A connection with '%s' setting must be of connection.type \"ovs-interface\" "
 "but is \"%s\""
 msgstr ""
-"Povezava z nastavitvijo '%s' mora biti povezava.vnesite »ovs-interface«, "
+"Povezava z nastavitvijo »%s« mora biti povezava.vnesite »ovs-interface«, "
 "vendar je »%s«"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:217
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "A connection with '%s' setting needs to be of '%s' interface type, not '%s'"
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "Povezava z nastavitvijo »%s« mora biti vrste vmesnika »%s« in ne »%s«"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:239
 #, fuzzy, c-format
@@ -2920,65 +2895,62 @@ msgid "A connection with ovs-interface.type '%s' setting a 'ovs-patch' setting"
 msgstr "Povezava z ovs-interface.type '%s' nastavitev 'ovs-patch'"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:267
-#, fuzzy
 msgid "Missing ovs interface setting"
 msgstr "Manjka nastavitev vmesnika ovs"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:273
-#, fuzzy
 msgid "Missing ovs interface type"
 msgstr "Manjka vrsta vmesnika ovs"
 
 #: src/libnm-core-impl/nm-setting-ovs-interface.c:315
 #: src/libnm-core-impl/nm-setting-ovs-port.c:420
-#, fuzzy, c-format
+#, c-format
 msgid "A connection with a '%s' setting must have a controller."
-msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna."
+msgstr "Povezava z nastavitvijo »%s« mora imeti krmilnik."
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:347
-#, fuzzy
 msgid "VLANs must be between 0 and 4095"
 msgstr "Omrežja VLAN morajo biti med 0 in 4095"
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:356
-#, fuzzy, c-format
+#, c-format
 msgid "duplicate VLAN %u"
-msgstr "neveljavno polje '%s'"
+msgstr "podvojeni VLAN %u"
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:384
-#, fuzzy, c-format
+#, c-format
 msgid "VLANs %u and %u are not sorted in ascending order"
-msgstr "Omrežja VLAN %u in %u niso razvrščena v naraščajočem vrstnem redu"
+msgstr "Omrežji VLAN %u in %u nista razvrščeni v naraščajočem zaporedju"
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:457
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not allowed in vlan_mode"
-msgstr "Napaka: naprava '%s' ni naprava Wi-Fi."
+msgstr "»%s« ni dovoljeno v vlan_mode"
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:470
-#, fuzzy, c-format
+#, c-format
 msgid "the tag id must be in range 0-4094 but is %u"
-msgstr "ID oznake mora biti v območju 0-4094, vendar je %u"
+msgstr "id oznake mora biti v obsegu 0-4094, vendar je %u"
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:480
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not allowed in lacp"
-msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+msgstr "»%s« ni dovoljeno v lacp"
 
 #: src/libnm-core-impl/nm-setting-ovs-port.c:493
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not allowed in bond_mode"
-msgstr "Napaka: naprava '%s' ni naprava Wi-Fi."
+msgstr "»%s« v bond_mode ni dovoljeno"
 
 #: src/libnm-core-impl/nm-setting-ppp.c:350
-#, fuzzy, c-format
+#, c-format
 msgid "'%d' is out of valid range <128-16384>"
 msgstr "'%d' je izven veljavnega obsega <128-16384>"
 
 #: src/libnm-core-impl/nm-setting-ppp.c:363
-#, fuzzy, c-format
+#, c-format
 msgid "setting this property requires non-zero '%s' property"
-msgstr "Za nastavitev te lastnosti potrebujete lastnost »%s«, ki ni ničelna"
+msgstr "Za nastavitev te lastnosti potrebujete neničelno lastnost »%s«"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:137
 #, fuzzy
@@ -2992,49 +2964,46 @@ msgid "this property is not allowed for method none"
 msgstr "Ta lastnost ni dovoljena za metodo none"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:173
-#, fuzzy
 msgid "the script is too large"
-msgstr "scenarij je prevelik"
+msgstr "skript je prevelik"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:184
-#, fuzzy
 msgid "the script is not valid utf8"
-msgstr "Skript ni veljaven UTF8"
+msgstr "skript ni v veljavnem UTF8"
 
 #: src/libnm-core-impl/nm-setting-proxy.c:195
-#, fuzzy
 msgid "the script lacks FindProxyForURL function"
 msgstr "skript nima funkcije FindProxyForURL"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:432
+#: src/libnm-core-impl/nm-setting-sriov.c:434
 #: src/libnm-core-impl/nm-setting-wired.c:993
 #: src/libnm-core-impl/nm-setting-wired.c:1010
 #: src/libnm-core-impl/nm-setting-wired.c:1085
 #: src/libnm-core-impl/nm-setting-wired.c:1144
 #: src/libnm-core-impl/nm-setting-wireless.c:1257
 #: src/libnm-core-impl/nm-setting-wireless.c:1277
-#: src/libnmc-setting/nm-meta-setting-desc.c:4259
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:4315
+#, c-format
 msgid "'%s' is not a valid MAC address"
 msgstr "»%s« ni veljaven naslov MAC"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1103
+#: src/libnm-core-impl/nm-setting-sriov.c:1121
 #, fuzzy, c-format
 msgid "VF with index %u, but the total number of VFs is %u"
 msgstr "VF z indeksom %u, vendar je skupno število VF %u"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1117
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-sriov.c:1135
+#, c-format
 msgid "invalid VF %u: %s"
-msgstr "neveljavne VPN skrivnosti"
+msgstr "neveljaven VF %u: %s"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1131
+#: src/libnm-core-impl/nm-setting-sriov.c:1149
 #, fuzzy, c-format
 msgid "duplicate VF index %u"
 msgstr "neveljavno polje '%s'"
 
-#: src/libnm-core-impl/nm-setting-sriov.c:1155
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-sriov.c:1173
+#, c-format
 msgid "VFs %d and %d are not sorted by ascending index"
 msgstr "VF %d in %d niso razvrščeni po naraščajočem indeksu"
 
@@ -3053,17 +3022,14 @@ msgstr "»%s« ni veljavna vrsta"
 
 #: src/libnm-core-impl/nm-setting-tc-config.c:71
 #: src/libnm-core-impl/nm-setting-tc-config.c:714
-#, fuzzy
 msgid "parent handle missing"
-msgstr "Napaka: manjka argument %s."
+msgstr "manjka nadrejena ročica"
 
 #: src/libnm-core-impl/nm-setting-tc-config.c:1284
-#, fuzzy
 msgid "there are duplicate TC qdiscs"
-msgstr "obstajajo podvojeni TC qdisci"
+msgstr "obstajajo podvojeni qdisc-i TC"
 
 #: src/libnm-core-impl/nm-setting-tc-config.c:1303
-#, fuzzy
 msgid "there are duplicate TC filters"
 msgstr "obstajajo podvojeni filtri TC"
 
@@ -3075,30 +3041,28 @@ msgid "%s is out of range [0, %d]"
 msgstr "%s je izven obsega [0, %d]"
 
 #: src/libnm-core-impl/nm-setting-team.c:166
-#, fuzzy
 msgid "Missing target-host in nsna_ping link watcher"
-msgstr "Manjka cilj-gostitelj v nsna_ping opazovalcu povezav"
+msgstr "Manjka cilj-gostitelj v opazovalniku povezav nsna_ping"
 
 #: src/libnm-core-impl/nm-setting-team.c:174
 #: src/libnm-core-impl/nm-setting-team.c:297
-#, fuzzy, c-format
+#, c-format
 msgid "target-host '%s' contains invalid characters"
-msgstr "IV vsebuje ne-šestnajstiške številke."
+msgstr "target-host »%s« vsebuje neveljavne znake"
 
 #: src/libnm-core-impl/nm-setting-team.c:288
-#, fuzzy, c-format
+#, c-format
 msgid "Missing %s in arp_ping link watcher"
-msgstr "Manjkajoči %s v opazovalniku povezav arp_ping"
+msgstr "manjkajoči %s v opazovalniku povezav arp_ping"
 
 #: src/libnm-core-impl/nm-setting-team.c:306
-#, fuzzy, c-format
+#, c-format
 msgid "source-host '%s' contains invalid characters"
-msgstr "IV vsebuje ne-šestnajstiške številke."
+msgstr "source-host »%s« vsebuje neveljavne znake"
 
 #: src/libnm-core-impl/nm-setting-team.c:331
-#, fuzzy
 msgid "vlanid is out of range [-1, 4094]"
-msgstr "Vlanid je izven dosega [-1, 4094]"
+msgstr "vlanid je izven obsega [-1, 4094]"
 
 #: src/libnm-core-impl/nm-setting-tun.c:162
 #, c-format
@@ -3116,9 +3080,8 @@ msgid "'%s': invalid group ID"
 msgstr "»%s«: neveljaven ID skupine"
 
 #: src/libnm-core-impl/nm-setting-user.c:133
-#, fuzzy
 msgid "key requires a '.' for a namespace"
-msgstr "Za imenski prostor je potreben znak '.'"
+msgstr "za imenski prostor ključ potrebuje '.'"
 
 #: src/libnm-core-impl/nm-setting-user.c:148
 msgid "key cannot contain \"..\""
@@ -3152,14 +3115,12 @@ msgid "vlan setting should have a ethernet setting as well"
 msgstr "Nastavitev vlan mora imeti tudi nastavitev ethernet"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:573
-#, fuzzy
 msgid "cannot set connection.multi-connect for VPN setting"
-msgstr "ni mogoče nastaviti nastavitve connection.multi-connect za VPN"
+msgstr "ni mogoče nastaviti connection.multi-connect za nastavitev VPN"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:647
-#, fuzzy
 msgid "setting contained a secret with an empty name"
-msgstr "Nastavitev je vsebovala skrivnost s praznim imenom"
+msgstr "nastavitev je vsebovala skrivnost s praznim imenom"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:694
 #: src/libnm-core-impl/nm-setting.c:3579
@@ -3167,44 +3128,41 @@ msgid "not a secret property"
 msgstr "ni skrivna lastnost"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:702
-#, fuzzy
 msgid "secret is not of correct type"
-msgstr "Skrivnost ni pravilne vrste"
+msgstr "skrivnost ni pravilne vrste"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:789
 #: src/libnm-core-impl/nm-setting-vpn.c:840
-#, fuzzy
 msgid "secret name cannot be empty"
-msgstr "Skrivno ime ne more biti prazno"
+msgstr "skrivno ime ne sme biti prazno"
 
 #: src/libnm-core-impl/nm-setting-vpn.c:805
 #, fuzzy
 msgid "secret flags property not found"
-msgstr "Nastanitev Secret Flags ni bila najdena"
+msgstr "nastanitev secret flags ni bila najdena"
 
 #: src/libnm-core-impl/nm-setting-vrf.c:73
-#, fuzzy
 msgid "table cannot be zero"
-msgstr "Tabela ne more biti nič"
+msgstr "tabela ne more biti nič"
 
 #: src/libnm-core-impl/nm-setting-vxlan.c:354
 #: src/libnm-core-impl/nm-setting-vxlan.c:365
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid IP%s address"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljaven naslov IP%s"
 
 #: src/libnm-core-impl/nm-setting-vxlan.c:388
-#, fuzzy, c-format
+#, c-format
 msgid "%d is greater than local port max %d"
-msgstr "%d večja od največje %d lokalnih vrat"
+msgstr "%d je večje od največje številke krajevnih vrat %d"
 
 #: src/libnm-core-impl/nm-setting-wired.c:973
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid Ethernet port value"
-msgstr "»%s« ni veljavna vrednost ethernetnih vrat"
+msgstr "»%s« ni veljavna vrednost vrat omrežja Ethernet"
 
 #: src/libnm-core-impl/nm-setting-wired.c:983
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid duplex value"
 msgstr "»%s« ni veljavna vrednost dupleksa"
 
@@ -3219,16 +3177,13 @@ msgid "invalid value for key '%s'"
 msgstr "Neveljavna vrednost za ključ »%s«"
 
 #: src/libnm-core-impl/nm-setting-wired.c:1119
-#, fuzzy
 msgid "Wake-on-LAN mode 'default' and 'ignore' are exclusive flags"
-msgstr "Način Wake-on-LAN »privzeto« in »ignoriraj« sta izključni zastavici"
+msgstr ""
+"Načina Wake-on-WLAN »default« in »ignore« sta izključujoči se zastavici"
 
 #: src/libnm-core-impl/nm-setting-wired.c:1132
-#, fuzzy
 msgid "Wake-on-LAN password can only be used with magic packet mode"
-msgstr ""
-"Geslo za bujenje v omrežju LAN je mogoče uporabiti samo v načinu čarobnega "
-"paketa"
+msgstr "Geslo Wake-on-LAN je mogoče uporabiti samo v načinu čarobnega paketa"
 
 #: src/libnm-core-impl/nm-setting-wired.c:1163
 #, fuzzy
@@ -3243,90 +3198,83 @@ msgid "both speed and duplex are required for static link configuration"
 msgstr "Hitrost in dupleks sta potrebna za konfiguracijo statične povezave"
 
 #: src/libnm-core-impl/nm-setting-wireguard.c:747
-#, fuzzy
 msgid "missing public-key for peer"
-msgstr "manjkajoči javni ključ za enakovrednega"
+msgstr "manjka javni ključ public-key za vrstnika"
 
 #: src/libnm-core-impl/nm-setting-wireguard.c:753
-#, fuzzy
 msgid "invalid public-key for peer"
-msgstr "Neveljaven javni ključ za enakovrednega uporabnika"
+msgstr "neveljaven public-key za vrstnika"
 
 #: src/libnm-core-impl/nm-setting-wireguard.c:763
-#, fuzzy
 msgid "invalid preshared-key for peer"
-msgstr "Neveljaven ključ v vnaprejšnji skupni rabi za enakovrednega"
+msgstr "neveljaven ključ preshared-key za vrstnika"
 
 #: src/libnm-core-impl/nm-setting-wireguard.c:782
-#, fuzzy
 msgid "invalid endpoint for peer"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna končna točka za vrstnika"
 
 #: src/libnm-core-impl/nm-setting-wireguard.c:794
-#, fuzzy, c-format
+#, c-format
 msgid "invalid IP address \"%s\" for allowed-ip of peer"
-msgstr "neveljavne VPN skrivnosti"
+msgstr "neveljaven naslov IP »%s« za allowed-ip vrstnika"
 
 #: src/libnm-core-impl/nm-setting-wireguard.c:805
-#, fuzzy
 msgid "invalid preshared-key-flags for peer"
-msgstr "Neveljavne zastavice s ključem v skupni rabi za enakovredne"
+msgstr "neveljaven preshared-key-flags za vrstnika"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1587
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1604
+#, c-format
 msgid "peer #%u has no public-key"
-msgstr "vrstnik #%u nima javnega ključa"
+msgstr "vrstnik #%u nima javnega ključa public-key"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1600
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1617
+#, c-format
 msgid "peer #%u has invalid public-key"
-msgstr "Vrstnik #%u ima neveljaven javni ključ"
+msgstr "vrstnik #%u ima neveljaven javni ključ public-key"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1616
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1633
+#, c-format
 msgid "peer #%u has invalid endpoint"
-msgstr "Enakovnik #%u ima neveljavno končno točko"
+msgstr "vrstnik #%u ima neveljavno končno točko endpoint"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1648
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1665
+#, c-format
 msgid "peer #%u has invalid allowed-ips setting"
-msgstr "Peer #%u ima neveljavno nastavitev dovoljenih IP-ov"
+msgstr "vrstnik #%u ima neveljavno nastavitev allowed-ips"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1662
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1679
+#, c-format
 msgid "peer #%u is invalid: %s"
 msgstr "vrstnik #%u je neveljaven: %s"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1734
-#: src/libnm-core-impl/nm-setting-wireguard.c:1753
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1751
+#: src/libnm-core-impl/nm-setting-wireguard.c:1770
+#, c-format
 msgid "method \"%s\" is not supported for WireGuard"
 msgstr "metoda »%s« ni podprta za WireGuard"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1777
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-wireguard.c:1794
 msgid "key must be 32 bytes base64 encoded"
-msgstr "ključ mora biti kodiran 32 bajtov base64"
+msgstr "ključ mora biti kodiran z 32-bajtnim base64"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1908
-#, fuzzy
+#: src/libnm-core-impl/nm-setting-wireguard.c:1925
 msgid "invalid peer secrets"
-msgstr "neveljavne VPN skrivnosti"
+msgstr "neveljavne skrivnosti vrstnika"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1934
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1951
+#, c-format
 msgid "peer #%u lacks public-key"
-msgstr "vrstnik #%u nima javnega ključa"
+msgstr "vrstnik #%u nima javnega ključa public-key"
 
-#: src/libnm-core-impl/nm-setting-wireguard.c:1951
-#, fuzzy, c-format
+#: src/libnm-core-impl/nm-setting-wireguard.c:1968
+#, c-format
 msgid "non-existing peer '%s'"
-msgstr "neobstoječi enakovredni \"%s\""
+msgstr "neobstoječi vrstnik »%s«"
 
 #: src/libnm-core-impl/nm-setting-wireless-security.c:938
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid value for '%s' mode connections"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljavna vrednost za povezave v načinu »%s«"
 
 #: src/libnm-core-impl/nm-setting-wireless-security.c:954
 #, c-format
@@ -3339,18 +3287,18 @@ msgid "'%s' security requires '%s' setting presence"
 msgstr "Varnost »%s« zahteva prisotnost nastavitve »%s«"
 
 #: src/libnm-core-impl/nm-setting-wireless-security.c:1072
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' can only be used with '%s=%s' (WEP)"
-msgstr "\"%s\" se lahko uporablja samo z \"%s=%s\" (WEP)"
+msgstr "»%s« se lahko uporablja samo z »%s=%s« (WEP)"
 
 #: src/libnm-core-impl/nm-setting-wireless-security.c:1109
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "'%s' can only be used with 'owe', 'wpa-psk', 'sae', 'wpa-eap' or 'wpa-eap-"
 "suite-b-192' key management"
 msgstr ""
-"»%s« se lahko uporablja samo z upravljanjem ključev »dolg«, »wpa-psk«, "
-"»sae«, »wpa-eap« ali »wpa-eap-suite-b-192«"
+"»%s« se lahko uporablja samo z upravljanjem ključev »owe«, »wpa-psk«, »sae«, "
+"»wpa-eap« ali »wpa-eap-suite-b-192«"
 
 #: src/libnm-core-impl/nm-setting-wireless-security.c:1127
 #, fuzzy
@@ -3367,12 +3315,12 @@ msgid "'%s' is not a valid Wi-Fi mode"
 msgstr "»%s« ni veljaven način Wi-Fi"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1138
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid band"
-msgstr "\"%s\" ni veljavna skupina"
+msgstr "»%s« ni veljaven pas"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1151
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' requires setting '%s' property"
 msgstr "»%s« zahteva nastavitev lastnosti »%s«"
 
@@ -3387,40 +3335,34 @@ msgid "invalid value"
 msgstr "neveljavna vrednost"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1308
-#, fuzzy
 msgid "Wake-on-WLAN mode 'default' and 'ignore' are exclusive flags"
-msgstr "Način Wake-on-WLAN »privzeto« in »ignoriraj« sta izključni zastavici"
+msgstr ""
+"Načina Wake-on-WLAN »default« in »ignore« sta izključujoči se zastavici"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1319
-#, fuzzy
 msgid "Wake-on-WLAN trying to set unknown flag"
 msgstr "Wake-on-WLAN poskuša nastaviti neznano zastavico"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1332
-#, fuzzy
 msgid "AP isolation can be set only in AP mode"
-msgstr "Izolacijo AP je mogoče nastaviti samo v načinu AP"
+msgstr "izolacijo AP je mogoče nastaviti samo v načinu AP"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1345
-#, fuzzy
 msgid "a specific channel width can be set only in AP mode"
 msgstr "določeno širino kanala lahko nastavite samo v načinu AP"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1357
-#, fuzzy
 msgid "a specific channel width can be set only together with a fixed channel"
-msgstr "Določeno širino kanala lahko nastavite samo skupaj s fiksnim kanalom"
+msgstr "določeno širino kanala lahko nastavite samo skupaj s fiksnim kanalom"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1370
-#, fuzzy
 msgid "80MHz channels are only supported in the 5GHz band"
-msgstr "Kanali 80 MHz so podprti samo v pasu 5 GHz"
+msgstr "kanali 80 MHz so podprti samo v pasu 5 GHz"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1389
-#, fuzzy
 msgid "conflicting value of mac-address-randomization and cloned-mac-address"
 msgstr ""
-"Nasprotujoča si vrednost MAC-ADDRESS-randomization in Cloned-MAC-address"
+"nasprotujoči si vrednosti mac-address-randomization in cloned-mac-address"
 
 #: src/libnm-core-impl/nm-setting-wireless.c:1401
 msgid "property is deprecated and not implemented"
@@ -3436,27 +3378,25 @@ msgid "page must be between %d and %d"
 msgstr "stran mora biti med %d in %d"
 
 #: src/libnm-core-impl/nm-setting-wpan.c:194
-#, fuzzy, c-format
+#, c-format
 msgid "channel must not be between %d and %d"
 msgstr "kanal ne sme biti med %d in %d"
 
 #: src/libnm-core-impl/nm-setting.c:1774 src/libnm-core-impl/nm-setting.c:1814
 #: src/libnm-core-impl/nm-setting.c:2125
-#, fuzzy, c-format
+#, c-format
 msgid "can't set property of type '%s' from value of type '%s'"
-msgstr "Lastnosti vrste »%s« iz vrednosti vrste »%s« ni mogoče nastaviti"
+msgstr "lastnosti vrste »%s« ni mogoče nastaviti vrednosti vrste »%s«"
 
 #: src/libnm-core-impl/nm-setting.c:1790
-#, fuzzy, c-format
+#, c-format
 msgid "value of type '%s' is invalid or out of range for property '%s'"
-msgstr ""
-"vrednost »%s« vrste »%s« ni veljavna ali pa je lastnost »%s« izven obsega za "
-"vrsto »%s«"
+msgstr "vrednost »%s« ni veljavna ali pa je izven obsega za lastnost »%s«"
 
 #: src/libnm-core-impl/nm-setting.c:1835
-#, fuzzy, c-format
+#, c-format
 msgid "can not set property: %s"
-msgstr "Napaka: %s."
+msgstr "Lastnosti ni mogoče nastaviti: %s"
 
 #: src/libnm-core-impl/nm-setting.c:2064
 msgid "duplicate property"
@@ -3481,60 +3421,57 @@ msgid "cannot be empty"
 msgstr "ne sme biti prazno"
 
 #: src/libnm-core-impl/nm-setting.c:3476
-#, fuzzy
 msgid "secret not found"
-msgstr "Skrivne kode OAuth2 ni mogoče najti"
+msgstr "skrivnosti ni možno najti"
 
 #: src/libnm-core-impl/nm-team-utils.c:1532
 #: src/libnm-core-impl/nm-team-utils.c:1549
-#, fuzzy, c-format
+#, c-format
 msgid "invalid D-Bus property \"%s\""
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna lastnost D-Bus »%s«"
 
 #: src/libnm-core-impl/nm-team-utils.c:1561
-#, fuzzy, c-format
+#, c-format
 msgid "duplicate D-Bus property \"%s\""
-msgstr "Napaka: %s."
+msgstr "podvojena lastnost D-Bus »%s«"
 
 #: src/libnm-core-impl/nm-team-utils.c:1581
-#, fuzzy, c-format
+#, c-format
 msgid "invalid D-Bus property \"%s\" for \"%s\""
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna lastnost D-Bus »%s« za »%s«"
 
 #: src/libnm-core-impl/nm-team-utils.c:1653
-#, fuzzy, c-format
+#, c-format
 msgid "unknown link-watcher name \"%s\""
-msgstr "Neznana domena beleženja '%s'"
+msgstr "neznano ime opazovalca povezav »%s«"
 
 #: src/libnm-core-impl/nm-team-utils.c:2241
-#, fuzzy
 msgid "value out of range"
-msgstr "Vrednost je izven območja.\n"
+msgstr "vrednost izven obsega"
 
 #: src/libnm-core-impl/nm-team-utils.c:2274
-#, fuzzy
 msgid "invalid runner-tx-hash"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven runner-tx-hash"
 
 #: src/libnm-core-impl/nm-team-utils.c:2302
 #, fuzzy, c-format
 msgid "%s is only allowed for runner %s"
-msgstr "Napaka: ukaz 'nm' '%s' ni veljaven"
+msgstr "%s je dovoljeno samo za tekača %s"
 
 #: src/libnm-core-impl/nm-team-utils.c:2312
 #, fuzzy, c-format
 msgid "%s is only allowed for runners %s"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "%s je dovoljeno samo za tekače %s"
 
 #: src/libnm-core-impl/nm-team-utils.c:2333
 #, fuzzy
 msgid "cannot set parameters for lacp and activebackup runners together"
-msgstr "Parametrov za tekače LACP in ActiveBackup ni mogoče nastaviti skupaj"
+msgstr "parametrov za tekače lacp in activebackup ni mogoče nastaviti skupaj"
 
 #: src/libnm-core-impl/nm-team-utils.c:2347
 #, fuzzy
 msgid "missing link watcher"
-msgstr "ime datoteke"
+msgstr "opazovalec manjkajočih povezav"
 
 #: src/libnm-core-impl/nm-team-utils.c:2373
 #, fuzzy
@@ -3552,9 +3489,9 @@ msgid "invalid D-Bus type \"%s\""
 msgstr "neveljavna vrsta vodila D-Bus »%s«"
 
 #: src/libnm-core-impl/nm-team-utils.c:2598
-#, fuzzy, c-format
+#, c-format
 msgid "invalid link-watchers: %s"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven link-watchers: %s"
 
 #: src/libnm-core-impl/nm-utils.c:1367
 msgid "Expected value of type \"au\""
@@ -3565,14 +3502,13 @@ msgid "Expected value of type \"aau\""
 msgstr "Pričakovana vrednost vrste »aau«"
 
 #: src/libnm-core-impl/nm-utils.c:1521
-#, fuzzy
 msgid "Expected \"address-labels\" of type \"as\""
-msgstr "Pričakovane \"naslovne nalepke\" tipa \"as\""
+msgstr "Pričakovano »address-labels« vrste »as«"
 
 #: src/libnm-core-impl/nm-utils.c:1543
-#, fuzzy, c-format
+#, c-format
 msgid "Incomplete IPv4 address (idx=%u)"
-msgstr "neveljavno polje '%s'"
+msgstr "Nepopoln naslov IPv4 (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:1556 src/libnm-core-impl/nm-utils.c:1712
 #: src/libnm-core-impl/nm-utils.c:2021 src/libnm-core-impl/nm-utils.c:2218
@@ -3591,49 +3527,47 @@ msgid "Expected value of type \"aay\""
 msgstr "Pričakovana vrednost vrste \"aay\""
 
 #: src/libnm-core-impl/nm-utils.c:1846
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid IPv6 DNS address length (idx=%u)"
-msgstr "neveljavno polje '%s'"
+msgstr "Neveljavna dolžina naslova DNS IPv6 (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:1973
-#, fuzzy
 msgid "Expected value of type \"a(ayuay)\""
 msgstr "Pričakovana vrednost vrste \"a(ayuay)\""
 
 #: src/libnm-core-impl/nm-utils.c:1995
-#, fuzzy, c-format
+#, c-format
 msgid "Expected value of type \"(ayuay)\" (idx=%u)"
 msgstr "Pričakovana vrednost vrste \"(ayuay)\" (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2008
-#, fuzzy, c-format
+#, c-format
 msgid "IPv6 address with invalid length (idx=%u)"
 msgstr "Naslov IPv6 z neveljavno dolžino (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2038
-#, fuzzy, c-format
+#, c-format
 msgid "IPv6 gateway with invalid length (idx=%u)"
 msgstr "Prehod IPv6 z neveljavno dolžino (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2150
-#, fuzzy
 msgid "Expected value of type \"a(ayuayu)\""
 msgstr "Pričakovana vrednost vrste \"a(ayuayu)\""
 
 #: src/libnm-core-impl/nm-utils.c:2174
-#, fuzzy, c-format
+#, c-format
 msgid "Expected value of type \"(ayuayu)\" (idx=%u)"
 msgstr "Pričakovana vrednost vrste \"(ayuayu)\" (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2187
-#, fuzzy, c-format
+#, c-format
 msgid "IPv6 dest address with invalid length (idx=%u)"
-msgstr "IPv6 dest naslov z neveljavno dolžino (idx=%u)"
+msgstr "naslov dest IPv6 z neveljavno dolžino (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2200
-#, fuzzy, c-format
+#, c-format
 msgid "IPv6 next-hop address with invalid length (idx=%u)"
-msgstr "IPv6 naslov naslednjega skoka z neveljavno dolžino (idx=%u)"
+msgstr "naslov next-hop IPv6 z neveljavno dolžino (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2343 src/libnm-core-impl/nm-utils.c:2522
 msgid "Expected value of type \"aa{sv}\""
@@ -3641,23 +3575,23 @@ msgstr "Pričakovana vrednost vrste »aa{sv}«"
 
 #: src/libnm-core-impl/nm-utils.c:2361
 #, c-format
-msgid "IP address requires fields \"dest\" and \"prefix\" (idx=%u)"
-msgstr "Naslov IP zahteva polji »dest« in »prefix« (idx=%u)"
+msgid "IP address requires fields \"address\" and \"prefix\" (idx=%u)"
+msgstr "Naslov IP zahteva polji »address« in »prefix« (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2540
-#, fuzzy, c-format
+#, c-format
 msgid "Route requires fields \"dest\" and \"prefix\" (idx=%u)"
-msgstr "Načrtovanje poti zahteva polji »dest« in »predpona« (idx=%u)"
+msgstr "Pot zahteva polji »dest« in »prefix« (idx=%u)"
 
 #: src/libnm-core-impl/nm-utils.c:2662
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a valid handle."
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "»%s« ni veljavna ročica."
 
 #: src/libnm-core-impl/nm-utils.c:2810
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' unexpected: parent already specified."
-msgstr "'%s' nepričakovano: starš je že določen."
+msgstr "»%s« je nepričakovano: nadrejeni je že določen."
 
 #: src/libnm-core-impl/nm-utils.c:2828
 #, c-format
@@ -3692,9 +3626,9 @@ msgid "unsupported tfilter option: '%s'."
 msgstr "Nepodprta možnost tfilter: »%s«."
 
 #: src/libnm-core-impl/nm-utils.c:3510
-#, fuzzy, c-format
+#, c-format
 msgid "failed stat file %s: %s"
-msgstr "Določanje maske signala je spodletelo: %d"
+msgstr "neuspešna datoteka stat %s: %s"
 
 #: src/libnm-core-impl/nm-utils.c:3521
 #, c-format
@@ -3750,32 +3684,30 @@ msgid "conflicting secret flags"
 msgstr "Nasprotujoče si skrivne zastavice"
 
 #: src/libnm-core-impl/nm-utils.c:4531
-#, fuzzy
 msgid "secret flags must not be \"not-required\""
-msgstr "Skrivne zastave ne smejo biti »neobvezne«"
+msgstr "skrivne zastavice ne smejo biti »not-required«"
 
 #: src/libnm-core-impl/nm-utils.c:4539
 msgid "unsupported secret flags"
 msgstr "Nepodprte skrivne zastavice"
 
 #: src/libnm-core-impl/nm-utils.c:4569
-#, fuzzy
 msgid "can't be simultaneously disabled and enabled"
-msgstr "Ni mogoče hkrati onemogočiti in omogočiti"
+msgstr "ne more biti hkrati onemogočeno in omogočeno"
 
 #: src/libnm-core-impl/nm-utils.c:4577
 msgid "WPS is required"
 msgstr "WPS je obvezen"
 
 #: src/libnm-core-impl/nm-utils.c:4645
-#, fuzzy, c-format
+#, c-format
 msgid "not a valid ethernet MAC address for mask at position %lld"
-msgstr "ni veljaven ethernetni MAC naslov za masko na položaju %lld"
+msgstr "ni veljaven omrežni MAC naslov za masko na položaju %lld"
 
 #: src/libnm-core-impl/nm-utils.c:4664
-#, fuzzy, c-format
+#, c-format
 msgid "not a valid ethernet MAC address #%u at position %lld"
-msgstr "ni veljaven ethernetni naslov MAC #%u na položaju %lld"
+msgstr "ni veljaven omrežni naslov MAC #%u na položaju %lld"
 
 #: src/libnm-core-impl/nm-utils.c:5321
 msgid "not valid utf-8"
@@ -3808,39 +3740,39 @@ msgid "unknown attribute '%s'"
 msgstr "neznan atribut »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5572
-#, fuzzy, c-format
+#, c-format
 msgid "missing key-value separator '%c' after '%s'"
-msgstr "manjkajoče ločilo med ključem in vrednostjo »%c« za »%s«"
+msgstr "manjkajoče ločilo med ključem in vrednostjo »%c« po »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5592
-#, fuzzy, c-format
+#, c-format
 msgid "invalid uint32 value '%s' for attribute '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna vrednost uint32 »%s« za atribut »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5606
-#, fuzzy, c-format
+#, c-format
 msgid "invalid int32 value '%s' for attribute '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna vrednost int32 »%s« za atribut »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5619
-#, fuzzy, c-format
+#, c-format
 msgid "invalid uint64 value '%s' for attribute '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna vrednost uint64 »%s« za atribut »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5632
-#, fuzzy, c-format
+#, c-format
 msgid "invalid uint8 value '%s' for attribute '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna vrednost uint8 »%s« za atribut »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5646
-#, fuzzy, c-format
+#, c-format
 msgid "invalid boolean value '%s' for attribute '%s'"
-msgstr "neveljavno polje '%s'"
+msgstr "neveljavna logična vrednost »%s« za atribut »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5660
-#, fuzzy, c-format
+#, c-format
 msgid "unsupported attribute '%s' of type '%s'"
-msgstr "nepodprt atribut '%s' vrste '%s'"
+msgstr "nepodprt atribut »%s« vrste »%s«"
 
 #: src/libnm-core-impl/nm-utils.c:5961
 #, fuzzy, c-format
@@ -3874,44 +3806,41 @@ msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags"
 msgstr "Oznaka 'fqdn-clear-flags' ni združljiva z drugimi zastavicami FQDN"
 
 #: src/libnm-core-impl/nm-utils.c:6171
-#, fuzzy
 msgid "DHCPv6 does not support the E (encoded) FQDN flag"
 msgstr "DHCPv6 ne podpira zastavice FQDN E (kodirano)"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:284
-#, fuzzy, c-format
+#, c-format
 msgid "cannot load plugin \"%s\": %s"
-msgstr "Ni mogoče naložiti vtičnika \"%s\": %s"
+msgstr "ni mogoče naložiti vstavka »%s«: %s"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:295
-#, fuzzy, c-format
+#, c-format
 msgid "failed to load nm_vpn_editor_plugin_factory() from %s (%s)"
 msgstr "ni bilo mogoče naložiti nm_vpn_editor_plugin_factory() iz %s (%s)"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:324
-#, fuzzy, c-format
+#, c-format
 msgid "unknown error initializing plugin %s"
-msgstr "Neznana napaka pri inicializaciji vtičnika %s"
+msgstr "neznana napaka pri inicializaciji vstavka %s"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:344
-#, fuzzy, c-format
+#, c-format
 msgid "cannot load VPN plugin in '%s': missing plugin name"
-msgstr "vtičnika VPN ni mogoče naložiti v '%s': manjkajoče ime vtičnika"
+msgstr "vstavka VPN ni mogoče naložiti v »%s«: manjkajoče ime vstavka"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:352
-#, fuzzy, c-format
+#, c-format
 msgid "cannot load VPN plugin in '%s': invalid service name"
-msgstr "vtičnika VPN ni mogoče naložiti v '%s': neveljavno ime storitve"
+msgstr "vstavka VPN ni mogoče naložiti v »%s«: neveljavno ime storitve"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:496
-#, fuzzy
 msgid "the plugin does not support import capability"
-msgstr "Vtičnik ne podpira možnosti uvoza"
+msgstr "vstavek ne podpira možnosti uvoza"
 
 #: src/libnm-core-impl/nm-vpn-editor-plugin.c:520
-#, fuzzy
 msgid "the plugin does not support export capability"
-msgstr "Vtičnik ne podpira možnosti izvoza"
+msgstr "vstavek ne podpira možnosti izvoza"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:109
 msgid "missing filename"
@@ -3928,37 +3857,33 @@ msgid "filename has invalid format (%s)"
 msgstr "Ime datoteke ima neveljavno obliko zapisa (%s)"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:419
-#, fuzzy, c-format
+#, c-format
 msgid "there exists a conflicting plugin (%s) that has the same %s.%s value"
-msgstr "Obstaja vtičnik v sporu (%s), ki ima enak %s. %s vrednost"
+msgstr "obstaja vstavek v sporu (%s), ki ima enako vrednost %s.%s"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:458
-#, fuzzy, c-format
+#, c-format
 msgid "there exists a conflicting plugin with the same name (%s)"
-msgstr "Obstaja vtičnik z istim imenom v sporu (%s)"
+msgstr "obstaja vtičnik v sporu z istim imenom (%s)"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:1050
-#, fuzzy
 msgid "missing \"plugin\" setting"
-msgstr "manjkajoča nastavitev »vtičnik«"
+msgstr "manjkajoča nastavitev »plugin«"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:1060
-#, fuzzy, c-format
+#, c-format
 msgid "%s: don't retry loading plugin which already failed previously"
-msgstr "%s: ne poskušajte znova nalagati vtičnika, ki že prej ni uspel"
+msgstr "%s: ne poskušajte znova nalagati vstavka, ki je že prej spodletel"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:1134
-#, fuzzy
 msgid "missing filename to load VPN plugin info"
-msgstr "manjkajoče ime datoteke za nalaganje informacij o vtičniku VPN"
+msgstr "manjkajoče ime datoteke za nalaganje informacij o vstavku VPN"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:1149
-#, fuzzy
 msgid "missing name for VPN plugin info"
 msgstr "manjkajoče ime za informacije o vtičniku VPN"
 
 #: src/libnm-core-impl/nm-vpn-plugin-info.c:1163
-#, fuzzy
 msgid "missing service for VPN plugin info"
 msgstr "manjkajoča storitev za informacije o vtičniku VPN"
 
@@ -3967,24 +3892,23 @@ msgid "Failed to initialize the crypto engine."
 msgstr "Začenjanje programnika šifriranja je spodletelo."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:91 src/libnm-crypto/nm-crypto-nss.c:118
-#, fuzzy
 msgid "Unsupported key cipher for decryption"
-msgstr "Nepodprta ključna šifra za dešifriranje"
+msgstr "Nepodprta šifra ključa za dešifriranje"
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:102 src/libnm-crypto/nm-crypto-nss.c:126
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid IV length (must be at least %u)."
-msgstr "Neveljavna dolžina IV (mora biti vsaj %d)."
+msgstr "Neveljavna dolžina IV (mora biti vsaj %u)."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:120
 #, fuzzy, c-format
 msgid "Failed to initialize the decryption cipher context: %s (%s)"
-msgstr "Začenjanje vsebine odšifrirne cifre je spodletelo: %s / %s."
+msgstr "Začenjanje vsebine dešifrirne cifre je spodletelo: %s / %s."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:134
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to decrypt the private key: %s (%s)"
-msgstr "Odšifriranje zasebnega ključa je spodletelo: %s / %s."
+msgstr "Dešifriranje zasebnega ključa je spodletelo: %s (%s)."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:147 src/libnm-crypto/nm-crypto-nss.c:221
 msgid "Failed to decrypt the private key: unexpected padding length."
@@ -3997,9 +3921,8 @@ msgid "Failed to decrypt the private key."
 msgstr "Odšifriranje zasebnega ključa je spodletelo."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:193 src/libnm-crypto/nm-crypto-nss.c:288
-#, fuzzy
 msgid "Unsupported key cipher for encryption"
-msgstr "Nepodprta ključna šifra za šifriranje"
+msgstr "Nepodprta šifra ključa za šifriranje"
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:210
 #, fuzzy, c-format
@@ -4007,9 +3930,9 @@ msgid "Failed to initialize the encryption cipher context: %s (%s)"
 msgstr "Začenjanje vsebine šifrirne cifre je spodletelo: %s / %s."
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:238
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to encrypt the data: %s (%s)"
-msgstr "Šifriranje podatkov je spodletelo: %s / %s."
+msgstr "Šifriranje podatkov ni uspelo: %s (%s)"
 
 #: src/libnm-crypto/nm-crypto-gnutls.c:263
 #, c-format
@@ -4114,14 +4037,12 @@ msgid "Couldn't decode certificate: %d"
 msgstr "Potrdila ni mogoče odkodirati: %d"
 
 #: src/libnm-crypto/nm-crypto-nss.c:443
-#, fuzzy
 msgid "Password must be UTF-8"
 msgstr "Geslo mora biti UTF-8"
 
 #: src/libnm-crypto/nm-crypto-nss.c:474
-#, fuzzy
 msgid "Couldn't initialize slot"
-msgstr "Odkodirnika PKCS#8 ni mogoče zagnati: %s"
+msgstr "Ni bilo mogoče inicializirati reže"
 
 #: src/libnm-crypto/nm-crypto-nss.c:483
 #, c-format
@@ -4146,14 +4067,12 @@ msgstr "Naključnih podatkov ni mogoče ustvariti."
 #: src/libnm-crypto/nm-crypto-null.c:57 src/libnm-crypto/nm-crypto-null.c:67
 #: src/libnm-crypto/nm-crypto-null.c:77 src/libnm-crypto/nm-crypto-null.c:91
 #: src/libnm-crypto/nm-crypto-null.c:101
-#, fuzzy
 msgid "Compiled without crypto support."
-msgstr "Sestavljeno brez kripto podpore."
+msgstr "Prevedene brez podpore crypto."
 
 #: src/libnm-crypto/nm-crypto.c:215
-#, fuzzy
 msgid "PEM key file had no start tag"
-msgstr "Datoteka ključa PEM nima končne oznake '%s'."
+msgstr "Datoteka s ključem PEM nima začetne oznake"
 
 #: src/libnm-crypto/nm-crypto.c:224
 #, c-format
@@ -4204,14 +4123,13 @@ msgid "Failed to decode PKCS#8 private key."
 msgstr "Odkodiranje zasebnega ključa PKCS#8 je spodletelo."
 
 #: src/libnm-crypto/nm-crypto.c:424
-#, fuzzy
 msgid "Failed to find expected TSS start tag."
-msgstr "Pričakovane začetne oznake PKCS#8 ni mogoče najti."
+msgstr "Ni bilo mogoče najti pričakovane začetne oznake TSS."
 
 #: src/libnm-crypto/nm-crypto.c:433
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to find expected TSS end tag '%s'."
-msgstr "Pričakovane končne oznake PKCS#8 '%s' ni mogoče najti."
+msgstr "Ni bilo mogoče najti pričakovane končne oznake TSS »%s«."
 
 #: src/libnm-crypto/nm-crypto.c:459
 msgid "IV must be an even number of bytes in length."
@@ -4222,18 +4140,16 @@ msgid "IV contains non-hexadecimal digits."
 msgstr "IV vsebuje ne-šestnajstiške številke."
 
 #: src/libnm-crypto/nm-crypto.c:552
-#, fuzzy
 msgid "IV must contain at least 8 characters"
-msgstr "IV vsebuje ne-šestnajstiške številke."
+msgstr "IV mora vsebovati vsaj 8 znakov"
 
 #: src/libnm-crypto/nm-crypto.c:602
 msgid "Unable to determine private key type."
 msgstr "Ni mogoče določiti vrste zasebnega ključa."
 
 #: src/libnm-crypto/nm-crypto.c:615
-#, fuzzy
 msgid "Password provided, but key was not encrypted."
-msgstr "Geslo je bilo zagotovljeno, vendar ključ ni bil šifriran."
+msgstr "Geslo je zagotovljeno, vendar ključ ni šifriran."
 
 #: src/libnm-crypto/nm-crypto.c:671
 #, c-format
@@ -4250,24 +4166,21 @@ msgid "Failed to decode certificate."
 msgstr "Odkodiranje potrdila je spodletelo."
 
 #: src/libnm-crypto/nm-crypto.c:723 src/libnm-crypto/nm-crypto.c:774
-#, fuzzy
 msgid "Certificate file is empty"
 msgstr "Datoteka potrdila je prazna"
 
 #: src/libnm-crypto/nm-crypto.c:756
-#, fuzzy
 msgid "Failed to recognize certificate"
-msgstr "Odkodiranje potrdila je spodletelo."
+msgstr "Potrdila ni bilo mogoče prepoznati"
 
 #: src/libnm-crypto/nm-crypto.c:861
-#, fuzzy
 msgid "not a valid private key"
-msgstr "Odšifriranje zasebnega ključa je spodletelo."
+msgstr "ni veljaven zasebni ključ"
 
 #: src/libnm-glib-aux/nm-dbus-aux.c:682
-#, fuzzy, c-format
+#, c-format
 msgid "Method returned type '%s', but expected '%s'"
-msgstr "Način »%s« je vrnil vrsto »%s«, pričakovana pa je vrsta »%s«"
+msgstr "Metoda je vrnila vrsto »%s«, vendar je bila pričakovana »%s«"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:2450
 #, c-format
@@ -4305,53 +4218,46 @@ msgstr ""
 "vrsto »%s«"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5581
-#, fuzzy
 msgid "interface name is missing"
-msgstr "Napaka: manjka argument %s."
+msgstr "Ime vmesnika manjka"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5589
-#, fuzzy
 msgid "interface name is too short"
 msgstr "ime vmesnika je prekratko"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5597
-#, fuzzy
 msgid "interface name is reserved"
 msgstr "ime vmesnika je rezervirano"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5610
-#, fuzzy
 msgid "interface name contains an invalid character"
-msgstr "Ime vmesnika vsebuje neveljaven znak"
+msgstr "ime vmesnika vsebuje neveljaven znak"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5618
-#, fuzzy
 msgid "interface name is longer than 15 characters"
-msgstr "Ime vmesnika je daljše od 15 znakov"
+msgstr "ime vmesnika je daljše od 15 znakov"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5643
-#, fuzzy, c-format
+#, c-format
 msgid "'%%' is not allowed in interface names"
-msgstr "Napaka: naprava '%s' ni naprava Wi-Fi."
+msgstr "»%%« ni dovoljeno v imenih vmesnikov"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5655
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not allowed as interface name"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni dovoljeno kot ime vmesnika"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5677
-#, fuzzy
 msgid ""
 "interface name must be alphanumerical with no forward or backward slashes"
-msgstr "Ime vmesnika mora biti alfanumerično brez poševnic naprej ali nazaj"
+msgstr ""
+"Ime vmesnika mora biti alfanumerično brez poševnic ali obratnih poševnic"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5694
-#, fuzzy
 msgid "interface name must not be empty"
 msgstr "Ime vmesnika ne sme biti prazno"
 
 #: src/libnm-glib-aux/nm-shared-utils.c:5702
-#, fuzzy
 msgid "interface name must be UTF-8 encoded"
 msgstr "ime vmesnika mora biti kodirano z UTF-8"
 
@@ -4369,42 +4275,42 @@ msgstr "Neznana domena beleženja '%s'"
 #. * the user, the second %s a list of compatible values.
 #.
 #: src/libnmc-base/nm-client-utils.c:108 src/libnmc-base/nm-client-utils.c:152
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is ambiguous (%s)"
-msgstr "\"%s\" je dvoumno (%s)"
+msgstr "»%s« je dvoumen (%s)"
 
 #: src/libnmc-base/nm-client-utils.c:123
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not valid; use [%s] or [%s]"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljavno; Uporabite [%s] ali [%s]"
 
 #: src/libnmc-base/nm-client-utils.c:176
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not valid; use [%s], [%s] or [%s]"
-msgstr "\"%s\" ni veljavno; Uporabite [%s], [%s] ali [%s]"
+msgstr "»%s« ni veljavno; uporabite [%s], [%s] ali [%s]"
 
 #: src/libnmc-base/nm-client-utils.c:230
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is ambiguous: %s"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« je dvoumen: %s"
 
 #: src/libnmc-base/nm-client-utils.c:243
 #, c-format
 msgid "missing name, try one of [%s]"
 msgstr "manjkajoče ime, poskusite z enim izmed [%s]"
 
-#: src/libnmc-base/nm-client-utils.c:248 src/nmcli/connections.c:3781
-#: src/nmcli/connections.c:3847
+#: src/libnmc-base/nm-client-utils.c:248 src/nmcli/connections.c:3782
+#: src/nmcli/connections.c:3848
 #, c-format
 msgid "'%s' not among [%s]"
 msgstr "»%s« ni med [%s]"
 
 #: src/libnmc-base/nm-client-utils.c:291 src/libnmc-base/nm-client-utils.c:305
 #: src/libnmc-base/nm-client-utils.c:341 src/libnmc-base/nm-client-utils.c:346
-#: src/libnmc-setting/nm-meta-setting-desc.c:1818
-#: src/libnmc-setting/nm-meta-setting-desc.c:1849
-#: src/libnmc-setting/nm-meta-setting-desc.c:2858
-#: src/libnmc-setting/nm-meta-setting-desc.c:2916 src/nmcli/common.c:1611
+#: src/libnmc-setting/nm-meta-setting-desc.c:1830
+#: src/libnmc-setting/nm-meta-setting-desc.c:1861
+#: src/libnmc-setting/nm-meta-setting-desc.c:2870
+#: src/libnmc-setting/nm-meta-setting-desc.c:2928 src/nmcli/common.c:1611
 #: src/nmcli/connections.c:79 src/nmcli/connections.c:89
 #: src/nmcli/devices.c:485 src/nmcli/devices.c:592 src/nmcli/devices.c:598
 #: src/nmcli/devices.c:604 src/nmcli/general.c:30 src/nmcli/general.c:85
@@ -4475,18 +4381,18 @@ msgid "deactivating (externally)"
 msgstr "onemogočanje (zunaj)"
 
 #: src/libnmc-base/nm-client-utils.c:342
-#: src/libnmc-setting/nm-meta-setting-desc.c:876
-#: src/libnmc-setting/nm-meta-setting-desc.c:2850 src/nmcli/connections.c:5595
-#: src/nmcli/connections.c:7582 src/nmcli/connections.c:7583
+#: src/libnmc-setting/nm-meta-setting-desc.c:875
+#: src/libnmc-setting/nm-meta-setting-desc.c:2862 src/nmcli/connections.c:5751
+#: src/nmcli/connections.c:7759 src/nmcli/connections.c:7760
 #: src/nmcli/devices.c:591 src/nmcli/devices.c:597 src/nmcli/devices.c:603
 #: src/nmcli/devices.c:1427 src/nmcli/general.c:92 src/nmcli/utils.h:317
 msgid "yes"
 msgstr "da"
 
 #: src/libnmc-base/nm-client-utils.c:343
-#: src/libnmc-setting/nm-meta-setting-desc.c:876
-#: src/libnmc-setting/nm-meta-setting-desc.c:2853 src/nmcli/connections.c:5594
-#: src/nmcli/connections.c:7582 src/nmcli/connections.c:7583
+#: src/libnmc-setting/nm-meta-setting-desc.c:875
+#: src/libnmc-setting/nm-meta-setting-desc.c:2865 src/nmcli/connections.c:5750
+#: src/nmcli/connections.c:7759 src/nmcli/connections.c:7760
 #: src/nmcli/devices.c:591 src/nmcli/devices.c:597 src/nmcli/devices.c:603
 #: src/nmcli/devices.c:1427 src/nmcli/general.c:93 src/nmcli/utils.h:317
 msgid "no"
@@ -4505,8 +4411,8 @@ msgid "No reason given"
 msgstr "Razlog ni podan"
 
 #. We should not really come here
-#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3801
-#: src/nmcli/connections.c:3868
+#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3802
+#: src/nmcli/connections.c:3874
 msgid "Unknown error"
 msgstr "Neznana napaka"
 
@@ -4726,261 +4632,230 @@ msgid "A secondary connection of the base connection failed"
 msgstr "Drugotno povezovanje z osnovno povezavo je spodletelo."
 
 #: src/libnmc-base/nm-client-utils.c:446
-#, fuzzy
 msgid "DCB or FCoE setup failed"
 msgstr "Nastavitev DCB ali FCoE ni uspela"
 
 #: src/libnmc-base/nm-client-utils.c:447
-#, fuzzy
 msgid "teamd control failed"
-msgstr "povezava je spodletela"
+msgstr "nadzor teamd je spodletel"
 
 #: src/libnmc-base/nm-client-utils.c:449
-#, fuzzy
 msgid "Modem failed or no longer available"
-msgstr "Program ModemManager ni na voljo."
+msgstr "Modem ni uspel ali ni več na voljo"
 
 #: src/libnmc-base/nm-client-utils.c:451
-#, fuzzy
 msgid "Modem now ready and available"
-msgstr "Program ModemManager ni na voljo."
+msgstr "Modem je zdaj pripravljen in na voljo"
 
 #: src/libnmc-base/nm-client-utils.c:452
-#, fuzzy
 msgid "SIM PIN was incorrect"
 msgstr "PIN za SIM je bil napačen"
 
 #: src/libnmc-base/nm-client-utils.c:454
-#, fuzzy
 msgid "New connection activation was enqueued"
-msgstr "Napaka: začenjanje povezave ni uspelo."
+msgstr "Aktivacija nove povezave je postavljena v čakalno vrsto"
 
 #: src/libnmc-base/nm-client-utils.c:455
-#, fuzzy
 msgid "The device's parent changed"
-msgstr "Naprava je bila odstranjena"
+msgstr "Spremenil se je nadrejeni naprave"
 
 #: src/libnmc-base/nm-client-utils.c:457
-#, fuzzy
 msgid "The device parent's management changed"
-msgstr "Naprava je bila odstranjena"
+msgstr "Upravljanje nadrejenih naprave se je spremenilo"
 
 #: src/libnmc-base/nm-client-utils.c:459
-#, fuzzy
 msgid "Open vSwitch database connection failed"
-msgstr "povezava je spodletela"
+msgstr "Odpiranje povezave z zbirko podatkov vSwitch ni uspelo"
 
 #: src/libnmc-base/nm-client-utils.c:461
-#, fuzzy
 msgid "A duplicate IP address was detected"
 msgstr "Zaznan je bil podvojen naslov IP"
 
 #: src/libnmc-base/nm-client-utils.c:463
-#, fuzzy
 msgid "The selected IP method is not supported"
 msgstr "Izbrana metoda IP ni podprta"
 
 #: src/libnmc-base/nm-client-utils.c:465
-#, fuzzy
 msgid "Failed to configure SR-IOV parameters"
-msgstr "Branje nastavitev je spodletelo: (%d) %s\n"
+msgstr "Prilagajanje parametrov SR-IOV ni uspelo"
 
 #: src/libnmc-base/nm-client-utils.c:467
-#, fuzzy
 msgid "The Wi-Fi P2P peer could not be found"
-msgstr "Omrežja Wi-Fi ni mogoče najti."
+msgstr "Vrstnika Wi-Fi P2P ni mogoče najti"
 
 #: src/libnmc-base/nm-client-utils.c:469
 #, fuzzy
 msgid "The device handler dispatcher returned an error"
-msgstr "Dispečer za obravnavo naprav je vrnil napako"
+msgstr "Dispečer za obravnave naprav je vrnil napako"
 
 #: src/libnmc-base/nm-client-utils.c:471
-#, fuzzy
 msgid ""
 "The device is unmanaged because networking is disabled or the system is "
 "suspended"
 msgstr ""
-"Naprava ni upravljana, ker je omrežje onemogočeno ali je sistem onemogočen"
+"Naprava ni upravljana, ker je omreževanje onemogočeno ali je sistem ustavljen"
 
 #: src/libnmc-base/nm-client-utils.c:474
-#, fuzzy
 msgid "The device is unmanaged because NetworkManager is quitting"
-msgstr "Naprava ni upravljana, ker se NetworkManager zapušča"
+msgstr "Naprava ni upravljana, ker je program NetworkManager v izhodu"
 
 #: src/libnmc-base/nm-client-utils.c:476
-#, fuzzy
 msgid "The device is unmanaged because the link is not initialized by udev"
 msgstr "Naprava ni upravljana, ker povezave ni inicializiral udev"
 
 #: src/libnmc-base/nm-client-utils.c:478
-#, fuzzy
 msgid ""
 "The device is unmanaged by explicit user decision (e.g. 'nmcli device set "
 "$DEV managed no')"
 msgstr ""
-"Naprava ni upravljana z izrecno odločitvijo uporabnika (npr. \"nmcli device "
-"set $DEV managed no\""
+"Naprava ni upravljana z izrecno odločitvijo uporabnika (npr. »nmcli device "
+"set $DEV managed no«)"
 
 #: src/libnmc-base/nm-client-utils.c:482
-#, fuzzy
 msgid ""
 "The device is unmanaged by user decision via settings plugin (\"unmanaged-"
 "devices\" for keyfile or \"NM_CONTROLLED=no\" for ifcfg-rh)"
 msgstr ""
-"Naprava ni upravljana z odločitvijo uporabnika prek vtičnika za nastavitve "
-"(\"unmanaged-devices\" za datoteko s ključem ali \"NM_CONTROLLED=no\" za "
-"ifcfg-rh)"
+"Naprava ni upravljana z odločitvijo uporabnika prek vstavka za nastavitve "
+"(»unmanaged-devices« za datoteko s ključem ali »NM_CONTROLLED=no« za ifcfg-"
+"rh)"
 
 #: src/libnmc-base/nm-client-utils.c:485
-#, fuzzy
 msgid ""
 "The device is unmanaged by user decision in NetworkManager.conf ('unmanaged' "
-"in a [device*] section"
+"in a [device*] section)"
 msgstr ""
 "Naprava ni upravljana po odločitvi uporabnika v NetworkManager.conf "
-"(»neupravljana« v razdelku [device*]"
+"(»unmanaged« v razdelku [device*]"
 
 #: src/libnmc-base/nm-client-utils.c:489
-#, fuzzy
 msgid "The device is unmanaged because the device type is unmanaged by default"
 msgstr "Naprava ni upravljana, ker je vrsta naprave privzeto neupravljana"
 
 #: src/libnmc-base/nm-client-utils.c:491
-#, fuzzy
 msgid "The device is unmanaged via udev rule"
-msgstr "Dejavna povezava naprave je izginila"
+msgstr "Naprava ni upravljana s pravilom udev"
 
 #: src/libnmc-base/nm-client-utils.c:493
-#, fuzzy
 msgid ""
 "The device is unmanaged because it is an external device and is unconfigured "
 "(down or without addresses)"
 msgstr ""
-"Naprava ni upravljana, ker je zunanja naprava in ni konfigurirana (navzdol "
-"ali brez naslovov)"
+"Naprava ni upravljana, ker je zunanja naprava in ni nastavljena (ne deluje "
+"ali je brez naslovov)"
+
+#: src/libnmc-base/nm-client-utils.c:495
+msgid "Networking was disabled"
+msgstr "Delovanje v omrežjih je onemogočeno"
 
-#: src/libnmc-base/nm-client-utils.c:503
+#: src/libnmc-base/nm-client-utils.c:504
 msgid "Unknown reason"
 msgstr "Neznani razlog"
 
-#: src/libnmc-base/nm-client-utils.c:505
+#: src/libnmc-base/nm-client-utils.c:506
 msgid "The connection was disconnected"
 msgstr "Povezava je bila prekinjena"
 
-#: src/libnmc-base/nm-client-utils.c:507
+#: src/libnmc-base/nm-client-utils.c:508
 msgid "Disconnected by user"
 msgstr "Uporabnik je prekinil povezavo"
 
-#: src/libnmc-base/nm-client-utils.c:509
+#: src/libnmc-base/nm-client-utils.c:510
 msgid "The base network connection was interrupted"
 msgstr "Osnovna omrežna povezava je bila prekinjena"
 
-#: src/libnmc-base/nm-client-utils.c:511
+#: src/libnmc-base/nm-client-utils.c:512
 msgid "The VPN service stopped unexpectedly"
 msgstr "Storitev VPN se je nepričakovano ustavila"
 
-#: src/libnmc-base/nm-client-utils.c:513
+#: src/libnmc-base/nm-client-utils.c:514
 msgid "The VPN service returned invalid configuration"
 msgstr "Storitev VPN je vrnila neveljavno prilagoditev"
 
-#: src/libnmc-base/nm-client-utils.c:515
+#: src/libnmc-base/nm-client-utils.c:516
 msgid "The connection attempt timed out"
 msgstr "Časovna omejitev poskusa povezave je potekla"
 
-#: src/libnmc-base/nm-client-utils.c:517
+#: src/libnmc-base/nm-client-utils.c:518
 msgid "The VPN service did not start in time"
 msgstr "Storitev VPN se ni zagnala pravočasno"
 
-#: src/libnmc-base/nm-client-utils.c:519
+#: src/libnmc-base/nm-client-utils.c:520
 msgid "The VPN service failed to start"
 msgstr "Storitev VPN se ni uspela zagnati"
 
-#: src/libnmc-base/nm-client-utils.c:520
+#: src/libnmc-base/nm-client-utils.c:521
 msgid "No valid secrets"
 msgstr "Brez veljavnih skrivnosti"
 
-#: src/libnmc-base/nm-client-utils.c:521
+#: src/libnmc-base/nm-client-utils.c:522
 msgid "Invalid secrets"
 msgstr "Neveljavne skrivnosti"
 
-#: src/libnmc-base/nm-client-utils.c:523
+#: src/libnmc-base/nm-client-utils.c:524
 msgid "The connection was removed"
 msgstr "Povezava je bila odstranjena"
 
-#: src/libnmc-base/nm-client-utils.c:525
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:526
 msgid "Master connection failed"
-msgstr "povezava je spodletela"
+msgstr "Glavna povezava ni uspela"
 
-#: src/libnmc-base/nm-client-utils.c:527
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:528
 msgid "Could not create a software link"
-msgstr "Ni mogoče dodeliti pomnilnika za podatke datoteke PEM."
+msgstr "Programske povezave ni bilo mogoče ustvariti"
 
-#: src/libnmc-base/nm-client-utils.c:529
+#: src/libnmc-base/nm-client-utils.c:530
 msgid "The device disappeared"
 msgstr "Naprava je izginila"
 
-#: src/libnmc-base/nm-client-utils.c:855
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:856
 msgid "missing colon for \"<setting>.<property>:<secret>\" format"
-msgstr ""
-"manjkajoče dvopičje za <setting><property><secret>obliko zapisa</secret> "
-"».:«</property></setting>"
+msgstr "manjkajoče dvopičje za obliko zapisa »<setting>.<property>:<secret>«"
 
-#: src/libnmc-base/nm-client-utils.c:872
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:873
 msgid "missing dot for \"<setting>.<property>:<secret>\" format"
-msgstr ""
-"manjkajoča pika za <setting><property><secret>obliko</secret></property> "
-"zapisa ».:«</setting>"
+msgstr "manjkajoča pika za obliko zapisa »<setting>.<property>:<secret>«"
 
-#: src/libnmc-base/nm-client-utils.c:878
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:879
 msgid "missing setting for \"<setting>.<property>:<secret>\" format"
 msgstr ""
-"manjkajoča nastavitev za <setting><property><secret>obliko zapisa</secret> "
-"».:«</property></setting>"
+"manjkajoča nastavitev za obliko zapisa »<nastavitev>.<lastnost>:<skrivnost>«"
 
-#: src/libnmc-base/nm-client-utils.c:889
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:890
 msgid "missing property for \"<setting>.<property>:<secret>\" format"
 msgstr ""
-"manjkajoča lastnost za <setting><property><secret>obliko zapisa</secret> "
-"».:«</property></setting>"
+"manjkajoča lastnost za obliko zapisa »<nastavitev>.<lastnost>:<skrivnost>«"
 
-#: src/libnmc-base/nm-client-utils.c:899
+#: src/libnmc-base/nm-client-utils.c:900
 msgid "invalid setting name"
 msgstr "Neveljavno ime nastavitve"
 
-#: src/libnmc-base/nm-client-utils.c:913
-#, fuzzy
+#: src/libnmc-base/nm-client-utils.c:914
 msgid "property name is not UTF-8"
-msgstr "Napaka: ni podanega veljavnega parametra."
+msgstr "ime lastnosti ni UTF-8"
 
-#: src/libnmc-base/nm-client-utils.c:930 src/libnmc-base/nm-client-utils.c:936
+#: src/libnmc-base/nm-client-utils.c:931 src/libnmc-base/nm-client-utils.c:937
 msgid "secret is not UTF-8"
 msgstr "skrivnost ni UTF-8"
 
 #: src/libnmc-base/nm-polkit-listener.c:327
-#, fuzzy, c-format
+#, c-format
 msgid "Could not find any session id for uid %d"
 msgstr "Ni bilo mogoče najti nobenega ID-ja seje za uid %d"
 
 #: src/libnmc-base/nm-polkit-listener.c:329
-#, fuzzy, c-format
+#, c-format
 msgid "Could not retrieve session id: %s"
-msgstr "ni dejavnih povezav na napravi '%s'"
+msgstr "ID seje ni mogoče pridobiti: %s"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:225
-#, fuzzy, c-format
+#, c-format
 msgid "Preshared-key for %s"
 msgstr "Ključ v skupni rabi za %s"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:274
 #: src/libnmc-base/nm-secret-agent-simple.c:361
-#: src/libnmc-setting/nm-meta-setting-desc.c:5188
+#: src/libnmc-setting/nm-meta-setting-desc.c:5244
 #: src/nmtui/nmt-8021x-fields.c:183 src/nmtui/nmt-8021x-fields.c:516
 #: src/nmtui/nmt-8021x-fields.c:622 src/nmtui/nmt-page-dsl.c:51
 #: src/nmtui/nmt-page-wifi.c:345
@@ -5021,21 +4896,20 @@ msgid "Service"
 msgstr "Storitev"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:500
-#, fuzzy
 msgid "WireGuard private-key"
 msgstr "Zasebni ključ WireGuard"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:539
-#, fuzzy, c-format
+#, c-format
 msgid "Secrets are required to connect WireGuard VPN '%s'"
-msgstr "Zahtevana so bila ustrezna gesla, ki pa niso bila podana"
+msgstr "Skrivnosti so potrebne za povezavo WireGuard VPN '%s'"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:651
 #: src/libnmc-base/nm-secret-agent-simple.c:950
 #: src/libnmc-base/nm-secret-agent-simple.c:985
 #: src/libnmc-base/nm-secret-agent-simple.c:1012
 #: src/libnmc-base/nm-secret-agent-simple.c:1031
-#, fuzzy, c-format
+#, c-format
 msgid "A password is required to connect to '%s'."
 msgstr "Za povezavo s/z »%s« je zahtevano geslo."
 
@@ -5044,16 +4918,16 @@ msgid "Authentication required by wireless network"
 msgstr "Zahtevana je overitev za brezžično omrežje"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:911
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Push of the WPS button on the router or a password is required to access the "
 "wireless network '%s'."
 msgstr ""
-"Za dostop do brezžičnega omrežja \"%s\" potrebujete pritisk na gumb WPS na "
+"Za dostop do brezžičnega omrežja »%s« potrebujete pritisk na gumb WPS na "
 "usmerjevalniku ali geslo."
 
 #: src/libnmc-base/nm-secret-agent-simple.c:916
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Passwords or encryption keys are required to access the wireless network "
 "'%s'."
@@ -5066,16 +4940,16 @@ msgid "Wired 802.1X authentication"
 msgstr "Overitev žičnega 802.1X"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:924
-#, fuzzy, c-format
+#, c-format
 msgid "Secrets are required to access the wired network '%s'"
-msgstr "Skrivnosti so potrebne za dostop do žičnega omrežja \"%s\""
+msgstr "Skrivnosti so potrebne za dostop do žičnega omrežja »%s«"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:930
 msgid "DSL authentication"
 msgstr "Overitev DSL"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:931
-#, fuzzy, c-format
+#, c-format
 msgid "Secrets are required for the DSL connection '%s'"
 msgstr "Skrivnosti so potrebne za povezavo DSL »%s«"
 
@@ -5098,7 +4972,7 @@ msgid "Mobile broadband network password"
 msgstr "Geslo mobilnega širokopasovnega dostopa"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:962
-#, fuzzy, c-format
+#, c-format
 msgid "Secrets are required to access the MACsec network '%s'"
 msgstr "Skrivnosti so potrebne za dostop do omrežja MACsec '%s'"
 
@@ -5107,7 +4981,7 @@ msgid "MACsec PSK authentication"
 msgstr "Preverjanje pristnosti MACsec PSK"
 
 #: src/libnmc-base/nm-secret-agent-simple.c:968
-#: src/libnmc-setting/nm-meta-setting-desc.c:7104
+#: src/libnmc-setting/nm-meta-setting-desc.c:7163
 msgid "MKA CAK"
 msgstr "MKA CAK"
 
@@ -5131,7 +5005,7 @@ msgstr "neznani vstavek VPN »%s«"
 #: src/libnmc-base/nm-vpn-helpers.c:58
 #, fuzzy, c-format
 msgid "cannot load legacy-only VPN plugin \"%s\" for \"%s\""
-msgstr "ne morem naložiti podedovanega vtičnika VPN »%s« za »%s«"
+msgstr "ne morem naložiti podedovanega vstavka VPN »%s« za »%s«"
 
 #: src/libnmc-base/nm-vpn-helpers.c:66
 #, fuzzy, c-format
@@ -5155,9 +5029,8 @@ msgid "HTTP proxy password"
 msgstr "Geslo posredniškega strežnika HTTP"
 
 #: src/libnmc-base/nm-vpn-helpers.c:155 src/libnmc-base/nm-vpn-helpers.c:160
-#, fuzzy
 msgid "Group password"
-msgstr "Geslo grupe"
+msgstr "Geslo skupine"
 
 #: src/libnmc-base/nm-vpn-helpers.c:164
 msgid "Gateway URL"
@@ -5173,29 +5046,26 @@ msgid "Gateway certificate hash"
 msgstr "Razpršitev potrdila prehoda"
 
 #: src/libnmc-base/nm-vpn-helpers.c:167
-#, fuzzy
 msgid "Gateway DNS resolution ('host:IP')"
 msgstr "Razreševanje DNS prehoda (»gostitelj:IP«)"
 
 #: src/libnmc-base/nm-vpn-helpers.c:308
-#, fuzzy
 msgid "no gateway configured"
-msgstr "Prehod ni konfiguriran"
+msgstr "prehod ni nastavljen"
 
 #: src/libnmc-base/nm-vpn-helpers.c:392
-#, fuzzy, c-format
+#, c-format
 msgid "exited with status %d"
-msgstr "Napaka: ni se mogoče povezati s sistemskim vodilom: %s"
+msgstr "izhod s stanjem %d"
 
 #: src/libnmc-base/nm-vpn-helpers.c:399
-#, fuzzy, c-format
+#, c-format
 msgid "exited on signal %d"
-msgstr "Proces, ki je izstopil s signala %d"
+msgstr "izstopil na signal %d"
 
 #: src/libnmc-base/nm-vpn-helpers.c:430
-#, fuzzy
 msgid "insufficent secrets returned"
-msgstr "Vrnile so se nezadostne skrivnosti"
+msgstr "vrnjene so nezadostne skrivnosti"
 
 #: src/libnmc-setting/nm-meta-setting-access.c:501
 #, c-format
@@ -5207,18 +5077,18 @@ msgstr "polje »%s« mora biti samostojno."
 msgid "invalid field '%s%s%s%s%s'; %s%s%s"
 msgstr "neveljavno polje »%s%s%s%s%s«; %s%s%s"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:259
-#: src/libnmc-setting/nm-meta-setting-desc.c:327
+#: src/libnmc-setting/nm-meta-setting-desc.c:258
+#: src/libnmc-setting/nm-meta-setting-desc.c:326
 #, c-format
 msgid "invalid prefix '%s'; <0-%d> allowed"
 msgstr "neveljavna predpona »%s«; <0-%d> dovoljeno"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:270
+#: src/libnmc-setting/nm-meta-setting-desc.c:269
 #, c-format
 msgid "invalid IP address: %s"
 msgstr "neveljaven naslov IP: %s"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:295
+#: src/libnmc-setting/nm-meta-setting-desc.c:294
 msgid ""
 "The valid syntax is: 'ip[/prefix] [next-hop] [metric] [attribute=val]... [,"
 "ip[/prefix] ...]'"
@@ -5226,172 +5096,172 @@ msgstr ""
 "Veljavna skladnja: 'ip[/predpona] [naslednji-skok] [metrika] "
 "[atribut=vred]... [,ip[/predpona] …]’"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:341
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:340
+#, c-format
 msgid "the next hop ('%s') must be first"
-msgstr "Naslednji skok (\"%s\") mora biti prvi"
+msgstr "naslednji skok (»%s«) mora biti prvi"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:351
+#: src/libnmc-setting/nm-meta-setting-desc.c:350
 #, fuzzy, c-format
 msgid "the metric ('%s') must be before attributes"
 msgstr "meritev (\"%s\") mora biti pred atributi"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:404
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:403
+#, c-format
 msgid "invalid route: %s. %s"
-msgstr "Neveljavna pot: %s. %s"
+msgstr "neveljavna pot: %s. %s"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:473
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:472
+#, c-format
 msgid "cannot read pac-script from file '%s'"
-msgstr "Ne morem prebrati PAC-Script iz datoteke '%s'"
+msgstr "ni možnon prebrati pac-script iz datoteke »%s«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:481
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:480
+#, c-format
 msgid "file '%s' contains non-valid utf-8"
-msgstr "Datoteka '%s' vsebuje neveljaven UTF-8"
+msgstr "datoteka '%s' vsebuje neveljaven UTF-8"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:494
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:493
+#, c-format
 msgid "'%s' does not contain a valid PAC Script"
 msgstr "»%s« ne vsebuje veljavnega skripta PAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:497
+#: src/libnmc-setting/nm-meta-setting-desc.c:496
 msgid "Not a valid PAC Script"
 msgstr "Ni veljaven skript PAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:549
+#: src/libnmc-setting/nm-meta-setting-desc.c:548
 #, c-format
 msgid "cannot read team config from file '%s'"
 msgstr "Prilagoditve ekipe ni mogoče prebrati iz datoteke »%s«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:557
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:556
+#, c-format
 msgid "team config file '%s' contains non-valid utf-8"
-msgstr "Konfiguracijska datoteka ekipe '%s' vsebuje neveljaven UTF-8"
+msgstr "Prilagoditvena datoteka ekipe »%s« vsebuje neveljaven utf-8"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1051
+#: src/libnmc-setting/nm-meta-setting-desc.c:1058
 msgid "auto"
 msgstr "samodejno"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1180
+#: src/libnmc-setting/nm-meta-setting-desc.c:1187
 #, c-format
 msgid "%s (%s)"
 msgstr "%s (%s)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1436
-#: src/libnmc-setting/nm-meta-setting-desc.c:1444
-#: src/libnmc-setting/nm-meta-setting-desc.c:4506
+#: src/libnmc-setting/nm-meta-setting-desc.c:1448
+#: src/libnmc-setting/nm-meta-setting-desc.c:1456
+#: src/libnmc-setting/nm-meta-setting-desc.c:4562
 msgid "'%s' is out of range [%"
 msgstr "»%s« je izven obsega [%"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1452
+#: src/libnmc-setting/nm-meta-setting-desc.c:1464
 #, c-format
 msgid "'%s' is not a valid number"
 msgstr "»%s« ni veljavna številka"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1508
+#: src/libnmc-setting/nm-meta-setting-desc.c:1520
 #, c-format
 msgid "'%s' is out of range [0, %u]"
 msgstr "»%s« je izven obsega [0, %u]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1559
+#: src/libnmc-setting/nm-meta-setting-desc.c:1571
 #, c-format
 msgid "'%s' is not a valid Ethernet MAC"
 msgstr "»%s« ni veljaven Ethernet-ni MAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1648
+#: src/libnmc-setting/nm-meta-setting-desc.c:1660
 #, c-format
 msgid "invalid option '%s', use a combination of [%s]"
 msgstr "neveljavna možnost »%s«, uporabite kombinacijo [%s]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1785
+#: src/libnmc-setting/nm-meta-setting-desc.c:1797
 #, c-format
 msgid "%d (key)"
 msgstr "%d (ključ)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1787
+#: src/libnmc-setting/nm-meta-setting-desc.c:1799
 #, c-format
 msgid "%d (passphrase)"
 msgstr "%d (šifrirno geslo)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1790
+#: src/libnmc-setting/nm-meta-setting-desc.c:1802
 #, c-format
 msgid "%d (unknown)"
 msgstr "%d (neznano)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1803
+#: src/libnmc-setting/nm-meta-setting-desc.c:1815
 msgid "0 (NONE)"
 msgstr "0 (BREZ)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1809
+#: src/libnmc-setting/nm-meta-setting-desc.c:1821
 msgid "REORDER_HEADERS, "
 msgstr "PRERAZVRSTI_GLAVE,"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1811
+#: src/libnmc-setting/nm-meta-setting-desc.c:1823
 msgid "GVRP, "
 msgstr "GVRP,"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1813
+#: src/libnmc-setting/nm-meta-setting-desc.c:1825
 msgid "LOOSE_BINDING, "
 msgstr "OHLAPNE_VEZAVE,"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1815
+#: src/libnmc-setting/nm-meta-setting-desc.c:1827
 msgid "MVRP, "
 msgstr "MVRP, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1836
+#: src/libnmc-setting/nm-meta-setting-desc.c:1848
 msgid "0 (none)"
 msgstr "0 (brez)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1842
+#: src/libnmc-setting/nm-meta-setting-desc.c:1854
 #, fuzzy
 msgid "agent-owned, "
 msgstr "v lasti zastopnika, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1844
+#: src/libnmc-setting/nm-meta-setting-desc.c:1856
 msgid "not saved, "
 msgstr "ni shranjeno, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:1846
+#: src/libnmc-setting/nm-meta-setting-desc.c:1858
 msgid "not required, "
 msgstr "ni potrebno, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2051
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:2063
+#, c-format
 msgid "'%s' is not valid; use <option>=<value>"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljavno; uporabite <možnost>=<vrednost>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2061
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:2073
+#, c-format
 msgid "cannot set empty \"%s\" option"
-msgstr "Napaka: %s."
+msgstr "ni mogoče nastaviti prazne možnosti »%s«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2122
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:2134
+#, c-format
 msgid "'%u' flags are not valid; use combination of %s"
-msgstr "oznake \"%u\" niso veljavne; uporabite kombinacijo %s"
+msgstr "zastavice »%u« niso veljavne; uporabite kombinacijo %s"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2142
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:2154
+#, c-format
 msgid "'%s' is not a valid number (or out of range)"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "»%s« ni veljavna številka (ali je izven obsega)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2242
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:2254
+#, c-format
 msgid "invalid IPv4 or subnet \"%s\""
-msgstr "neveljavno polje '%s'"
+msgstr "neveljaven IPv4 ali podomrežje »%s«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2273
+#: src/libnmc-setting/nm-meta-setting-desc.c:2285
 msgid "not a valid hex-string"
 msgstr "ni veljaven šestnajstični niz"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2291
+#: src/libnmc-setting/nm-meta-setting-desc.c:2303
 #, c-format
 msgid "'%s' is not a valid hex character"
 msgstr "»%s« ni veljaven šestnajstiški znak"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2379
+#: src/libnmc-setting/nm-meta-setting-desc.c:2391
 msgid ""
 "too many arguments. Please only specify a private key file and optionally a "
 "password"
@@ -5399,13 +5269,13 @@ msgstr ""
 "preveč argumentov. Prosimo, navedite samo datoteko zasebnega ključa in po "
 "želji geslo"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2496
+#: src/libnmc-setting/nm-meta-setting-desc.c:2508
 #, fuzzy, c-format
 msgid "failed to set bond option \"%s\""
 msgstr "Določanje maske signala je spodletelo: %d"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2544
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:2556
+#, c-format
 msgid ""
 "Enter a list of bonding options formatted as:\n"
 "  option = <value>, option = <value>,... \n"
@@ -5422,165 +5292,158 @@ msgid ""
 "Example: mode=2,miimon=120\n"
 msgstr ""
 "Vnesite seznam možnosti povezovanja, ki so oblikovane kot:\n"
-"  možnost = <value>, možnost = <value>,... \n"
+"  možnost = <vrednost>, možnost = <vrednost>,... \n"
 "Veljavne možnosti so: %s\n"
-"\"način\" se lahko navede kot ime ali številka:\n"
-"bilančno-rr = 0\n"
-"aktivna varnostna kopija = 1\n"
-"Balance-XOR = 2\n"
-"oddajanje = 3\n"
-"802.3 ad = 4\n"
-"bilančno-tlb = 5\n"
-"Balance-ALB = 6\n"
-"\n"
-"Primer: način = 2, miimon = 120\n"
-"</value></value>"
+"»mode« se lahko navede kot ime ali številka:\n"
+"balance-rr    = 0\n"
+"active-backup = 1\n"
+"balance-xor   = 2\n"
+"broadcast     = 3\n"
+"802.3ad       = 4\n"
+"balance-tlb   = 5\n"
+"balance-alb   = 6\n"
+"\n"
+"\n"
+"Primer: mode = 2, miimon = 120\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2651
+#: src/libnmc-setting/nm-meta-setting-desc.c:2663
 msgid "Can not change the connection type"
 msgstr "Vrste povezave ni mogoče spremeniti"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2732
+#: src/libnmc-setting/nm-meta-setting-desc.c:2744
 #, c-format
 msgid "invalid permission \"%s\""
 msgstr "Neveljavno dovoljenje »%s«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2832
+#: src/libnmc-setting/nm-meta-setting-desc.c:2844
 #, c-format
 msgid "the value '%s' is not a valid UUID"
 msgstr "vrednost »%s« ni veljaven UUID"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2903
+#: src/libnmc-setting/nm-meta-setting-desc.c:2915
 msgid "0 (disabled)"
 msgstr "0 (onemogočeno)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2909
+#: src/libnmc-setting/nm-meta-setting-desc.c:2921
 msgid "enabled, "
 msgstr "omogočeno, "
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2911
+#: src/libnmc-setting/nm-meta-setting-desc.c:2923
 #, fuzzy
 msgid "advertise, "
-msgstr "Ime krajevneg gostitelja za oglaševanje na strežniku"
+msgstr "Oglaševanje"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:2913
+#: src/libnmc-setting/nm-meta-setting-desc.c:2925
 #, fuzzy
 msgid "willing, "
 msgstr "Willing"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3002
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:3014
+#, c-format
 msgid "'%s' is not a valid DCB flag"
-msgstr "\"%s\" ni veljavna zastavica DCB"
+msgstr "»%s« ni veljavna zastavica DCB"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3030
+#: src/libnmc-setting/nm-meta-setting-desc.c:3042
 #, fuzzy
 msgid "must contain 8 comma-separated numbers"
 msgstr "mora vsebovati 8 številk, ločenih z vejico"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3045
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:3057
+#, c-format
 msgid "'%s' not a number between 0 and %u (inclusive) or %u"
 msgstr "'%s' ni število med 0 in %u (vključno) ali %u"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3052
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:3064
+#, c-format
 msgid "'%s' not a number between 0 and %u (inclusive)"
 msgstr "'%s' ni število med 0 in %u (vključno)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3078
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:3090
+#, c-format
 msgid "changes will have no effect until '%s' includes 1 (enabled)"
-msgstr "Spremembe ne bodo imele učinka, dokler »%s« ne vključi 1 (omogočeno)"
+msgstr "spremembe ne bodo imele učinka, dokler »%s« ne vključuje 1 (omogočeno)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3110
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:3122
+#, c-format
 msgid "bandwidth percentages must total 100%%"
-msgstr "Odstotki pasovne širine morajo biti 100%%"
+msgstr "odstotki pasovne širine morajo biti 100 %%"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3210
-#: src/libnmc-setting/nm-meta-setting-desc.c:3219
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:3222
+#: src/libnmc-setting/nm-meta-setting-desc.c:3231
 msgid "SIM operator ID must be a 5 or 6 number MCCMNC code"
 msgstr "ID operaterja SIM mora biti koda MCCMNC s 5 ali 6 številkami"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3242
+#: src/libnmc-setting/nm-meta-setting-desc.c:3254
 #, c-format
 msgid "'%s' is not a valid IBoIP P_Key"
 msgstr "»%s« ni veljaven P_Key IBoIP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3266
+#: src/libnmc-setting/nm-meta-setting-desc.c:3278
 msgid "default"
 msgstr "privzeto"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3537
+#: src/libnmc-setting/nm-meta-setting-desc.c:3549
 #, c-format
 msgid "invalid gateway address '%s'"
 msgstr "Neveljaven naslov prehoda »%s«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3689
+#: src/libnmc-setting/nm-meta-setting-desc.c:3701
 #, c-format
 msgid "'%s' is not a valid channel; use <1-13>"
 msgstr "»%s« ni veljaven kanal; uporabite <1-13>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3783
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:3795
 msgid "The valid syntax is: vf [attribute=value]... [,vf [attribute=value]...]"
 msgstr ""
-"Veljavna sintaksa je: vf [atribut=vrednost]... [,vf [atribut=vrednost]...]"
+"Veljavna skladnja je: vf [atribut=vrednost]... [,vf [atribut=vrednost]...]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3809
-#: src/libnmc-setting/nm-meta-setting-desc.c:3922
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:3821
+#: src/libnmc-setting/nm-meta-setting-desc.c:3934
 msgid ""
 "The valid syntax is: '[root | parent <handle>] [handle <handle>] <kind>'"
 msgstr ""
-"Veljavna sintaksa je: '[root | nadrejeni <handle>] [ročaj <handle>] <kind>'</"
-"kind></handle></handle>"
+"Veljavna skladnja je: '[root | parent <ročica>] [handle <ročica>] <vrsta>'"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3836
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:3848
 msgid "The valid syntax is: '<value>' or '<start>-<end>"
-msgstr "Veljavna sintaksa je: '<value>' ali '<start>-<end></start></value>"
+msgstr "Veljavna skladnja je: '<vrednonst>' ali '<začetek>-<konec>’"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:3866
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:3878
 msgid "The valid syntax is: '<vid>[-<vid>] [pvid] [untagged]'"
-msgstr "Veljavna sintaksa je: '<vid>[<vid>-] [pvid] [neoznačeno]'</vid></vid>"
+msgstr "Veljavna skladnja je: '<vid>[<vid>-] [pvid] [neoznačeno]'"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4068
+#: src/libnmc-setting/nm-meta-setting-desc.c:4080
 #, fuzzy, c-format
 msgid "invalid priority map '%s'"
 msgstr "neveljavno polje '%s'"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4161
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:4217
+#, c-format
 msgid "'%s' is not valid; 2 or 3 strings should be provided"
-msgstr "\"%s\" ni veljavno; Zagotoviti je treba 2 ali 3 strune"
+msgstr "‘%s’ ni veljavno; zagotoviti je treba 2 ali 3 nize"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4200
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:4256
+#, c-format
 msgid ""
 "Enter a list of S/390 options formatted as:\n"
 "  option = <value>, option = <value>,...\n"
 "Valid options are: %s\n"
 msgstr ""
 "Vnesite seznam možnosti S/390, oblikovanih kot:\n"
-"  možnost = <value>, možnost = <value>,...\n"
+"  možnost = <vrednost>, možnost = <vrednost>,...\n"
 "Veljavne možnosti so: %s\n"
-"</value></value>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4234
+#: src/libnmc-setting/nm-meta-setting-desc.c:4290
 #, c-format
 msgid "'%s' is not a valid channel"
 msgstr "»%s« ni veljaven kanal"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4242
+#: src/libnmc-setting/nm-meta-setting-desc.c:4298
 #, c-format
 msgid "'%ld' is not a valid channel"
 msgstr "»%ld« ni veljaven kanal"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4323
+#: src/libnmc-setting/nm-meta-setting-desc.c:4379
 #, c-format
 msgid ""
 "'%s' not compatible with %s '%s', please change the key or set the right %s "
@@ -5589,79 +5452,71 @@ msgstr ""
 "»%s« ni združljiv s %s »%s«, prosimo, najprej spremenite ključ ali nastavite "
 "pravi %s."
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4339
+#: src/libnmc-setting/nm-meta-setting-desc.c:4395
 #, fuzzy, c-format
 msgid "WEP key is guessed to be of %s"
-msgstr "Tipka WEP naj bi bila %s"
+msgstr "Ključ WEP naj bi bil %s"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4346
-#, fuzzy, c-format
+#: src/libnmc-setting/nm-meta-setting-desc.c:4402
+#, c-format
 msgid "WEP key index set to '%d'"
-msgstr "Ključni indeks WEP nastavljen na »%d«"
+msgstr "Indeks ključa WEP nastavljen na »%d«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4422
+#: src/libnmc-setting/nm-meta-setting-desc.c:4478
 #, c-format
 msgid "'%s' is not compatible with '%s' type, please change or delete the key."
 msgstr "»%s« ni združljivo z vrsto \"%s\", spremenite ali izbrišite ključ."
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4459 src/nmcli/utils.h:323
+#: src/libnmc-setting/nm-meta-setting-desc.c:4515 src/nmcli/utils.h:323
 msgid "on"
 msgstr "omogočeno"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4459 src/nmcli/utils.h:323
+#: src/libnmc-setting/nm-meta-setting-desc.c:4515 src/nmcli/utils.h:323
 msgid "off"
 msgstr "onemogočeno"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4524
+#: src/libnmc-setting/nm-meta-setting-desc.c:4580
 #, c-format
 msgid "'%s' is not valid; use 'on', 'off', or 'ignore'"
 msgstr "»%s« ni veljavno; Uporabite »on«, »off« ali »ignore«"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4621
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4677
 msgid "Bonding primary interface"
-msgstr "Povezovanje primarnega vmesnika"
+msgstr "Vezanje primarnega vmesnika"
 
 #. this is a virtual property, only needed during "ask" mode.
-#: src/libnmc-setting/nm-meta-setting-desc.c:4629
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4685
+#: src/libnmc-setting/nm-meta-setting-desc.h:49
 msgid "Bonding monitoring mode"
-msgstr "Način spremljanja lepljenja"
+msgstr "Vezanje načina spremljanja"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4638
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4694
 msgid "Bonding miimon"
-msgstr "Lepljenje miimona"
+msgstr "Vezanje miimon"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4647
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4703
 msgid "Bonding downdelay"
-msgstr "Zakasnitev navzdol lepljenja"
+msgstr "Vezanje downdelay"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4656
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4712
 msgid "Bonding updelay"
-msgstr "Zakasnitev lepljenja"
+msgstr "Vezanje updelay"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4665
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4721
 msgid "Bonding arp-interval"
-msgstr "Lepljenje arp-intervala"
+msgstr "Vezanje arp-intervala"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4674
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4730
 msgid "Bonding arp-ip-target"
-msgstr "Lepljenje arp-ip-target"
+msgstr "Vezanje arp-ip-target"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4683
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4739
 msgid "LACP rate (slow/fast)"
-msgstr "Stopnja LACP (počasna/hitra)"
+msgstr "Hitrost LACP (počasna/hitra)"
 
 #. macro that returns @func as const (guint32(*)(NMSetting*)) type, but checks
 #. * that the actual type is (guint32(*)(type *)).
-#: src/libnmc-setting/nm-meta-setting-desc.c:4874
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4930
 msgid ""
 "nmcli can accepts both direct JSON configuration data and a file name "
 "containing the configuration. In the latter case the file is read and the "
@@ -5671,15 +5526,15 @@ msgid ""
 "\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
 "          set team.config /etc/my-team.conf\n"
 msgstr ""
-"nmcli lahko sprejme neposredne konfiguracijske podatke JSON in ime datoteke, "
-"ki vsebuje konfiguracijo. V slednjem primeru se datoteka prebere in vsebina "
-"se vnese v to lastnost.\n"
+"nmcli lahko sprejme tako neposredne prilagoditvene podatke JSON kot ime "
+"datoteke, ki vsebuje prilagoditev. V slednjem primeru se datoteka prebere in "
+"vsebina se vnese v to lastnost.\n"
 "\n"
 "Primeri: set team.config { \"device\": \"team0\", \"runner\": {\"name\": "
 "\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
 "          nastavite team.config /etc/my-team.conf\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4882
+#: src/libnmc-setting/nm-meta-setting-desc.c:4938
 #, fuzzy
 msgid ""
 "Enter a list of link watchers formatted as dictionaries where the keys are "
@@ -5729,12 +5584,11 @@ msgstr ""
 "   ime=arp_ping source-host=172.16.1.1 target-host=172.16.1.254, "
 "name=ethtool delay-up=3\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:4931
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:4987
 msgid "IEEE 802.15.4 (WPAN) parent device or connection UUID"
-msgstr "IEEE 802.15.4 (WPAN) nadrejena naprava ali UUID povezave"
+msgstr "Nadrejena naprava IEEE 802.15.4 (WPAN) ali UUID povezave"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5121
+#: src/libnmc-setting/nm-meta-setting-desc.c:5177
 #, fuzzy
 msgid ""
 "Enter bytes as a list of hexadecimal values.\n"
@@ -5757,96 +5611,92 @@ msgstr ""
 "Primeri: ab0455a6ea3a74C2\n"
 "          ab 4 55 0xa6 ea 3a 74 C2\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5194
-#: src/libnmc-setting/nm-meta-setting-desc.c:5497
-#: src/libnmc-setting/nm-meta-setting-desc.c:6078
-#: src/libnmc-setting/nm-meta-setting-desc.c:7468
+#: src/libnmc-setting/nm-meta-setting-desc.c:5250
+#: src/libnmc-setting/nm-meta-setting-desc.c:5553
+#: src/libnmc-setting/nm-meta-setting-desc.c:6134
+#: src/libnmc-setting/nm-meta-setting-desc.c:7530
 msgid "Password [none]"
 msgstr "Geslo [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5240
+#: src/libnmc-setting/nm-meta-setting-desc.c:5296
 msgid "Bluetooth device address"
 msgstr "Naslov Bluetooth za napravo"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5289
+#: src/libnmc-setting/nm-meta-setting-desc.c:5345
 #: src/nmtui/nmt-page-bond-port.c:51
 msgid "Queue ID"
 msgstr "ID vrste"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5295
+#: src/libnmc-setting/nm-meta-setting-desc.c:5351
 msgid "Port Priority"
 msgstr "Prednost vrat"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5307
-#: src/libnmc-setting/nm-meta-setting-desc.c:6216
-#: src/libnmc-setting/nm-meta-setting-desc.c:8210
-#: src/libnmc-setting/nm-meta-setting-desc.c:8248
-#: src/libnmc-setting/nm-meta-setting-desc.c:8445
-#: src/libnmc-setting/nm-meta-setting-desc.c:8710
+#: src/libnmc-setting/nm-meta-setting-desc.c:5363
+#: src/libnmc-setting/nm-meta-setting-desc.c:6272
+#: src/libnmc-setting/nm-meta-setting-desc.c:8288
+#: src/libnmc-setting/nm-meta-setting-desc.c:8326
+#: src/libnmc-setting/nm-meta-setting-desc.c:8538
+#: src/libnmc-setting/nm-meta-setting-desc.c:8803
 msgid "MAC [none]"
 msgstr "MAC [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5313
+#: src/libnmc-setting/nm-meta-setting-desc.c:5369
 msgid "Enable STP"
 msgstr "Omogoči STP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5319
+#: src/libnmc-setting/nm-meta-setting-desc.c:5375
 msgid "STP priority"
 msgstr "Prednost STP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5325
+#: src/libnmc-setting/nm-meta-setting-desc.c:5381
 #: src/nmtui/nmt-page-bridge.c:120
 msgid "Forward delay"
 msgstr "Zamik prepošiljanja"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5331
+#: src/libnmc-setting/nm-meta-setting-desc.c:5387
 #: src/nmtui/nmt-page-bridge.c:134
 msgid "Hello time"
 msgstr "Pozdravni čas"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5337
+#: src/libnmc-setting/nm-meta-setting-desc.c:5393
 #: src/nmtui/nmt-page-bridge.c:148
 msgid "Max age"
 msgstr "Najv. starost"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5343
+#: src/libnmc-setting/nm-meta-setting-desc.c:5399
 msgid "MAC address ageing time"
 msgstr "Čas staranja naslova MAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5353
+#: src/libnmc-setting/nm-meta-setting-desc.c:5409
 #: src/nmtui/nmt-page-bridge.c:156
 msgid "Group forward mask"
 msgstr "Maska skupine za posredovanje"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5395
+#: src/libnmc-setting/nm-meta-setting-desc.c:5451
 #: src/nmtui/nmt-page-bridge.c:79
-#, fuzzy
 msgid "Enable IGMP snooping"
 msgstr "Omogoči vohljanje IGMP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5453
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:5509
 msgid "Bridge port priority"
-msgstr "Dejavne povezave"
+msgstr "Prednost vrat mostu"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5459
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:5515
 msgid "Bridge port STP path cost"
-msgstr "Dejavne povezave"
+msgstr "Stroški poti STP vrat mosta"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5465
+#: src/libnmc-setting/nm-meta-setting-desc.c:5521
 #, fuzzy
 msgid "Hairpin"
 msgstr "Lasnica"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5491
-#: src/libnmc-setting/nm-meta-setting-desc.c:6072
-#: src/libnmc-setting/nm-meta-setting-desc.c:8055
+#: src/libnmc-setting/nm-meta-setting-desc.c:5547
+#: src/libnmc-setting/nm-meta-setting-desc.c:6128
+#: src/libnmc-setting/nm-meta-setting-desc.c:8133
 msgid "Username [none]"
 msgstr "Uporabniško ime [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5596
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:5652
 msgid ""
 "Enter a list of user permissions. This is a list of user names formatted "
 "as:\n"
@@ -5857,18 +5707,16 @@ msgid ""
 msgstr ""
 "Vnesite seznam uporabniških dovoljenj. To je seznam uporabniških imen, "
 "oblikovanih kot:\n"
-"  [uporabnik:] <user name 1>, [uporabnik:]<user name 2>,...\n"
+"  [user:] <uporabniško ime 1>, [user:]<uporabniško ime 2>,...\n"
 "Elemente lahko ločite z vejicami ali presledki.\n"
 "\n"
 "Primer: alice bob charlie\n"
-"</user></user>"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5625
+#: src/libnmc-setting/nm-meta-setting-desc.c:5681
 msgid "Controller"
 msgstr "Kontrolnik"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5684
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:5740
 msgid ""
 "Enter secondary connections that should be activated when this connection "
 "is\n"
@@ -5880,17 +5728,15 @@ msgid ""
 "\n"
 "Example: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
 msgstr ""
-"Vnesite sekundarne povezave, ki naj se aktivirajo, ko je ta povezava\n"
-"Aktivira. Povezave lahko določite z UUID ali ID (ime). nmcli\n"
-"pregledno prevede imena v UUID-je. Upoštevajte, da NetworkManager podpira "
-"samo\n"
-"VPN-ji so trenutno sekundarne povezave.\n"
+"Vnesite sekundarne povezave, ki naj se aktivirajo, ko se ta povezava\n"
+"aktivira. Povezave lahko določite z UUID ali ID (ime). nmcli\n"
+"pregledno prevede imena v UUID-je. Upoštevajte, da NetworkManager trenutno\n"
+"podpira samo VPN-je kot sekundarne povezave.\n"
 "Elemente lahko ločite z vejicami ali presledki.\n"
 "\n"
 "Primer: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:5741
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:5797
 msgid ""
 "Enter a value which indicates whether the connection is subject to a data\n"
 "quota, usage costs or other limitations. Accepted options are:\n"
@@ -5898,52 +5744,48 @@ msgid ""
 "'false','no','off' to set the connection as not metered\n"
 "'unknown' to let NetworkManager choose a value using some heuristics\n"
 msgstr ""
-"Vnesite vrednost, ki označuje, ali je povezava predmet podatkov\n"
-"kvota, stroški uporabe ali druge omejitve. Sprejete možnosti so:\n"
-"»true«, »yes«, »on« za nastavitev povezave z omejenim prenosom podatkov\n"
-"»false«, »ne«, »izklopljeno«, če želite povezavo nastaviti kot nemerno\n"
+"Vnesite vrednost, ki označuje, ali je povezava predmet podatkovnih\n"
+"kvot, stroškov uporabe ali drugih omejitev. Sprejete možnosti so:\n"
+"'true','yes','on' za nastavitev povezave z omejenim prenosom podatkov,\n"
+"'false','no','off', če želite povezavo nastaviti kot ne merjeno,\n"
 "'unknown', da NetworkManager izbere vrednost z uporabo hevristike\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6088
+#: src/libnmc-setting/nm-meta-setting-desc.c:6144
 msgid "APN"
 msgstr "APN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6170
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6226
 msgid "hsr port1"
-msgstr "Dejavne povezave"
+msgstr "hsr vrata1"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6177
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6233
 msgid "hsr port2"
-msgstr "Dejavne povezave"
+msgstr "hsr vrata2"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6183
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6239
 msgid "hsr multicast spec"
-msgstr "Specifikacija HSR Multicast"
+msgstr "hsr multicast spec"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6225
-#: src/libnmc-setting/nm-meta-setting-desc.c:7011
-#: src/libnmc-setting/nm-meta-setting-desc.c:8295
-#: src/libnmc-setting/nm-meta-setting-desc.c:8507
+#: src/libnmc-setting/nm-meta-setting-desc.c:6281
+#: src/libnmc-setting/nm-meta-setting-desc.c:7070
+#: src/libnmc-setting/nm-meta-setting-desc.c:8373
+#: src/libnmc-setting/nm-meta-setting-desc.c:8600
 #: src/nmtui/nmt-page-ethernet.c:124 src/nmtui/nmt-page-infiniband.c:81
-#: src/nmtui/nmt-page-ip-tunnel.c:178 src/nmtui/nmt-page-veth.c:80
-#: src/nmtui/nmt-page-vlan.c:100 src/nmtui/nmt-page-wifi.c:395
-#: src/nmtui/nmt-page-wireguard.c:85
+#: src/nmtui/nmt-page-ip-tunnel.c:178 src/nmtui/nmt-page-loopback.c:56
+#: src/nmtui/nmt-page-veth.c:80 src/nmtui/nmt-page-vlan.c:100
+#: src/nmtui/nmt-page-wifi.c:395 src/nmtui/nmt-page-wireguard.c:85
 msgid "MTU"
 msgstr "MTU"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6244
+#: src/libnmc-setting/nm-meta-setting-desc.c:6300
 msgid "P_KEY [none]"
 msgstr "P_KEY [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6262
+#: src/libnmc-setting/nm-meta-setting-desc.c:6318
 msgid "Parent interface [none]"
 msgstr "Nadrejeni vmesnik [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6291
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6347
 msgid ""
 "Enter a list of IPv4 addresses of DNS servers.\n"
 "\n"
@@ -5953,13 +5795,12 @@ msgstr ""
 "\n"
 "Primer: 8.8.8.8, 8.8.4.4\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6341
+#: src/libnmc-setting/nm-meta-setting-desc.c:6397
 #, fuzzy
 msgid "IPv4 address (IP[/plen]) [none]"
 msgstr "Naslov IPv4 (IP[/plen]) [none]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6343
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6399
 msgid ""
 "Enter a list of IPv4 addresses formatted as:\n"
 "  ip[/prefix], ip[/prefix],...\n"
@@ -5973,12 +5814,11 @@ msgstr ""
 "\n"
 "Primer: 192.168.1.5/24, 10.0.0.11/24\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6362
+#: src/libnmc-setting/nm-meta-setting-desc.c:6418
 msgid "IPv4 gateway [none]"
 msgstr "Prehod IPv4 [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6371
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6427
 msgid ""
 "Enter a list of IPv4 routes formatted as:\n"
 "  ip[/prefix] [next-hop] [metric],...\n"
@@ -5995,24 +5835,23 @@ msgstr ""
 "\n"
 "Manjkajoča predpona se šteje za predpono 32.\n"
 "Manjkajoči naslednji skok se šteje za 0.0.0.0.\n"
-"Manjkajoča metrika pomeni privzeto (NM/jedro bo nastavilo privzeto "
+"Manjkajoča metrika pomeni privzeto vrednost (NM/jedro bo nastavilo privzeto "
 "vrednost).\n"
 "\n"
 "Primeri: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
 "          10.1.2.0/24\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6411
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6467
 msgid ""
 "Enter a list of IPv4 routing rules formatted as:\n"
 "  priority [prio] [from [src]] [to [dst]], ,...\n"
 "\n"
 msgstr ""
 "Vnesite seznam pravil usmerjanja IPv4, ki so oblikovana kot:\n"
-"  prednostna naloga [prio] [od [src]] [do [DST]], ,...\n"
+"  priority [prio] [from [vir]] [do [CLJ]], ,...\n"
 "\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6599
+#: src/libnmc-setting/nm-meta-setting-desc.c:6658
 #, fuzzy
 msgid ""
 "Enter a list of IPv6 addresses of DNS servers.  If the IPv6 configuration "
@@ -6033,12 +5872,11 @@ msgstr ""
 "\n"
 "Primer: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6655
+#: src/libnmc-setting/nm-meta-setting-desc.c:6714
 msgid "IPv6 address (IP[/plen]) [none]"
 msgstr "Naslov IPv6 (IP[/plen]) [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6657
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:6716
 msgid ""
 "Enter a list of IPv6 addresses formatted as:\n"
 "  ip[/prefix], ip[/prefix],...\n"
@@ -6052,11 +5890,11 @@ msgstr ""
 "\n"
 "Primer: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6676
+#: src/libnmc-setting/nm-meta-setting-desc.c:6735
 msgid "IPv6 gateway [none]"
 msgstr "Prehod IPv6 [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6685
+#: src/libnmc-setting/nm-meta-setting-desc.c:6744
 #, fuzzy
 msgid ""
 "Enter a list of IPv6 routes formatted as:\n"
@@ -6082,7 +5920,7 @@ msgstr ""
 "govedina:3::/64 2001:db8:govedina::3 2\n"
 "          Abbe::/64 55\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6725
+#: src/libnmc-setting/nm-meta-setting-desc.c:6784
 #, fuzzy
 msgid ""
 "Enter a list of IPv6 routing rules formatted as:\n"
@@ -6093,189 +5931,182 @@ msgstr ""
 "  prednostna naloga [prio] [od [src]] [do [DST]], ,...\n"
 "\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6917
-#: src/libnmc-setting/nm-meta-setting-desc.c:8110
+#: src/libnmc-setting/nm-meta-setting-desc.c:6976
+#: src/libnmc-setting/nm-meta-setting-desc.c:8188
 msgid "Parent device [none]"
 msgstr "Nadrejena naprava [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6923
+#: src/libnmc-setting/nm-meta-setting-desc.c:6982
 msgid "Local endpoint [none]"
 msgstr "Krajevna končna točka [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6930
-#: src/libnmc-setting/nm-meta-setting-desc.c:8129
+#: src/libnmc-setting/nm-meta-setting-desc.c:6989
+#: src/libnmc-setting/nm-meta-setting-desc.c:8207
 msgid "Remote"
 msgstr "Oddaljeno"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:6981
-#, fuzzy
-#| msgid "VLAN parent device or connection UUID"
+#: src/libnmc-setting/nm-meta-setting-desc.c:7040
 msgid "IPVLAN parent device or connection UUID"
-msgstr "Nadrejena naprava VLAN ali UUID povezave"
+msgstr "Nadrejena naprava IPVLAN ali UUID povezave"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7077
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:7136
 msgid "MACsec parent device or connection UUID"
-msgstr "MACsec nadrejena naprava ali UUID povezave"
+msgstr "Nadrejena naprava MACsec ali UUID povezave"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7098
+#: src/libnmc-setting/nm-meta-setting-desc.c:7157
 msgid "Enable encryption"
 msgstr "Omogoči šifriranje"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7114
+#: src/libnmc-setting/nm-meta-setting-desc.c:7173
 msgid "MKA_CKN"
 msgstr "MKA_CKN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7120
+#: src/libnmc-setting/nm-meta-setting-desc.c:7179
 #: src/nmtui/nmt-page-macsec.c:170
 msgid "SCI port"
 msgstr "Vrata SCI"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7149
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:7208
 msgid "MACVLAN parent device or connection UUID"
-msgstr "ni naprave za povezavo '%s'"
+msgstr "Nadrejena naprava MACVLAN ali UUID povezave"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7170
+#: src/libnmc-setting/nm-meta-setting-desc.c:7229
 #, fuzzy
 msgid "Tap"
-msgstr "Tap z enim prstom"
+msgstr "TAP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7241
-#: src/libnmc-setting/nm-meta-setting-desc.c:8405 src/nmtui/nmt-page-wifi.c:216
+#: src/libnmc-setting/nm-meta-setting-desc.c:7300
+#: src/libnmc-setting/nm-meta-setting-desc.c:8498 src/nmtui/nmt-page-wifi.c:216
 msgid "SSID"
 msgstr "SSID"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7251
+#: src/libnmc-setting/nm-meta-setting-desc.c:7310
 #, fuzzy
 msgid "OLPC Mesh channel"
 msgstr "Povezava CDMA %d"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7261
+#: src/libnmc-setting/nm-meta-setting-desc.c:7320
 #, fuzzy
 msgid "DHCP anycast MAC address [none]"
 msgstr "Naslov MAC vsakomernega oddajanja DHCP [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7449
+#: src/libnmc-setting/nm-meta-setting-desc.c:7511
 msgid "PPPoE parent device"
 msgstr "Nadrejena naprava PPPoE"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7455
+#: src/libnmc-setting/nm-meta-setting-desc.c:7517
 msgid "Service [none]"
 msgstr "Storitev [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7462
+#: src/libnmc-setting/nm-meta-setting-desc.c:7524
 msgid "PPPoE username"
 msgstr "Uporabniško ime PPPoE"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7498
+#: src/libnmc-setting/nm-meta-setting-desc.c:7573
 msgid "Browser only"
 msgstr "Samo brskalnik"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7504
+#: src/libnmc-setting/nm-meta-setting-desc.c:7579
 msgid "PAC URL"
 msgstr "URL PAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7510
+#: src/libnmc-setting/nm-meta-setting-desc.c:7585
 msgid "PAC script"
 msgstr "Skript PAC"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7643
-#: src/libnmc-setting/nm-meta-setting-desc.c:7832
+#: src/libnmc-setting/nm-meta-setting-desc.c:7721
+#: src/libnmc-setting/nm-meta-setting-desc.c:7910
 #, fuzzy
 msgid "Team JSON configuration [none]"
-msgstr "Prilagoditev IP ni več veljavna"
+msgstr "Prilagoditev skupine JSON [none]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7935
+#: src/libnmc-setting/nm-meta-setting-desc.c:8013
 #, fuzzy
 msgid "User ID [none]"
 msgstr "ID uporabnika [none]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7941
+#: src/libnmc-setting/nm-meta-setting-desc.c:8019
 #, fuzzy
 msgid "Group ID [none]"
 msgstr "ID skupine [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7947
+#: src/libnmc-setting/nm-meta-setting-desc.c:8025
 msgid "Enable PI"
 msgstr "Omogoči PI"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7953
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:8031
 msgid "Enable VNET header"
 msgstr "Omogoči glavo VNET"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7959
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:8037
 msgid "Enable multi queue"
 msgstr "Omogoči več čakalnih vrst"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7972
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:8050
 msgid "veth peer"
-msgstr "Veth Peer"
+msgstr "veth peer"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7985
+#: src/libnmc-setting/nm-meta-setting-desc.c:8063
 msgid "VLAN parent device or connection UUID"
 msgstr "Nadrejena naprava VLAN ali UUID povezave"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7992
+#: src/libnmc-setting/nm-meta-setting-desc.c:8070
 msgid "VLAN ID (<0-4094>)"
 msgstr "ID VLAN (<0-4094>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:7998
+#: src/libnmc-setting/nm-meta-setting-desc.c:8076
 msgid "VLAN flags (<0-7>) [none]"
 msgstr "Zastavice VLAN (<0-7>) [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8014
+#: src/libnmc-setting/nm-meta-setting-desc.c:8092
 #, fuzzy
 msgid "Ingress priority maps [none]"
 msgstr "Prednostni zemljevidi vnosa [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8025
+#: src/libnmc-setting/nm-meta-setting-desc.c:8103
 #, fuzzy
 msgid "Egress priority maps [none]"
 msgstr "Prednostni zemljevidi izhoda [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8097
+#: src/libnmc-setting/nm-meta-setting-desc.c:8175
 msgid "Table"
 msgstr "Tabela"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8117
+#: src/libnmc-setting/nm-meta-setting-desc.c:8195
 msgid "VXLAN ID"
 msgstr "ID VXLAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8123
+#: src/libnmc-setting/nm-meta-setting-desc.c:8201
 msgid "Local address [none]"
 msgstr "Krajevni naslov [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8135
+#: src/libnmc-setting/nm-meta-setting-desc.c:8213
 msgid "Minimum source port"
 msgstr "Najmanjša izvorna vrata"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8141
+#: src/libnmc-setting/nm-meta-setting-desc.c:8219
 msgid "Maximum source port"
 msgstr "Največja izvorna vrata"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8147
+#: src/libnmc-setting/nm-meta-setting-desc.c:8225
 msgid "Destination port"
 msgstr "Ciljna vrata"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8187 src/nmtui/nmt-page-veth.c:54
+#: src/libnmc-setting/nm-meta-setting-desc.c:8265 src/nmtui/nmt-page-veth.c:54
 #: src/nmtui/nmt-wireguard-peer-editor.c:78
 msgid "Peer"
 msgstr "Soležnik"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8217
+#: src/libnmc-setting/nm-meta-setting-desc.c:8295
 msgid "WiMAX NSP name"
 msgstr "Ime WiMAX NSP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8254
-#: src/libnmc-setting/nm-meta-setting-desc.c:8450
+#: src/libnmc-setting/nm-meta-setting-desc.c:8332
+#: src/libnmc-setting/nm-meta-setting-desc.c:8543
 msgid "Cloned MAC [none]"
 msgstr "Klonirani MAC [brez]"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8303
+#: src/libnmc-setting/nm-meta-setting-desc.c:8381
 msgid ""
 "Enter a list of subchannels (comma or space separated).\n"
 "\n"
@@ -6285,7 +6116,7 @@ msgstr ""
 "\n"
 "Primer: 0.0.0e20 0.0.0e21 0.0.0e22\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8659
+#: src/libnmc-setting/nm-meta-setting-desc.c:8752
 msgid ""
 "Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
 "and 2 or passphrase.\n"
@@ -6293,250 +6124,311 @@ msgstr ""
 "Vnesite vrsto ključev WEP. Sprejete vrednosti so: 0 ali neznano, 1 ali ključ "
 "in 2 ali šifrirno geslo.\n"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8718
+#: src/libnmc-setting/nm-meta-setting-desc.c:8811
 msgid "Short address (<0x0000-0xffff>)"
 msgstr "Kratek naslov (<0x0000-0xffff>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8734
+#: src/libnmc-setting/nm-meta-setting-desc.c:8827
 msgid "PAN Identifier (<0x0000-0xffff>)"
 msgstr "Identifikator PAN (<0x0000-0xffff>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8749
+#: src/libnmc-setting/nm-meta-setting-desc.c:8842
 msgid "Page (<default|0-31>)"
 msgstr "Stran (<privzeto|0-31>)"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8763
+#: src/libnmc-setting/nm-meta-setting-desc.c:8856
 msgid "Channel (<default|0-26>)"
 msgstr "Kanal (<privzeto|0-26>)"
 
 #. ***************************************************************************
-#: src/libnmc-setting/nm-meta-setting-desc.c:8898
+#: src/libnmc-setting/nm-meta-setting-desc.c:8991
 msgid "6LOWPAN settings"
 msgstr "Nastavitve 6LOWPAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8899
+#: src/libnmc-setting/nm-meta-setting-desc.c:8992
 msgid "802-1x settings"
 msgstr "Nastavitve 802-1x"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8901
+#: src/libnmc-setting/nm-meta-setting-desc.c:8994
 msgid "bluetooth connection"
 msgstr "Povezava Bluetooth"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8902
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:8995
 msgid "Bond device"
 msgstr "Vezna naprava"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8903
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:8996
 msgid "Bond port"
-msgstr "Dejavne povezave"
+msgstr "Vezna vrata"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8904
+#: src/libnmc-setting/nm-meta-setting-desc.c:8997
 #, fuzzy
 msgid "Bridge device"
-msgstr "Dejavne povezave"
+msgstr "Naprava mosta"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8905
+#: src/libnmc-setting/nm-meta-setting-desc.c:8998
 #, fuzzy
 msgid "Bridge port"
-msgstr "Vrata premostitve"
+msgstr "Vrata mosta"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8906
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:8999
 msgid "CDMA mobile broadband connection"
-msgstr "Povezava vezi %d"
+msgstr "Mobilna širokopasovna povezava CDMA"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8907
+#: src/libnmc-setting/nm-meta-setting-desc.c:9000
 msgid "General settings"
 msgstr "Splošne nastavitve"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8908
+#: src/libnmc-setting/nm-meta-setting-desc.c:9001
 msgid "DCB settings"
 msgstr "Nastavitve DCB"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8909
+#: src/libnmc-setting/nm-meta-setting-desc.c:9002
 #, fuzzy
 msgid "Dummy settings"
 msgstr "Lažne nastavitve"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8910
+#: src/libnmc-setting/nm-meta-setting-desc.c:9003
 msgid "Ethtool settings"
 msgstr "Nastavitve Ethtool"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8911
+#: src/libnmc-setting/nm-meta-setting-desc.c:9004
 msgid "Generic settings"
 msgstr "Splošne nastavitve"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8912
+#: src/libnmc-setting/nm-meta-setting-desc.c:9005
 msgid "GSM mobile broadband connection"
 msgstr "Mobilna širokopasovna povezava GSM"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8913
+#: src/libnmc-setting/nm-meta-setting-desc.c:9006
 msgid "Hostname settings"
 msgstr "Nastavitve imena gostitelja"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8914
+#: src/libnmc-setting/nm-meta-setting-desc.c:9007
 msgid "HSR settings"
 msgstr "Nastavitve HSR"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8916
+#: src/libnmc-setting/nm-meta-setting-desc.c:9009
 msgid "IPv4 protocol"
 msgstr "Protokol IPv4"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8917
+#: src/libnmc-setting/nm-meta-setting-desc.c:9010
 msgid "IPv6 protocol"
 msgstr "Protokol IPv6"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8918
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9011
 msgid "IP-tunnel settings"
 msgstr "Nastavitve predora IP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8919
-#, fuzzy
-#| msgid "WPAN settings"
+#: src/libnmc-setting/nm-meta-setting-desc.c:9012
 msgid "IPVLAN settings"
-msgstr "Nastavitve WPAN"
+msgstr "Nastavitve IPVLAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8920
+#: src/libnmc-setting/nm-meta-setting-desc.c:9013
 msgid "Link settings"
 msgstr "Nastavitve povezave"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8921
+#: src/libnmc-setting/nm-meta-setting-desc.c:9014
 msgid "Loopback settings"
 msgstr "Nastavitve povratne zanke"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8922
+#: src/libnmc-setting/nm-meta-setting-desc.c:9015
 msgid "MACsec connection"
 msgstr "Povezava MACsec"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8923
+#: src/libnmc-setting/nm-meta-setting-desc.c:9016
 msgid "macvlan connection"
 msgstr "Povezava MACVLAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8924
+#: src/libnmc-setting/nm-meta-setting-desc.c:9017
 msgid "Match"
 msgstr "Se sklada"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8925
+#: src/libnmc-setting/nm-meta-setting-desc.c:9018
 #, fuzzy
 msgid "OLPC Mesh connection"
 msgstr "Povezava CDMA %d"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8926
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9019
 msgid "Open vSwitch bridge settings"
-msgstr "Odpiranje nastavitev mostu vSwitch"
+msgstr "Odpri nastavitve mostu vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8927
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9020
 msgid "Open vSwitch DPDK interface settings"
-msgstr "Odprite nastavitve vmesnika vSwitch DPDK"
+msgstr "Odpri nastavitve vmesnika vSwitch DPDK"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8928
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9021
 msgid "OVS Other Config"
-msgstr "OVS Druga konfiguracija"
+msgstr "Druge prilagoditve OVS"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8929
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9022
 msgid "OVS External IDs"
 msgstr "Zunanji ID-ji OVS"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8930
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9023
 msgid "Open vSwitch interface settings"
-msgstr "Odprite nastavitve vmesnika vSwitch"
+msgstr "Odpri nastavitve vmesnika vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8931
+#: src/libnmc-setting/nm-meta-setting-desc.c:9024
 #, fuzzy
 msgid "Open vSwitch patch interface settings"
-msgstr "Odprite nastavitve vmesnika popravka vSwitch"
+msgstr "Odpri nastavitve vmesnika prevezovalnika vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8932
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9025
 msgid "Open vSwitch port settings"
-msgstr "Odpiranje nastavitev vrat vSwitch"
+msgstr "Odpri nastavitve vrat vSwitch"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8933
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9026
 msgid "PPP settings"
 msgstr "Nastavitve PPP"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8934
+#: src/libnmc-setting/nm-meta-setting-desc.c:9027
 msgid "PPPoE"
 msgstr "PPPoE"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8935
+#: src/libnmc-setting/nm-meta-setting-desc.c:9028
+msgid "Prefix delegation settings"
+msgstr "Predpni nastavitve delegiranja"
+
+#: src/libnmc-setting/nm-meta-setting-desc.c:9029
 msgid "Proxy"
 msgstr "Posr. strežnik"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8936
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9030
 msgid "Serial settings"
 msgstr "Serijske nastavitve"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8937
+#: src/libnmc-setting/nm-meta-setting-desc.c:9031
 msgid "SR-IOV settings"
 msgstr "Nastavitve SR-IOV"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8938
+#: src/libnmc-setting/nm-meta-setting-desc.c:9032
 #, fuzzy
 msgid "Traffic controls"
 msgstr "Nadzor prometa"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8939
+#: src/libnmc-setting/nm-meta-setting-desc.c:9033
 #, fuzzy
 msgid "Team device"
 msgstr "Naprava je bila odstranjena"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8940
+#: src/libnmc-setting/nm-meta-setting-desc.c:9034
 #, fuzzy
 msgid "Team port"
 msgstr "Vrata skupine"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8941
-#, fuzzy
+#: src/libnmc-setting/nm-meta-setting-desc.c:9035
 msgid "Tun device"
-msgstr "Odpiranje naprave TUN je spodletelo: %s\n"
+msgstr "Naprava Tun"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8942
+#: src/libnmc-setting/nm-meta-setting-desc.c:9036
 msgid "User settings"
 msgstr "Uporabniške nastavitve"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8948
+#: src/libnmc-setting/nm-meta-setting-desc.c:9042
 msgid "Wi-Fi P2P connection"
 msgstr "Povezava Wi-Fi P2P"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8949
+#: src/libnmc-setting/nm-meta-setting-desc.c:9043
 msgid "WiMAX connection"
 msgstr "Povezava WiMAX"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8950
+#: src/libnmc-setting/nm-meta-setting-desc.c:9044
 msgid "Wired Ethernet"
 msgstr "Žična omrežna povezava"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8951
+#: src/libnmc-setting/nm-meta-setting-desc.c:9045
 msgid "WireGuard VPN settings"
 msgstr "Nastavitve WireGuard VPN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8952
+#: src/libnmc-setting/nm-meta-setting-desc.c:9046
 msgid "Wi-Fi connection"
 msgstr "Povezava Wi-Fi"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8953
+#: src/libnmc-setting/nm-meta-setting-desc.c:9047
 msgid "Wi-Fi security settings"
 msgstr "Varnostne nastavitve omrežja Wi-Fi"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:8954
+#: src/libnmc-setting/nm-meta-setting-desc.c:9048
 msgid "WPAN settings"
 msgstr "Nastavitve WPAN"
 
-#: src/libnmc-setting/nm-meta-setting-desc.c:9391
+#: src/libnmc-setting/nm-meta-setting-desc.c:9478
 msgid "name"
 msgstr "ime"
 
+#: src/libnmc-setting/nm-meta-setting-desc.h:15
+msgid "<hidden>"
+msgstr "<skrito>"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:17
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:22
+msgid "ADSL encapsulation"
+msgstr "Enkapsulacija ADSL"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:26
+msgid "Connection type"
+msgstr "Vrsta povezave"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:27
+msgid "Interface name"
+msgstr "Ime vmesnika"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:28
+msgid "VPN type"
+msgstr "Vrsta VPN"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:29
+#, fuzzy
+msgid "Master"
+msgstr "Glavni"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:31
+#: src/nmtui/nmt-page-infiniband.c:73
+msgid "Transport mode"
+msgstr "Način prenosa"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:38
+msgid "Bluetooth type"
+msgstr "Vrsta Bluetooth"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:47
+#, fuzzy
+msgid "Bonding mode"
+msgstr "Način vezave"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:55
+msgid "Wi-Fi mode"
+msgstr "Način Wi-Fi"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:64
+msgid "Tun mode"
+msgstr "Način Tun"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:70
+msgid "IP Tunnel mode"
+msgstr "Način IP-tunel"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:72
+msgid "IPVLAN mode"
+msgstr "Način IPVLAN"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:74
+msgid "MACVLAN mode"
+msgstr "Način MACVLAN"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:76
+msgid "MACsec mode"
+msgstr "Način MACsec"
+
+#: src/libnmc-setting/nm-meta-setting-desc.h:82
+#, fuzzy
+msgid "Proxy method"
+msgstr "Metoda posredovanja"
+
 #. Generated file. Do not edit.
 #: src/libnmc-setting/settings-docs.h.in:3
 #, fuzzy
@@ -6763,18 +6655,16 @@ msgstr ""
 "operacij ping ali časovne omejitve."
 
 #: src/libnmc-setting/settings-docs.h.in:16
-#, fuzzy
 msgid ""
 "The property determines whether it is sufficient for any ping check to "
 "succeed among \"ip-ping-addresses\", or if all ping checks must succeed for "
 "\"ip-ping-addresses\"."
 msgstr ""
-"Lastnost določi, ali zadostuje, da je kateri koli ping test uspešen med »ip-"
-"ping-addresses« ali če morajo biti vsa preverjanja pinga uspešna za »ip-ping-"
-"addresses«."
+"Lastnost določi, ali zadostuje, da je poljuben preizkus pinga uspešen med "
+"»ip-ping-addresses« ali pa morajo biti vsa preverjanja pinga uspešna za »ip-"
+"ping-addresses«."
 
 #: src/libnmc-setting/settings-docs.h.in:17
-#, fuzzy
 msgid ""
 "If greater than zero, delay success of IP addressing until either the "
 "specified timeout (in seconds) is reached, or a target IP address replies to "
@@ -6782,7 +6672,7 @@ msgid ""
 "This property is incompatible with \"gateway-ping-timeout\", you cannot set "
 "these two properties at the same time."
 msgstr ""
-"Če je večja od nič, odložite uspeh naslavljanja IP, dokler ni dosežena "
+"Če je večja od nič, zakasni uspeh naslavljanja IP, dokler ni dosežena "
 "določena časovna omejitev (v sekundah) ali dokler ciljni naslov IP ne "
 "odgovori na ping. Lastnost določa časovno omejitev za »ip-ping-addresses«. "
 "Ta lastnost ni združljiva z »gateway-ping-timeout«, teh dveh lastnosti ne "
@@ -7020,8 +6910,8 @@ msgstr ""
 #, fuzzy
 msgid ""
 "This represents the identity of the connection used for various purposes. It "
-"allows to configure multiple profiles to share the identity. Also, the "
-"stable-id can contain placeholders that are substituted dynamically and "
+"allows configuring multiple profiles to share the identity. Also, the stable-"
+"id can contain placeholders that are substituted dynamically and "
 "deterministically depending on the context. The stable-id is used for "
 "generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-"
 "privacy. It is also used to seed the generated cloned MAC address for "
@@ -7118,7 +7008,6 @@ msgstr ""
 "vsebovati ime nastavitve te vrste nastavitve (tj. »vpn« ali »bridge« itd.)."
 
 #: src/libnmc-setting/settings-docs.h.in:34
-#, fuzzy
 msgid ""
 "The connection.uuid is the real identifier of a profile. It cannot change "
 "and it must be unique. It is therefore often best to refer to a profile by "
@@ -7128,21 +7017,21 @@ msgid ""
 msgstr ""
 "Connection.uuid je pravi identifikator profila. Ne more se spremeniti in "
 "mora biti edinstvena. Zato je pogosto najbolje, da se sklicujete na profil "
-"po UUID, na primer z 'nmcli connection up uuid $UUID'. UUID ni mogoče "
-"spremeniti, razen v načinu brez povezave. V tem primeru lahko posebne "
-"vrednosti »new«, »generate« in »« ustvarijo nov naključni UUID."
+"po UUID, npr. z 'nmcli connection up uuid $UUID'. UUID ni mogoče spremeniti, "
+"razen v načinu brez povezave. V tem primeru lahko posebne vrednosti »new«, "
+"»generate« in »« ustvarijo nov naključni UUID."
 
 #: src/libnmc-setting/settings-docs.h.in:35
-#, fuzzy
 msgid ""
 "Time in milliseconds to wait for connection to be considered activated. The "
 "wait will start after the pre-up dispatcher event. The value 0 means no wait "
 "time. The default value is -1, which currently has the same meaning as no "
 "wait time."
 msgstr ""
-"Čas v milisekundah, da se povezava šteje za aktivirano. Čakanje se bo začelo "
-"po predhodnem dogodku dispečerja. Vrednost 0 pomeni, da ni čakalnega časa. "
-"Privzeta vrednost je -1, ki ima trenutno enak pomen kot brez čakalnega časa."
+"Čas čakanja v milisekundah, da se povezava šteje za aktivirano. Čakanje se "
+"bo začelo po predhodnem dogodku dispečerja. Vrednost 0 pomeni, da ni "
+"čakalnega časa. Privzeta vrednost je -1, ki ima trenutno enak pomen kot brez "
+"čakalnega časa."
 
 #: src/libnmc-setting/settings-docs.h.in:36
 #, fuzzy
@@ -7247,7 +7136,6 @@ msgstr ""
 "prijavo."
 
 #: src/libnmc-setting/settings-docs.h.in:44
-#, fuzzy
 msgid "Flags indicating how to handle the \"ca-cert-password\" property."
 msgstr ""
 "Zastavice, ki označujejo, kako ravnati z lastnostjo »ca-cert-password«."
@@ -7287,7 +7175,6 @@ msgstr ""
 "PKCS#11, ki zahteva prijavo."
 
 #: src/libnmc-setting/settings-docs.h.in:48
-#, fuzzy
 msgid "Flags indicating how to handle the \"client-cert-password\" property."
 msgstr ""
 "Zastavice, ki označujejo, kako ravnati z lastnostjo »client-cert-password«."
@@ -7352,7 +7239,6 @@ msgstr ""
 "ali uporabniško ime uporabnika."
 
 #: src/libnmc-setting/settings-docs.h.in:53
-#, fuzzy
 msgid ""
 "Define openssl_ciphers for wpa_supplicant. Openssl sometimes moves ciphers "
 "among SECLEVELs, thus compiled-in default value in wpa_supplicant (as "
@@ -7360,12 +7246,11 @@ msgid ""
 "servers that do not support new protocols."
 msgstr ""
 "Določite openssl_ciphers za wpa_supplicant. Openssl včasih premika šifre med "
-"SECLEVEL-ji, zato prevedena privzeta vrednost v wpa_supplicant (kot so jo "
+"SECLEVEL-i, zato prevedena privzeta vrednost v wpa_supplicant (kot so jo "
 "spremenile nekatere distribucije Linuxa) včasih preprečuje povezavo s "
 "starimi strežniki, ki ne podpirajo novih protokolov."
 
 #: src/libnmc-setting/settings-docs.h.in:54
-#, fuzzy
 msgid ""
 "Whether the 802.1X authentication is optional. If TRUE, the activation will "
 "continue even after a timeout or an authentication failure. Setting the "
@@ -7379,46 +7264,41 @@ msgstr ""
 "uspešnem preverjanju pristnosti."
 
 #: src/libnmc-setting/settings-docs.h.in:55
-#, fuzzy
 msgid "UTF-8 encoded file path containing PAC for EAP-FAST."
-msgstr "Pot datoteke kodirane z UTF-8, ki vsebuje PAC za EAP-FAST."
+msgstr "Pot datoteke, kodirana v UTF-8, ki vsebuje PAC za EAP-FAST."
 
 #: src/libnmc-setting/settings-docs.h.in:56
-#, fuzzy
 msgid ""
 "UTF-8 encoded password used for EAP authentication methods. If both the "
 "\"password\" property and the \"password-raw\" property are specified, "
 "\"password\" is preferred."
 msgstr ""
-"Geslo, kodirano z UTF-8, ki se uporablja za metode preverjanja pristnosti "
-"EAP. Če sta določeni lastnosti »geslo« in »geslo surovo«, je zaželeno "
-"»geslo«."
+"Geslo, kodirano v UTF-8, ki se uporablja za metode preverjanja pristnosti "
+"EAP. Če sta določeni lastnosti »password« in »password-raw«, je zaželeno "
+"»password«."
 
 #: src/libnmc-setting/settings-docs.h.in:57
 #: src/libnmc-setting/settings-docs.h.in:89
 #: src/libnmc-setting/settings-docs.h.in:131
 #: src/libnmc-setting/settings-docs.h.in:168
-#: src/libnmc-setting/settings-docs.h.in:337
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:340
 msgid "Flags indicating how to handle the \"password\" property."
-msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »geslo«."
+msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »password«."
 
 #: src/libnmc-setting/settings-docs.h.in:58
-#, fuzzy
 msgid ""
 "Password used for EAP authentication methods, given as a byte array to allow "
 "passwords in other encodings than UTF-8 to be used. If both the \"password\" "
 "property and the \"password-raw\" property are specified, \"password\" is "
 "preferred."
 msgstr ""
-"Geslo, ki se uporablja za metode preverjanja pristnosti EAP, dano kot bajtno "
-"polje, ki omogoča uporabo gesel v drugih kodiranjih kot UTF-8. Če sta "
-"določeni lastnosti »geslo« in »geslo surovo«, je zaželeno »geslo«."
+"Geslo, ki se uporablja za metode preverjanja pristnosti EAP, podano kot "
+"bajtno polje, ki omogoča uporabo gesel v drugih kodiranjih kot UTF-8. Če sta "
+"določeni lastnosti »password« in »password-raw«, je zaželeno »password«."
 
 #: src/libnmc-setting/settings-docs.h.in:59
-#, fuzzy
 msgid "Flags indicating how to handle the \"password-raw\" property."
-msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »geslo-surovo«."
+msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »password-raw«."
 
 #: src/libnmc-setting/settings-docs.h.in:60
 #, fuzzy
@@ -7555,7 +7435,6 @@ msgstr ""
 "vgrajena pot ni imenik."
 
 #: src/libnmc-setting/settings-docs.h.in:68
-#, fuzzy
 msgid ""
 "The password used to access the \"phase2\" CA certificate stored in \"phase2-"
 "ca-cert\" property. Only makes sense if the certificate is stored on a "
@@ -7566,7 +7445,6 @@ msgstr ""
 "žetonu PKCS#11, ki zahteva prijavo."
 
 #: src/libnmc-setting/settings-docs.h.in:69
-#, fuzzy
 msgid ""
 "Flags indicating how to handle the \"phase2-ca-cert-password\" property."
 msgstr ""
@@ -7574,7 +7452,6 @@ msgstr ""
 "password«."
 
 #: src/libnmc-setting/settings-docs.h.in:70
-#, fuzzy
 msgid ""
 "UTF-8 encoded path to a directory containing PEM or DER formatted "
 "certificates to be added to the verification chain in addition to the "
@@ -7582,10 +7459,10 @@ msgid ""
 "system-ca-certs is enabled and the built-in CA path is an existing "
 "directory, then this setting is ignored."
 msgstr ""
-"UTF-8 kodirana pot do imenika, ki vsebuje potrdila v obliki PEM ali DER, ki "
-"se doda v verifikacijsko verigo poleg potrdila, določenega v lastnosti "
-"\"phase2-ca-cert\". Če je omogočen NMSetting8021x:system-ca-certs in je "
-"vgrajena pot CA obstoječi imenik, se ta nastavitev prezre."
+"Kodirana pot UTF-8 do mape, ki vsebuje potrdila v obliki PEM ali DER, ki se "
+"doda v verifikacijsko verigo poleg potrdila, določenega v lastnosti »phase2-"
+"ca-cert«. Če je omogočen NMSetting8021x:system-ca-certs in je vgrajena pot "
+"CA obstoječa mapa, se ta nastavitev prezre."
 
 #: src/libnmc-setting/settings-docs.h.in:71
 #, fuzzy
@@ -7609,7 +7486,6 @@ msgstr ""
 "žetonu PKCS#11, ki zahteva prijavo."
 
 #: src/libnmc-setting/settings-docs.h.in:73
-#, fuzzy
 msgid ""
 "Flags indicating how to handle the \"phase2-client-cert-password\" property."
 msgstr ""
@@ -7663,18 +7539,16 @@ msgstr ""
 "auth ali 802-1x.phase2-autheap nastavljena na »tls«."
 
 #: src/libnmc-setting/settings-docs.h.in:77
-#, fuzzy
 msgid ""
 "The password used to decrypt the \"phase 2\" private key specified in the "
 "802-1x.phase2-private-key property. This is normally used by secret agents, "
 "not directly by users."
 msgstr ""
-"Geslo, ki se uporablja za dešifriranje zasebnega ključa »faze 2«, določenega "
-"v lastnosti 802-1x.phase2-private-key. To običajno uporabljajo tajni agenti, "
+"Geslo, ki se uporablja za dešifriranje zasebnega ključa »faze 2«, določene v "
+"lastnosti 802-1x.phase2-private-key. To običajno uporabljajo tajni agenti, "
 "ne neposredno uporabniki."
 
 #: src/libnmc-setting/settings-docs.h.in:78
-#, fuzzy
 msgid ""
 "Flags indicating how to handle the \"phase2-private-key-password\" property."
 msgstr ""
@@ -7702,7 +7576,6 @@ msgstr "Koda PIN, uporabljena za načine preverjanja pristnosti EAP."
 
 #: src/libnmc-setting/settings-docs.h.in:81
 #: src/libnmc-setting/settings-docs.h.in:170
-#, fuzzy
 msgid "Flags indicating how to handle the \"pin\" property."
 msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »pin«."
 
@@ -7724,10 +7597,9 @@ msgstr ""
 "uporabniki."
 
 #: src/libnmc-setting/settings-docs.h.in:84
-#, fuzzy
 msgid "Flags indicating how to handle the \"private-key-password\" property."
 msgstr ""
-"Zastavice, ki označujejo, kako ravnati z lastnostjo »zasebni ključ-geslo«."
+"Zastavice, ki označujejo, kako ravnati z lastnostjo »private-key-password«."
 
 #: src/libnmc-setting/settings-docs.h.in:85
 #, fuzzy
@@ -7763,9 +7635,8 @@ msgstr ""
 "možnosti ca_cert/ca_cert2 za wpa_supplicant)."
 
 #: src/libnmc-setting/settings-docs.h.in:87
-#, fuzzy
 msgid "Encapsulation of ADSL connection.  Can be \"vcmux\" or \"llc\"."
-msgstr "Enkapsulacija ADSL povezave.  Lahko je \"vcmux\" ali \"llc\"."
+msgstr "Enkapsulacija povezave ADSL povezave. Lahko je »vcmux« ali »llc«."
 
 #: src/libnmc-setting/settings-docs.h.in:88
 msgid "Password used to authenticate with the ADSL service."
@@ -7793,7 +7664,6 @@ msgid "The Bluetooth address of the device."
 msgstr "Naslov Bluetooth za napravo."
 
 #: src/libnmc-setting/settings-docs.h.in:95
-#, fuzzy
 msgid ""
 "Either \"dun\" for Dial-Up Networking connections or \"panu\" for Personal "
 "Area Networking connections to devices supporting the NAP profile."
@@ -7802,13 +7672,12 @@ msgstr ""
 "napravami, ki podpirajo profil NAP."
 
 #: src/libnmc-setting/settings-docs.h.in:96
-#, fuzzy
 msgid ""
 "Dictionary of key/value pairs of bonding options.  Both keys and values must "
 "be strings. Option names must contain only alphanumeric characters (ie, [a-"
 "zA-Z0-9])."
 msgstr ""
-"Slovar parov ključ/vrednost možnosti povezovanja.  Ključi in vrednosti "
+"Slovar parov ključ/vrednost za možnosti povezovanja.  Ključi in vrednosti "
 "morajo biti nizi. Imena možnosti morajo vsebovati samo alfanumerične znake "
 "(npr. [a-zA-Z0-9])."
 
@@ -7817,7 +7686,6 @@ msgid "The Ethernet MAC address aging time, in seconds."
 msgstr "Čas staranja naslova Ethernet MAC, v sekundah."
 
 #: src/libnmc-setting/settings-docs.h.in:98
-#, fuzzy
 msgid "The Spanning Tree Protocol (STP) forwarding delay, in seconds."
 msgstr ""
 "Zakasnitev posredovanja protokola STP (Spanning Tree Protocol) v sekundah."
@@ -7853,9 +7721,8 @@ msgstr ""
 "okvirjev in LACP."
 
 #: src/libnmc-setting/settings-docs.h.in:101
-#, fuzzy
 msgid "The Spanning Tree Protocol (STP) hello time, in seconds."
-msgstr "Protokol Spanning Tree Protocol (STP) pozdravi čas v sekundah."
+msgstr "Pozdravni čas protokola Spanning Tree Protocol (STP) v sekundah."
 
 #: src/libnmc-setting/settings-docs.h.in:102
 #, fuzzy
@@ -7949,13 +7816,12 @@ msgstr ""
 "za poizvedbe IGMP/MLD, ki jih pošlje most."
 
 #: src/libnmc-setting/settings-docs.h.in:112
-#, fuzzy
 msgid ""
 "If enabled the bridge's own IP address is used as the source address for "
 "IGMP queries otherwise the default of 0.0.0.0 is used."
 msgstr ""
 "Če je omogočeno, se kot izvorni naslov za poizvedbe IGMP uporabi lastni "
-"naslov IP mostu, sicer se uporabi privzeta vrednost 0.0.0.0."
+"naslov IP mosta, sicer se uporabi privzeta vrednost 0.0.0.0."
 
 #: src/libnmc-setting/settings-docs.h.in:113
 #, fuzzy
@@ -8010,7 +7876,6 @@ msgstr ""
 "Nadzira, ali je za ta most omogočen protokol STP (Spanning Tree Protocol)."
 
 #: src/libnmc-setting/settings-docs.h.in:119
-#, fuzzy
 msgid ""
 "The default PVID for the ports of the bridge, that is the VLAN id assigned "
 "to incoming untagged frames."
@@ -8019,7 +7884,6 @@ msgstr ""
 "okvirjem."
 
 #: src/libnmc-setting/settings-docs.h.in:120
-#, fuzzy
 msgid "Control whether VLAN filtering is enabled on the bridge."
 msgstr "Nadzirajte, ali je na mostu omogočeno filtriranje VLAN."
 
@@ -8034,9 +7898,9 @@ msgstr ""
 "»802.1Q«."
 
 #: src/libnmc-setting/settings-docs.h.in:122
-#, fuzzy
 msgid "Controls whether per-VLAN stats accounting is enabled."
-msgstr "Nadzoruje, ali je omogočeno računovodstvo statistike na VLAN."
+msgstr ""
+"Nadzoruje, ali je omogočeno vodenje statistike za posamezno omrežje VLAN."
 
 #: src/libnmc-setting/settings-docs.h.in:123
 #, fuzzy
@@ -8064,16 +7928,13 @@ msgstr ""
 "pošljejo nazaj skozi vrata, na katerih je bil okvir sprejet."
 
 #: src/libnmc-setting/settings-docs.h.in:125
-#, fuzzy
 msgid ""
 "The Spanning Tree Protocol (STP) port cost for destinations via this port."
 msgstr "Stroški vrat Spanning Tree Protocol (STP) za cilje prek teh vrat."
 
 #: src/libnmc-setting/settings-docs.h.in:126
-#, fuzzy
 msgid "The Spanning Tree Protocol (STP) priority of this bridge port."
-msgstr ""
-"Prednostna naloga protokola STP (Spanning Tree Protocol) tega mostnega vrata."
+msgstr "Prednost protokola STP (Spanning Tree Protocol) teh vrat mosta."
 
 #: src/libnmc-setting/settings-docs.h.in:127
 #, fuzzy
@@ -8172,17 +8033,15 @@ msgstr ""
 "fcoe-flags« vključuje zastavico »enable« (0x1)."
 
 #: src/libnmc-setting/settings-docs.h.in:136
-#, fuzzy
 msgid ""
 "Specifies the NMSettingDcbFlags for the DCB FIP application.  Flags may be "
 "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing"
 "\" (0x4)."
 msgstr ""
 "Določa NMSettingDcbFlags za program DCB FIP.  Zastavice so lahko poljubna "
-"kombinacija »omogoči« (0x1), »oglaševanje« (0x2) in »pripravljen« (0x4)."
+"kombinacija »enable« (0x1), »advertise« (0x2) in »willing« (0x4)."
 
 #: src/libnmc-setting/settings-docs.h.in:137
-#, fuzzy
 msgid ""
 "The highest User Priority (0 - 7) which FIP frames should use, or -1 for "
 "default priority.  Only used when the \"app-fip-flags\" property includes "
@@ -8214,7 +8073,6 @@ msgstr ""
 "iscsi-flags« vključuje zastavico »enable« (0x1)."
 
 #: src/libnmc-setting/settings-docs.h.in:140
-#, fuzzy
 msgid ""
 "An array of 8 uint values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates the percentage of bandwidth of the "
@@ -8222,22 +8080,20 @@ msgid ""
 "percentages for priorities which belong to the same group must total 100 "
 "percents."
 msgstr ""
-"Matrika z 8 uint vrednostmi, kjer indeks matrike ustreza uporabniški "
-"prioriteti (0 - 7), vrednost pa označuje odstotek pasovne širine dodeljene "
-"prednostne skupine, ki jo lahko uporablja prednostna naloga.  Vsota vseh "
-"odstotkov za prednostne naloge, ki pripadajo isti skupini, mora znašati 100 "
-"odstotkov."
+"Polje z 8 vrednostmi uint, kjer indeks matrike ustreza prednosti uporabnika "
+"(0 - 7), vrednost pa označuje odstotek pasovne širine dodeljene prednostne "
+"skupine, ki jo lahko uporablja prednostna naloga.  Vsota vseh odstotkov za "
+"prednostne naloge, ki pripadajo isti skupini, mora znašati 100 odstotkov."
 
 #: src/libnmc-setting/settings-docs.h.in:141
-#, fuzzy
 msgid ""
 "An array of 8 boolean values, where the array index corresponds to the User "
 "Priority (0 - 7) and the value indicates whether or not the corresponding "
 "priority should transmit priority pause."
 msgstr ""
-"Matrika z 8 logičnimi vrednostmi, kjer indeks polja ustreza uporabniški "
+"Polje z 8 logičnimi vrednostmi, kjer indeks polja ustreza uporabniški "
 "prioriteti (0 - 7) in vrednost označuje, ali naj ustrezna prioriteta prenese "
-"prioriteto ali ne."
+"prioriteto naprej ali ne."
 
 #: src/libnmc-setting/settings-docs.h.in:142
 #, fuzzy
@@ -8373,13 +8229,12 @@ msgstr ""
 "določeno napravo."
 
 #: src/libnmc-setting/settings-docs.h.in:152
-#, fuzzy
 msgid ""
 "When TRUE, only connections to the home network will be allowed. Connections "
 "to roaming networks will not be made."
 msgstr ""
 "Če je TRUE, bodo dovoljene samo povezave z domačim omrežjem. Povezave z "
-"gostujočimi omrežji ne bodo vzpostavljene."
+"omrežji gostovanja ne bodo vzpostavljene."
 
 #: src/libnmc-setting/settings-docs.h.in:153
 #, fuzzy
@@ -8428,11 +8283,11 @@ msgstr ""
 "bearer-configure TRUE."
 
 #: src/libnmc-setting/settings-docs.h.in:157
-#, fuzzy
 msgid ""
 "Flags indicating how to handle the \"initial-eps-bearer-password\" property."
 msgstr ""
-"Zastavice, ki označujejo, kako ravnati z lastnostjo »preskočiti geslo«."
+"Zastavice, ki označujejo, kako ravnati z lastnostjo »initial-eps-bearer-"
+"password«."
 
 #: src/libnmc-setting/settings-docs.h.in:158
 #, fuzzy
@@ -8557,22 +8412,18 @@ msgstr ""
 "id« in »sim-id«, ki vsebuje kartico SIM, ki jo zagotavlja določen operater."
 
 #: src/libnmc-setting/settings-docs.h.in:174
-#, fuzzy
 msgid "The last byte of supervision address."
 msgstr "Zadnji bajt nadzornega naslova."
 
 #: src/libnmc-setting/settings-docs.h.in:175
-#, fuzzy
 msgid "The port1 interface name of the HSR. This property is mandatory."
 msgstr "Ime vmesnika vrat1 za HSR. Ta nastanitev je obvezna."
 
 #: src/libnmc-setting/settings-docs.h.in:176
-#, fuzzy
 msgid "The port2 interface name of the HSR. This property is mandatory."
-msgstr "Ime vmesnika port2 HSR. Ta nastanitev je obvezna."
+msgstr "Ime vmesnika vrat2 HSR. Ta nastanitev je obvezna."
 
 #: src/libnmc-setting/settings-docs.h.in:177
-#, fuzzy
 msgid "The protocol used by the interface, whether it is PRP or HSR."
 msgstr ""
 "Protokol, ki ga uporablja vmesnik, ne glede na to, ali gre za PRP ali HSR."
@@ -8623,10 +8474,9 @@ msgstr ""
 "nastavite to lastnost ali »mac-address«."
 
 #: src/libnmc-setting/settings-docs.h.in:182
-#, fuzzy
 msgid ""
 "The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\"."
-msgstr "Način prenosa IP-over-InfiniBand. Bodisi »datagram« ali »povezano«."
+msgstr "Način prenosa IP-over-InfiniBand. Bodisi »datagram« ali »connected«."
 
 #: src/libnmc-setting/settings-docs.h.in:183
 #, fuzzy
@@ -8642,7 +8492,7 @@ msgstr ""
 "naslov."
 
 #: src/libnmc-setting/settings-docs.h.in:184
-#: src/libnmc-setting/settings-docs.h.in:221
+#: src/libnmc-setting/settings-docs.h.in:222
 #, fuzzy
 msgid ""
 "VPN connections will default to add the route automatically unless this "
@@ -8655,7 +8505,7 @@ msgstr ""
 "trenutno ni podprto, nastavitev na TRUE pa nima učinka."
 
 #: src/libnmc-setting/settings-docs.h.in:185
-#: src/libnmc-setting/settings-docs.h.in:222
+#: src/libnmc-setting/settings-docs.h.in:223
 #, fuzzy
 msgid ""
 "Maximum timeout in milliseconds used to check for the presence of duplicate "
@@ -8739,7 +8589,7 @@ msgstr ""
 "drugače ne bo poslal nobenega ID-ja odjemalca."
 
 #: src/libnmc-setting/settings-docs.h.in:187
-#: src/libnmc-setting/settings-docs.h.in:223
+#: src/libnmc-setting/settings-docs.h.in:224
 #, fuzzy
 msgid ""
 "Specifies the value for the DSCP field (traffic class) of the IP header. "
@@ -8766,7 +8616,7 @@ msgstr ""
 "izključujeta in ju ni mogoče nastaviti hkrati."
 
 #: src/libnmc-setting/settings-docs.h.in:189
-#: src/libnmc-setting/settings-docs.h.in:225
+#: src/libnmc-setting/settings-docs.h.in:226
 #, fuzzy
 msgid ""
 "If the \"dhcp-send-hostname\" property is TRUE, then the specified name will "
@@ -8778,7 +8628,7 @@ msgstr ""
 "izključujeta in ju ni mogoče nastaviti hkrati."
 
 #: src/libnmc-setting/settings-docs.h.in:190
-#: src/libnmc-setting/settings-docs.h.in:226
+#: src/libnmc-setting/settings-docs.h.in:227
 #, fuzzy
 msgid ""
 "Flags for the DHCP hostname and FQDN. Currently, this property only includes "
@@ -8807,7 +8657,7 @@ msgstr ""
 "zahteve DHCP pošljejo standardne zastavice FQDN, opisane zgoraj."
 
 #: src/libnmc-setting/settings-docs.h.in:191
-#: src/libnmc-setting/settings-docs.h.in:227
+#: src/libnmc-setting/settings-docs.h.in:228
 #, fuzzy
 msgid ""
 "A string containing the \"Identity Association Identifier\" (IAID) used by "
@@ -8872,7 +8722,7 @@ msgstr ""
 "vedno onemogočena."
 
 #: src/libnmc-setting/settings-docs.h.in:193
-#: src/libnmc-setting/settings-docs.h.in:229
+#: src/libnmc-setting/settings-docs.h.in:230
 #, fuzzy
 msgid ""
 "Array of servers from which DHCP offers must be rejected. This property is "
@@ -8888,7 +8738,7 @@ msgstr ""
 "trenutno ni implementirana za DHCPv6."
 
 #: src/libnmc-setting/settings-docs.h.in:194
-#: src/libnmc-setting/settings-docs.h.in:230
+#: src/libnmc-setting/settings-docs.h.in:231
 #, fuzzy
 msgid ""
 "Since 1.52 this property is deprecated and is only used as fallback value "
@@ -8902,7 +8752,7 @@ msgstr ""
 "prilagoditev, od zdaj naprej je treba uporabljati novo lastnost."
 
 #: src/libnmc-setting/settings-docs.h.in:195
-#: src/libnmc-setting/settings-docs.h.in:231
+#: src/libnmc-setting/settings-docs.h.in:232
 #, fuzzy
 msgid ""
 "If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some "
@@ -8922,7 +8772,7 @@ msgstr ""
 "poslano trenutno trajno ime gostitelja računalnika."
 
 #: src/libnmc-setting/settings-docs.h.in:196
-#: src/libnmc-setting/settings-docs.h.in:232
+#: src/libnmc-setting/settings-docs.h.in:233
 #, fuzzy
 msgid ""
 "Whether the DHCP client will send RELEASE message when bringing the "
@@ -8936,7 +8786,7 @@ msgstr ""
 "nastavljena, se šteje za FALSE."
 
 #: src/libnmc-setting/settings-docs.h.in:197
-#: src/libnmc-setting/settings-docs.h.in:233
+#: src/libnmc-setting/settings-docs.h.in:234
 #, fuzzy
 msgid ""
 "A timeout for a DHCP transaction in seconds. If zero (the default), a "
@@ -8965,7 +8815,7 @@ msgstr ""
 "vedno ni določeno, možnost DHCP ni poslana strežniku."
 
 #: src/libnmc-setting/settings-docs.h.in:199
-#: src/libnmc-setting/settings-docs.h.in:234
+#: src/libnmc-setting/settings-docs.h.in:235
 #, fuzzy
 msgid ""
 "Array of DNS servers. Each server can be specified either as a plain IP "
@@ -9015,7 +8865,7 @@ msgstr ""
 "Veljavni »ipv4.dns-options« in »ipv6.dns-options« se združita."
 
 #: src/libnmc-setting/settings-docs.h.in:201
-#: src/libnmc-setting/settings-docs.h.in:236
+#: src/libnmc-setting/settings-docs.h.in:237
 #, fuzzy
 msgid ""
 "DNS servers priority. The relative priority for DNS servers specified by "
@@ -9093,7 +8943,7 @@ msgstr ""
 "da so konfigurirani samo imenski strežniki želenega vmesnika."
 
 #: src/libnmc-setting/settings-docs.h.in:202
-#: src/libnmc-setting/settings-docs.h.in:237
+#: src/libnmc-setting/settings-docs.h.in:238
 #, fuzzy
 msgid ""
 "List of DNS search domains. Domains starting with a tilde ('~') are "
@@ -9123,7 +8973,32 @@ msgstr ""
 "iskanje DNS, bo nadomestna možnost izpeljana iz domene iz DHCP (možnost 15)."
 
 #: src/libnmc-setting/settings-docs.h.in:203
-#: src/libnmc-setting/settings-docs.h.in:238
+#: src/libnmc-setting/settings-docs.h.in:239
+msgid ""
+"Whether to configure sysctl interface-specific forwarding. When enabled, the "
+"interface will act as a router to forward the packet from one interface to "
+"another. When set to \"default\" (-1), the value from global configuration "
+"is used; if no global default is defined, \"auto\" (2) will be used. The "
+"\"forwarding\" property is ignored when \"method\" is set to \"shared\", "
+"because forwarding is always enabled in this case. The accepted values are: "
+"\"default\" (-1): use global default. \"no\" (0): disabled. \"yes\" (1): "
+"enabled. \"auto\" (2): enable if any shared connection is active, use kernel "
+"default otherwise."
+msgstr ""
+"Ali želite prilagoditi posredovanje, specifično za vmesnik sysctl. Ko je "
+"omogočen, bo vmesnik deloval kot usmerjevalnik za posredovanje paketa iz "
+"enega vmesnika v drugega. Če je nastavljena na »privzeto« (-1), se uporabi "
+"vrednost iz globalne prilagoditve; če ni določena nobena globalna privzeta "
+"vrednost, se uporabi »samodejnno« (2). Lastnost "
+"»posredovanje« (»forwarding«) je prezrta, če je »method« nastavljeno na »v "
+"skupni rabi« (»shared«), ker je posredovanje v tem primeru vedno omogočeno. "
+"Sprejete vrednosti so: »privzeto« (»default«) (-1): uporabi globalno "
+"privzeto. »Ne« (»no«) (0): onemogočeno. »Da« (»yes«) (1): Omogočeno. \"Auto"
+"\" (2): Omogoči, če je aktivna povezava v skupni rabi, v nasprotnem primeru "
+"uporabite privzeto jedro."
+
+#: src/libnmc-setting/settings-docs.h.in:204
+#: src/libnmc-setting/settings-docs.h.in:240
 #, fuzzy
 msgid ""
 "The gateway associated with this configuration. This is only meaningful if "
@@ -9144,8 +9019,8 @@ msgstr ""
 "za vmesnike WireGuard, zato ga običajno ne bi smeli nastaviti v tem primeru. "
 "Glejte »ip4-auto-default-route«."
 
-#: src/libnmc-setting/settings-docs.h.in:204
-#: src/libnmc-setting/settings-docs.h.in:239
+#: src/libnmc-setting/settings-docs.h.in:205
+#: src/libnmc-setting/settings-docs.h.in:241
 #, fuzzy
 msgid ""
 "When \"method\" is set to \"auto\" and this property to TRUE, automatically "
@@ -9158,8 +9033,8 @@ msgstr ""
 "samo imenski strežniki in iskalne domene, določene v lastnostih »dns« in "
 "»dns-search«, če obstajajo."
 
-#: src/libnmc-setting/settings-docs.h.in:205
-#: src/libnmc-setting/settings-docs.h.in:240
+#: src/libnmc-setting/settings-docs.h.in:206
+#: src/libnmc-setting/settings-docs.h.in:242
 #, fuzzy
 msgid ""
 "When \"method\" is set to \"auto\" and this property to TRUE, automatically "
@@ -9170,7 +9045,7 @@ msgstr ""
 "samodejno konfigurirane poti prezrejo in uporabijo se samo poti, določene v "
 "lastnosti »routes«, če obstajajo."
 
-#: src/libnmc-setting/settings-docs.h.in:206
+#: src/libnmc-setting/settings-docs.h.in:207
 #, fuzzy
 msgid ""
 "Enable and disable the IPv4 link-local configuration independently of the "
@@ -9192,8 +9067,8 @@ msgstr ""
 "»samodejno«. Upoštevajte, da če je »ipv4.method« »onemogočen«, je tudi "
 "lokalno naslavljanje povezave vedno onemogočeno. Privzeto je »privzeto«."
 
-#: src/libnmc-setting/settings-docs.h.in:207
-#: src/libnmc-setting/settings-docs.h.in:242
+#: src/libnmc-setting/settings-docs.h.in:208
+#: src/libnmc-setting/settings-docs.h.in:244
 #, fuzzy
 msgid ""
 "If TRUE, allow overall network configuration to proceed even if the "
@@ -9211,13 +9086,12 @@ msgstr ""
 "NMSettingIP4Config omogoča, da je celotna konfiguracija omrežja uspešna, če "
 "konfiguracija IPv4 ne uspe, vendar je konfiguracija IPv6 uspešno dokončana."
 
-#: src/libnmc-setting/settings-docs.h.in:208
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:209
 msgid "The IPv4 connection method."
-msgstr "povezava je odstranjena"
+msgstr "Način povezave IPv4."
 
-#: src/libnmc-setting/settings-docs.h.in:209
-#: src/libnmc-setting/settings-docs.h.in:245
+#: src/libnmc-setting/settings-docs.h.in:210
+#: src/libnmc-setting/settings-docs.h.in:247
 #, fuzzy
 msgid ""
 "If TRUE, this connection will never be the default connection for this IP "
@@ -9226,8 +9100,8 @@ msgstr ""
 "Če je TRUE, ta povezava nikoli ne bo privzeta povezava za to vrsto IP-ja, "
 "kar pomeni, da ji NetworkManager nikoli ne bo dodelil privzete poti."
 
-#: src/libnmc-setting/settings-docs.h.in:210
-#: src/libnmc-setting/settings-docs.h.in:247
+#: src/libnmc-setting/settings-docs.h.in:211
+#: src/libnmc-setting/settings-docs.h.in:249
 #, fuzzy
 msgid ""
 "Connections will default to keep the autogenerated priority 0 local rule "
@@ -9236,8 +9110,8 @@ msgstr ""
 "Povezave bodo privzeto ohranile samodejno ustvarjeno lokalno pravilo s "
 "prednostjo 0, razen če je ta nastavitev nastavljena na TRUE."
 
-#: src/libnmc-setting/settings-docs.h.in:211
-#: src/libnmc-setting/settings-docs.h.in:248
+#: src/libnmc-setting/settings-docs.h.in:212
+#: src/libnmc-setting/settings-docs.h.in:250
 #, fuzzy
 msgid ""
 "The minimum time interval in milliseconds for which dynamic IP configuration "
@@ -9264,8 +9138,8 @@ msgstr ""
 "omejitve, -1 pomeni privzeto vrednost (bodisi konfiguracija ipvx.required-"
 "timeout override ali nič)."
 
-#: src/libnmc-setting/settings-docs.h.in:212
-#: src/libnmc-setting/settings-docs.h.in:249
+#: src/libnmc-setting/settings-docs.h.in:213
+#: src/libnmc-setting/settings-docs.h.in:251
 #, fuzzy
 msgid ""
 "The default metric for routes that don't explicitly specify a metric. The "
@@ -9285,8 +9159,8 @@ msgstr ""
 "lastnosti na nič pomeni nastavitev na 1024. Za IPv4 je nič običajna vrednost "
 "za metriko."
 
-#: src/libnmc-setting/settings-docs.h.in:213
-#: src/libnmc-setting/settings-docs.h.in:250
+#: src/libnmc-setting/settings-docs.h.in:214
+#: src/libnmc-setting/settings-docs.h.in:252
 #, fuzzy
 msgid ""
 "Enable policy routing (source routing) and set the routing table used when "
@@ -9318,8 +9192,8 @@ msgstr ""
 "ohraniti združljivost za nazaj za uporabnike, ki upravljajo usmerjevalne "
 "tabele zunaj upravitelja omrežja."
 
-#: src/libnmc-setting/settings-docs.h.in:214
-#: src/libnmc-setting/settings-docs.h.in:251
+#: src/libnmc-setting/settings-docs.h.in:215
+#: src/libnmc-setting/settings-docs.h.in:253
 #, fuzzy
 msgid ""
 "Whether to add routes for DNS servers. When enabled, NetworkManager adds a "
@@ -9338,7 +9212,7 @@ msgstr ""
 "konfiguracije; Če ni določena nobena globalna privzeta nastavitev, je ta "
 "funkcija onemogočena."
 
-#: src/libnmc-setting/settings-docs.h.in:215
+#: src/libnmc-setting/settings-docs.h.in:216
 #, fuzzy
 msgid ""
 "A list of IPv4 destination addresses, prefix length, optional IPv4 next hop "
@@ -9351,14 +9225,14 @@ msgstr ""
 "\"ip[/prefix] [naslednji skok] [metrika] [atribut=val]... [,ip[/"
 "predpona]...]\". Na primer \"192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24\"."
 
-#: src/libnmc-setting/settings-docs.h.in:216
-#: src/libnmc-setting/settings-docs.h.in:253
+#: src/libnmc-setting/settings-docs.h.in:217
+#: src/libnmc-setting/settings-docs.h.in:255
 #, fuzzy
 msgid "A comma separated list of routing rules for policy routing."
 msgstr "Seznam pravil usmerjanja za usmerjanje, ločen z vejico."
 
-#: src/libnmc-setting/settings-docs.h.in:217
-#: src/libnmc-setting/settings-docs.h.in:254
+#: src/libnmc-setting/settings-docs.h.in:218
+#: src/libnmc-setting/settings-docs.h.in:256
 #, fuzzy
 msgid ""
 "This option allows you to specify a custom DHCP lease time for the shared "
@@ -9373,8 +9247,8 @@ msgstr ""
 "vrednosti so 0 za privzeto vrednost 1 ure in 2147483647 (MAXINT32) za "
 "neskončni čas najema."
 
-#: src/libnmc-setting/settings-docs.h.in:218
-#: src/libnmc-setting/settings-docs.h.in:255
+#: src/libnmc-setting/settings-docs.h.in:219
+#: src/libnmc-setting/settings-docs.h.in:257
 #, fuzzy
 msgid ""
 "This option allows you to specify a custom DHCP range for the shared "
@@ -9399,7 +9273,7 @@ msgstr ""
 "razpoložljivi naslovni prostor, razen za omrežja z dolžino predpone, večjo "
 "od 24, ki bodo obravnavana, kot da imajo dolžino predpone 24."
 
-#: src/libnmc-setting/settings-docs.h.in:219
+#: src/libnmc-setting/settings-docs.h.in:220
 #, fuzzy
 msgid ""
 "Configure method for creating the IPv6 interface identifier of addresses "
@@ -9453,7 +9327,7 @@ msgstr ""
 "zasebnosti, ki jih konfigurira lastnost »ip6-privacy«, in ne vpliva na "
 "začasne naslove, konfigurirane s to možnostjo."
 
-#: src/libnmc-setting/settings-docs.h.in:220
+#: src/libnmc-setting/settings-docs.h.in:221
 #, fuzzy
 msgid ""
 "A list of IPv6 addresses and their prefix length. Multiple addresses can be "
@@ -9468,7 +9342,7 @@ msgstr ""
 "bo prvi naslov primarni naslov. To lahko spremeni izbiro izvornega naslova "
 "IPv6 (RFC 6724, razdelek 5)."
 
-#: src/libnmc-setting/settings-docs.h.in:224
+#: src/libnmc-setting/settings-docs.h.in:225
 #, fuzzy
 msgid ""
 "A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp "
@@ -9522,7 +9396,7 @@ msgstr ""
 "uporabi globalna vrednost, ki je na voljo za »ipv6.dhcp-duid«. Če globalna "
 "vrednost ni navedena, se predpostavi privzeta vrednost »zakup«."
 
-#: src/libnmc-setting/settings-docs.h.in:228
+#: src/libnmc-setting/settings-docs.h.in:229
 #, fuzzy
 msgid ""
 "A IPv6 address followed by a slash and a prefix length. If set, the value is "
@@ -9536,7 +9410,7 @@ msgstr ""
 "predpone brez predpone, nastavite naslovni del na ničelni naslov (na primer "
 "»::/60«)."
 
-#: src/libnmc-setting/settings-docs.h.in:235
+#: src/libnmc-setting/settings-docs.h.in:236
 #, fuzzy
 msgid ""
 "DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The "
@@ -9571,7 +9445,7 @@ msgstr ""
 "se samodejno dodata \"edns0\" in \"trust-ad\". Veljavni »ipv4.dns-options« "
 "in »ipv6.dns-options« se združita."
 
-#: src/libnmc-setting/settings-docs.h.in:241
+#: src/libnmc-setting/settings-docs.h.in:243
 #, fuzzy
 msgid ""
 "Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941.  If "
@@ -9601,12 +9475,11 @@ msgstr ""
 "»stabilne zasebnosti« lastnosti »addr-gen-mode« kot še en način za "
 "izogibanje sledenju gostiteljev z naslovi IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:243
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:245
 msgid "The IPv6 connection method."
-msgstr "povezava je odstranjena"
+msgstr "Način povezave IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:244
+#: src/libnmc-setting/settings-docs.h.in:246
 #, fuzzy
 msgid ""
 "Maximum transmission unit size, in bytes. If zero (the default), the MTU is "
@@ -9619,7 +9492,7 @@ msgstr ""
 "povezovalni plasti. Če je večji od MTU na povezovalni plasti ali večji od "
 "nič, vendar manjši od najmanjšega MTU IPv6 1280, ta vrednost nima učinka."
 
-#: src/libnmc-setting/settings-docs.h.in:246
+#: src/libnmc-setting/settings-docs.h.in:248
 #, fuzzy
 msgid ""
 "A timeout for waiting Router Advertisements in seconds. If zero (the "
@@ -9632,12 +9505,11 @@ msgstr ""
 "vedno ni določeno, je časovna omejitev odvisna od nastavitev sysctl naprave. "
 "Nastavite na 2147483647 (MAXINT32) za neskončnost."
 
-#: src/libnmc-setting/settings-docs.h.in:252
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:254
 msgid "Array of IP routes."
-msgstr "Niz poti IP."
+msgstr "Polje poti IP."
 
-#: src/libnmc-setting/settings-docs.h.in:256
+#: src/libnmc-setting/settings-docs.h.in:258
 #, fuzzy
 msgid ""
 "The preferred lifetime of autogenerated temporary addresses, in seconds. "
@@ -9652,7 +9524,7 @@ msgstr ""
 "Če tudi ni določena ali je nastavljena na »0«, se nadomestno prebere »/proc/"
 "sys/net/ipv6/conf/default/temp_prefered_lft«."
 
-#: src/libnmc-setting/settings-docs.h.in:257
+#: src/libnmc-setting/settings-docs.h.in:259
 #, fuzzy
 msgid ""
 "The valid lifetime of autogenerated temporary addresses, in seconds. Having "
@@ -9667,7 +9539,7 @@ msgstr ""
 "tudi ni določena ali je nastavljena na »0«, nadomestno preberite »/proc/sys/"
 "net/ipv6/conf/default/temp_valid_lft«."
 
-#: src/libnmc-setting/settings-docs.h.in:258
+#: src/libnmc-setting/settings-docs.h.in:260
 #, fuzzy
 msgid ""
 "Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 "
@@ -9682,7 +9554,7 @@ msgstr ""
 "naslova strojne opreme. To velja samo za naslove iz samodejne konfiguracije "
 "brez stanja in ne za lokalne naslove povezave IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:259
+#: src/libnmc-setting/settings-docs.h.in:261
 #, fuzzy
 msgid ""
 "How many additional levels of encapsulation are permitted to be prepended to "
@@ -9693,7 +9565,7 @@ msgstr ""
 "lastnost velja samo za tunele IPv6. Če želite onemogočiti to možnost, "
 "dodajte 0x1 (ip6-ign-encap-limit) v zastavice ip-tunnel."
 
-#: src/libnmc-setting/settings-docs.h.in:260
+#: src/libnmc-setting/settings-docs.h.in:262
 #, fuzzy
 msgid ""
 "Tunnel flags. Currently, the following values are supported: 0x1 (ip6-ign-"
@@ -9706,7 +9578,7 @@ msgstr ""
 "(ip6-mip6-dev), 0x10 (ip6-rcv-dscp-copy) in 0x20 (ip6-use-orig-fwmark). "
 "Veljajo samo za tunele IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:261
+#: src/libnmc-setting/settings-docs.h.in:263
 #, fuzzy
 msgid ""
 "The flow label to assign to tunnel packets. This property applies only to "
@@ -9715,7 +9587,7 @@ msgstr ""
 "Oznaka poteka, ki jo želite dodeliti paketom tunela. Ta lastnost velja samo "
 "za tunele IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:262
+#: src/libnmc-setting/settings-docs.h.in:264
 #, fuzzy
 msgid ""
 "The fwmark value to assign to tunnel packets. This property can be set to a "
@@ -9724,8 +9596,7 @@ msgstr ""
 "Vrednost fwmark, ki jo je treba dodeliti paketom tunela. To lastnost lahko "
 "nastavite na vrednost, ki ni ničelna, samo v predorih VTI in VTI6."
 
-#: src/libnmc-setting/settings-docs.h.in:263
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:265
 msgid ""
 "The key used for tunnel input packets; the property is valid only for "
 "certain tunnel modes (GRE, IP6GRE). If empty, no key is used."
@@ -9734,16 +9605,15 @@ msgstr ""
 "določene načine tunela (GRE, IP6GRE). Če je prazen, se ne uporabi noben "
 "ključ."
 
-#: src/libnmc-setting/settings-docs.h.in:264
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:266
 msgid ""
 "The local endpoint of the tunnel; the value can be empty, otherwise it must "
 "contain an IPv4 or IPv6 address."
 msgstr ""
-"Lokalna končna točka predora; vrednost je lahko prazna, sicer mora vsebovati "
+"Krajevna končna točka tunela; vrednost je lahko prazna, sicer mora vsebovati "
 "naslov IPv4 ali IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:265
+#: src/libnmc-setting/settings-docs.h.in:267
 #, fuzzy
 msgid ""
 "The tunneling mode. Valid values: ipip (1), gre (2), sit (3), isatap (4), "
@@ -9754,7 +9624,7 @@ msgstr ""
 "(4), vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap (10) in "
 "ip6gretap (11)"
 
-#: src/libnmc-setting/settings-docs.h.in:266
+#: src/libnmc-setting/settings-docs.h.in:268
 #, fuzzy
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
@@ -9763,8 +9633,7 @@ msgstr ""
 "Če ni nič, prenašajte samo pakete določene velikosti ali manjše, večje "
 "pakete pa razdelite na več fragmentov."
 
-#: src/libnmc-setting/settings-docs.h.in:267
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:269
 msgid ""
 "The key used for tunnel output packets; the property is valid only for "
 "certain tunnel modes (GRE, IP6GRE). If empty, no key is used."
@@ -9773,7 +9642,7 @@ msgstr ""
 "za določene načine tunela (GRE, IP6GRE). Če je prazen, se ne uporabi noben "
 "ključ."
 
-#: src/libnmc-setting/settings-docs.h.in:268
+#: src/libnmc-setting/settings-docs.h.in:270
 #, fuzzy
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID the "
@@ -9784,12 +9653,11 @@ msgstr ""
 "na katerega bo nova naprava vezana, tako da bodo tunelirani paketi usmerjeni "
 "samo prek tega vmesnika."
 
-#: src/libnmc-setting/settings-docs.h.in:269
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:271
 msgid "Whether to enable Path MTU Discovery on this tunnel."
-msgstr "Ali želite omogočiti odkrivanje MTU poti v tem tunelu."
+msgstr "Ali želite omogočiti odkrivanje poti MTU v tem tunelu."
 
-#: src/libnmc-setting/settings-docs.h.in:270
+#: src/libnmc-setting/settings-docs.h.in:272
 #, fuzzy
 msgid ""
 "The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 "
@@ -9797,7 +9665,7 @@ msgid ""
 msgstr ""
 "Oddaljena končna točka predora; vrednost mora vsebovati naslov IPv4 ali IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:271
+#: src/libnmc-setting/settings-docs.h.in:273
 #, fuzzy
 msgid ""
 "The type of service (IPv4) or traffic class (IPv6) field to be set on "
@@ -9806,7 +9674,7 @@ msgstr ""
 "Polje »Vrsta storitve (IPv4) ali »Prometni razred« (IPv6), ki ga je treba "
 "nastaviti za pakete s tuneliranim tunelom."
 
-#: src/libnmc-setting/settings-docs.h.in:272
+#: src/libnmc-setting/settings-docs.h.in:274
 #, fuzzy
 msgid ""
 "The TTL to assign to tunneled packets. 0 is a special value meaning that "
@@ -9815,12 +9683,11 @@ msgstr ""
 "Življenjska doba, ki jo želite dodeliti tuneliranim paketom. 0 je posebna "
 "vrednost, kar pomeni, da paketi podedujejo vrednost življenjske dobe."
 
-#: src/libnmc-setting/settings-docs.h.in:273
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:275
 msgid "The IPVLAN mode. Valid values: l2 (1), l3 (2), l3s (3)"
 msgstr "Način IPVLAN. Veljavne vrednosti: l2 (1), l3 (2), l3s (3)"
 
-#: src/libnmc-setting/settings-docs.h.in:274
+#: src/libnmc-setting/settings-docs.h.in:276
 #, fuzzy
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
@@ -9833,22 +9700,19 @@ msgstr ""
 "mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-"
 "address«."
 
-#: src/libnmc-setting/settings-docs.h.in:275
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:277
 msgid "Whether the interface should be put in private mode."
-msgstr "Ali je treba vmesnik postaviti v promiskuitetni način."
+msgstr "Ali je treba vmesnik postaviti v zasebni način."
 
-#: src/libnmc-setting/settings-docs.h.in:276
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:278
 msgid "Whether the interface should be put in VEPA mode."
-msgstr "Ali je treba vmesnik postaviti v promiskuitetni način."
+msgstr "Ali je treba vmesnik postaviti v način VEPA."
 
-#: src/libnmc-setting/settings-docs.h.in:277
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:279
 msgid "Whether the transmitted traffic must be encrypted."
-msgstr "Ali mora biti preneseni promet šifriran"
+msgstr "Ali mora biti preneseni promet šifriran."
 
-#: src/libnmc-setting/settings-docs.h.in:278
+#: src/libnmc-setting/settings-docs.h.in:280
 #, fuzzy
 msgid ""
 "The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement. "
@@ -9857,12 +9721,11 @@ msgstr ""
 "CAK (ključ za povezovanje povezljivosti) za sporazum o ključu MACsec. Mora "
 "biti niz 32 šestnajstiških znakov."
 
-#: src/libnmc-setting/settings-docs.h.in:279
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:281
 msgid "Flags indicating how to handle the \"mka-cak\" property."
 msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »mka-cak«."
 
-#: src/libnmc-setting/settings-docs.h.in:280
+#: src/libnmc-setting/settings-docs.h.in:282
 #, fuzzy
 msgid ""
 "The pre-shared CKN (Connectivity-association Key Name) for MACsec Key "
@@ -9873,7 +9736,7 @@ msgstr ""
 "ključu MACsec. Mora biti niz šestnajstiških znakov s sodo dolžino med 2 in "
 "64."
 
-#: src/libnmc-setting/settings-docs.h.in:281
+#: src/libnmc-setting/settings-docs.h.in:283
 #, fuzzy
 msgid ""
 "Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key "
@@ -9882,7 +9745,7 @@ msgstr ""
 "Določa, kako se pridobi CAK (Connectivity Association Key) za MKA (MACsec "
 "Key Agreement)."
 
-#: src/libnmc-setting/settings-docs.h.in:282
+#: src/libnmc-setting/settings-docs.h.in:284
 #, fuzzy
 msgid ""
 "Specifies the MACsec offload mode. \"off\" (0) disables MACsec offload. \"phy"
@@ -9899,7 +9762,7 @@ msgstr ""
 "nobena globalna privzeta nastavitev, je vgrajena privzeta nastavitev "
 "»IZKLOPLJENO« (0)."
 
-#: src/libnmc-setting/settings-docs.h.in:283
+#: src/libnmc-setting/settings-docs.h.in:285
 #, fuzzy
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
@@ -9912,14 +9775,14 @@ msgstr ""
 "mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-"
 "address«."
 
-#: src/libnmc-setting/settings-docs.h.in:284
+#: src/libnmc-setting/settings-docs.h.in:286
 #, fuzzy
 msgid ""
 "The port component of the SCI (Secure Channel Identifier), between 1 and "
 "65534."
 msgstr "Komponenta vrat SCI (identifikator varnega kanala), med 1 in 65534."
 
-#: src/libnmc-setting/settings-docs.h.in:285
+#: src/libnmc-setting/settings-docs.h.in:287
 #, fuzzy
 msgid ""
 "Specifies whether the SCI (Secure Channel Identifier) is included in every "
@@ -9927,12 +9790,11 @@ msgid ""
 msgstr ""
 "Določa, ali je SCI (identifikator varnega kanala) vključen v vsak paket."
 
-#: src/libnmc-setting/settings-docs.h.in:286
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:288
 msgid "Specifies the validation mode for incoming frames."
-msgstr "Določa način preverjanja veljavnosti za dohodne okvirje"
+msgstr "Določa način preverjanja veljavnosti za dohodne okvirje."
 
-#: src/libnmc-setting/settings-docs.h.in:287
+#: src/libnmc-setting/settings-docs.h.in:289
 #, fuzzy
 msgid ""
 "The macvlan mode, which specifies the communication mechanism between "
@@ -9941,7 +9803,7 @@ msgstr ""
 "Način macvlan, ki določa komunikacijski mehanizem med več macvlani na isti "
 "nižji napravi."
 
-#: src/libnmc-setting/settings-docs.h.in:288
+#: src/libnmc-setting/settings-docs.h.in:290
 #, fuzzy
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
@@ -9954,17 +9816,18 @@ msgstr ""
 "mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-"
 "address«."
 
-#: src/libnmc-setting/settings-docs.h.in:289
-#, fuzzy
-msgid "Whether the interface should be put in promiscuous mode."
-msgstr "Ali je treba vmesnik postaviti v promiskuitetni način."
+#: src/libnmc-setting/settings-docs.h.in:291
+msgid ""
+"Whether the parent interface should be put in promiscuous mode (true by "
+"default)."
+msgstr ""
+"Ali naj se nadrejeni vmesnik postavi v promiskuitetni način (privzeto true)."
 
-#: src/libnmc-setting/settings-docs.h.in:290
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:292
 msgid "Whether the interface should be a MACVTAP."
 msgstr "Ali naj bo vmesnik MACVTAP."
 
-#: src/libnmc-setting/settings-docs.h.in:291
+#: src/libnmc-setting/settings-docs.h.in:293
 #, fuzzy
 msgid ""
 "A list of driver names to match. Each element is a shell wildcard pattern. "
@@ -9976,7 +9839,7 @@ msgstr ""
 "znaka lupine. Glej NMSettingMatch:interface-name za uporabo posebnih znakov "
 "'|', '&', '!' in '\\' za izbirne in obvezne ujemanja in obrnitev vzorca."
 
-#: src/libnmc-setting/settings-docs.h.in:292
+#: src/libnmc-setting/settings-docs.h.in:294
 #, fuzzy
 msgid ""
 "A list of interface names to match. Each element is a shell wildcard "
@@ -10006,7 +9869,7 @@ msgstr ""
 "uporabite poševnico, da se izognete začetku vzorca. Na primer, \"&\\!a\" je "
 "obvezno ujemanje za dobesedno \"!a\"."
 
-#: src/libnmc-setting/settings-docs.h.in:293
+#: src/libnmc-setting/settings-docs.h.in:295
 #, fuzzy
 msgid ""
 "A list of kernel command line arguments to match. This may be used to check "
@@ -10029,7 +9892,7 @@ msgstr ""
 "NMSettingMatch:interface-name za uporabo posebnih znakov '|', '&', '!' in "
 "'\\' za izbirne in obvezne ujemanja in obrnitev ujemanja."
 
-#: src/libnmc-setting/settings-docs.h.in:294
+#: src/libnmc-setting/settings-docs.h.in:296
 #, fuzzy
 msgid ""
 "A list of paths to match against the ID_PATH udev property of devices. "
@@ -10055,13 +9918,13 @@ msgstr ""
 "znaka lupine. Glej NMSettingMatch:interface-name za uporabo posebnih znakov "
 "'|', '&', '!' in '\\' za izbirne in obvezne ujemanja in obrnitev vzorca."
 
-#: src/libnmc-setting/settings-docs.h.in:295
+#: src/libnmc-setting/settings-docs.h.in:297
 #, fuzzy
 msgid "Channel on which the mesh network to join is located."
 msgstr ""
 "Kanal, na katerem se nahaja mrežno omrežje, ki se mu je treba pridružiti."
 
-#: src/libnmc-setting/settings-docs.h.in:296
+#: src/libnmc-setting/settings-docs.h.in:298
 #, fuzzy
 msgid ""
 "Anycast DHCP MAC address used when requesting an IP address via DHCP. The "
@@ -10072,39 +9935,53 @@ msgstr ""
 "Določen uporabljeni naslov za oddajanje določi, kateri razred strežnika DHCP "
 "odgovori na zahtevo. To trenutno izvaja samo vtičnik DHCP dhclient."
 
-#: src/libnmc-setting/settings-docs.h.in:297
+#: src/libnmc-setting/settings-docs.h.in:299
 #, fuzzy
 msgid "SSID of the mesh network to join."
 msgstr "SSID mrežnega omrežja, ki se mu želite pridružiti."
 
-#: src/libnmc-setting/settings-docs.h.in:298
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:300
 msgid "The data path type. One of \"system\", \"netdev\" or empty."
-msgstr "Vrsta podatkovne poti. Eden od \"sistem\", \"netdev\" ali prazen."
+msgstr "Vrsta podatkovne poti. Ena izmed \"sistem\", \"netdev\" ali prazno."
 
-#: src/libnmc-setting/settings-docs.h.in:299
+#: src/libnmc-setting/settings-docs.h.in:301
 #, fuzzy
 msgid "The bridge failure mode. One of \"secure\", \"standalone\" or empty."
 msgstr "Način okvare mostu. Eden od \"varnih\", \"samostojnih\" ali praznih."
 
-#: src/libnmc-setting/settings-docs.h.in:300
+#: src/libnmc-setting/settings-docs.h.in:302
 #, fuzzy
 msgid "Enable or disable multicast snooping."
 msgstr "Omogočite ali onemogočite vohljanje z več oddajami."
 
-#: src/libnmc-setting/settings-docs.h.in:301
+#: src/libnmc-setting/settings-docs.h.in:303
 msgid "Enable or disable RSTP."
 msgstr "Omogočite ali onemogočite RSTP."
 
-#: src/libnmc-setting/settings-docs.h.in:302
+#: src/libnmc-setting/settings-docs.h.in:304
 msgid "Enable or disable STP."
 msgstr "Omogočite ali onemogočite STP."
 
-#: src/libnmc-setting/settings-docs.h.in:303
+#: src/libnmc-setting/settings-docs.h.in:305
 msgid "Open vSwitch DPDK device arguments."
 msgstr "Odprite argumente naprave vSwitch DPDK."
 
-#: src/libnmc-setting/settings-docs.h.in:304
+#: src/libnmc-setting/settings-docs.h.in:306
+#, fuzzy
+msgid ""
+"Configures the Link State Change (LSC) detection mode for the OVS DPDK "
+"interface. When set to \"ignore\" (-1), NetworkManager doesn't change the "
+"default value configured by Open vSwitch. \"enabled\" (1) enables "
+"interrupts. \"disabled\" (0) disables interrupts, thus setting the interface "
+"in poll mode."
+msgstr ""
+"Prilagodi način zaznavanja spremembe stanja povezave (LSC - Link State "
+"Change) za vmesnik OVS DPDK. Če je nastavljen na »prezri« (-1), "
+"NetworkManager ne spremeni privzete vrednosti, ki jo nastavi Open vSwitch. "
+"»Omogočeno« (1) omogoča prekinitve. »Onemogočeno« (0) onemogoči prekinitve "
+"in tako nastavi vmesnik v načinu anketiranja."
+
+#: src/libnmc-setting/settings-docs.h.in:307
 #, fuzzy
 msgid ""
 "Open vSwitch DPDK number of rx queues. Defaults to zero which means to leave "
@@ -10114,7 +9991,7 @@ msgstr ""
 "da parameter v OVS ostane nedoločen in učinkovito konfigurira eno čakalno "
 "vrsto."
 
-#: src/libnmc-setting/settings-docs.h.in:305
+#: src/libnmc-setting/settings-docs.h.in:308
 #, fuzzy
 msgid ""
 "The rx queue size (number of rx descriptors) for DPDK ports. Must be zero or "
@@ -10127,7 +10004,7 @@ msgstr ""
 "kar pomeni, da parameter v OVS ostane nedoločen in učinkovito konfigurira "
 "2048 deskriptorjev."
 
-#: src/libnmc-setting/settings-docs.h.in:306
+#: src/libnmc-setting/settings-docs.h.in:309
 #, fuzzy
 msgid ""
 "The tx queue size (number of tx descriptors) for DPDK ports. Must be zero or "
@@ -10140,7 +10017,7 @@ msgstr ""
 "kar pomeni, da parameter v OVS ostane nedoločen in učinkovito konfigurira "
 "2048 deskriptorjev."
 
-#: src/libnmc-setting/settings-docs.h.in:307
+#: src/libnmc-setting/settings-docs.h.in:310
 #, fuzzy
 msgid ""
 "Open vSwitch openflow port number. Defaults to zero which means that port "
@@ -10155,7 +10032,7 @@ msgstr ""
 "preostalim omrežjem. Stikala OpenFlow se med seboj logično povezujejo prek "
 "svojih vrat OpenFlow."
 
-#: src/libnmc-setting/settings-docs.h.in:308
+#: src/libnmc-setting/settings-docs.h.in:311
 #, fuzzy
 msgid ""
 "The interface type. Either \"internal\", \"system\", \"patch\", \"dpdk\", or "
@@ -10164,7 +10041,7 @@ msgstr ""
 "Vrsta vmesnika. Ali \"notranji\", \"sistem\", \"popravek\", \"dpdk\" ali "
 "prazen."
 
-#: src/libnmc-setting/settings-docs.h.in:309
+#: src/libnmc-setting/settings-docs.h.in:312
 #, fuzzy
 msgid ""
 "Specifies the name of the interface for the other side of the patch. The "
@@ -10173,12 +10050,12 @@ msgstr ""
 "Določa ime vmesnika za drugo stran popravka. Popravek na drugi strani mora "
 "tudi nastaviti ta vmesnik kot enakovreden."
 
-#: src/libnmc-setting/settings-docs.h.in:310
+#: src/libnmc-setting/settings-docs.h.in:313
 #, fuzzy
 msgid "The time port must be inactive in order to be considered down."
 msgstr "Časovna vrata morajo biti neaktivna, da se štejejo za navzdol."
 
-#: src/libnmc-setting/settings-docs.h.in:311
+#: src/libnmc-setting/settings-docs.h.in:314
 #, fuzzy
 msgid ""
 "Bonding mode. One of \"active-backup\", \"balance-slb\", or \"balance-tcp\"."
@@ -10186,20 +10063,20 @@ msgstr ""
 "Način lepljenja. Ena od \"active-backup\", \"balance-slb\" ali \"balance-tcp"
 "\"."
 
-#: src/libnmc-setting/settings-docs.h.in:312
+#: src/libnmc-setting/settings-docs.h.in:315
 msgid "The time port must be active before it starts forwarding traffic."
 msgstr "Časovna vrata morajo biti dejavna, preden začnejo preusmerjati promet."
 
-#: src/libnmc-setting/settings-docs.h.in:313
+#: src/libnmc-setting/settings-docs.h.in:316
 msgid "LACP mode. One of \"active\", \"off\", or \"passive\"."
 msgstr ""
 "Način LACP. Ena izmed naslednjih vrednosti: »active«, »off« in »passive«."
 
-#: src/libnmc-setting/settings-docs.h.in:314
+#: src/libnmc-setting/settings-docs.h.in:317
 msgid "The VLAN tag in the range 0-4095."
 msgstr "Oznaka VLAN v območju 0-4095."
 
-#: src/libnmc-setting/settings-docs.h.in:315
+#: src/libnmc-setting/settings-docs.h.in:318
 #, fuzzy
 msgid ""
 "A list of VLAN ranges that this port trunks. The property is valid only for "
@@ -10210,7 +10087,7 @@ msgstr ""
 "vrata z načinom »trunk«, »native-tagged« ali »native-untagged port«. Če je "
 "prazen, vrata premaknejo vse VLAN-ove."
 
-#: src/libnmc-setting/settings-docs.h.in:316
+#: src/libnmc-setting/settings-docs.h.in:319
 #, fuzzy
 msgid ""
 "The VLAN mode. One of \"access\", \"native-tagged\", \"native-untagged\", "
@@ -10219,7 +10096,7 @@ msgstr ""
 "Način VLAN. Eden od »dostop«, »izvorno-označen«, »izvorno-neoznačen«, "
 "»prtljažnik«, »dot1q-tunnel« ali unset."
 
-#: src/libnmc-setting/settings-docs.h.in:317
+#: src/libnmc-setting/settings-docs.h.in:320
 #, fuzzy
 msgid ""
 "If non-zero, instruct pppd to set the serial port to the specified "
@@ -10230,7 +10107,7 @@ msgstr ""
 "prenosa.  Ta vrednost mora biti običajno enaka 0, da samodejno izberete "
 "hitrost."
 
-#: src/libnmc-setting/settings-docs.h.in:318
+#: src/libnmc-setting/settings-docs.h.in:321
 #, fuzzy
 msgid ""
 "If TRUE, specify that pppd should set the serial port to use hardware flow "
@@ -10241,7 +10118,7 @@ msgstr ""
 "strojnega nadzora pretoka s signali RTS in CTS.  Ta vrednost mora biti "
 "običajno nastavljena na FALSE."
 
-#: src/libnmc-setting/settings-docs.h.in:319
+#: src/libnmc-setting/settings-docs.h.in:322
 #, fuzzy
 msgid ""
 "If non-zero, instruct pppd to presume the connection to the peer has failed "
@@ -10254,7 +10131,7 @@ msgstr ""
 "Lastnost »lcp-echo-interval« mora biti prav tako nastavljena na vrednost, ki "
 "ni nič, če je uporabljena ta lastnost."
 
-#: src/libnmc-setting/settings-docs.h.in:320
+#: src/libnmc-setting/settings-docs.h.in:323
 #, fuzzy
 msgid ""
 "If non-zero, instruct pppd to send an LCP echo-request frame to the peer "
@@ -10267,7 +10144,7 @@ msgstr ""
 "PPP odzvali na zahteve odmeva, nekateri pa ne, in tega ni mogoče samodejno "
 "zaznati."
 
-#: src/libnmc-setting/settings-docs.h.in:321
+#: src/libnmc-setting/settings-docs.h.in:324
 #, fuzzy
 msgid ""
 "If TRUE, stateful MPPE is used.  See pppd documentation for more information "
@@ -10276,7 +10153,7 @@ msgstr ""
 "Če je TRUE, se uporabi stateful MPPE.  Za več informacij o stanju MPPE "
 "glejte dokumentacijo pppd."
 
-#: src/libnmc-setting/settings-docs.h.in:322
+#: src/libnmc-setting/settings-docs.h.in:325
 #, fuzzy
 msgid ""
 "If non-zero, instruct pppd to request that the peer send packets no larger "
@@ -10286,7 +10163,7 @@ msgstr ""
 "Če ni nič, naročite pppd, da zahteva, da vrstnik pošlje pakete, ki niso "
 "večji od določene velikosti.  Če ni nič, mora biti MRU med 128 in 16384."
 
-#: src/libnmc-setting/settings-docs.h.in:323
+#: src/libnmc-setting/settings-docs.h.in:326
 #, fuzzy
 msgid ""
 "If non-zero, instruct pppd to send packets no larger than the specified size."
@@ -10294,11 +10171,11 @@ msgstr ""
 "Če ni nič, naročite pppd, da pošlje pakete, ki niso večji od določene "
 "velikosti."
 
-#: src/libnmc-setting/settings-docs.h.in:324
+#: src/libnmc-setting/settings-docs.h.in:327
 msgid "If TRUE, Van Jacobsen TCP header compression will not be requested."
 msgstr "Če je TRUE, stiskanje glave TCP Van Jacobsen ne bo zahtevano."
 
-#: src/libnmc-setting/settings-docs.h.in:325
+#: src/libnmc-setting/settings-docs.h.in:328
 #, fuzzy
 msgid ""
 "If TRUE, do not require the other side (usually the PPP server) to "
@@ -10309,35 +10186,35 @@ msgstr ""
 "pristnost pri odjemalcu.  Če je FALSE, zahtevajte preverjanje pristnosti z "
 "oddaljene strani.  V skoraj vseh primerih bi to moralo biti RES."
 
-#: src/libnmc-setting/settings-docs.h.in:326
+#: src/libnmc-setting/settings-docs.h.in:329
 msgid "If TRUE, BSD compression will not be requested."
 msgstr "Če je TRUE, stiskanje BSD ne bo zahtevano."
 
-#: src/libnmc-setting/settings-docs.h.in:327
+#: src/libnmc-setting/settings-docs.h.in:330
 msgid "If TRUE, \"deflate\" compression will not be requested."
 msgstr "Če je TRUE, stiskanje »deflate« ne bo zahtevano."
 
-#: src/libnmc-setting/settings-docs.h.in:328
+#: src/libnmc-setting/settings-docs.h.in:331
 msgid "If TRUE, the CHAP authentication method will not be used."
 msgstr "Če je TRUE, način preverjanja pristnosti CHAP ne bo uporabljen."
 
-#: src/libnmc-setting/settings-docs.h.in:329
+#: src/libnmc-setting/settings-docs.h.in:332
 msgid "If TRUE, the EAP authentication method will not be used."
 msgstr "Če je TRUE, način preverjanja pristnosti EAP ne bo uporabljen."
 
-#: src/libnmc-setting/settings-docs.h.in:330
+#: src/libnmc-setting/settings-docs.h.in:333
 msgid "If TRUE, the MSCHAP authentication method will not be used."
 msgstr "Če je TRUE, način preverjanja pristnosti MSCHAP ne bo uporabljen."
 
-#: src/libnmc-setting/settings-docs.h.in:331
+#: src/libnmc-setting/settings-docs.h.in:334
 msgid "If TRUE, the MSCHAPv2 authentication method will not be used."
 msgstr "Če je TRUE, način preverjanja pristnosti MSCHAPv2 ne bo uporabljen."
 
-#: src/libnmc-setting/settings-docs.h.in:332
+#: src/libnmc-setting/settings-docs.h.in:335
 msgid "If TRUE, the PAP authentication method will not be used."
 msgstr "Če je TRUE, način preverjanja pristnosti PAP ne bo uporabljen."
 
-#: src/libnmc-setting/settings-docs.h.in:333
+#: src/libnmc-setting/settings-docs.h.in:336
 #, fuzzy
 msgid ""
 "If TRUE, MPPE (Microsoft Point-to-Point Encryption) will be required for the "
@@ -10349,7 +10226,7 @@ msgstr ""
 "seja ne bo uspela.  Upoštevajte, da se MPPE ne uporablja za mobilne "
 "širokopasovne povezave."
 
-#: src/libnmc-setting/settings-docs.h.in:334
+#: src/libnmc-setting/settings-docs.h.in:337
 #, fuzzy
 msgid ""
 "If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encryption) will be required "
@@ -10360,7 +10237,7 @@ msgstr ""
 "šifriranje od točke do točke), lastnost »require-mppe« pa mora biti prav "
 "tako nastavljena na TRUE.  Če 128-bitni MPPE ni na voljo, seja ne bo uspela."
 
-#: src/libnmc-setting/settings-docs.h.in:335
+#: src/libnmc-setting/settings-docs.h.in:338
 #, fuzzy
 msgid ""
 "If given, specifies the parent interface name on which this PPPoE connection "
@@ -10372,11 +10249,11 @@ msgstr ""
 "ta povezava PPPoE.  Če ta lastnost ni določena, se povezava aktivira na "
 "vmesniku, določenem v »interface-name« NMSettingConnection."
 
-#: src/libnmc-setting/settings-docs.h.in:336
+#: src/libnmc-setting/settings-docs.h.in:339
 msgid "Password used to authenticate with the PPPoE service."
 msgstr "Geslo, ki se uporablja za preverjanje pristnosti s storitvijo PPPoE."
 
-#: src/libnmc-setting/settings-docs.h.in:338
+#: src/libnmc-setting/settings-docs.h.in:341
 #, fuzzy
 msgid ""
 "If specified, instruct PPPoE to only initiate sessions with access "
@@ -10389,23 +10266,23 @@ msgstr ""
 "to pustiti prazno.  Zahteva se le, če obstaja več koncentratorjev dostopa "
 "ali če je znano, da je potrebna določena storitev."
 
-#: src/libnmc-setting/settings-docs.h.in:339
+#: src/libnmc-setting/settings-docs.h.in:342
 msgid "Username used to authenticate with the PPPoE service."
 msgstr ""
 "Uporabniško ime, ki se uporablja za preverjanje pristnosti s storitvijo "
 "PPPoE."
 
-#: src/libnmc-setting/settings-docs.h.in:340
+#: src/libnmc-setting/settings-docs.h.in:343
 #, fuzzy
 msgid "Whether the proxy configuration is for browser only."
 msgstr "Ali je konfiguracija strežnika proxy samo za brskalnik."
 
-#: src/libnmc-setting/settings-docs.h.in:341
+#: src/libnmc-setting/settings-docs.h.in:344
 #, fuzzy
 msgid "Method for proxy configuration, Default is \"none\" (0)"
 msgstr "Metoda za konfiguracijo proxyja, privzeta vrednost je »none« (0)"
 
-#: src/libnmc-setting/settings-docs.h.in:342
+#: src/libnmc-setting/settings-docs.h.in:345
 #, fuzzy
 msgid ""
 "The PAC script. In the profile this must be an UTF-8 encoded javascript code "
@@ -10420,12 +10297,11 @@ msgstr ""
 "in nastavil skript. Predponi \"file://\" in \"js://\" sta podprti za izrecno "
 "razlikovanje med obema."
 
-#: src/libnmc-setting/settings-docs.h.in:343
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:346
 msgid "PAC URL for obtaining PAC file."
 msgstr "URL PAC za pridobitev datoteke PAC."
 
-#: src/libnmc-setting/settings-docs.h.in:344
+#: src/libnmc-setting/settings-docs.h.in:347
 #, fuzzy
 msgid ""
 "Speed to use for communication over the serial port.  Note that this value "
@@ -10436,21 +10312,20 @@ msgstr ""
 "običajno ne vpliva na modeme za mobilno širokopasovno povezavo, saj običajno "
 "prezrejo nastavitve hitrosti in uporabljajo najvišjo razpoložljivo hitrost."
 
-#: src/libnmc-setting/settings-docs.h.in:345
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:348
 msgid "Byte-width of the serial communication. The 8 in \"8n1\" for example."
-msgstr "Bajt-širina serijske komunikacije. 8 v \"8n1\" na primer."
+msgstr "Bajtna širina serijske komunikacije. Primer: 8 v »8n1«."
 
-#: src/libnmc-setting/settings-docs.h.in:346
+#: src/libnmc-setting/settings-docs.h.in:349
 msgid "Parity setting of the serial port."
 msgstr "Nastavitev paritete serijskih vrat."
 
-#: src/libnmc-setting/settings-docs.h.in:347
+#: src/libnmc-setting/settings-docs.h.in:350
 #, fuzzy
 msgid "Time to delay between each byte sent to the modem, in microseconds."
 msgstr "Čas zakasnitve med vsakim bajtom, poslanim modemu, v mikrosekundah."
 
-#: src/libnmc-setting/settings-docs.h.in:348
+#: src/libnmc-setting/settings-docs.h.in:351
 #, fuzzy
 msgid ""
 "Number of stop bits for communication on the serial port.  Either 1 or 2. "
@@ -10459,7 +10334,7 @@ msgstr ""
 "Število stop bitov za komunikacijo na serijskih vratih.  Bodisi 1 ali 2. Na "
 "primer 1 v \"8n1\"."
 
-#: src/libnmc-setting/settings-docs.h.in:349
+#: src/libnmc-setting/settings-docs.h.in:352
 #, fuzzy
 msgid ""
 "Whether to autoprobe virtual functions by a compatible driver. If set to "
@@ -10478,7 +10353,7 @@ msgstr ""
 "»privzeto« (-1), se uporabi globalna privzeta vrednost; v primeru, da "
 "globalna privzeta vrednost ni določena, se domneva, da je »resnična« (1)."
 
-#: src/libnmc-setting/settings-docs.h.in:350
+#: src/libnmc-setting/settings-docs.h.in:353
 #, fuzzy
 msgid ""
 "Select the eswitch encapsulation support. Currently it's only supported for "
@@ -10491,7 +10366,7 @@ msgstr ""
 "kot PF. Če je nastavljena na »preserve« (-1) (privzeto), NetworkManager ne "
 "bo spremenil načina eswitch encap-mode."
 
-#: src/libnmc-setting/settings-docs.h.in:351
+#: src/libnmc-setting/settings-docs.h.in:354
 #, fuzzy
 msgid ""
 "Select the eswitch inline-mode of the device. Some HWs need the VF driver to "
@@ -10508,7 +10383,7 @@ msgstr ""
 "nastavljena na »ohrani« (-1) (privzeto), NetworkManager ne bo spremenil "
 "načina vključenega stikala eswitch."
 
-#: src/libnmc-setting/settings-docs.h.in:352
+#: src/libnmc-setting/settings-docs.h.in:355
 #, fuzzy
 msgid ""
 "Select the eswitch mode of the device. Currently it's only supported for PCI "
@@ -10521,7 +10396,31 @@ msgstr ""
 "nastavljena na »ohrani« (-1) (privzeto), NetworkManager ne bo spremenil "
 "načina eswitch."
 
-#: src/libnmc-setting/settings-docs.h.in:353
+#: src/libnmc-setting/settings-docs.h.in:356
+msgid ""
+"This controls whether NetworkManager preserves the SR-IOV parameters set on "
+"the device when the connection is deactivated, or whether it resets them to "
+"their default value. The SR-IOV parameters are those specified in this "
+"setting (the \"sriov\" setting), like the number of VFs to create, the "
+"eswitch configuration, etc. If set to \"no\" (0), NetworkManager resets the "
+"SR-IOV parameters when the connection is deactivated. When set to \"yes"
+"\" (1), NetworkManager preserves those parameters on the device. If the "
+"value is \"default\" (-1), NetworkManager looks up a global default value in "
+"the configuration; in case no such value is defined, it uses \"no\" (0) as "
+"fallback."
+msgstr ""
+"To nadzira, ali NetworkManager ohrani parametre SR-IOV, nastavljene v "
+"napravi, ko je povezava deaktivirana, ali pa jih ponastavi na privzeto "
+"vrednost. Parametri SR-IOV so določeni v tej nastavitvi (nastavitev "
+"»sriov«), kot so število VF-jev, ki jih je treba ustvariti, nastavitev "
+"eswitch itn. Če je nastavljena na »ne« (0), NetworkManager ponastavi "
+"parametre SR-IOV, ko je povezava deaktivirana. Če je nastavljen na »da« (1), "
+"NetworkManager ohrani te parametre v napravi. Če je vrednost "
+"»privzeta« (-1), NetworkManager poišče globalno privzeto vrednost v "
+"prilagoditvi; v primeru, da taka vrednost ni določena, se kot nadomestna "
+"vrednost uporabi »ne« (0)."
+
+#: src/libnmc-setting/settings-docs.h.in:357
 #, fuzzy
 msgid ""
 "The total number of virtual functions to create. Note that when the sriov "
@@ -10536,7 +10435,7 @@ msgstr ""
 "deaktivaciji. Če želite preprečiti kakršne koli spremembe parametrov SR-IOV, "
 "povezavi ne dodajajte nastavitve sriov."
 
-#: src/libnmc-setting/settings-docs.h.in:354
+#: src/libnmc-setting/settings-docs.h.in:358
 #, fuzzy
 msgid ""
 "Array of virtual function descriptors. Each VF descriptor is a dictionary "
@@ -10560,7 +10459,7 @@ msgstr ""
 "ločen s podpičjem, kjer ima vsak deskriptor obliko »ID[. PREDNOSTNA NALOGA[. "
 "PROTO]]\". PROTO je lahko 'q' za 802.1Q (privzeto) ali 'ad' za 802.1ad."
 
-#: src/libnmc-setting/settings-docs.h.in:355
+#: src/libnmc-setting/settings-docs.h.in:359
 #, fuzzy
 msgid ""
 "Array of TC queueing disciplines. When the \"tc\" setting is present, qdiscs "
@@ -10577,7 +10476,7 @@ msgstr ""
 "\"tc\" ni prisotna, se NetworkManager ne dotakne qdiskov, ki so prisotni na "
 "vmesniku."
 
-#: src/libnmc-setting/settings-docs.h.in:356
+#: src/libnmc-setting/settings-docs.h.in:360
 #, fuzzy
 msgid ""
 "Array of TC traffic filters. When the \"tc\" setting is present, filters "
@@ -10590,7 +10489,7 @@ msgstr ""
 "odstrani vse filtre. Če nastavitev »tc« ni na voljo, se NetworkManager ne "
 "dotakne filtrov, ki so prisotni v vmesniku."
 
-#: src/libnmc-setting/settings-docs.h.in:357
+#: src/libnmc-setting/settings-docs.h.in:361
 #, fuzzy
 msgid ""
 "The JSON configuration for the team network interface.  The property should "
@@ -10603,8 +10502,8 @@ msgstr ""
 "vrednost posreduje neposredno skupini. Če ni določeno, se uporabi privzeta "
 "konfiguracija.  Za podrobnosti o formatu glejte man teamd.conf."
 
-#: src/libnmc-setting/settings-docs.h.in:358
-#: src/libnmc-setting/settings-docs.h.in:376
+#: src/libnmc-setting/settings-docs.h.in:362
+#: src/libnmc-setting/settings-docs.h.in:380
 #, fuzzy
 msgid ""
 "Link watchers configuration for the connection: each link watcher is defined "
@@ -10625,69 +10524,67 @@ msgstr ""
 "nsna_ping in 'source-host', 'validate-active', 'validate-inactive', 'send-"
 "always'. Za več podrobnosti glejte teamd.conf man."
 
-#: src/libnmc-setting/settings-docs.h.in:359
+#: src/libnmc-setting/settings-docs.h.in:363
 msgid "Corresponds to the teamd mcast_rejoin.count."
 msgstr "Ustreza teamd mcast_rejoin.count."
 
-#: src/libnmc-setting/settings-docs.h.in:360
+#: src/libnmc-setting/settings-docs.h.in:364
 msgid "Corresponds to the teamd mcast_rejoin.interval."
 msgstr "Ustreza teamd mcast_rejoin.interval."
 
-#: src/libnmc-setting/settings-docs.h.in:361
+#: src/libnmc-setting/settings-docs.h.in:365
 msgid "Corresponds to the teamd notify_peers.count."
 msgstr "Ustreza teamd notify_peers.count."
 
-#: src/libnmc-setting/settings-docs.h.in:362
+#: src/libnmc-setting/settings-docs.h.in:366
 msgid "Corresponds to the teamd notify_peers.interval."
 msgstr "Ustreza teamd notify_peers.interval."
 
-#: src/libnmc-setting/settings-docs.h.in:363
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:367
 msgid ""
 "Corresponds to the teamd runner.name. Permitted values are: \"roundrobin\", "
 "\"broadcast\", \"activebackup\", \"loadbalance\", \"lacp\", \"random\"."
 msgstr ""
-"Ustreza skupinski runner.name. Dovoljene vrednosti so: »roundrobin«, "
+"Ustreza teamd runner.name. Dovoljene vrednosti so: »roundrobin«, "
 "»broadcast«, »activebackup«, »loadbalance«, »lacp«, »random«."
 
-#: src/libnmc-setting/settings-docs.h.in:364
+#: src/libnmc-setting/settings-docs.h.in:368
 msgid "Corresponds to the teamd runner.active."
 msgstr "Ustreza teamd runner.active."
 
-#: src/libnmc-setting/settings-docs.h.in:365
+#: src/libnmc-setting/settings-docs.h.in:369
 msgid "Corresponds to the teamd runner.agg_select_policy."
 msgstr "Ustreza teamd runner.agg_select_policy."
 
-#: src/libnmc-setting/settings-docs.h.in:366
+#: src/libnmc-setting/settings-docs.h.in:370
 msgid "Corresponds to the teamd runner.fast_rate."
 msgstr "Ustreza teamd runner.fast_rate."
 
-#: src/libnmc-setting/settings-docs.h.in:367
+#: src/libnmc-setting/settings-docs.h.in:371
 msgid "Corresponds to the teamd runner.hwaddr_policy."
 msgstr "Ustreza teamd runner.hwaddr_policy."
 
-#: src/libnmc-setting/settings-docs.h.in:368
+#: src/libnmc-setting/settings-docs.h.in:372
 msgid "Corresponds to the teamd runner.min_ports."
 msgstr "Ustreza teamd runner.min_ports."
 
-#: src/libnmc-setting/settings-docs.h.in:369
+#: src/libnmc-setting/settings-docs.h.in:373
 msgid "Corresponds to the teamd runner.sys_prio."
 msgstr "Ustreza teamd runner.sys_prio."
 
-#: src/libnmc-setting/settings-docs.h.in:370
+#: src/libnmc-setting/settings-docs.h.in:374
 msgid "Corresponds to the teamd runner.tx_balancer.name."
 msgstr "Ustreza teamd runner.tx_balancer.name."
 
-#: src/libnmc-setting/settings-docs.h.in:371
+#: src/libnmc-setting/settings-docs.h.in:375
 msgid "Corresponds to the teamd runner.tx_balancer.interval."
 msgstr "Ustreza teamd runner.tx_balancer.interval."
 
-#: src/libnmc-setting/settings-docs.h.in:372
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:376
 msgid "Corresponds to the teamd runner.tx_hash."
-msgstr "Ustreza skupinski runner.tx_hash."
+msgstr "Ustreza teamd runner.tx_hash."
 
-#: src/libnmc-setting/settings-docs.h.in:373
+#: src/libnmc-setting/settings-docs.h.in:377
 #, fuzzy
 msgid ""
 "The JSON configuration for the team port. The property should contain raw "
@@ -10700,33 +10597,31 @@ msgstr ""
 "neposredno skupini. Če ni določeno, se uporabi privzeta konfiguracija. Za "
 "podrobnosti o formatu glejte man teamd.conf."
 
-#: src/libnmc-setting/settings-docs.h.in:374
+#: src/libnmc-setting/settings-docs.h.in:378
 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_key."
 msgstr "Ustreza teamd ports.PORTIFNAME.lacp_key."
 
-#: src/libnmc-setting/settings-docs.h.in:375
+#: src/libnmc-setting/settings-docs.h.in:379
 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_prio."
 msgstr "Ustreza teamd ports.PORTIFNAME.lacp_prio."
 
-#: src/libnmc-setting/settings-docs.h.in:377
+#: src/libnmc-setting/settings-docs.h.in:381
 msgid "Corresponds to the teamd ports.PORTIFNAME.prio."
 msgstr "Ustreza teamd ports.PORTIFNAME.prio."
 
-#: src/libnmc-setting/settings-docs.h.in:378
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:382
 msgid ""
 "Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the "
 "parameter is skipped from the json config."
 msgstr ""
-"Ustreza združenim pristaniščem. PORTIFNAME.queue_id. Če je nastavljena na "
-"-1, pomeni, da je parameter preskočen iz konfiguracije json."
+"Ustreza ports.PORTIFNAME.queue_id za teamd. Če je nastavljeno na -1, pomeni, "
+"da je parameter preskočen v prilagoditvi json."
 
-#: src/libnmc-setting/settings-docs.h.in:379
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:383
 msgid "Corresponds to the teamd ports.PORTIFNAME.sticky."
-msgstr "Ustreza združenim pristaniščem. PORTIFNAME.sticky."
+msgstr "Ustreza ports.PORTIFNAME.sticky za teamd."
 
-#: src/libnmc-setting/settings-docs.h.in:380
+#: src/libnmc-setting/settings-docs.h.in:384
 #, fuzzy
 msgid ""
 "The group ID which will own the device. If set to NULL everyone will be able "
@@ -10735,7 +10630,7 @@ msgstr ""
 "ID skupine, ki bo lastnik naprave. Če je nastavljena na NULL, bodo lahko "
 "napravo uporabljali vsi."
 
-#: src/libnmc-setting/settings-docs.h.in:381
+#: src/libnmc-setting/settings-docs.h.in:385
 #, fuzzy
 msgid ""
 "The operating mode of the virtual device. Allowed values are \"tun\" (1) to "
@@ -10746,7 +10641,7 @@ msgstr ""
 "ustvarjanje naprave plasti 3 in »tap« (2) za ustvarjanje plasti 2, podobne "
 "Ethernetu."
 
-#: src/libnmc-setting/settings-docs.h.in:382
+#: src/libnmc-setting/settings-docs.h.in:386
 #, fuzzy
 msgid ""
 "If the property is set to TRUE, the interface will support multiple file "
@@ -10757,7 +10652,7 @@ msgstr ""
 "datotek (čakalnih vrst) za vzporedno pošiljanje ali prejemanje paketov. V "
 "nasprotnem primeru bo vmesnik podpiral samo eno čakalno vrsto."
 
-#: src/libnmc-setting/settings-docs.h.in:383
+#: src/libnmc-setting/settings-docs.h.in:387
 #, fuzzy
 msgid ""
 "The user ID which will own the device. If set to NULL everyone will be able "
@@ -10766,7 +10661,7 @@ msgstr ""
 "ID uporabnika, ki bo lastnik naprave. Če je nastavljena na NULL, bodo lahko "
 "napravo uporabljali vsi."
 
-#: src/libnmc-setting/settings-docs.h.in:384
+#: src/libnmc-setting/settings-docs.h.in:388
 #, fuzzy
 msgid ""
 "If TRUE the interface will prepend a 4 byte header describing the physical "
@@ -10775,7 +10670,7 @@ msgstr ""
 "Če je TRUE, bo vmesnik paketom dodal 4-bajtno glavo, ki opisuje fizični "
 "vmesnik."
 
-#: src/libnmc-setting/settings-docs.h.in:385
+#: src/libnmc-setting/settings-docs.h.in:389
 #, fuzzy
 msgid ""
 "If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network "
@@ -10783,7 +10678,7 @@ msgid ""
 msgstr ""
 "Če je TRUE, bo IFF_VNET_HDR paketov tunela vseboval glavo omrežja virtio."
 
-#: src/libnmc-setting/settings-docs.h.in:386
+#: src/libnmc-setting/settings-docs.h.in:390
 #, fuzzy
 msgid ""
 "A dictionary of key/value pairs with user data. This data is ignored by "
@@ -10796,7 +10691,7 @@ msgstr ""
 "podpirajo samo strogo obliko ascii, vendar so vrednosti lahko poljubni nizi "
 "UTF8 do določene dolžine."
 
-#: src/libnmc-setting/settings-docs.h.in:387
+#: src/libnmc-setting/settings-docs.h.in:391
 #, fuzzy
 msgid ""
 "For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p "
@@ -10807,7 +10702,7 @@ msgstr ""
 "prednostne naloge 802.1p.  Preslikava je podana v obliki \"from:to\", kjer "
 "sta \"from\" in \"to\" cela števila brez znaka, tj. \"7:3\"."
 
-#: src/libnmc-setting/settings-docs.h.in:388
+#: src/libnmc-setting/settings-docs.h.in:392
 #, fuzzy
 msgid ""
 "One or more flags which control the behavior and features of the VLAN "
@@ -10828,7 +10723,7 @@ msgstr ""
 "združljivost za nazaj, je privzeta vrednost v API-ju D-Bus še vedno 0, "
 "manjkajoča lastnost v D-Bus pa se še vedno šteje za 0."
 
-#: src/libnmc-setting/settings-docs.h.in:389
+#: src/libnmc-setting/settings-docs.h.in:393
 #, fuzzy
 msgid ""
 "The VLAN identifier that the interface created by this connection should be "
@@ -10837,7 +10732,7 @@ msgstr ""
 "Identifikator VLAN, ki ga je treba dodeliti vmesniku, ustvarjenemu s to "
 "povezavo. Veljaven razpon je od 0 do 4094, brez rezerviranega ID-ja 4095."
 
-#: src/libnmc-setting/settings-docs.h.in:390
+#: src/libnmc-setting/settings-docs.h.in:394
 #, fuzzy
 msgid ""
 "For incoming packets, a list of mappings from 802.1p priorities to Linux SKB "
@@ -10848,7 +10743,7 @@ msgstr ""
 "Linux SKB.  Preslikava je podana v obliki \"from:to\", kjer sta \"from\" in "
 "\"to\" cela števila brez znaka, tj. \"7:3\"."
 
-#: src/libnmc-setting/settings-docs.h.in:391
+#: src/libnmc-setting/settings-docs.h.in:395
 #, fuzzy
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID from "
@@ -10861,7 +10756,7 @@ msgstr ""
 "mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-"
 "address«."
 
-#: src/libnmc-setting/settings-docs.h.in:392
+#: src/libnmc-setting/settings-docs.h.in:396
 #, fuzzy
 msgid ""
 "Specifies the VLAN protocol to use for encapsulation. Supported values are: "
@@ -10870,7 +10765,7 @@ msgstr ""
 "Določa protokol VLAN, ki se uporablja za enkapsulacijo. Podprte vrednosti "
 "so: »802.1Q«, »802.1ad«. Če ni navedeno, je privzeta vrednost »802.1Q«."
 
-#: src/libnmc-setting/settings-docs.h.in:393
+#: src/libnmc-setting/settings-docs.h.in:397
 #, fuzzy
 msgid ""
 "Dictionary of key/value pairs of VPN plugin specific data.  Both keys and "
@@ -10879,7 +10774,7 @@ msgstr ""
 "Slovar parov ključ / vrednost podatkov, specifičnih za vtičnik VPN.  Ključi "
 "in vrednosti morajo biti nizi."
 
-#: src/libnmc-setting/settings-docs.h.in:394
+#: src/libnmc-setting/settings-docs.h.in:398
 #, fuzzy
 msgid ""
 "If the VPN service supports persistence, and this property is TRUE, the VPN "
@@ -10890,7 +10785,7 @@ msgstr ""
 "ostati povezan med spremembami povezav in izpadi, dokler se povezava izrecno "
 "ne prekine."
 
-#: src/libnmc-setting/settings-docs.h.in:395
+#: src/libnmc-setting/settings-docs.h.in:399
 #, fuzzy
 msgid ""
 "Dictionary of key/value pairs of VPN plugin specific secrets like passwords "
@@ -10899,7 +10794,7 @@ msgstr ""
 "Slovar parov ključ/vrednost posebnih skrivnosti vtičnikov VPN, kot so gesla "
 "ali zasebni ključi.  Ključi in vrednosti morajo biti nizi."
 
-#: src/libnmc-setting/settings-docs.h.in:396
+#: src/libnmc-setting/settings-docs.h.in:400
 #, fuzzy
 msgid ""
 "D-Bus service name of the VPN plugin that this setting uses to connect to "
@@ -10909,7 +10804,7 @@ msgstr ""
 "vzpostavljanje povezave z omrežjem.  tj. org.freedesktop.NetworkManager.vpnc "
 "za vtičnik vpnc."
 
-#: src/libnmc-setting/settings-docs.h.in:397
+#: src/libnmc-setting/settings-docs.h.in:401
 #, fuzzy
 msgid ""
 "Timeout for the VPN service to establish the connection. Some services may "
@@ -10923,7 +10818,7 @@ msgstr ""
 "konfiguracijski datoteki). Vrednosti, večje od nič, pomenijo časovno "
 "omejitev v sekundah."
 
-#: src/libnmc-setting/settings-docs.h.in:398
+#: src/libnmc-setting/settings-docs.h.in:402
 #, fuzzy
 msgid ""
 "If the VPN connection requires a user name for authentication, that name "
@@ -10939,19 +10834,16 @@ msgstr ""
 "prazno.  Če je ta lastnost prazna, bo NetworkManager samodejno vnesel "
 "uporabniško ime uporabnika, ki je zahteval povezavo VPN."
 
-#: src/libnmc-setting/settings-docs.h.in:399
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:403
 msgid "The routing table for this VRF."
 msgstr "Usmerjevalna tabela za ta VRF."
 
-#: src/libnmc-setting/settings-docs.h.in:400
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:404
 msgid "Specifies the lifetime in seconds of FDB entries learnt by the kernel."
 msgstr ""
-"Določa življenjsko dobo vnosov FDB v sekundah, ki jih je naučilo jedro."
+"Določa življenjsko dobo v sekundah vnosov FDB, ki se jih je naučilo jedro."
 
-#: src/libnmc-setting/settings-docs.h.in:401
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:405
 msgid ""
 "Specifies the UDP destination port to communicate to the remote VXLAN tunnel "
 "endpoint."
@@ -10959,25 +10851,24 @@ msgstr ""
 "Določa ciljna vrata UDP za komunikacijo z oddaljeno končno točko tunela "
 "VXLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:402
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:406
 msgid ""
 "Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use."
 msgstr ""
 "Določa identifikator omrežja VXLAN (ali identifikator segmenta VXLAN), ki ga "
 "želite uporabiti."
 
-#: src/libnmc-setting/settings-docs.h.in:403
+#: src/libnmc-setting/settings-docs.h.in:407
 #, fuzzy
 msgid "Specifies whether netlink LL ADDR miss notifications are generated."
 msgstr "Določa, ali se ustvarijo zgrešena obvestila netlink LL ADDR."
 
-#: src/libnmc-setting/settings-docs.h.in:404
+#: src/libnmc-setting/settings-docs.h.in:408
 #, fuzzy
 msgid "Specifies whether netlink IP ADDR miss notifications are generated."
 msgstr "Določa, ali se ustvarijo zgrešena obvestila netlink IP ADDR."
 
-#: src/libnmc-setting/settings-docs.h.in:405
+#: src/libnmc-setting/settings-docs.h.in:409
 #, fuzzy
 msgid ""
 "Specifies whether unknown source link layer addresses and IP addresses are "
@@ -10986,7 +10877,7 @@ msgstr ""
 "Določa, ali se v zbirko podatkov za posredovanje naprav VXLAN vnesejo "
 "neznani naslovi plasti izvorne povezave in naslovi IP."
 
-#: src/libnmc-setting/settings-docs.h.in:406
+#: src/libnmc-setting/settings-docs.h.in:410
 #, fuzzy
 msgid ""
 "Specifies the maximum number of FDB entries. A value of zero means that the "
@@ -10995,25 +10886,22 @@ msgstr ""
 "Določa največje število vnosov FDB. Vrednost nič pomeni, da bo jedro "
 "shranilo neomejeno število vnosov."
 
-#: src/libnmc-setting/settings-docs.h.in:407
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:411
 msgid "If given, specifies the source IP address to use in outgoing packets."
 msgstr ""
 "Če je navedeno, določa izvorni naslov IP, ki se uporablja v odhodnih paketih."
 
-#: src/libnmc-setting/settings-docs.h.in:408
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:412
 msgid ""
 "If given, specifies the parent interface name or parent connection UUID."
 msgstr ""
 "Če je navedeno, določa ime nadrejenega vmesnika ali UUID nadrejene povezave."
 
-#: src/libnmc-setting/settings-docs.h.in:409
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:413
 msgid "Specifies whether ARP proxy is turned on."
-msgstr "Določa, ali je strežnik proxy ARP vklopljen."
+msgstr "Določa, ali je posredovalni strežnik ARP vklopljen."
 
-#: src/libnmc-setting/settings-docs.h.in:410
+#: src/libnmc-setting/settings-docs.h.in:414
 #, fuzzy
 msgid ""
 "Specifies the unicast destination IP address to use in outgoing packets when "
@@ -11025,12 +10913,12 @@ msgstr ""
 "posredovanje naprav VXLAN ali naslov IP za večoddajanje, ki se mu želite "
 "pridružiti."
 
-#: src/libnmc-setting/settings-docs.h.in:411
+#: src/libnmc-setting/settings-docs.h.in:415
 #, fuzzy
 msgid "Specifies whether route short circuit is turned on."
-msgstr "Določa, ali je vklopljen kratek stik na poti."
+msgstr "Določa, ali je kratek stik poti vklopljen."
 
-#: src/libnmc-setting/settings-docs.h.in:412
+#: src/libnmc-setting/settings-docs.h.in:416
 #, fuzzy
 msgid ""
 "Specifies the maximum UDP source port to communicate to the remote VXLAN "
@@ -11039,7 +10927,7 @@ msgstr ""
 "Določa največja izvorna vrata UDP za komunikacijo z oddaljeno končno točko "
 "tunela VXLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:413
+#: src/libnmc-setting/settings-docs.h.in:417
 #, fuzzy
 msgid ""
 "Specifies the minimum UDP source port to communicate to the remote VXLAN "
@@ -11048,16 +10936,16 @@ msgstr ""
 "Določa najmanjša izvorna vrata UDP za komunikacijo z oddaljeno končno točko "
 "tunela VXLAN."
 
-#: src/libnmc-setting/settings-docs.h.in:414
+#: src/libnmc-setting/settings-docs.h.in:418
 msgid "Specifies the TOS value to use in outgoing packets."
 msgstr "Določa vrednost TOS, ki se uporablja v odhodnih paketih."
 
-#: src/libnmc-setting/settings-docs.h.in:415
+#: src/libnmc-setting/settings-docs.h.in:419
 #, fuzzy
 msgid "Specifies the time-to-live value to use in outgoing packets."
 msgstr "Določa vrednost časa življenja, ki se uporabi v odhodnih paketih."
 
-#: src/libnmc-setting/settings-docs.h.in:416
+#: src/libnmc-setting/settings-docs.h.in:420
 #, fuzzy
 msgid ""
 "The P2P device that should be connected to. Currently, this is the only way "
@@ -11066,7 +10954,7 @@ msgstr ""
 "Naprava P2P, s katero je treba priključiti. Trenutno je to edini način za "
 "ustvarjanje skupine ali pridružitev skupini."
 
-#: src/libnmc-setting/settings-docs.h.in:417
+#: src/libnmc-setting/settings-docs.h.in:421
 #, fuzzy
 msgid ""
 "The Wi-Fi Display (WFD) Information Elements (IEs) to set. Wi-Fi Display "
@@ -11081,7 +10969,7 @@ msgstr ""
 "vzpostavitev povezave. Ta nastavitev je uporabna le pri implementaciji "
 "odjemalca Wi-Fi Display."
 
-#: src/libnmc-setting/settings-docs.h.in:418
+#: src/libnmc-setting/settings-docs.h.in:422
 #, fuzzy
 msgid ""
 "Flags indicating which mode of WPS is to be used. There's little point in "
@@ -11092,7 +10980,7 @@ msgstr ""
 "nastavitve ni smiselno spreminjati, saj bo NetworkManager samodejno določil "
 "najboljši način za uporabo."
 
-#: src/libnmc-setting/settings-docs.h.in:419
+#: src/libnmc-setting/settings-docs.h.in:423
 #, fuzzy
 msgid ""
 "If specified, this connection will only apply to the WiMAX device whose MAC "
@@ -11103,7 +10991,7 @@ msgstr ""
 "MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave (znano kot lažno "
 "predstavljanje naslovov MAC)."
 
-#: src/libnmc-setting/settings-docs.h.in:420
+#: src/libnmc-setting/settings-docs.h.in:424
 #, fuzzy
 msgid ""
 "Network Service Provider (NSP) name of the WiMAX network this connection "
@@ -11112,7 +11000,7 @@ msgstr ""
 "Ime ponudnika omrežnih storitev (NSP) omrežja WiMAX, ki ga mora uporabljati "
 "ta povezava."
 
-#: src/libnmc-setting/settings-docs.h.in:421
+#: src/libnmc-setting/settings-docs.h.in:425
 #, fuzzy
 msgid ""
 "When TRUE, setup the interface to accept packets for all MAC addresses. This "
@@ -11124,7 +11012,7 @@ msgstr ""
 "tem omogočite zastavico vmesnika jedra IFF_PROMISC. Če je FALSE, vmesnik "
 "sprejme samo pakete s ciljnim naslovom vmesnika mac ali oddajanjem."
 
-#: src/libnmc-setting/settings-docs.h.in:422
+#: src/libnmc-setting/settings-docs.h.in:426
 #, fuzzy
 msgid ""
 "When TRUE, enforce auto-negotiation of speed and duplex mode. If \"speed\" "
@@ -11143,7 +11031,7 @@ msgstr ""
 "je treba nastaviti FALSE, lastnosti »speed« in »duplex« ali pa bo "
 "konfiguracija povezave preskočena."
 
-#: src/libnmc-setting/settings-docs.h.in:423
+#: src/libnmc-setting/settings-docs.h.in:427
 #, fuzzy
 msgid ""
 "If specified, request that the device use this MAC address instead. This is "
@@ -11174,7 +11062,7 @@ msgstr ""
 "morda uporabljajo drugačno privzeto vrednost). Na D-Bus je to polje izraženo "
 "kot »dodeljeni-mac-naslov« ali zastareli »klonirani-mac-naslov«."
 
-#: src/libnmc-setting/settings-docs.h.in:424
+#: src/libnmc-setting/settings-docs.h.in:428
 #, fuzzy
 msgid ""
 "When a value is set, either \"half\" or \"full\", configures the device to "
@@ -11201,28 +11089,28 @@ msgstr ""
 "Nastavitev mora biti skupaj z lastnostjo »speed«, če je določena. Preden "
 "določite dvostranski način, se prepričajte, da ga vaša naprava podpira."
 
-#: src/libnmc-setting/settings-docs.h.in:425
-#: src/libnmc-setting/settings-docs.h.in:451
+#: src/libnmc-setting/settings-docs.h.in:429
+#: src/libnmc-setting/settings-docs.h.in:456
 #, fuzzy
 msgid ""
 "With \"cloned-mac-address\" setting \"random\" or \"stable\", by default all "
 "bits of the MAC address are scrambled and a locally-administered, unicast "
-"MAC address is created. This property allows to specify that certain bits "
-"are fixed. Note that the least significant bit of the first MAC address will "
-"always be unset to create a unicast MAC address. If the property is NULL, it "
-"is eligible to be overwritten by a default connection setting. If the value "
-"is still NULL or an empty string, the default is to create a locally-"
-"administered, unicast MAC address. If the value contains one MAC address, "
-"this address is used as mask. The set bits of the mask are to be filled with "
-"the current MAC address of the device, while the unset bits are subject to "
-"randomization. Setting \"FE:FF:FF:00:00:00\" means to preserve the OUI of "
-"the current MAC address and only randomize the lower 3 bytes using the "
-"\"random\" or \"stable\" algorithm. If the value contains one additional MAC "
-"address after the mask, this address is used instead of the current MAC "
-"address to fill the bits that shall not be randomized. For example, a value "
-"of \"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" will set the OUI of the MAC "
-"address to 68:F7:28, while the lower bits are randomized. A value of "
-"\"02:00:00:00:00:00 00:00:00:00:00:00\" will create a fully scrambled "
+"MAC address is created. This property allows one to specify that certain "
+"bits are fixed. Note that the least significant bit of the first MAC address "
+"will always be unset to create a unicast MAC address. If the property is "
+"NULL, it is eligible to be overwritten by a default connection setting. If "
+"the value is still NULL or an empty string, the default is to create a "
+"locally-administered, unicast MAC address. If the value contains one MAC "
+"address, this address is used as mask. The set bits of the mask are to be "
+"filled with the current MAC address of the device, while the unset bits are "
+"subject to randomization. Setting \"FE:FF:FF:00:00:00\" means to preserve "
+"the OUI of the current MAC address and only randomize the lower 3 bytes "
+"using the \"random\" or \"stable\" algorithm. If the value contains one "
+"additional MAC address after the mask, this address is used instead of the "
+"current MAC address to fill the bits that shall not be randomized. For "
+"example, a value of \"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" will set the OUI "
+"of the MAC address to 68:F7:28, while the lower bits are randomized. A value "
+"of \"02:00:00:00:00:00 00:00:00:00:00:00\" will create a fully scrambled "
 "globally-administered, burned-in MAC address. If the value contains more "
 "than one additional MAC addresses, one of them is chosen randomly. For "
 "example, \"02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00\" will "
@@ -11252,7 +11140,7 @@ msgstr ""
 "02:00:00:00:00:00« bo ustvaril popolnoma kodiran naslov MAC, ki se naključno "
 "upravlja lokalno ali globalno."
 
-#: src/libnmc-setting/settings-docs.h.in:426
+#: src/libnmc-setting/settings-docs.h.in:430
 #, fuzzy
 msgid ""
 "If specified, this connection will only apply to the Ethernet device whose "
@@ -11263,8 +11151,8 @@ msgstr ""
 "trajni naslov MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave "
 "(npr. ponarejanje MAC)."
 
-#: src/libnmc-setting/settings-docs.h.in:427
-#: src/libnmc-setting/settings-docs.h.in:428
+#: src/libnmc-setting/settings-docs.h.in:431
+#: src/libnmc-setting/settings-docs.h.in:432
 #, fuzzy
 msgid ""
 "If specified, this connection will never apply to the Ethernet device whose "
@@ -11276,9 +11164,9 @@ msgstr ""
 "standardnem zapisu s šestnajstkimi številkami in dvopičji "
 "(00:11:22:33:44:55)."
 
-#: src/libnmc-setting/settings-docs.h.in:429
-#: src/libnmc-setting/settings-docs.h.in:458
-#: src/libnmc-setting/settings-docs.h.in:500
+#: src/libnmc-setting/settings-docs.h.in:433
+#: src/libnmc-setting/settings-docs.h.in:463
+#: src/libnmc-setting/settings-docs.h.in:505
 #, fuzzy
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
@@ -11287,7 +11175,7 @@ msgstr ""
 "Če ni nič, prenašajte samo pakete določene velikosti ali manjše, pri čemer "
 "razbijte večje pakete v več ethernetnih okvirjev."
 
-#: src/libnmc-setting/settings-docs.h.in:430
+#: src/libnmc-setting/settings-docs.h.in:434
 #, fuzzy
 msgid ""
 "Specific port type to use if the device supports multiple attachment "
@@ -11300,7 +11188,7 @@ msgstr ""
 "priključne enote), \"bnc\" (Thin Ethernet) ali \"mii\" (vmesnik, neodvisen "
 "od medija). Če naprava podpira samo eno vrsto vrat, se ta nastavitev prezre."
 
-#: src/libnmc-setting/settings-docs.h.in:431
+#: src/libnmc-setting/settings-docs.h.in:435
 #, fuzzy
 msgid ""
 "s390 network device type; one of \"qeth\", \"lcs\", or \"ctc\", representing "
@@ -11310,7 +11198,7 @@ msgstr ""
 "predstavlja različne vrste navideznih omrežnih naprav, ki so na voljo v "
 "sistemih S390."
 
-#: src/libnmc-setting/settings-docs.h.in:432
+#: src/libnmc-setting/settings-docs.h.in:436
 #, fuzzy
 msgid ""
 "Dictionary of key/value pairs of s390-specific device options.  Both keys "
@@ -11327,7 +11215,7 @@ msgstr ""
 "počne ničesar s temi informacijami. Vendar pa s390utils pošlje pravilo udev, "
 "ki razčleni te informacije in jih uporabi za vmesnik."
 
-#: src/libnmc-setting/settings-docs.h.in:433
+#: src/libnmc-setting/settings-docs.h.in:437
 #, fuzzy
 msgid ""
 "Identifies specific subchannels that this network device uses for "
@@ -11344,7 +11232,7 @@ msgstr ""
 "mora vsebovati natanko 3 nize, vsak niz pa je lahko sestavljen samo iz "
 "šestnajstiških znakov in znaka pike (.)."
 
-#: src/libnmc-setting/settings-docs.h.in:434
+#: src/libnmc-setting/settings-docs.h.in:438
 #, fuzzy
 msgid ""
 "When a value greater than 0 is set, configures the device to use the "
@@ -11371,7 +11259,7 @@ msgstr ""
 "ga je treba skupaj z lastnostjo »duplex«, če ni nič. Preden določite "
 "vrednost hitrosti, se prepričajte, da jo vaša naprava podpira."
 
-#: src/libnmc-setting/settings-docs.h.in:435
+#: src/libnmc-setting/settings-docs.h.in:439
 #, fuzzy
 msgid ""
 "The NMSettingWiredWakeOnLan options to enable. Not all devices support all "
@@ -11387,7 +11275,7 @@ msgstr ""
 "nastavitev) in »ignore« (0x8000) (za onemogočanje upravljanja funkcije Wake-"
 "on-LAN v programu NetworkManager)."
 
-#: src/libnmc-setting/settings-docs.h.in:436
+#: src/libnmc-setting/settings-docs.h.in:440
 #, fuzzy
 msgid ""
 "If specified, the password used with magic-packet-based Wake-on-LAN, "
@@ -11398,7 +11286,7 @@ msgstr ""
 "čarobnih paketih, predstavljeno kot ethernetni naslov MAC.  Če je NULL, "
 "geslo ne bo potrebno."
 
-#: src/libnmc-setting/settings-docs.h.in:437
+#: src/libnmc-setting/settings-docs.h.in:441
 #, fuzzy
 msgid ""
 "The use of fwmark is optional and is by default off. Setting it to 0 "
@@ -11411,7 +11299,7 @@ msgstr ""
 "pakete. Upoštevajte, da »ip4-auto-default-route« ali »ip6-auto-default-"
 "route« omogočeno, pomeni, da samodejno izberete fwmark."
 
-#: src/libnmc-setting/settings-docs.h.in:438
+#: src/libnmc-setting/settings-docs.h.in:442
 #, fuzzy
 msgid ""
 "Whether to enable special handling of the IPv4 default route. If enabled, "
@@ -11444,12 +11332,11 @@ msgstr ""
 "tega običajno ni treba izrecno omogočiti. Lahko pa ga onemogočite, če želite "
 "konfigurirati lastno usmerjanje in pravila."
 
-#: src/libnmc-setting/settings-docs.h.in:439
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:443
 msgid "Like ip4-auto-default-route, but for the IPv6 default route."
 msgstr "Kot ip4-auto-default-route, vendar za privzeto pot IPv6."
 
-#: src/libnmc-setting/settings-docs.h.in:440
+#: src/libnmc-setting/settings-docs.h.in:444
 #, fuzzy
 msgid ""
 "The listen-port. If listen-port is not specified, the port will be chosen "
@@ -11458,7 +11345,7 @@ msgstr ""
 "Vrata za poslušanje. Če listen-port ni določen, bodo vrata izbrana "
 "naključno, ko se vmesnik prikaže."
 
-#: src/libnmc-setting/settings-docs.h.in:441
+#: src/libnmc-setting/settings-docs.h.in:445
 #, fuzzy
 msgid ""
 "If non-zero, only transmit packets of the specified size or smaller, "
@@ -11471,7 +11358,7 @@ msgstr ""
 "Upoštevajte, da v nasprotju z nastavitvijo MTU wg-quick to ne upošteva "
 "trenutnih poti v času aktivacije."
 
-#: src/libnmc-setting/settings-docs.h.in:442
+#: src/libnmc-setting/settings-docs.h.in:446
 #, fuzzy
 msgid ""
 "Whether to automatically add routes for the AllowedIPs ranges of the peers. "
@@ -11494,15 +11381,27 @@ msgstr ""
 "default ali ipv6.never-default profila, pot enakovrednika za tega "
 "enakovrednika ne bo dodana samodejno."
 
-#: src/libnmc-setting/settings-docs.h.in:443
+#: src/libnmc-setting/settings-docs.h.in:447
+msgid ""
+"A comma-separated list of WireGuard peers. Each peer has the following "
+"syntax: PUBLIC_KEY [ATTRIBUTE=VALUE [ATTRIBUTE=VALUE]...] The supported "
+"attributes are: endpoint, allowed-ips, persistent-keepalive,  preshared-key, "
+"preshared-key-flags."
+msgstr ""
+"Seznam vrstnikov WireGuarda, ločen z vejico. Vsak vrstnik ima naslednjo "
+"skladnjo: JAVNI_KLJUČ [ATRIBUT=VREDNOST [ATRIBUT=VREDNOST]...] Podprti "
+"atributi so: endpoint, allowed-ips, persistent-keepalive, preshared-key, "
+"preshared-key-flags."
+
+#: src/libnmc-setting/settings-docs.h.in:448
 msgid "The 256 bit private-key in base64 encoding."
 msgstr "256-bitni zasebni ključ, v kodiranju z base64"
 
-#: src/libnmc-setting/settings-docs.h.in:444
+#: src/libnmc-setting/settings-docs.h.in:449
 msgid "Flags indicating how to handle the \"private-key\" property."
 msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »private-key«."
 
-#: src/libnmc-setting/settings-docs.h.in:445
+#: src/libnmc-setting/settings-docs.h.in:450
 #, fuzzy
 msgid ""
 "Configures AP isolation, which prevents communication between wireless "
@@ -11527,7 +11426,7 @@ msgstr ""
 "je nastavljena na »privzeto« (-1), se uporabi globalna privzeta vrednost; Če "
 "globalno privzeto stanje ni določeno, se domneva, da je »napačno« (0)."
 
-#: src/libnmc-setting/settings-docs.h.in:446
+#: src/libnmc-setting/settings-docs.h.in:451
 #, fuzzy
 msgid ""
 "802.11 frequency band of the network.  One of \"a\" for 5GHz 802.11a or \"bg"
@@ -11544,7 +11443,7 @@ msgstr ""
 "od določenih zmogljivosti gonilnika in morda ne bo delovala z vsemi "
 "gonilniki."
 
-#: src/libnmc-setting/settings-docs.h.in:447
+#: src/libnmc-setting/settings-docs.h.in:452
 #, fuzzy
 msgid ""
 "If specified, directs the device to only associate with the given access "
@@ -11562,7 +11461,7 @@ msgstr ""
 "onemogočili skeniranje v ozadju. To je lahko koristno, če obstaja samo ena "
 "dostopna točka za SSID."
 
-#: src/libnmc-setting/settings-docs.h.in:448
+#: src/libnmc-setting/settings-docs.h.in:453
 #, fuzzy
 msgid ""
 "Wireless channel to use for the Wi-Fi connection.  The device will only join "
@@ -11575,7 +11474,7 @@ msgstr ""
 "kanalov med pasovi prekrivajo, ta lastnost zahteva tudi nastavitev lastnosti "
 "»pas«."
 
-#: src/libnmc-setting/settings-docs.h.in:449
+#: src/libnmc-setting/settings-docs.h.in:454
 #, fuzzy
 msgid ""
 "Specifies width of the wireless channel in Access Point (AP) mode. When set "
@@ -11594,7 +11493,7 @@ msgstr ""
 "vrednost, ki se razlikuje od »samodejno« (0) samo, če je vmesnik "
 "konfiguriran v načinu AP."
 
-#: src/libnmc-setting/settings-docs.h.in:450
+#: src/libnmc-setting/settings-docs.h.in:455
 #, fuzzy
 msgid ""
 "If specified, request that the device use this MAC address instead. This is "
@@ -11627,7 +11526,7 @@ msgstr ""
 "morda uporabljajo drugačno privzeto vrednost). Na D-Bus je to polje izraženo "
 "kot »dodeljeni-mac-naslov« ali zastareli »klonirani-mac-naslov«."
 
-#: src/libnmc-setting/settings-docs.h.in:452
+#: src/libnmc-setting/settings-docs.h.in:457
 #, fuzzy
 msgid ""
 "If TRUE, indicates that the network is a non-broadcasting network that hides "
@@ -11650,7 +11549,7 @@ msgstr ""
 "zasebnosti za vas (v infrastrukturnem načinu) ali odjemalske postaje (v "
 "načinu AP), saj so eksplicitni pregledi sond jasno prepoznavni v zraku."
 
-#: src/libnmc-setting/settings-docs.h.in:453
+#: src/libnmc-setting/settings-docs.h.in:458
 #, fuzzy
 msgid ""
 "If specified, this connection will only apply to the Wi-Fi device whose "
@@ -11661,8 +11560,8 @@ msgstr ""
 "naslov MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave (npr. "
 "ponarejanje MAC)."
 
-#: src/libnmc-setting/settings-docs.h.in:454
-#: src/libnmc-setting/settings-docs.h.in:455
+#: src/libnmc-setting/settings-docs.h.in:459
+#: src/libnmc-setting/settings-docs.h.in:460
 #, fuzzy
 msgid ""
 "A list of permanent MAC addresses of Wi-Fi devices to which this connection "
@@ -11673,7 +11572,7 @@ msgstr ""
 "smela veljati.  Vsak naslov MAC mora biti naveden v standardnem zapisu "
 "šestnajstih števk in dvopičja (npr. »00:11:22:33:44:55«)."
 
-#: src/libnmc-setting/settings-docs.h.in:456
+#: src/libnmc-setting/settings-docs.h.in:461
 #, fuzzy
 msgid ""
 "One of \"default\" (0) (never randomize unless the user has set a global "
@@ -11686,7 +11585,7 @@ msgstr ""
 "naključno naključjenje), \"nikoli\" (1) (nikoli ne naključno naključno "
 "namesti naslova MAC) ali \"vedno\" (2) (vedno naključno izberite naslov MAC)."
 
-#: src/libnmc-setting/settings-docs.h.in:457
+#: src/libnmc-setting/settings-docs.h.in:462
 #, fuzzy
 msgid ""
 "Wi-Fi network mode; one of \"infrastructure\", \"mesh\", \"adhoc\" or \"ap"
@@ -11695,7 +11594,7 @@ msgstr ""
 "Način omrežja Wi-Fi; eden od \"infrastrukture\", \"mreže\", \"adhoc\" ali "
 "\"ap\".  Če je prazno, se predpostavlja infrastruktura."
 
-#: src/libnmc-setting/settings-docs.h.in:459
+#: src/libnmc-setting/settings-docs.h.in:464
 #, fuzzy
 msgid ""
 "One of \"disable\" (2) (disable Wi-Fi power saving), \"enable\" (3) (enable "
@@ -11708,13 +11607,12 @@ msgstr ""
 "dotikajte se trenutno konfigurirne nastavitve) ali »privzeto« (0) (uporabite "
 "globalno konfigurirano vrednost). Vse druge vrednosti so pridržane."
 
-#: src/libnmc-setting/settings-docs.h.in:460
-#: src/libnmc-setting/settings-docs.h.in:463
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:465
+#: src/libnmc-setting/settings-docs.h.in:468
 msgid "This property is not implemented and has no effect."
-msgstr "Ta lastnost se ne izvaja in nima učinka."
+msgstr "Ta lastnost ni implementirana in nima učinka."
 
-#: src/libnmc-setting/settings-docs.h.in:461
+#: src/libnmc-setting/settings-docs.h.in:466
 #, fuzzy
 msgid ""
 "A list of BSSIDs (each BSSID formatted as a MAC address like "
@@ -11735,12 +11633,11 @@ msgstr ""
 "vidne BSSID-je in jim interno sledi v datoteki »/var/lib/NetworkManager/seen-"
 "bssids«."
 
-#: src/libnmc-setting/settings-docs.h.in:462
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:467
 msgid "SSID of the Wi-Fi network. Must be specified."
-msgstr "SSID omrežja Wi-Fi. Treba je določiti."
+msgstr "SSID omrežja Wi-Fi. Mora biti naveden."
 
-#: src/libnmc-setting/settings-docs.h.in:464
+#: src/libnmc-setting/settings-docs.h.in:469
 #, fuzzy
 msgid ""
 "The NMSettingWirelessWakeOnWLan options to enable. Not all devices support "
@@ -11759,7 +11656,7 @@ msgstr ""
 "nastavitev) in »ignore« (0x8000) (za onemogočanje upravljanja Wake-on-LAN v "
 "NetworkManagerju)."
 
-#: src/libnmc-setting/settings-docs.h.in:465
+#: src/libnmc-setting/settings-docs.h.in:470
 #, fuzzy
 msgid ""
 "When WEP is used (ie, key-mgmt = \"none\" or \"ieee8021x\") indicate the "
@@ -11775,7 +11672,7 @@ msgstr ""
 "\" in auth-alg = \"leap\") je treba določiti lastnosti \"leap-username\" in "
 "\"leap-password\"."
 
-#: src/libnmc-setting/settings-docs.h.in:466
+#: src/libnmc-setting/settings-docs.h.in:471
 #, fuzzy
 msgid ""
 "Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the "
@@ -11793,7 +11690,7 @@ msgstr ""
 "nastavljena nobena globalna privzeta nastavitev, bo sistem FILS izbirno "
 "omogočen."
 
-#: src/libnmc-setting/settings-docs.h.in:467
+#: src/libnmc-setting/settings-docs.h.in:472
 #, fuzzy
 msgid ""
 "A list of group/broadcast encryption algorithms which prevents connections "
@@ -11806,7 +11703,7 @@ msgstr ""
 "največjo združljivost pustite to lastnost prazno.  Vsak element seznama je "
 "lahko eden od »wep40«, »wep104«, »tkip« ali »ccmp«."
 
-#: src/libnmc-setting/settings-docs.h.in:468
+#: src/libnmc-setting/settings-docs.h.in:473
 #, fuzzy
 msgid ""
 "Key management used for the connection. One of \"none\" (WEP or no password "
@@ -11823,7 +11720,7 @@ msgstr ""
 "WPA3 enterprise). Ta lastnost mora biti nastavljena za vsako povezavo Wi-Fi, "
 "ki uporablja varnost."
 
-#: src/libnmc-setting/settings-docs.h.in:469
+#: src/libnmc-setting/settings-docs.h.in:474
 #, fuzzy
 msgid ""
 "The login password for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" "
@@ -11832,13 +11729,13 @@ msgstr ""
 "Geslo za prijavo za podedovane povezave LEAP (tj. key-mgmt = »ieee8021x« in "
 "auth-alg = »leap«)."
 
-#: src/libnmc-setting/settings-docs.h.in:470
+#: src/libnmc-setting/settings-docs.h.in:475
 #, fuzzy
 msgid "Flags indicating how to handle the \"leap-password\" property."
 msgstr ""
 "Zastavice, ki označujejo, kako ravnati z lastnostjo »preskočiti geslo«."
 
-#: src/libnmc-setting/settings-docs.h.in:471
+#: src/libnmc-setting/settings-docs.h.in:476
 #, fuzzy
 msgid ""
 "The login username for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" "
@@ -11847,7 +11744,7 @@ msgstr ""
 "Uporabniško ime za prijavo za podedovane povezave LEAP (tj. key-mgmt = "
 "\"ieee8021x\" in auth-alg = \"leap\")."
 
-#: src/libnmc-setting/settings-docs.h.in:472
+#: src/libnmc-setting/settings-docs.h.in:477
 #, fuzzy
 msgid ""
 "A list of pairwise encryption algorithms which prevents connections to Wi-Fi "
@@ -11860,7 +11757,7 @@ msgstr ""
 "združljivost pustite to lastnost prazno.  Vsak element seznama je lahko eden "
 "od elementov »tkip« ali »ccmp«."
 
-#: src/libnmc-setting/settings-docs.h.in:473
+#: src/libnmc-setting/settings-docs.h.in:478
 #, fuzzy
 msgid ""
 "Indicates whether Protected Management Frames (802.11w) must be enabled for "
@@ -11877,7 +11774,7 @@ msgstr ""
 "ne uspe, če ni podprta).  Če je nastavljena na »privzeto« (0) in ni "
 "nastavljena nobena globalna privzeta nastavitev, bo PMF izbirno omogočen."
 
-#: src/libnmc-setting/settings-docs.h.in:474
+#: src/libnmc-setting/settings-docs.h.in:479
 #, fuzzy
 msgid ""
 "List of strings specifying the allowed WPA protocol versions to use. Each "
@@ -11888,7 +11785,7 @@ msgstr ""
 "uporabiti. Vsak element je lahko en »wpa« (dovoli WPA) ali »rsn« (dovoli "
 "WPA2/RSN).  Če ni navedeno, so dovoljene povezave WPA in RSN."
 
-#: src/libnmc-setting/settings-docs.h.in:475
+#: src/libnmc-setting/settings-docs.h.in:480
 #, fuzzy
 msgid ""
 "Pre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII "
@@ -11902,13 +11799,11 @@ msgstr ""
 "dejanski ključ, ali ključ v obliki 64 šestnajstiških znakov. Omrežja WPA3-"
 "Personal uporabljajo geslo poljubne dolžine za preverjanje pristnosti SAE."
 
-#: src/libnmc-setting/settings-docs.h.in:476
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:481
 msgid "Flags indicating how to handle the \"psk\" property."
 msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »psk«."
 
-#: src/libnmc-setting/settings-docs.h.in:477
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:482
 msgid ""
 "Flags indicating how to handle the \"wep-key0\", \"wep-key1\", \"wep-key2\", "
 "and \"wep-key3\" properties."
@@ -11916,8 +11811,7 @@ msgstr ""
 "Zastavice, ki označujejo, kako ravnati z lastnostmi »wep-key0«, »wep-key1«, "
 "»wep-key2« in »wep-key3«."
 
-#: src/libnmc-setting/settings-docs.h.in:478
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:483
 msgid ""
 "Controls the interpretation of WEP keys.  Allowed values are \"key\" (1), in "
 "which case the key is either a 10- or 26-character hexadecimal string, or a "
@@ -11925,12 +11819,13 @@ msgid ""
 "passphrase is provided as a string and will be hashed using the de-facto MD5 "
 "method to derive the actual WEP key."
 msgstr ""
-"Nadzira razlago ključev WEP.  Dovoljene vrednosti so »ključ« (1), v tem "
+"Nadzira razlago ključev WEP.  Dovoljene vrednosti so »key« (1), v tem "
 "primeru je ključ 10- ali 26-mestni šestnajstiški niz ali 5- ali 13-mestno "
-"geslo ASCII; ali »geslo« (2), v tem primeru je geslo na voljo kot niz in bo "
-"razpršeno z uporabo de facto metode MD5, da se izpelje dejanski ključ WEP."
+"geslo ASCII; ali »passphrase« (2), v tem primeru je geslo na voljo kot niz "
+"in bo razpršeno z uporabo de facto metode MD5, da se izpelje dejanski ključ "
+"WEP."
 
-#: src/libnmc-setting/settings-docs.h.in:479
+#: src/libnmc-setting/settings-docs.h.in:484
 #, fuzzy
 msgid ""
 "Index 0 WEP key.  This is the WEP key used in most networks.  See the \"wep-"
@@ -11939,7 +11834,7 @@ msgstr ""
 "Tipka WEP indeksa 0.  To je ključ WEP, ki se uporablja v večini omrežij.  "
 "Oglejte si lastnost »wep-key-type« za opis interpretacije tega ključa."
 
-#: src/libnmc-setting/settings-docs.h.in:480
+#: src/libnmc-setting/settings-docs.h.in:485
 #, fuzzy
 msgid ""
 "Index 1 WEP key.  This WEP index is not used by most networks.  See the "
@@ -11948,7 +11843,7 @@ msgstr ""
 "Indeks 1 Ključ WEP.  Tega indeksa WEP ne uporablja večina omrežij.  Oglejte "
 "si lastnost »wep-key-type« za opis interpretacije tega ključa."
 
-#: src/libnmc-setting/settings-docs.h.in:481
+#: src/libnmc-setting/settings-docs.h.in:486
 #, fuzzy
 msgid ""
 "Index 2 WEP key.  This WEP index is not used by most networks.  See the "
@@ -11957,7 +11852,7 @@ msgstr ""
 "Indeks 2 Ključ WEP.  Tega indeksa WEP ne uporablja večina omrežij.  Oglejte "
 "si lastnost »wep-key-type« za opis interpretacije tega ključa."
 
-#: src/libnmc-setting/settings-docs.h.in:482
+#: src/libnmc-setting/settings-docs.h.in:487
 #, fuzzy
 msgid ""
 "Index 3 WEP key.  This WEP index is not used by most networks.  See the "
@@ -11966,7 +11861,7 @@ msgstr ""
 "Indeks 3 Ključ WEP.  Tega indeksa WEP ne uporablja večina omrežij.  Oglejte "
 "si lastnost »wep-key-type« za opis interpretacije tega ključa."
 
-#: src/libnmc-setting/settings-docs.h.in:483
+#: src/libnmc-setting/settings-docs.h.in:488
 #, fuzzy
 msgid ""
 "When static WEP is used (ie, key-mgmt = \"none\") and a non-default WEP key "
@@ -11980,7 +11875,7 @@ msgstr ""
 "potrošniške dostopne točke (kot je Linksys WRT54G) oštevilčijo tipke od 1 do "
 "4."
 
-#: src/libnmc-setting/settings-docs.h.in:484
+#: src/libnmc-setting/settings-docs.h.in:489
 #, fuzzy
 msgid ""
 "Flags indicating which mode of WPS is to be used if any. There's little "
@@ -11994,8 +11889,7 @@ msgstr ""
 "ugotovil, ali je mogoče začeti vpis WPS iz zmogljivosti dostopne točke. WPS "
 "lahko onemogočite tako, da to lastnost nastavite na vrednost 1."
 
-#: src/libnmc-setting/settings-docs.h.in:485
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:490
 msgid ""
 "IEEE 802.15.4 channel. A positive integer or -1, meaning \"do not set, use "
 "whatever the device is already set to\"."
@@ -12003,17 +11897,15 @@ msgstr ""
 "Kanal IEEE 802.15.4. Pozitivno celo število ali -1, kar pomeni »ne nastavi, "
 "uporabi tisto, na kar je naprava že nastavljena«."
 
-#: src/libnmc-setting/settings-docs.h.in:486
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:491
 msgid ""
 "If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) "
 "MAC layer device whose permanent MAC address matches."
 msgstr ""
-"Če je določeno, bo ta povezava veljala le za napravo MAC plasti IEEE "
+"Če je določeno, bo ta povezava veljala le za napravo plasti MAC IEEE "
 "802.15.4 (WPAN), katere stalni naslov MAC se ujema."
 
-#: src/libnmc-setting/settings-docs.h.in:487
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:492
 msgid ""
 "IEEE 802.15.4 channel page. A positive integer or -1, meaning \"do not set, "
 "use whatever the device is already set to\"."
@@ -12021,17 +11913,16 @@ msgstr ""
 "Stran kanala IEEE 802.15.4. Pozitivno celo število ali -1, kar pomeni »ne "
 "nastavi, uporabi tisto, na kar je naprava že nastavljena«."
 
-#: src/libnmc-setting/settings-docs.h.in:488
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:493
 msgid "IEEE 802.15.4 Personal Area Network (PAN) identifier."
-msgstr "IEEE 802.15.4 Identifikator osebnega omrežja (PAN)."
+msgstr "Identifikator osebnega omrežja IEEE 802.15.4 (PAN)."
 
-#: src/libnmc-setting/settings-docs.h.in:489
+#: src/libnmc-setting/settings-docs.h.in:494
 #, fuzzy
 msgid "Short IEEE 802.15.4 address to be used within a restricted environment."
 msgstr "Kratek naslov IEEE 802.15.4 za uporabo v omejenem okolju."
 
-#: src/libnmc-setting/settings-docs.h.in:490
+#: src/libnmc-setting/settings-docs.h.in:495
 #, fuzzy
 msgid ""
 "The port priority for bond active port re-selection during failover. A "
@@ -12044,7 +11935,7 @@ msgstr ""
 "najvišjo prednost. Ta možnost je združljiva samo z načini active-backup, "
 "balance-tlb in balance-alb."
 
-#: src/libnmc-setting/settings-docs.h.in:491
+#: src/libnmc-setting/settings-docs.h.in:496
 #, fuzzy
 msgid ""
 "The queue ID of this bond port. The maximum value of queue ID is the number "
@@ -12053,7 +11944,7 @@ msgstr ""
 "ID čakalne vrste teh vrat obveznice. Največja vrednost ID-ja čakalne vrste "
 "je število čakalnih vrst, ki so trenutno aktivne v napravi."
 
-#: src/libnmc-setting/settings-docs.h.in:492
+#: src/libnmc-setting/settings-docs.h.in:497
 #, fuzzy
 msgid ""
 "Whether the system hostname can be determined from DHCP on this connection. "
@@ -12066,7 +11957,7 @@ msgstr ""
 "konfiguracije. Če lastnost nima vrednosti v globalni konfiguraciji, "
 "NetworkManager predpostavi, da je vrednost »true« (1)."
 
-#: src/libnmc-setting/settings-docs.h.in:493
+#: src/libnmc-setting/settings-docs.h.in:498
 #, fuzzy
 msgid ""
 "Whether the system hostname can be determined from reverse DNS lookup of "
@@ -12079,7 +11970,7 @@ msgstr ""
 "iz globalne konfiguracije. Če lastnost nima vrednosti v globalni "
 "konfiguraciji, NetworkManager predpostavi, da je vrednost »true« (1)."
 
-#: src/libnmc-setting/settings-docs.h.in:494
+#: src/libnmc-setting/settings-docs.h.in:499
 #, fuzzy
 msgid ""
 "If set to \"true\" (1), NetworkManager attempts to get the hostname via "
@@ -12098,7 +11989,7 @@ msgstr ""
 "vrednost iz globalne konfiguracije. Če lastnost nima vrednosti v globalni "
 "konfiguraciji, NetworkManager predpostavi, da je vrednost »false« (0)."
 
-#: src/libnmc-setting/settings-docs.h.in:495
+#: src/libnmc-setting/settings-docs.h.in:500
 #, fuzzy
 msgid ""
 "The relative priority of this connection to determine the system hostname. A "
@@ -12123,7 +12014,7 @@ msgstr ""
 "določitev imena gostitelja uporabljene samo povezave z najnižjo prioritetno "
 "vrednostjo."
 
-#: src/libnmc-setting/settings-docs.h.in:496
+#: src/libnmc-setting/settings-docs.h.in:501
 #, fuzzy
 msgid ""
 "The maximum size of a packet built by the Generic Receive Offload stack for "
@@ -12134,7 +12025,7 @@ msgstr ""
 "to napravo. Vrednost mora biti med 0 in 4294967295. Če je nastavljena na -1, "
 "se obstoječa vrednost ohrani."
 
-#: src/libnmc-setting/settings-docs.h.in:497
+#: src/libnmc-setting/settings-docs.h.in:502
 #, fuzzy
 msgid ""
 "The maximum segments of a Generic Segment Offload packet the device should "
@@ -12145,7 +12036,7 @@ msgstr ""
 "naprava sprejeti. Vrednost mora biti med 0 in 4294967295. Če je nastavljena "
 "na -1, se obstoječa vrednost ohrani."
 
-#: src/libnmc-setting/settings-docs.h.in:498
+#: src/libnmc-setting/settings-docs.h.in:503
 #, fuzzy
 msgid ""
 "The maximum size of a Generic Segment Offload packet the device should "
@@ -12156,48 +12047,54 @@ msgstr ""
 "sprejeti. Vrednost mora biti med 0 in 4294967295. Če je nastavljena na -1, "
 "se obstoječa vrednost ohrani."
 
-#: src/libnmc-setting/settings-docs.h.in:499
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:504
 msgid ""
 "The size of the transmit queue for the device, in number of packets. The "
 "value must be between 0 and 4294967295. When set to -1, the existing value "
 "is preserved."
 msgstr ""
-"Velikost čakalne vrste za prenos naprave, v številu paketov. Vrednost mora "
+"Velikost čakalne vrste prenosa za napravo, v številu paketov. Vrednost mora "
 "biti med 0 in 4294967295. Če je nastavljena na -1, se obstoječa vrednost "
 "ohrani."
 
-#: src/libnmc-setting/settings-docs.h.in:501
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:506
 msgid "A dictionary of key/value pairs with external-ids for OVS."
-msgstr "Slovar parov ključ/vrednost z zunanjimi ID-ji za OVS."
+msgstr "Slovar parov ključ/vrednost z external-id-ji za OVS."
 
-#: src/libnmc-setting/settings-docs.h.in:502
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:507
 msgid ""
 "A dictionary of key/value pairs with other_config settings for OVS. See also "
 "\"other_config\" in the \"ovs-vswitchd.conf.db\" manual for the keys that "
 "OVS supports."
 msgstr ""
 "Slovar parov ključ/vrednost z nastavitvami other_config za OVS. Glejte tudi "
-"»other_config« v priročniku »ovs-vswitchd.conf.db« za tipke, ki jih podpira "
+"»other_config« v priročniku »ovs-vswitchd.conf.db« za ključe, ki jih podpira "
 "OVS."
 
-#: src/libnmc-setting/settings-docs.h.in:503
-#, fuzzy
+#: src/libnmc-setting/settings-docs.h.in:508
+msgid ""
+"The subnet ID to use on the interface from the prefix delegation received "
+"via an upstream interface. Set to a value between 0 and 0xffffffff (2^32 - "
+"1) to indicate a specific subnet ID; or set to -1 to automatically choose an "
+"available subnet ID."
+msgstr ""
+"ID podomrežja, ki se uporablja na vmesniku iz prenosa predpone, prejete prek "
+"vmesnika za zgornjo stopnjo. Nastavite vrednost med 0 in 0xffffffff (2^32 - "
+"1), da označite določen ID podomrežja; ali nastavite na -1, da samodejno "
+"izberete ID podomrežja, ki je na voljo."
+
+#: src/libnmc-setting/settings-docs.h.in:509
 msgid ""
 "This property specifies the peer interface name of the veth. This property "
 "is mandatory."
-msgstr ""
-"Ta lastnost določa ime enakovrednega vmesnika veth. Ta nastanitev je obvezna."
+msgstr "Ta lastnost določa ime vmesnika veth vrstnika. Ta lastnost je obvezna."
 
-#: src/libnmt-newt/nmt-newt-utils.c:267 src/nmtui/nmt-editor.c:445
+#: src/libnmt-newt/nmt-newt-utils.c:267 src/nmtui/nmt-editor.c:452
 #: src/nmtui/nmt-password-dialog.c:163 src/nmtui/nmt-route-editor.c:105
 #: src/nmtui/nmt-wireguard-peer-editor.c:154 src/nmtui/nmtui-hostname.c:53
 #: src/nmtui/nmtui.c:115
-#, fuzzy
 msgid "OK"
-msgstr "V REDU"
+msgstr "V redu"
 
 #: src/libnmt-newt/nmt-newt-utils.c:412 src/libnmt-newt/nmt-newt-utils.c:459
 #, c-format
@@ -12205,52 +12102,48 @@ msgid "Could not create temporary file: %s"
 msgstr "Ni mogoče ustvariti začasne datoteke: %s"
 
 #: src/libnmt-newt/nmt-newt-utils.c:426
-#, fuzzy, c-format
+#, c-format
 msgid "Could not write to temporary file: %s"
-msgstr "Ni mogoče pisati v začasno datoteko '%s': %s"
+msgstr "Ni mogoče pisati v začasno datoteko: %s"
 
 #: src/libnmt-newt/nmt-newt-utils.c:465
-#, fuzzy, c-format
+#, c-format
 msgid "Editor failed: %s"
-msgstr "Zapisovanje v %s je spodletelo: %s\n"
+msgstr "Urejevalnik je spodletel: %s"
 
 #: src/libnmt-newt/nmt-newt-utils.c:471
-#, fuzzy, c-format
+#, c-format
 msgid "Could not re-read file: %s"
-msgstr "Datoteke PKCS#8 ni mogoče odkodirati: %s"
+msgstr "Datoteke ni bilo mogoče ponovno prebrati: %s"
 
 #: src/nm-online/nm-online.c:76
 msgid "Connecting"
 msgstr "Vzpostavljanje povezave"
 
 #: src/nm-online/nm-online.c:189
-#, fuzzy
 msgid "Error: timeout creating NMClient object\n"
-msgstr "Napaka: ni mogoče ustvariti predmeta NMClient."
+msgstr "Napaka: časovna omejitev pri ustvarjanju predmeta NMClient\n"
 
 #: src/nm-online/nm-online.c:210
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Could not create NMClient object: %s\n"
-msgstr "Napaka: ni mogoče ustvariti predmeta NMClient: %s."
+msgstr "Napaka: ni mogoče ustvariti predmeta NMClient: %s\n"
 
 #: src/nm-online/nm-online.c:236
 msgid "Don't print anything"
 msgstr "Ne natisni ničesar"
 
 #: src/nm-online/nm-online.c:242
-#, fuzzy
 msgid "Wait for NetworkManager startup instead of a connection"
-msgstr ""
-"Končaj takoj, če program NetworkManager ni zagnan oziroma ni v postopku "
-"vzpostavljanju povezave."
+msgstr "Počakaj na zagon NetworkManager namesto povezave"
 
 #: src/nm-online/nm-online.c:249
-#, fuzzy
 msgid ""
 "Time to wait for a connection, in seconds (without the option, default value "
 "is 30). Maximum value is 2073600 seconds."
 msgstr ""
-"Čas čakanja na vzpostavitev povezave v sekundah (privzeto je 30 sekund)"
+"Čas čakanja na vzpostavitev povezave v sekundah (privzeto je 30 s). Največja "
+"možna vrednost je 2073600 s."
 
 #: src/nm-online/nm-online.c:257
 msgid "Exit immediately if NetworkManager is not running or connecting"
@@ -12259,7 +12152,6 @@ msgstr ""
 "vzpostavljanja povezave."
 
 #: src/nm-online/nm-online.c:281
-#, fuzzy
 msgid ""
 "Waits for NetworkManager to finish activating startup network connections."
 msgstr ""
@@ -12342,17 +12234,16 @@ msgid "Error: secret agent initialization failed"
 msgstr "Napaka: inicializacija tajnega agenta ni uspela"
 
 #: src/nmcli/agent.c:151
-#, fuzzy
 msgid "nmcli successfully registered as a polkit agent.\n"
-msgstr "NMCLI se je uspešno registriral kot agent Polkit.\n"
+msgstr "nmcli se je uspešno registriral kot agent polkit.\n"
 
 #: src/nmcli/agent.c:172
-#, fuzzy, c-format
+#, c-format
 msgid "Error: polkit agent initialization failed: %s"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: inicializacija agenta polkit ni uspela: %s"
 
 #: src/nmcli/common.c:362 src/nmcli/common.c:363 src/nmcli/common.c:393
-#: src/nmcli/common.c:394 src/nmcli/connections.c:1769
+#: src/nmcli/common.c:394 src/nmcli/connections.c:1770
 msgid "GROUP"
 msgstr "SKUPINA"
 
@@ -12362,7 +12253,7 @@ msgid "Error: openconnect failed: %s\n"
 msgstr "Napaka: openconnect ni uspel: %s\n"
 
 #: src/nmcli/common.c:719
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Warning: password for '%s' not given in 'passwd-file' and nmcli cannot ask "
 "without '--ask' option.\n"
@@ -12384,10 +12275,10 @@ msgid "Error: NetworkManager is not running."
 msgstr "Napaka: program NetworkManager ni zagnan."
 
 #: src/nmcli/common.c:1524
-#, fuzzy, c-format
+#, c-format
 msgid "Error: argument '%s' not understood. Try passing --help instead."
 msgstr ""
-"Napaka: argument '%s' ni razumljen. Namesto tega poskusite predati --pomoč."
+"Napaka: argument '%s' ni razumljen. Namesto tega poskusite podati --help."
 
 #: src/nmcli/common.c:1535
 msgid "Error: missing argument. Try passing --help."
@@ -12440,14 +12331,12 @@ msgid "VPN connection (name, UUID, or path): "
 msgstr "Povezava VPN (ime, UUID ali pot): "
 
 #: src/nmcli/connections.c:69
-#, fuzzy
 msgid "Connection(s) (name, UUID, or path): "
-msgstr "VPN povezovanje (priprava)"
+msgstr "Povezave (ime, UUID ali pot): "
 
 #: src/nmcli/connections.c:70
-#, fuzzy
 msgid "Connection(s) (name, UUID, path or apath): "
-msgstr "VPN povezovanje (priprava)"
+msgstr "Povezave (ime, UUID, pot ali apath): "
 
 #: src/nmcli/connections.c:80
 msgid "activating"
@@ -12458,9 +12347,8 @@ msgid "activated"
 msgstr "aktivirano"
 
 #: src/nmcli/connections.c:83
-#, fuzzy
 msgid "deactivated"
-msgstr "Račun je deaktiviran."
+msgstr "deaktivirano"
 
 #: src/nmcli/connections.c:90
 msgid "VPN connecting (prepare)"
@@ -12491,25 +12379,23 @@ msgid "VPN disconnected"
 msgstr "Povezava z VPN je prekinjena"
 
 #: src/nmcli/connections.c:172 src/nmcli/connections.c:231
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Error writing connection: %s"
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: Napaka pri pisanju povezave: %s"
 
 #: src/nmcli/connections.c:676
-#, fuzzy
 msgid "WiMax is no longer supported"
 msgstr "WiMax ni več podprt"
 
 #: src/nmcli/connections.c:682
-#, fuzzy
 msgid "WEP encryption is known to be insecure"
-msgstr "Znano je, da je šifriranje WEP nevarno"
+msgstr "Znano je, da šifriranje WEP ni varno"
 
 #: src/nmcli/connections.c:764
 msgid "never"
 msgstr "nikoli"
 
-#: src/nmcli/connections.c:1115
+#: src/nmcli/connections.c:1116
 #, fuzzy
 msgid ""
 "Usage: nmcli connection { COMMAND | help }\n"
@@ -12589,7 +12475,7 @@ msgstr ""
 "new_con_type></ID></new></ID></value></property></setting></ID></value></"
 "property></setting></ID></file></BSSID></ifname></ID></ID></order>"
 
-#: src/nmcli/connections.c:1141
+#: src/nmcli/connections.c:1142
 #, fuzzy
 msgid ""
 "Usage: nmcli connection show { ARGUMENTS | help }\n"
@@ -12639,7 +12525,7 @@ msgstr ""
 "skrivnosti.\n"
 "</ID></order>"
 
-#: src/nmcli/connections.c:1163
+#: src/nmcli/connections.c:1164
 #, fuzzy
 msgid ""
 "Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -12685,7 +12571,7 @@ msgstr ""
 "\n"
 "</file></name></BSSID></ifname></file></name></BSSID></ifname></ID>"
 
-#: src/nmcli/connections.c:1187
+#: src/nmcli/connections.c:1188
 #, fuzzy
 msgid ""
 "Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -12709,7 +12595,7 @@ msgstr ""
 "\n"
 "</ID>"
 
-#: src/nmcli/connections.c:1200
+#: src/nmcli/connections.c:1201
 #, fuzzy
 msgid ""
 "Usage: nmcli connection add { ARGUMENTS | help }\n"
@@ -12926,7 +12812,7 @@ msgstr ""
 "address> ] [gw4<IPv4 gateway> ] [ip6<IPv6 address> ] [gw6<IPv6 gateway> ]\n"
 "\n"
 
-#: src/nmcli/connections.c:1330
+#: src/nmcli/connections.c:1331
 #, fuzzy
 msgid ""
 "Usage: nmcli connection modify { ARGUMENTS | help }\n"
@@ -12984,7 +12870,7 @@ msgstr ""
 "\n"
 "</setting></value></property></setting></ID>"
 
-#: src/nmcli/connections.c:1358
+#: src/nmcli/connections.c:1359
 #, fuzzy
 msgid ""
 "Usage: nmcli connection clone { ARGUMENTS | help }\n"
@@ -13007,7 +12893,7 @@ msgstr ""
 "\n"
 "</new></ID></new></ID>"
 
-#: src/nmcli/connections.c:1370
+#: src/nmcli/connections.c:1371
 #, fuzzy
 msgid ""
 "Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -13035,7 +12921,7 @@ msgstr ""
 "\n"
 "</new></new></ID>"
 
-#: src/nmcli/connections.c:1385
+#: src/nmcli/connections.c:1386
 #, fuzzy
 msgid ""
 "Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -13055,7 +12941,7 @@ msgstr ""
 "\n"
 "</ID>"
 
-#: src/nmcli/connections.c:1396
+#: src/nmcli/connections.c:1397
 #, fuzzy
 msgid ""
 "Usage: nmcli connection monitor { ARGUMENTS | help }\n"
@@ -13077,7 +12963,7 @@ msgstr ""
 "\n"
 "</ID>"
 
-#: src/nmcli/connections.c:1408
+#: src/nmcli/connections.c:1409
 #, fuzzy
 msgid ""
 "Usage: nmcli connection reload { help }\n"
@@ -13090,7 +12976,7 @@ msgstr ""
 "Znova naložite vse datoteke za povezavo z diska.\n"
 "\n"
 
-#: src/nmcli/connections.c:1417
+#: src/nmcli/connections.c:1418
 #, fuzzy
 msgid ""
 "Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -13115,7 +13001,7 @@ msgstr ""
 "\n"
 "</filename></filename>"
 
-#: src/nmcli/connections.c:1430
+#: src/nmcli/connections.c:1431
 #, fuzzy
 msgid ""
 "Usage: nmcli connection import { ARGUMENTS | help }\n"
@@ -13140,7 +13026,7 @@ msgstr ""
 "\n"
 "</file></type>"
 
-#: src/nmcli/connections.c:1444
+#: src/nmcli/connections.c:1445
 #, fuzzy
 msgid ""
 "Usage: nmcli connection export { ARGUMENTS | help }\n"
@@ -13160,7 +13046,7 @@ msgstr ""
 "\n"
 "</output></ID>"
 
-#: src/nmcli/connections.c:1455
+#: src/nmcli/connections.c:1456
 #, fuzzy
 msgid ""
 "Usage: nmcli connection migrate { ARGUMENTS | help }\n"
@@ -13180,80 +13066,80 @@ msgstr ""
 "\n"
 "</ID></plugin>"
 
-#: src/nmcli/connections.c:1538
+#: src/nmcli/connections.c:1539
 #, c-format
 msgid "Error updating secrets for %s: %s\n"
 msgstr "Napaka pri posodabljanju skrivnosti za %s: %s\n"
 
-#: src/nmcli/connections.c:1589
+#: src/nmcli/connections.c:1590
 msgid "Connection profile details"
 msgstr "Podrobnosti profila povezave"
 
-#: src/nmcli/connections.c:1607 src/nmcli/connections.c:1714
-#, fuzzy, c-format
+#: src/nmcli/connections.c:1608 src/nmcli/connections.c:1715
+#, c-format
 msgid "Error: 'connection show': %s"
-msgstr "Napaka: 'con list': %s"
+msgstr "Napaka: 'connection show’: %s"
 
-#: src/nmcli/connections.c:1696
+#: src/nmcli/connections.c:1697
 msgid "Active connection details"
 msgstr "Podrobnosti o aktivni povezavi"
 
-#: src/nmcli/connections.c:1826 src/nmcli/devices.c:1681
+#: src/nmcli/connections.c:1827 src/nmcli/devices.c:1681
 #: src/nmcli/devices.c:1698 src/nmcli/devices.c:1716 src/nmcli/devices.c:1735
 #: src/nmcli/devices.c:1799 src/nmcli/devices.c:1928
 msgid "NAME"
 msgstr "IME"
 
-#: src/nmcli/connections.c:1941
+#: src/nmcli/connections.c:1942
 #, c-format
 msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
 msgstr "neveljavno polje »%s«; Dovoljena polja: %s in %s ali %s.%s"
 
-#: src/nmcli/connections.c:1958 src/nmcli/connections.c:1969
-#, fuzzy, c-format
+#: src/nmcli/connections.c:1959 src/nmcli/connections.c:1970
+#, c-format
 msgid "'%s' has to be alone"
-msgstr "polje »%s« mora biti samostojno."
+msgstr "»%s« mora biti samostojno"
 
-#: src/nmcli/connections.c:2225
-#, fuzzy, c-format
+#: src/nmcli/connections.c:2226
+#, c-format
 msgid "incorrect string '%s' of '--order' option"
 msgstr "napačen niz '%s' možnosti '--order'"
 
-#: src/nmcli/connections.c:2249
-#, fuzzy, c-format
+#: src/nmcli/connections.c:2250
+#, c-format
 msgid "incorrect item '%s' in '--order' option"
 msgstr "napačen element '%s' v možnosti '--order'"
 
-#: src/nmcli/connections.c:2294
+#: src/nmcli/connections.c:2295
 msgid "No connection specified"
 msgstr "Ni določene povezave"
 
-#: src/nmcli/connections.c:2307
+#: src/nmcli/connections.c:2308
 #, c-format
 msgid "%s argument is missing"
 msgstr "argument %s manjka"
 
-#: src/nmcli/connections.c:2328
+#: src/nmcli/connections.c:2329
 #, c-format
 msgid "unknown connection '%s'"
 msgstr "neznana povezava »%s«"
 
-#: src/nmcli/connections.c:2357
+#: src/nmcli/connections.c:2358
 msgid "'--order' argument is missing"
 msgstr "Argument »--order« manjka"
 
-#: src/nmcli/connections.c:2421
+#: src/nmcli/connections.c:2422
 msgid "NetworkManager active profiles"
 msgstr "Aktivni profili NetworkManager"
 
-#: src/nmcli/connections.c:2422
+#: src/nmcli/connections.c:2423
 msgid "NetworkManager connection profiles"
 msgstr "Profili povezav NetworkManager"
 
-#: src/nmcli/connections.c:2478 src/nmcli/connections.c:3199
-#: src/nmcli/connections.c:3211 src/nmcli/connections.c:3223
-#: src/nmcli/connections.c:3459 src/nmcli/connections.c:9731
-#: src/nmcli/connections.c:9750 src/nmcli/devices.c:3398
+#: src/nmcli/connections.c:2479 src/nmcli/connections.c:3200
+#: src/nmcli/connections.c:3212 src/nmcli/connections.c:3224
+#: src/nmcli/connections.c:3460 src/nmcli/connections.c:9919
+#: src/nmcli/connections.c:9938 src/nmcli/devices.c:3398
 #: src/nmcli/devices.c:3411 src/nmcli/devices.c:3423 src/nmcli/devices.c:3726
 #: src/nmcli/devices.c:3737 src/nmcli/devices.c:3756 src/nmcli/devices.c:3765
 #: src/nmcli/devices.c:3787 src/nmcli/devices.c:3798 src/nmcli/devices.c:3819
@@ -13265,14 +13151,14 @@ msgstr "Profili povezav NetworkManager"
 msgid "Error: %s argument is missing."
 msgstr "Napaka: manjka argument %s."
 
-#: src/nmcli/connections.c:2513
+#: src/nmcli/connections.c:2514
 #, c-format
 msgid "Error: %s - no such connection profile."
 msgstr "Napaka: %s - ni takšnega profila povezave."
 
-#: src/nmcli/connections.c:2605 src/nmcli/connections.c:3185
-#: src/nmcli/connections.c:3259 src/nmcli/connections.c:9235
-#: src/nmcli/connections.c:9319 src/nmcli/connections.c:9855
+#: src/nmcli/connections.c:2606 src/nmcli/connections.c:3186
+#: src/nmcli/connections.c:3260 src/nmcli/connections.c:9423
+#: src/nmcli/connections.c:9507 src/nmcli/connections.c:10043
 #: src/nmcli/devices.c:2028 src/nmcli/devices.c:2337 src/nmcli/devices.c:2504
 #: src/nmcli/devices.c:2630 src/nmcli/devices.c:2815 src/nmcli/devices.c:3598
 #: src/nmcli/devices.c:4549 src/nmcli/devices.c:5001 src/nmcli/general.c:1076
@@ -13280,82 +13166,81 @@ msgstr "Napaka: %s - ni takšnega profila povezave."
 msgid "Error: %s."
 msgstr "Napaka: %s."
 
-#: src/nmcli/connections.c:2703 src/nmcli/devices.c:4768
+#: src/nmcli/connections.c:2704 src/nmcli/devices.c:4768
 #, c-format
 msgid "no active connection on device '%s'"
 msgstr "ni dejavnih povezav na napravi »%s«"
 
-#: src/nmcli/connections.c:2711
+#: src/nmcli/connections.c:2712
 msgid "no active connection or device"
 msgstr "ni dejavne povezave ali naprave"
 
-#: src/nmcli/connections.c:2734
+#: src/nmcli/connections.c:2735
 #, c-format
 msgid "device '%s' not compatible with connection '%s': "
 msgstr "naprava »%s« ni združljiva s povezavo »%s«"
 
-#: src/nmcli/connections.c:2772
+#: src/nmcli/connections.c:2773
 #, c-format
 msgid "device '%s' not compatible with connection '%s'"
 msgstr "naprava »%s« ni združljiva s povezavo »%s«"
 
-#: src/nmcli/connections.c:2779
+#: src/nmcli/connections.c:2780
 #, c-format
 msgid "device '%s' not found for connection '%s'"
 msgstr "Naprava »%s« ni najdena za povezavo »%s«"
 
-#: src/nmcli/connections.c:2787
+#: src/nmcli/connections.c:2788
 #, c-format
 msgid "no device found for connection '%s'"
 msgstr "ni naprave za povezavo »%s«"
 
-#: src/nmcli/connections.c:2838
+#: src/nmcli/connections.c:2839
 #, c-format
 msgid "Hint: use '%s' to get more details."
 msgstr "Namig: za več podrobnosti uporabite »%s«."
 
-#: src/nmcli/connections.c:2856
-#, fuzzy, c-format
+#: src/nmcli/connections.c:2857
+#, c-format
 msgid "Connection successfully activated (%s) (D-Bus active path: %s)\n"
-msgstr "Povezava je uspešno vzpostavljena (dejavna pot vodila D-Bus: %s)\n"
+msgstr "Povezava je uspešno aktivirana (%s) (dejavna pot vodila D-Bus: %s)\n"
 
-#: src/nmcli/connections.c:2860 src/nmcli/connections.c:3011
-#: src/nmcli/connections.c:7474
+#: src/nmcli/connections.c:2861 src/nmcli/connections.c:3012
+#: src/nmcli/connections.c:7651
 #, c-format
 msgid "Connection successfully activated (D-Bus active path: %s)\n"
 msgstr "Povezava je uspešno vzpostavljena (dejavna pot vodila D-Bus: %s)\n"
 
-#: src/nmcli/connections.c:2867 src/nmcli/connections.c:2990
+#: src/nmcli/connections.c:2868 src/nmcli/connections.c:2991
 #, c-format
 msgid "Error: Connection activation failed: %s"
 msgstr "Napaka: začenjanje povezave ni uspelo: %s."
 
-#: src/nmcli/connections.c:2903
+#: src/nmcli/connections.c:2904
 #, c-format
 msgid "Error: Timeout expired (%d seconds)"
 msgstr "Napaka: časovna omejitev je potekla (%d s)"
 
-#: src/nmcli/connections.c:3085
+#: src/nmcli/connections.c:3086
 #, c-format
 msgid "unknown device '%s'."
 msgstr "neznana naprava »%s«."
 
-#: src/nmcli/connections.c:3093
-#, fuzzy
+#: src/nmcli/connections.c:3094
 msgid "neither a valid connection nor device given"
-msgstr "ni dejavne povezave ali naprave"
+msgstr "niti veljavna povezava niti naprava ni podana"
 
-#: src/nmcli/connections.c:3108
+#: src/nmcli/connections.c:3109
 #, c-format
 msgid "invalid passwd-file '%s' at line %zd: %s"
 msgstr "neveljavna datoteka passwd-file »%s« v vrstici %zd: %s"
 
-#: src/nmcli/connections.c:3116
+#: src/nmcli/connections.c:3117
 #, c-format
 msgid "invalid passwd-file '%s': %s"
 msgstr "neveljavna datoteka passwd-file »%s«: %s"
 
-#: src/nmcli/connections.c:3233 src/nmcli/connections.c:9759
+#: src/nmcli/connections.c:3234 src/nmcli/connections.c:9947
 #: src/nmcli/devices.c:1985 src/nmcli/devices.c:2034 src/nmcli/devices.c:2510
 #: src/nmcli/devices.c:2703 src/nmcli/devices.c:2770 src/nmcli/devices.c:2970
 #: src/nmcli/devices.c:3458 src/nmcli/devices.c:3835 src/nmcli/devices.c:4446
@@ -13364,141 +13249,139 @@ msgstr "neveljavna datoteka passwd-file »%s«: %s"
 msgid "Error: invalid extra argument '%s'."
 msgstr "Napaka: neveljaven dodatni argument »%s«."
 
-#: src/nmcli/connections.c:3267
+#: src/nmcli/connections.c:3268
 msgid "preparing"
 msgstr "poteka pripravljanje …"
 
-#: src/nmcli/connections.c:3375
+#: src/nmcli/connections.c:3376
 #, c-format
 msgid "Connection '%s' (%s) successfully deleted.\n"
 msgstr "Povezava »%s« (%s) je bila uspešno izbrisana.\n"
 
-#: src/nmcli/connections.c:3391
-#, fuzzy, c-format
+#: src/nmcli/connections.c:3392
+#, c-format
 msgid "Connection '%s' successfully deactivated (D-Bus active path: %s)\n"
-msgstr "Povezava je uspešno vzpostavljena (dejavna pot vodila D-Bus: %s)\n"
+msgstr "Povezava '%s' je bila uspešno deaktivirana (aktivna pot D-Bus: %s)\n"
 
-#: src/nmcli/connections.c:3440 src/nmcli/connections.c:9415
-#: src/nmcli/connections.c:9452 src/nmcli/connections.c:9641
+#: src/nmcli/connections.c:3441 src/nmcli/connections.c:9603
+#: src/nmcli/connections.c:9640 src/nmcli/connections.c:9829
 msgid "Error: No connection specified."
 msgstr "Napaka: Povezava ni določena."
 
-#: src/nmcli/connections.c:3472
+#: src/nmcli/connections.c:3473
 #, c-format
 msgid "Error: '%s' is not an active connection.\n"
 msgstr "Napaka: »%s« ni aktivna povezava.\n"
 
-#: src/nmcli/connections.c:3473
+#: src/nmcli/connections.c:3474
 msgid "Error: not all active connections found."
 msgstr "Napaka: niso bile najdene vse aktivne povezave."
 
-#: src/nmcli/connections.c:3481
+#: src/nmcli/connections.c:3482
 msgid "Error: no active connection provided."
 msgstr "Napaka: aktivna povezava ni zagotovljena."
 
-#: src/nmcli/connections.c:3513
+#: src/nmcli/connections.c:3514
 #, c-format
 msgid "Connection '%s' deactivation failed: %s\n"
 msgstr "Deaktivacija povezave »%s« ni uspela: %s\n"
 
-#: src/nmcli/connections.c:4002
-#, fuzzy, c-format
-#| msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
-msgid "Warning: controller='%s' doesn't refer to any existing profile.\n"
-msgstr "Opozorilo: master='%s' se ne nanaša na noben obstoječi profil.\n"
+#: src/nmcli/connections.c:4009
+#, c-format
+msgid ""
+"Warning: controller '%s' doesn't refer to any existing profile of type "
+"'%s'.\n"
+msgstr ""
+"Opozorilo: krmilnik '%s' se ne nanaša na noben obstoječi profil vrste '%s'.\n"
 
-#: src/nmcli/connections.c:4383
+#: src/nmcli/connections.c:4391
 #, c-format
 msgid "Error: invalid property '%s': %s."
 msgstr "Napaka: neveljavna lastnost »%s«: %s."
 
-#: src/nmcli/connections.c:4401
+#: src/nmcli/connections.c:4409
 #, c-format
 msgid "Error: failed to modify %s.%s: %s."
 msgstr "Napaka: ni uspelo spremeniti %s.%s: %s."
 
-#: src/nmcli/connections.c:4402
+#: src/nmcli/connections.c:4410
 #, c-format
 msgid "Error: failed to remove a value from %s.%s: %s."
 msgstr "Napaka: vrednosti iz %s.%s ni bilo mogoče odstraniti: %s."
 
-#: src/nmcli/connections.c:4482
-#, fuzzy, c-format
-#| msgid "Error: invalid slave type; %s."
+#: src/nmcli/connections.c:4490
+#, c-format
 msgid "Error: invalid port type; %s."
-msgstr "Napaka: neveljavna vrsta podrejenega; %s."
+msgstr "Napaka: neveljavna vrsta vrat; %s."
 
-#: src/nmcli/connections.c:4493
+#: src/nmcli/connections.c:4501
 #, c-format
 msgid "Error: invalid connection type; %s."
 msgstr "Napaka: neveljavna vrsta povezave; %s."
 
-#: src/nmcli/connections.c:4628
+#: src/nmcli/connections.c:4639
 #, c-format
 msgid "Error: bad connection type: %s"
 msgstr "Napaka: slaba vrsta povezave: %s"
 
-#: src/nmcli/connections.c:4704
-#, fuzzy
+#: src/nmcli/connections.c:4715
 msgid "Error: controller is required"
-msgstr "Napaka: časovna omejitev %d sekund je potekla."
+msgstr "Napaka: zahtevan je krmilnik"
 
-#: src/nmcli/connections.c:4805
+#: src/nmcli/connections.c:4816
 #, fuzzy, c-format
 msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "Napaka: »%s« ni veljaven način spremljanja; Uporabite »%s« ali »%s«.\n"
 
-#: src/nmcli/connections.c:4845
-#, fuzzy, c-format
+#: src/nmcli/connections.c:4856
+#, c-format
 msgid "Error: 'bt-type': '%s' not valid; use [%s, %s, %s (%s), %s]."
 msgstr "Napaka: 'bt-type': '%s' ni veljavno; Uporabite [%s, %s, %s (%s), %s]."
 
-#: src/nmcli/connections.c:5199
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5210
+#, c-format
 msgid "Error: setting '%s' is mandatory and cannot be removed."
-msgstr "Napaka: naprave '%s' ni mogoče najti"
+msgstr "Napaka: nastavitev »%s« je obvezna in je ni mogoče odstraniti."
 
-#: src/nmcli/connections.c:5215
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5226
+#, c-format
 msgid "Error: value for '%s' is missing."
-msgstr "Napaka: polja za možnosti '%s' manjkajo."
+msgstr "Napaka: manjka vrednost za »%s«."
 
-#: src/nmcli/connections.c:5266
-#, fuzzy
-msgid "Error: <setting>.<property> argument is missing."
-msgstr "Napaka: manjka argument %s."
-
-#: src/nmcli/connections.c:5308
-#, fuzzy
+#: src/nmcli/connections.c:5431
 msgid "Error: missing setting."
-msgstr "Napaka: manjka argument za možnost '%s'."
+msgstr "Napaka: manjka nastavitev."
 
-#: src/nmcli/connections.c:5322
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5445
+#, c-format
 msgid "Error: invalid setting argument '%s'."
-msgstr "Napaka: neveljaven 'wwan' parameter: '%s'."
+msgstr "Napaka: neveljaven argument nastavitve »%s«."
 
-#: src/nmcli/connections.c:5353
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5506
+msgid "port connections cannot have IP configuration"
+msgstr "povezave vrat ne morejo imeti prilagoditve IP"
+
+#: src/nmcli/connections.c:5514
+#, c-format
 msgid "Error: invalid or not allowed setting '%s': %s."
-msgstr "Napaka: neveljaven 'wwan' parameter: '%s'."
+msgstr "Napaka: neveljavna ali nedovoljena nastavitev »%s«: %s."
 
-#: src/nmcli/connections.c:5412 src/nmcli/connections.c:5433
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5569 src/nmcli/connections.c:5590
+#, c-format
 msgid "Error: '%s' is ambiguous (%s.%s or %s.%s)."
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "Napaka: »%s« je dvoumno (%s.%s ali %s.%s)."
 
-#: src/nmcli/connections.c:5457
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5614
+#, c-format
 msgid "Error: invalid <setting>.<property> '%s'."
-msgstr "Napaka: neveljaven 'wifi' parameter: '%s'."
+msgstr "Napaka: neveljavna <nastavitev>.<lastnost> '%s'."
 
-#: src/nmcli/connections.c:5491 src/nmcli/devices.c:2217
+#: src/nmcli/connections.c:5647 src/nmcli/devices.c:2217
 #, c-format
 msgid "Warning: %s.\n"
 msgstr "Opozorilo: %s.\n"
 
-#: src/nmcli/connections.c:5507
+#: src/nmcli/connections.c:5663
 #, c-format
 msgid ""
 "Warning: There is another connection with the name '%1$s'. Reference the "
@@ -13519,7 +13402,7 @@ msgstr[3] ""
 "Opozorilo: obstajajo še %3$u druge povezave z imenom »%1$s«. Na povezavo se "
 "sklicujte z njenim uuid »%2$s«\n"
 
-#: src/nmcli/connections.c:5529 src/nmcli/connections.c:9267
+#: src/nmcli/connections.c:5685 src/nmcli/connections.c:9455
 #, c-format
 msgid "Error: Failed to add '%s' connection: %s"
 msgstr "Napaka: Dodajanje povezave »%s« ni uspelo: %s"
@@ -13533,46 +13416,48 @@ msgstr "Napaka: Dodajanje povezave »%s« ni uspelo: %s"
 #. *
 #. * This is true for many messages that the user might parse. But this one
 #. * seems in particular interesting for a user to parse.
-#: src/nmcli/connections.c:5546
-#, fuzzy, c-format
+#: src/nmcli/connections.c:5702
+#, c-format
 msgid "Connection '%s' (%s) successfully added.\n"
 msgstr "Povezava '%s' (%s) je bila uspešno dodana.\n"
 
-#: src/nmcli/connections.c:5695
+#: src/nmcli/connections.c:5851
 #, fuzzy
 msgid ""
 "You can specify this option more than once. Press <Enter> when you're done.\n"
-msgstr ""
-"To možnost lahko določite večkrat. Pritisnite <Enter> , ko končate.\n"
-"</Enter>"
+msgstr "To možnost lahko določite večkrat. Pritisnite <Enter> , ko končate.\n"
 
 #. Ask for optional arguments.
-#: src/nmcli/connections.c:5806
+#: src/nmcli/connections.c:5962
 #, c-format
 msgid "There are %d optional settings for %s.\n"
 msgstr "Na voljo je %d izbirnih nastavitev za %s.\n"
 
-#: src/nmcli/connections.c:5808
+#: src/nmcli/connections.c:5964
 #, c-format
 msgid "Do you want to provide them? %s"
 msgstr "Ali jih želite zagotoviti? %s"
 
-#: src/nmcli/connections.c:5948 src/nmcli/utils.c:280
+#: src/nmcli/connections.c:6096
+msgid "Error: argument '--' can only be passed once"
+msgstr "Napaka: argument »--« je možno posredovati samo enkrat"
+
+#: src/nmcli/connections.c:6110 src/nmcli/utils.c:280
 #, c-format
 msgid "Error: value for '%s' argument is required."
 msgstr "Napaka: zahteva se vrednost argumenta »%s«."
 
-#: src/nmcli/connections.c:5955
-#, fuzzy, c-format
+#: src/nmcli/connections.c:6116
+#, c-format
 msgid "Error: 'save': %s."
-msgstr "Napaka: 'nm status': %s"
+msgstr "Napaka: 'save': %s."
 
-#: src/nmcli/connections.c:6043 src/nmcli/connections.c:6056
+#: src/nmcli/connections.c:6220 src/nmcli/connections.c:6233
 #, c-format
 msgid "Error: '%s' argument is required."
 msgstr "Napaka: argument »%s« je obvezen."
 
-#: src/nmcli/connections.c:7022
+#: src/nmcli/connections.c:7199
 #, fuzzy, c-format
 msgid "['%s' setting values]\n"
 msgstr "[Nastavitvene vrednosti '%s']\n"
@@ -13580,7 +13465,7 @@ msgstr "[Nastavitvene vrednosti '%s']\n"
 #. TRANSLATORS: do not translate command names and keywords before ::
 #. *              However, you should translate terms enclosed in <>.
 #.
-#: src/nmcli/connections.c:7133
+#: src/nmcli/connections.c:7310
 #, fuzzy
 msgid ""
 "---[ Main menu ]---\n"
@@ -13616,7 +13501,7 @@ msgstr ""
 "prop></setting></value></prop></setting></prop></prop></setting></prop></"
 "setting>"
 
-#: src/nmcli/connections.c:7161
+#: src/nmcli/connections.c:7338
 #, fuzzy
 msgid ""
 "goto <setting>[.<prop>] | <prop>  :: enter setting/property for editing\n"
@@ -13637,7 +13522,7 @@ msgstr ""
 "          nmcli> goto ipv4.addresses\n"
 "</prop></prop></setting>"
 
-#: src/nmcli/connections.c:7169
+#: src/nmcli/connections.c:7346
 #, fuzzy
 msgid ""
 "remove <setting>[.<prop>]  :: remove setting or reset property value\n"
@@ -13659,7 +13544,7 @@ msgstr ""
 "          nmcli> odstrani eth.mtu\n"
 "</prop></setting>"
 
-#: src/nmcli/connections.c:7176
+#: src/nmcli/connections.c:7353
 #, fuzzy
 msgid ""
 "set [<setting>.<prop> <value>]  :: set property value\n"
@@ -13675,7 +13560,7 @@ msgstr ""
 "Primer: nmcli> nastavi con.id Moja povezava\n"
 "</value></prop></setting>"
 
-#: src/nmcli/connections.c:7181
+#: src/nmcli/connections.c:7358
 #, fuzzy
 msgid ""
 "add [<setting>.<prop> <value>]  :: add property value\n"
@@ -13691,7 +13576,7 @@ msgstr ""
 "Primer: nmcli> dodajte ipv4.addresses 192.168.1.1/24\n"
 "</value></prop></setting>"
 
-#: src/nmcli/connections.c:7186
+#: src/nmcli/connections.c:7363
 #, fuzzy
 msgid ""
 "describe [<setting>.<prop>]  :: describe property\n"
@@ -13705,7 +13590,7 @@ msgstr ""
 "ogledate vse nastavitve in lastnosti NM.\n"
 "</prop></setting>"
 
-#: src/nmcli/connections.c:7191
+#: src/nmcli/connections.c:7368
 #, fuzzy
 msgid ""
 "print [all]  :: print setting or connection values\n"
@@ -13720,7 +13605,7 @@ msgstr ""
 "\n"
 "Primer: nmcli ipv4> natisni vse\n"
 
-#: src/nmcli/connections.c:7197
+#: src/nmcli/connections.c:7374
 #, fuzzy
 msgid ""
 "verify [all | fix]  :: verify setting or connection validity\n"
@@ -13747,7 +13632,7 @@ msgstr ""
 "          nmcli> preveri popravek\n"
 "          Obveznica NMCLI> Preveri\n"
 
-#: src/nmcli/connections.c:7207
+#: src/nmcli/connections.c:7384
 #, fuzzy
 msgid ""
 "save [persistent|temporary]  :: save the connection\n"
@@ -13775,7 +13660,7 @@ msgstr ""
 "Ponovno zagnati. Če želite trajno povezavo v celoti odstraniti, se povezava\n"
 "Profil je treba izbrisati.\n"
 
-#: src/nmcli/connections.c:7218
+#: src/nmcli/connections.c:7395
 #, fuzzy
 msgid ""
 "activate [<ifname>] [/<ap>|<nsp>]  :: activate the connection\n"
@@ -13797,23 +13682,21 @@ msgstr ""
 "določeno)\n"
 "</ifname></nsp></ap></ifname></nsp></ap></ifname>"
 
-#: src/nmcli/connections.c:7226 src/nmcli/connections.c:7385
-#, fuzzy
+#: src/nmcli/connections.c:7403 src/nmcli/connections.c:7562
 msgid ""
 "back  :: go to upper menu level\n"
 "\n"
 msgstr ""
-"nazaj :: pojdi na zgornjo raven menija\n"
+"back :: pojdi na zgornjo raven menija\n"
 "\n"
 
-#: src/nmcli/connections.c:7229
-#, fuzzy
+#: src/nmcli/connections.c:7406
 msgid ""
 "help/? [<command>]  :: help for the nmcli commands\n"
 "\n"
-msgstr "pomoč/? [<command>] :: Pomoč za ukaze NMCLI</command>"
+msgstr "help/? [<ukaz>] :: Pomoč za ukaze nmcli\n"
 
-#: src/nmcli/connections.c:7232
+#: src/nmcli/connections.c:7409
 #, fuzzy, c-format
 msgid ""
 "nmcli [<conf-option> <value>]  :: nmcli configuration\n"
@@ -13841,7 +13724,7 @@ msgstr ""
 "          nmcli> nmcli promptna barva 3\n"
 "</0-8></color></value></conf-option>"
 
-#: src/nmcli/connections.c:7254 src/nmcli/connections.c:7391
+#: src/nmcli/connections.c:7431 src/nmcli/connections.c:7568
 #, fuzzy
 msgid ""
 "quit  :: exit nmcli\n"
@@ -13854,18 +13737,16 @@ msgstr ""
 "Ta ukaz zapusti nmcli. Ko povezava, ki jo urejate, ni shranjena, je "
 "uporabnik pozvan, da potrdi dejanje.\n"
 
-#: src/nmcli/connections.c:7259 src/nmcli/connections.c:7396
-#: src/nmcli/connections.c:7788 src/nmcli/connections.c:8830
-#, fuzzy, c-format
+#: src/nmcli/connections.c:7436 src/nmcli/connections.c:7573
+#: src/nmcli/connections.c:7965 src/nmcli/connections.c:9017
+#, c-format
 msgid "Unknown command: '%s'\n"
-msgstr ""
-"Neznan ukaz %s\n"
-"\n"
+msgstr "Neznan ukaz: »%s«\n"
 
 #. TRANSLATORS: do not translate command names and keywords before ::
 #. *              However, you should translate terms enclosed in <>.
 #.
-#: src/nmcli/connections.c:7324
+#: src/nmcli/connections.c:7501
 #, fuzzy
 msgid ""
 "---[ Property menu ]---\n"
@@ -13892,7 +13773,7 @@ msgstr ""
 "pomoč/?   [<command>] :: natisnite to pomoč ali opis ukaza\n"
 "Quit :: Izhod iz NMCLI</command></index></value></value>"
 
-#: src/nmcli/connections.c:7348
+#: src/nmcli/connections.c:7525
 #, fuzzy
 msgid ""
 "set [<value>]  :: set new value\n"
@@ -13904,7 +13785,7 @@ msgstr ""
 "Ta ukaz nabori za <value> to lastnost\n"
 "</value></value>"
 
-#: src/nmcli/connections.c:7352
+#: src/nmcli/connections.c:7529
 #, fuzzy
 msgid ""
 "add [<value>]  :: append new value to the property\n"
@@ -13920,7 +13801,7 @@ msgstr ""
 "\"set\").\n"
 "</value></value>"
 
-#: src/nmcli/connections.c:7358
+#: src/nmcli/connections.c:7535
 #, fuzzy
 msgid ""
 "change  :: change current value\n"
@@ -13931,7 +13812,7 @@ msgstr ""
 "\n"
 "Prikaže trenutno vrednost in omogoča njeno urejanje.\n"
 
-#: src/nmcli/connections.c:7363
+#: src/nmcli/connections.c:7540
 #, fuzzy
 msgid ""
 "remove [<value>|<index>|<option name>]  :: delete the value\n"
@@ -13964,7 +13845,7 @@ msgstr ""
 "          nmcli ipv4.dns> odstrani 2\n"
 "          nmcli bond.options> odstranite downdelay</index></value>"
 
-#: src/nmcli/connections.c:7374
+#: src/nmcli/connections.c:7551
 #, fuzzy
 msgid ""
 "describe  :: describe property\n"
@@ -13977,7 +13858,7 @@ msgstr ""
 "Prikaže opis nastanitve. Na strani priročnika nm-settings(5) si lahko "
 "ogledate vse nastavitve in lastnosti NM.\n"
 
-#: src/nmcli/connections.c:7379
+#: src/nmcli/connections.c:7556
 #, fuzzy
 msgid ""
 "print [property|setting|connection]  :: print property (setting, connection) "
@@ -13992,93 +13873,90 @@ msgstr ""
 "Prikaže vrednost lastnosti. Če navedete argument, lahko prikažete tudi "
 "vrednosti za celotno nastavitev ali povezavo.\n"
 
-#: src/nmcli/connections.c:7388
-#, fuzzy
+#: src/nmcli/connections.c:7565
 msgid ""
 "help/? [<command>]  :: help for nmcli commands\n"
 "\n"
-msgstr "pomoč/? [<command>] :: Pomoč za ukaze NMCLI</command>"
+msgstr "pomoč/? [<ukaz>] :: Pomoč za ukaze nmcli\n"
 
-#: src/nmcli/connections.c:7480
-#, fuzzy
+#: src/nmcli/connections.c:7657
 msgid "Error: Connection activation failed.\n"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: Aktiviranje povezave ni uspelo.\n"
 
 #. TRANSLATORS: status line in nmcli connection editor
-#: src/nmcli/connections.c:7578
+#: src/nmcli/connections.c:7755
 #, fuzzy, c-format
 msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
 msgstr "[ Vrsta: %s | Ime: %s | UUID: %s | Umazano: %s | Temperatura: %s ]\n"
 
-#: src/nmcli/connections.c:7616
-#, fuzzy, c-format
+#: src/nmcli/connections.c:7793
+#, c-format
 msgid "The connection is not saved. Do you really want to quit? %s"
-msgstr "Povezava ni shranjena. Ali res želite odnehati? %s"
+msgstr "Povezava ni shranjena. Ali res želite prenehati? %s"
 
-#: src/nmcli/connections.c:7660
-#, fuzzy
+#: src/nmcli/connections.c:7837
 msgid ""
 "The connection profile has been removed from another client. You may type "
 "'save' in the main menu to restore it.\n"
 msgstr ""
 "Profil povezave je bil odstranjen iz drugega odjemalca. V glavni meni lahko "
-"vnesete »shrani«, da ga obnovite.\n"
+"vnesete »save«, da ga obnovite.\n"
 
-#: src/nmcli/connections.c:7692 src/nmcli/connections.c:8088
-#: src/nmcli/connections.c:8161
+#: src/nmcli/connections.c:7869 src/nmcli/connections.c:8265
+#: src/nmcli/connections.c:8339
 #, c-format
 msgid "Allowed values for '%s' property: %s\n"
 msgstr "Dovoljene vrednosti za lastnost »%s«: %s\n"
 
-#: src/nmcli/connections.c:7694 src/nmcli/connections.c:8093
-#: src/nmcli/connections.c:8165
+#: src/nmcli/connections.c:7871 src/nmcli/connections.c:8270
+#: src/nmcli/connections.c:8343
 #, c-format
 msgid "Enter '%s' value: "
 msgstr "Vnesite vrednost »%s«: "
 
-#: src/nmcli/connections.c:7707 src/nmcli/connections.c:7726
-#: src/nmcli/connections.c:8101 src/nmcli/connections.c:8176
+#: src/nmcli/connections.c:7884 src/nmcli/connections.c:7903
+#: src/nmcli/connections.c:8278 src/nmcli/connections.c:8354
 #, c-format
 msgid "Error: failed to set '%s' property: %s\n"
 msgstr "Napaka: ni uspelo nastaviti lastnosti »%s«: %s\n"
 
-#: src/nmcli/connections.c:7718
+#: src/nmcli/connections.c:7895
 #, c-format
 msgid "Edit '%s' value: "
 msgstr "Uredite vrednost »%s«: "
 
-#: src/nmcli/connections.c:7741 src/nmcli/settings.c:443
+#: src/nmcli/connections.c:7918 src/nmcli/settings.c:444
 #, c-format
 msgid "Error: %s\n"
 msgstr "Napaka: %s\n"
 
-#: src/nmcli/connections.c:7760
+#: src/nmcli/connections.c:7937
 #, c-format
 msgid "Unknown command argument: '%s'\n"
 msgstr "Neznan argument ukaza: »%s«\n"
 
-#: src/nmcli/connections.c:7855
+#: src/nmcli/connections.c:8032
 #, c-format
 msgid "Available settings: %s\n"
 msgstr "Razpoložljive nastavitve: %s\n"
 
-#: src/nmcli/connections.c:7866
+#: src/nmcli/connections.c:8043
 #, c-format
 msgid "Error: invalid setting name; %s\n"
 msgstr "Napaka: neveljavno ime nastavitve; %s\n"
 
-#: src/nmcli/connections.c:7883
+#: src/nmcli/connections.c:8060
 #, c-format
 msgid "Available properties: %s\n"
 msgstr "Razpoložljive lastnosti: %s\n"
 
-#: src/nmcli/connections.c:7891
+#: src/nmcli/connections.c:8068
 #, c-format
 msgid "Error: property %s\n"
 msgstr "Napaka: lastnost %s\n"
 
-#: src/nmcli/connections.c:7936
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8113
+#, c-format
 msgid ""
 "Saving the connection with 'autoconnect=yes'. That might result in an "
 "immediate activation of the connection.\n"
@@ -14086,470 +13964,441 @@ msgid ""
 msgstr ""
 "Shranjevanje povezave z »autoconnect=yes«. To lahko povzroči takojšnjo "
 "aktivacijo povezave.\n"
-"Ali še vedno želite prihraniti? %s"
+"Ali še vedno želite shraniti? %s"
 
-#: src/nmcli/connections.c:8022
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8199
+#, c-format
 msgid "You may edit the following settings: %s\n"
 msgstr "Uredite lahko naslednje nastavitve: %s\n"
 
-#: src/nmcli/connections.c:8050
-#, fuzzy
+#: src/nmcli/connections.c:8227
 msgid ""
 "The connection profile has been removed from another client. You may type "
 "'save' to restore it.\n"
 msgstr ""
 "Profil povezave je bil odstranjen iz drugega odjemalca. Lahko vnesete "
-"»shrani«, da ga obnovite.\n"
+"»save«, da ga obnovite.\n"
 
-#: src/nmcli/connections.c:8107 src/nmcli/connections.c:8393
-#: src/nmcli/connections.c:8428
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8284 src/nmcli/connections.c:8573
+#: src/nmcli/connections.c:8609
+#, c-format
 msgid "Error: no setting selected; valid are [%s]\n"
-msgstr "Napaka: brisanje povezave ni uspelo: %s"
+msgstr "Napaka: nastavitev ni izbrana; veljavne so [%s]\n"
 
-#: src/nmcli/connections.c:8109
-#, fuzzy
+#: src/nmcli/connections.c:8286
 msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
 msgstr ""
-"Najprej uporabite \"goto<setting>\" ali \"nastavi<setting><property>\".\n"
-"</property></setting></setting>"
+"Najprej uporabite »goto <nastavitev>« ali »set <nastavitev>.<lastnost>«.\n"
 
-#: src/nmcli/connections.c:8129 src/nmcli/connections.c:8309
-#: src/nmcli/connections.c:8417
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8307 src/nmcli/connections.c:8489
+#: src/nmcli/connections.c:8598
+#, c-format
 msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
-msgstr ""
-"Napaka: neveljaven parameter 'sleep': '%s'; uporabite 'true' ali 'false'."
+msgstr "Napaka: neveljaven argument nastavitve »%s«; veljavni so [%s]\n"
 
-#: src/nmcli/connections.c:8139
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8317
+#, c-format
 msgid "Error: missing setting for '%s' property\n"
-msgstr "Napaka: manjka argument za možnost '%s'."
+msgstr "Napaka: manjka nastavitev za lastnost »%s«\n"
 
-#: src/nmcli/connections.c:8146
+#: src/nmcli/connections.c:8324
 #, c-format
 msgid "Error: invalid property: %s\n"
 msgstr "Napaka: neveljavna lastnost: %s\n"
 
-#: src/nmcli/connections.c:8209
+#: src/nmcli/connections.c:8387
 #, c-format
 msgid "Error: unknown setting '%s'\n"
 msgstr "Napaka: neznana nastavitev »%s«\n"
 
-#: src/nmcli/connections.c:8235
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8413
+#, c-format
 msgid "You may edit the following properties: %s\n"
 msgstr "Urejate lahko naslednje lastnosti: %s\n"
 
-#: src/nmcli/connections.c:8281 src/nmcli/connections.c:8343
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8459 src/nmcli/connections.c:8523
+#, c-format
 msgid "Error: failed to remove value of '%s': %s\n"
-msgstr "Napaka: vrednosti iz %s.%s ni bilo mogoče odstraniti: %s."
+msgstr "Napaka: vrednosti »%s« ni možno odstraniti: %s\n"
 
-#: src/nmcli/connections.c:8287
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8465
+#, c-format
 msgid "Error: no argument given; valid are [%s]\n"
 msgstr "Napaka: ni podan argument; veljavni so [%s]\n"
 
-#: src/nmcli/connections.c:8306
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8485
+#, c-format
 msgid "Setting '%s' is not present in the connection.\n"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "Nastavitev »%s« ni prisotna v povezavi.\n"
 
-#: src/nmcli/connections.c:8369
+#: src/nmcli/connections.c:8549
 #, fuzzy, c-format
 msgid "Error: %s properties, nor it is a setting name.\n"
 msgstr "Napaka: %s lastnosti, niti ni ime nastavitve.\n"
 
-#: src/nmcli/connections.c:8396 src/nmcli/connections.c:8431
+#: src/nmcli/connections.c:8576 src/nmcli/connections.c:8612
 #, fuzzy
 msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
 msgstr ""
 "najprej uporabite 'goto <setting>' ali 'opišite <setting>'.<property>\n"
 "</property></setting></setting>"
 
-#: src/nmcli/connections.c:8454
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8635
+#, c-format
 msgid "Error: invalid property: %s, neither a valid setting name.\n"
 msgstr "Napaka: neveljavna lastnost: %s, niti veljavno ime nastavitve.\n"
 
-#: src/nmcli/connections.c:8484
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8665
+#, c-format
 msgid "Error: unknown setting: '%s'\n"
 msgstr "Napaka: neznana nastavitev »%s«\n"
 
-#: src/nmcli/connections.c:8489
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8670
+#, c-format
 msgid "Error: '%s' setting not present in the connection\n"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "Napaka: Nastavitev »%s« ni prisotna v povezavi\n"
 
-#: src/nmcli/connections.c:8521
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8702
+#, c-format
 msgid "Error: invalid property: %s%s\n"
-msgstr "Napaka: neveljavna lastnost »%s«: %s."
+msgstr "Napaka: neveljavna lastnost: %s%s\n"
 
-#: src/nmcli/connections.c:8523
-#, fuzzy
+#: src/nmcli/connections.c:8704
 msgid ", neither a valid setting name"
-msgstr ", niti veljavno ime nastavitve"
+msgstr ", niti ni veljavno ime nastavitve"
 
-#: src/nmcli/connections.c:8539
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8720
+#, c-format
 msgid "Invalid verify option: %s\n"
-msgstr "Možnost preverjanja neveljavnosti: %s\n"
+msgstr "Neveljavna možnost preverjanja: %s\n"
 
-#: src/nmcli/connections.c:8547
+#: src/nmcli/connections.c:8728
 #, c-format
 msgid "Verify setting '%s': %s\n"
 msgstr "Preveri nastavitev »%s«: %s\n"
 
-#: src/nmcli/connections.c:8562
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8745 src/nmcli/connections.c:8747
+#, c-format
 msgid "Verify connection: %s\n"
-msgstr "Povezava VPN %d"
+msgstr "Preveri povezavo: %s\n"
 
-#: src/nmcli/connections.c:8564
-#, fuzzy
+#: src/nmcli/connections.c:8751
 msgid "The error cannot be fixed automatically.\n"
 msgstr "Napake ni mogoče odpraviti samodejno.\n"
 
-#: src/nmcli/connections.c:8584
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8771
+#, c-format
 msgid "Error: invalid argument '%s'\n"
-msgstr "Napaka: neveljaven 'wifi' parameter: '%s'."
+msgstr "Napaka: neveljaven argument »%s«\n"
 
-#: src/nmcli/connections.c:8641
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8828
+#, c-format
 msgid "Error: Failed to save '%s' (%s) connection: %s\n"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: Shranjevanje povezave »%s« (%s) ni uspelo: %s\n"
 
-#: src/nmcli/connections.c:8647
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8834
+#, c-format
 msgid "Error: Timeout saving '%s' (%s) connection\n"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: Časovna prekoračitev shranjevanja povezave »%s« (%s)\n"
 
-#: src/nmcli/connections.c:8651
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8838
+#, c-format
 msgid "Connection '%s' (%s) successfully saved.\n"
 msgstr "Povezava »%s« (%s) je bila uspešno shranjena.\n"
 
-#: src/nmcli/connections.c:8652
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8839
+#, c-format
 msgid "Connection '%s' (%s) successfully updated.\n"
 msgstr "Povezava »%s« (%s) je bila uspešno posodobljena.\n"
 
-#: src/nmcli/connections.c:8686
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8873
+#, c-format
 msgid "Error: connection verification failed: %s\n"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: preverjanje povezave ni uspelo: %s\n"
 
-#: src/nmcli/connections.c:8687
+#: src/nmcli/connections.c:8874
 msgid "(unknown error)"
 msgstr "(neznana napaka)"
 
-#: src/nmcli/connections.c:8688
-#, fuzzy
+#: src/nmcli/connections.c:8875
 msgid "You may try running 'verify fix' to fix errors.\n"
-msgstr "Morda poskusite zagnati »preverjanje popravka«, da popravite napake.\n"
+msgstr "Morda poskusite zagnati »verify fix«, da popravite napake.\n"
 
 #. TRANSLATORS: do not translate 'save', leave it as it is
-#: src/nmcli/connections.c:8711
-#, fuzzy
+#: src/nmcli/connections.c:8898
 msgid "Error: connection is not saved. Type 'save' first.\n"
-msgstr "Napaka: povezava ni shranjena. Najprej vnesite »shrani«.\n"
+msgstr "Napaka: povezava ni shranjena. Najprej vnesite »save«.\n"
 
-#: src/nmcli/connections.c:8715
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8902
+#, c-format
 msgid "Error: connection is not valid: %s\n"
-msgstr "Napaka: brisanje povezave ni uspelo: %s"
+msgstr "Napaka: povezava ni veljavna: %s\n"
 
-#: src/nmcli/connections.c:8731
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8918
+#, c-format
 msgid "Error: Cannot activate connection: %s.\n"
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: Povezave ni mogoče aktivirati: %s.\n"
 
-#: src/nmcli/connections.c:8740
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8927
+#, c-format
 msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: Povezave »%s« (%s) ni bilo mogoče aktivirati: %s\n"
 
-#: src/nmcli/connections.c:8747
+#: src/nmcli/connections.c:8934
 #, fuzzy
 msgid "Monitoring connection activation (press any key to continue)\n"
 msgstr ""
 "Spremljanje aktiviranja povezave (za nadaljevanje pritisnite poljubno "
 "tipko)\n"
 
-#: src/nmcli/connections.c:8782
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8969
+#, c-format
 msgid "Error: status-line: %s\n"
-msgstr "Napaka: 'nm status': %s"
+msgstr "Napaka: status-line: %s\n"
 
-#: src/nmcli/connections.c:8790
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8977
+#, c-format
 msgid "Error: save-confirmation: %s\n"
-msgstr "Napaka: 'con list': %s"
+msgstr "Napaka: save-confirmation: %s\n"
 
-#: src/nmcli/connections.c:8798
-#, fuzzy, c-format
+#: src/nmcli/connections.c:8985
+#, c-format
 msgid "Error: show-secrets: %s\n"
-msgstr "Napaka: 'con status': %s"
+msgstr "Napaka: show-secrets: %s\n"
 
-#: src/nmcli/connections.c:8806
-#, fuzzy
+#: src/nmcli/connections.c:8993
 msgid "Current nmcli configuration:\n"
-msgstr "Trenutna konfiguracija nmkli:\n"
+msgstr "Trenutna prilagoditev nmcli:\n"
 
-#: src/nmcli/connections.c:8814
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9001
+#, c-format
 msgid "Invalid configuration option '%s'; allowed [%s]\n"
-msgstr "Neveljavna možnost konfiguracije '%s'; dovoljeno [%s]\n"
+msgstr "Neveljavna možnost prilagoditve »%s«; dovoljeno [%s]\n"
 
-#: src/nmcli/connections.c:9046
+#: src/nmcli/connections.c:9233
 #, fuzzy
 msgid "Error: only one of 'id', 'filename', uuid, or 'path' can be provided."
 msgstr ""
 "Napaka: lahko navedete samo enega od »id«, »ime datoteke«, uuid ali »pot«."
 
-#: src/nmcli/connections.c:9061
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9248
+#, c-format
 msgid "Error: Unknown connection '%s'."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: neznana povezava: »%s«."
 
-#: src/nmcli/connections.c:9078
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9266
+#, c-format
 msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
 msgstr ""
-"Opozorilo: urejanje obstoječe povezave '%s'; Argument »type« se prezre\n"
+"Opozorilo: urejanje obstoječe povezave »%s«; Argument »type« je prezrt\n"
 
-#: src/nmcli/connections.c:9082
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9270
+#, c-format
 msgid ""
 "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
 msgstr ""
-"Opozorilo: urejanje obstoječe povezave '%s'; Argument 'con-name' je prezrt\n"
+"Opozorilo: urejanje obstoječe povezave »%s«; Argument 'con-name' je prezrt\n"
 
-#: src/nmcli/connections.c:9109
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9297
+#, c-format
 msgid "Valid connection types: %s\n"
-msgstr "Žična povezava %d"
+msgstr "Veljavne vrste povezav: %s\n"
 
-#: src/nmcli/connections.c:9111
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9299
+#, c-format
 msgid "Error: invalid connection type; %s\n"
-msgstr "Napaka: neveljavna vrsta povezave; %s."
+msgstr "Napaka: neveljavna vrsta povezave; %s\n"
 
-#: src/nmcli/connections.c:9150
-#, fuzzy
+#: src/nmcli/connections.c:9338
 msgid "===| nmcli interactive connection editor |==="
-msgstr "ni dejavne povezave ali naprave"
+msgstr "===| urejevalnik interaktivnih povezav nmcli |==="
 
-#: src/nmcli/connections.c:9153
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9341
+#, c-format
 msgid "Editing existing '%s' connection: '%s'"
-msgstr "ni naprave za povezavo '%s'"
+msgstr "Urejanje obstoječe povezave »%s«: »%s«"
 
-#: src/nmcli/connections.c:9155
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9343
+#, c-format
 msgid "Adding a new '%s' connection"
-msgstr "Dejavne povezave"
+msgstr "Dodajanje nove povezave »%s«"
 
 #. TRANSLATORS: do not translate 'help', leave it as it is
-#: src/nmcli/connections.c:9158
-#, fuzzy
+#: src/nmcli/connections.c:9346
 msgid "Type 'help' or '?' for available commands."
-msgstr "Vnesite »pomoč« ali »?« za razpoložljive ukaze."
+msgstr "Vnesite »help« ali »?« za ukaze, ki so na voljo."
 
 #. TRANSLATORS: do not translate 'print', leave it as it is
-#: src/nmcli/connections.c:9161
-#, fuzzy
+#: src/nmcli/connections.c:9349
 msgid "Type 'print' to show all the connection properties."
 msgstr "Vnesite »print«, da prikažete vse lastnosti povezave."
 
 #. TRANSLATORS: do not translate 'describe', leave it as it is
-#: src/nmcli/connections.c:9164
+#: src/nmcli/connections.c:9352
 #, fuzzy
 msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
 msgstr ""
 "Za <setting><prop>podroben opis znamke</prop></setting> vnesite »opiši [.]«."
 
-#: src/nmcli/connections.c:9191
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9379
+#, c-format
 msgid "Error: Failed to modify connection '%s': %s"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: Sprememba povezave »%s« ni uspela: %s"
 
-#: src/nmcli/connections.c:9199
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9387
+#, c-format
 msgid "Connection '%s' (%s) successfully modified.\n"
-msgstr "Povezava '%s' (%s) je bila uspešno spremenjena.\n"
+msgstr "Povezava »%s« (%s) je bila uspešno spremenjena.\n"
 
-#: src/nmcli/connections.c:9272
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9460
+#, c-format
 msgid "%s (%s) cloned as %s (%s).\n"
 msgstr "%s (%s) klonirana kot %s (%s).\n"
 
-#: src/nmcli/connections.c:9330
-#, fuzzy
+#: src/nmcli/connections.c:9518
 msgid "New connection name: "
-msgstr "Povezava z VPN je spodletela"
+msgstr "Novo ime povezave: "
 
-#: src/nmcli/connections.c:9332
-#, fuzzy
+#: src/nmcli/connections.c:9520
 msgid "Error: <new name> argument is missing."
-msgstr "Napaka: manjka argument %s."
+msgstr "Napaka: argument <novo ime> manjka."
 
-#: src/nmcli/connections.c:9338 src/nmcli/connections.c:9866
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9526 src/nmcli/connections.c:10054
+#, c-format
 msgid "Error: unknown extra argument: '%s'."
-msgstr "Napaka: neznan parameter: %s"
+msgstr "Napaka: neznan dodatni argument: »%s«."
 
-#: src/nmcli/connections.c:9372
-#, fuzzy
+#: src/nmcli/connections.c:9560
 msgid "Error: not all connections deleted."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: vse povezave niso izbrisane."
 
-#: src/nmcli/connections.c:9373
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9561
+#, c-format
 msgid "Error: Connection deletion failed: %s\n"
-msgstr "Napaka: brisanje povezave ni uspelo: %s"
+msgstr "Napaka: Izbris povezave ni uspel: %s\n"
 
-#: src/nmcli/connections.c:9428 src/nmcli/connections.c:9557
-#: src/nmcli/connections.c:10019
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9616 src/nmcli/connections.c:9745
+#: src/nmcli/connections.c:10207
+#, c-format
 msgid "Error: %s.\n"
-msgstr "Napaka: %s."
+msgstr "Napaka: %s.\n"
 
-#: src/nmcli/connections.c:9429 src/nmcli/connections.c:9558
-#: src/nmcli/connections.c:10020
-#, fuzzy
+#: src/nmcli/connections.c:9617 src/nmcli/connections.c:9746
+#: src/nmcli/connections.c:10208
 msgid "Error: not all connections found."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: niso bile najdene vse povezave."
 
-#: src/nmcli/connections.c:9490
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9678
+#, c-format
 msgid "Error: cannot delete unknown connection(s): %s."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: neznanih povezav ni mogoče izbrisati: %s."
 
-#: src/nmcli/connections.c:9498
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9686
+#, c-format
 msgid "%s: connection profile changed\n"
-msgstr "povezava je spodletela"
+msgstr "%s: spremenjen profil povezave\n"
 
-#: src/nmcli/connections.c:9524
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9712
+#, c-format
 msgid "%s: connection profile created\n"
-msgstr "povezava je spodletela"
+msgstr "%s: ustvarjen profil povezave\n"
 
-#: src/nmcli/connections.c:9533
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9721
+#, c-format
 msgid "%s: connection profile removed\n"
-msgstr "povezava je odstranjena"
+msgstr "%s: profil povezave odstranjen\n"
 
-#: src/nmcli/connections.c:9601
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9789
+#, c-format
 msgid "Error: failed to reload connections: %s."
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: povezav ni bilo mogoče ponovno naložiti: %s."
 
-#: src/nmcli/connections.c:9673
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9861
+#, c-format
 msgid "Error: failed to load connection: %s."
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: nalaganje povezave ni uspelo: %s."
 
-#: src/nmcli/connections.c:9681
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9869
+#, c-format
 msgid "Could not load file '%s'\n"
-msgstr "Ni mogoče naložiti datoteke '%s'"
+msgstr "Ni mogoče naložiti datoteke »%s«\n"
 
-#: src/nmcli/connections.c:9685
-#, fuzzy
+#: src/nmcli/connections.c:9873
 msgid "File to import: "
-msgstr "Izbor datoteke za uvoz"
+msgstr "Datoteka za uvoz: "
 
-#: src/nmcli/connections.c:9716
-#, fuzzy
+#: src/nmcli/connections.c:9904
 msgid "Error: No arguments provided."
-msgstr "Napaka: manjka argument %s."
+msgstr "Napaka: Argumenti niso na voljo."
 
-#: src/nmcli/connections.c:9771
-#, fuzzy
+#: src/nmcli/connections.c:9959
 msgid "Error: 'type' argument is required."
-msgstr "Napaka: manjka argument '%s'"
+msgstr "Napaka: Argument »type« je obvezen."
 
-#: src/nmcli/connections.c:9776
-#, fuzzy
+#: src/nmcli/connections.c:9964
 msgid "Error: 'file' argument is required."
-msgstr "Napaka: manjka argument '%s'"
+msgstr "Napaka: Argument »file« je obvezen."
 
-#: src/nmcli/connections.c:9786
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9974
+#, c-format
 msgid "Error: failed to find VPN plugin for %s."
-msgstr "Napaka: 'dev list': %s"
+msgstr "Napaka: vstavka VPN za %s ni bilo mogoče najti."
 
-#: src/nmcli/connections.c:9795 src/nmcli/connections.c:9887
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9983 src/nmcli/connections.c:10075
+#, c-format
 msgid "Error: failed to load VPN plugin: %s."
-msgstr "Napaka: vtičnik VPN ni uspel naložiti: %s."
+msgstr "Napaka: vstavka VPN ni možno naložiti: %s."
 
-#: src/nmcli/connections.c:9806
-#, fuzzy, c-format
+#: src/nmcli/connections.c:9994
+#, c-format
 msgid "Error: failed to import '%s': %s."
-msgstr "Napaka: neveljaven parameter 'wimax': '%s'."
+msgstr "Napaka: uvoz »%s« ni uspel: %s."
 
-#: src/nmcli/connections.c:9872
+#: src/nmcli/connections.c:10060
 msgid "Output file name: "
 msgstr "Ime izhodne datoteke: "
 
-#: src/nmcli/connections.c:9877
-#, fuzzy
+#: src/nmcli/connections.c:10065
 msgid "Error: the connection is not VPN."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: povezava ni VPN."
 
-#: src/nmcli/connections.c:9901
-#, fuzzy, c-format
+#: src/nmcli/connections.c:10089
+#, c-format
 msgid "Error: failed to create temporary file %s."
-msgstr "Napaka: ni uspelo ustvariti začasne %s datoteke."
+msgstr "Napaka: ni bilo mogoče ustvariti začasne datoteke %s."
 
-#: src/nmcli/connections.c:9911
-#, fuzzy, c-format
+#: src/nmcli/connections.c:10099
+#, c-format
 msgid "Error: failed to export '%s': %s."
-msgstr "Napaka: 'dev status': %s"
+msgstr "Napaka: izvoz »%s« ni uspel: %s."
 
-#: src/nmcli/connections.c:9925
-#, fuzzy, c-format
+#: src/nmcli/connections.c:10113
+#, c-format
 msgid "Error: failed to read temporary file '%s': %s."
-msgstr "Napaka: ni bilo mogoče prebrati začasne datoteke '%s': %s."
+msgstr "Napaka: branje začasne datoteke »%s« ni uspelo: %s."
 
-#: src/nmcli/connections.c:9949
-#, fuzzy
+#: src/nmcli/connections.c:10137
 msgid "Error: not all connections migrated."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: vse povezave niso bile preseljene."
 
-#: src/nmcli/connections.c:9950
-#, fuzzy, c-format
+#: src/nmcli/connections.c:10138
+#, c-format
 msgid "Error: Connection migration failed: %s\n"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: Selitev povezave ni uspela: %s\n"
 
-#: src/nmcli/connections.c:9954
-#, fuzzy, c-format
+#: src/nmcli/connections.c:10142
+#, c-format
 msgid "Connection '%s' (%s) successfully migrated.\n"
-msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena."
+msgstr "Povezava »%s« (%s) je bila uspešno preseljena.\n"
 
-#: src/nmcli/connections.c:9986
-#, fuzzy
+#: src/nmcli/connections.c:10174
 msgid "'--plugin' argument is missing"
-msgstr "Napaka: manjka argument '%s'"
+msgstr "Manjka argument '--plugin'"
 
-#: src/nmcli/connections.c:10082
-#, fuzzy, c-format
+#: src/nmcli/connections.c:10270
+#, c-format
 msgid "Error: cannot migrate unknown connection(s): %s."
-msgstr "Napaka: neznana povezava: %s."
+msgstr "Napaka: ni mogoče preseliti neznanih povezav: %s."
 
 #. define some prompts
 #: src/nmcli/devices.c:29
@@ -14567,12 +14416,12 @@ msgstr "(brez)"
 #: src/nmcli/devices.c:374
 #, fuzzy, c-format
 msgid "<invisible> | %s"
-msgstr "<invisible> | %s</invisible>"
+msgstr "<invisible> | %s"
 
 #: src/nmcli/devices.c:375
 #, fuzzy
 msgid "<invisible>"
-msgstr "Nevidne plasti"
+msgstr "<invisible>"
 
 #: src/nmcli/devices.c:482
 #, c-format
@@ -15053,34 +14902,31 @@ msgstr ""
 "</seconds>"
 
 #: src/nmcli/devices.c:1162
-#, fuzzy
 msgid "Error: No interface specified."
-msgstr "Napaka: iface nastavitev mora določena."
+msgstr "Napaka: Vmesnik ni določen."
 
 #: src/nmcli/devices.c:1192
-#, fuzzy, c-format
+#, c-format
 msgid "Warning: argument '%s' is duplicated.\n"
 msgstr "Opozorilo: argument »%s« je podvojen.\n"
 
 #: src/nmcli/devices.c:1195
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Device '%s' not found.\n"
-msgstr "Napaka: naprave »%s« ni mogoče najti"
+msgstr "Napaka: naprave »%s« ni mogoče najti.\n"
 
 #: src/nmcli/devices.c:1196 src/nmcli/devices.c:5239
-#, fuzzy
 msgid "Error: not all devices found."
-msgstr "Napaka: ni mogoče najti ustrezne naprave."
+msgstr "Napaka: vse naprave niso najdene."
 
 #: src/nmcli/devices.c:1225
-#, fuzzy
 msgid "No interface specified"
 msgstr "Vmesnik ni določen"
 
 #: src/nmcli/devices.c:1246
-#, fuzzy, c-format
+#, c-format
 msgid "Device '%s' not found"
-msgstr "Naprava »%s« ni najdena za povezavo »%s«"
+msgstr "Naprave »%s« ni mogoče najti"
 
 #: src/nmcli/devices.c:1362 src/nmcli/devices.c:1364
 #, c-format
@@ -15097,7 +14943,6 @@ msgid "Ad-Hoc"
 msgstr "Ad-hoc"
 
 #: src/nmcli/devices.c:1414
-#, fuzzy
 msgid "Infra"
 msgstr "Infra"
 
@@ -15110,18 +14955,18 @@ msgid "Device details"
 msgstr "Podrobnosti naprave"
 
 #: src/nmcli/devices.c:1624
-#, fuzzy, c-format
+#, c-format
 msgid "Error: 'device show': %s"
-msgstr "Napaka: 'dev list': %s"
+msgstr "Napaka: 'device show': %s"
 
 #: src/nmcli/devices.c:2002
 msgid "Status of devices"
 msgstr "Stanje naprav"
 
 #: src/nmcli/devices.c:2006
-#, fuzzy, c-format
+#, c-format
 msgid "Error: 'device status': %s"
-msgstr "Napaka: 'dev status': %s"
+msgstr "Napaka: 'device status': %s"
 
 #: src/nmcli/devices.c:2069 src/nmcli/general.c:535
 #, c-format
@@ -15129,68 +14974,65 @@ msgid "Error: Timeout %d sec expired."
 msgstr "Napaka: časovna omejitev %d s je potekla."
 
 #: src/nmcli/devices.c:2146
-#, fuzzy, c-format
+#, c-format
 msgid "Device '%s' successfully activated with '%s'.\n"
-msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena."
+msgstr "Naprava »%s« uspešno aktivirana s/z »%s«.\n"
 
 #: src/nmcli/devices.c:2152
-#, fuzzy
 msgid ""
 "Hint: \"nmcli dev wifi show-password\" shows the Wi-Fi name and password.\n"
 msgstr "Namig: »nmcli dev wifi show-password« prikazuje ime in geslo Wi-Fi.\n"
 
 #: src/nmcli/devices.c:2156
-#, fuzzy, c-format
-#| msgid "Error: Connection activation failed: %s"
+#, c-format
 msgid "Error: Connection activation failed: %s."
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: aktiviranje povezave ni uspelo: %s."
 
 #: src/nmcli/devices.c:2198
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Failed to setup a Wi-Fi hotspot: %s"
 msgstr "Napaka: Nastavitev dostopne točke Wi-Fi ni uspela: %s"
 
 #: src/nmcli/devices.c:2202
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Failed to add/activate new connection: %s"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: dodajanje/aktiviranje nove povezave je spodletelo: %s"
 
 #: src/nmcli/devices.c:2206
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Failed to activate connection: %s"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Napaka: Povezave ni bilo mogoče aktivirati: %s"
 
 #: src/nmcli/devices.c:2287
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Device activation failed: %s"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: Aktivacija naprave ni uspela: %s"
 
 #: src/nmcli/devices.c:2343
-#, fuzzy, c-format
+#, c-format
 msgid "Error: extra argument not allowed: '%s'."
-msgstr "Napaka: manjka argument za možnost '%s'."
+msgstr "Napaka: dodatni argument ni dovoljen: '%s'."
 
 #: src/nmcli/devices.c:2412 src/nmcli/devices.c:2425 src/nmcli/devices.c:2680
-#, fuzzy, c-format
+#, c-format
 msgid "Device '%s' successfully disconnected.\n"
-msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena."
+msgstr "Naprava »%s« uspešno odklopljena.\n"
 
 #: src/nmcli/devices.c:2414 src/nmcli/devices.c:2751
-#, fuzzy, c-format
+#, c-format
 msgid "Device '%s' successfully removed.\n"
-msgstr "Obvestilo: povezava naprave '%s' je uspešno prekinjena."
+msgstr "Naprava »%s« uspešno odstranjena.\n"
 
 #: src/nmcli/devices.c:2474 src/nmcli/devices.c:2556
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Reapplying connection to device '%s' (%s) failed: %s"
-msgstr "Napaka: prišlo je do napake med prekinjanjem naprave '%s' (%s): %s"
+msgstr ""
+"Napaka: Vnovična vzpostavitev povezave z napravo »%s« (%s) ni uspela: %s"
 
 #: src/nmcli/devices.c:2484 src/nmcli/devices.c:2565
-#, fuzzy, c-format
+#, c-format
 msgid "Connection successfully reapplied to device '%s'.\n"
-msgstr "Povezava je uspešno vzpostavljena (dejavna pot vodila D-Bus: %s)\n"
+msgstr "Povezava je bila uspešno ponovno uporabljena za napravo »%s«.\n"
 
 #: src/nmcli/devices.c:2587
 #, fuzzy, c-format
@@ -15198,29 +15040,26 @@ msgid "Error: Reading applied connection from device '%s' (%s) failed: %s"
 msgstr "Napaka: Branje uporabljene povezave iz naprave »%s« (%s) ni uspelo: %s"
 
 #: src/nmcli/devices.c:2664
-#, fuzzy
 msgid "Error: not all devices disconnected."
-msgstr "Napaka: ni mogoče najti ustrezne naprave."
+msgstr "Napaka: vse naprave niso bile odklopljene."
 
 #: src/nmcli/devices.c:2665
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Device '%s' (%s) disconnecting failed: %s\n"
-msgstr "Napaka: prišlo je do napake med prekinjanjem naprave '%s' (%s): %s"
+msgstr "Napaka: Prekinitev povezave naprave »%s« (%s) ni uspela: %s\n"
 
 #: src/nmcli/devices.c:2742
-#, fuzzy
 msgid "Error: not all devices deleted."
-msgstr "Napaka: ni mogoče najti ustrezne naprave."
+msgstr "Napaka: vse naprave niso izbrisane."
 
 #: src/nmcli/devices.c:2743
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Device '%s' (%s) deletion failed: %s\n"
-msgstr "Napaka: prišlo je do napake med prekinjanjem naprave '%s' (%s): %s"
+msgstr "Napaka: Izbris naprave »%s« (%s) ni uspel: %s\n"
 
 #: src/nmcli/devices.c:2821
-#, fuzzy
 msgid "Error: No property specified."
-msgstr "Napaka: ni podanega veljavnega parametra."
+msgstr "Napaka: Lastnost ni določena."
 
 #: src/nmcli/devices.c:2838 src/nmcli/devices.c:2857 src/nmcli/general.c:805
 #: src/nmcli/general.c:827
@@ -15229,39 +15068,38 @@ msgid "Error: '%s' argument is missing."
 msgstr "Napaka: manjka argument »%s«"
 
 #: src/nmcli/devices.c:2846
-#, fuzzy, c-format
+#, c-format
 msgid "Error: 'managed': %s."
-msgstr "Napaka: 'dev wimax': %s"
+msgstr "Napaka: 'managed': %s."
 
 #: src/nmcli/devices.c:2865
-#, fuzzy, c-format
+#, c-format
 msgid "Error: 'autoconnect': %s."
-msgstr "Napaka: 'con list': %s"
+msgstr "Napaka: 'autoconnect': %s."
 
 #: src/nmcli/devices.c:2872 src/nmcli/general.c:877
-#, fuzzy, c-format
+#, c-format
 msgid "Error: property '%s' is not known."
-msgstr "Napaka: naprave '%s' ni mogoče najti"
+msgstr "Napaka: lastnost »%s« ni znana."
 
 #: src/nmcli/devices.c:2919
-#, fuzzy, c-format
+#, c-format
 msgid "%s: using connection '%s'\n"
-msgstr "Povezava vezi %d"
+msgstr "%s: uporaba povezave »%s«\n"
 
 #: src/nmcli/devices.c:2945
-#, fuzzy, c-format
+#, c-format
 msgid "%s: device created\n"
 msgstr "%s: ustvarjena naprava\n"
 
 #: src/nmcli/devices.c:2952
-#, fuzzy, c-format
+#, c-format
 msgid "%s: device removed\n"
-msgstr "Naprava je bila odstranjena"
+msgstr "%s: naprava je odstranjena\n"
 
 #: src/nmcli/devices.c:3132
-#, fuzzy
 msgid "Wi-Fi scan list"
-msgstr "Wi-Fi seznam preiskovanja"
+msgstr "Seznam preiskovanja Wi-Fi"
 
 #: src/nmcli/devices.c:3249 src/nmcli/devices.c:3530
 #, c-format
@@ -15271,13 +15109,14 @@ msgstr "Napaka: dostopne točke z bssid »%s« ni mogoče najti."
 #: src/nmcli/devices.c:3451
 #, fuzzy, c-format
 msgid "Error: 'device wifi': %s"
-msgstr "Napaka: 'dev wifi': %s"
+msgstr "Napaka: 'device wifi': %s"
 
 #: src/nmcli/devices.c:3471
-#, fuzzy, c-format
+#, c-format
 msgid "Error: invalid rescan argument: '%s' not among [auto, no, yes]"
 msgstr ""
-"Napaka: neveljaven parameter 'sleep': '%s'; uporabite 'true' ali 'false'."
+"Napaka: neveljaven argument ponovnega pregledovanja: »%s« ni eden izmed "
+"[auto, no, yes]"
 
 #: src/nmcli/devices.c:3510
 #, c-format
@@ -15285,11 +15124,13 @@ msgid "Error: Device '%s' not found."
 msgstr "Napaka: naprave »%s« ni mogoče najti"
 
 #: src/nmcli/devices.c:3514
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Error: Device '%s' was not recognized as a Wi-Fi device, check "
 "NetworkManager Wi-Fi plugin."
-msgstr "Napaka: naprava '%s' ni naprava Wi-Fi."
+msgstr ""
+"Napaka: Naprava »%s« ni bila prepoznana kot naprava Wi-Fi, preverite vstavek "
+"NetworkManager Wi-Fi."
 
 #: src/nmcli/devices.c:3519 src/nmcli/devices.c:3870 src/nmcli/devices.c:4484
 #: src/nmcli/devices.c:4619 src/nmcli/devices.c:4754
@@ -15298,7 +15139,6 @@ msgid "Error: Device '%s' is not a Wi-Fi device."
 msgstr "Napaka: naprava »%s« ni naprava Wi-Fi."
 
 #: src/nmcli/devices.c:3698
-#, fuzzy
 msgid "SSID or BSSID: "
 msgstr "SSID ali BSSID: "
 
@@ -15341,7 +15181,7 @@ msgid "Error: No Wi-Fi device found."
 msgstr "Napaka: naprave Wi-Fi ni mogoče najti."
 
 #: src/nmcli/devices.c:3895
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Failed to scan hidden SSID: %s."
 msgstr "Napaka: Skritega SSID-ja ni bilo mogoče pregledati: %s."
 
@@ -15356,7 +15196,7 @@ msgid "Error: No access point with BSSID '%s' found."
 msgstr "Napaka: dostopne točke z BSSID »%s« ni mogoče najti."
 
 #: src/nmcli/devices.c:3960
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Connection '%s' exists but properties don't match."
 msgstr "Napaka: Povezava »%s« obstaja, vendar se lastnosti ne ujemajo."
 
@@ -15369,56 +15209,53 @@ msgstr ""
 "kot BSSID.\n"
 
 #: src/nmcli/devices.c:4177
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not valid WPA PSK"
-msgstr "\"%s\" ni veljaven WPA PSK"
+msgstr "»%s« ni veljaven WPA PSK"
 
 #: src/nmcli/devices.c:4198
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not valid WEP key (it should be 5 or 13 ASCII chars)"
 msgstr "»%s« ni veljaven ključ WEP (mora biti 5 ali 13 znakov ASCII)"
 
 #: src/nmcli/devices.c:4217
-#, fuzzy, c-format
+#, c-format
 msgid "Hotspot password: %s\n"
 msgstr "Geslo za dostopno točko: %s\n"
 
 #: src/nmcli/devices.c:4400
-#, fuzzy
 msgid "Error: ssid is too long."
-msgstr "Napaka: naprave '%s' ni mogoče najti"
+msgstr "Napaka: ssid je predolg."
 
 #: src/nmcli/devices.c:4418
-#, fuzzy, c-format
+#, c-format
 msgid "Error: band argument value '%s' is invalid; use 'a' or 'bg'."
 msgstr ""
-"Napaka: vrednost wep-key-type '%s' ni veljavna, uporabljena sta lahko le "
-"'key' ali 'phrase'."
+"Napaka: Vrednost argumenta pasu »%s« je neveljavna; Uporabite 'a' ali 'bg'."
 
 #: src/nmcli/devices.c:4462
-#, fuzzy
 msgid "Error: channel requires band too."
 msgstr "Napaka: kanal zahteva tudi pas."
 
 #: src/nmcli/devices.c:4469
-#, fuzzy, c-format
+#, c-format
 msgid "Error: channel '%s' not valid for band '%s'."
-msgstr "Napaka: '%s' ni veljaven argument za možnost '%s'."
+msgstr "Napaka: kanal »%s« ne velja za pas »%s«."
 
 #: src/nmcli/devices.c:4500
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Device '%s' supports neither AP nor Ad-Hoc mode."
-msgstr "Napaka: naprava '%s' ni veljavna Wi-Fi naprava."
+msgstr "Napaka: Naprava »%s« ne podpira niti načina AP niti Ad-Hoc."
 
 #: src/nmcli/devices.c:4527
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Invalid 'password': %s."
-msgstr "Napaka: neveljaven 'wifi' parameter: '%s'."
+msgstr "Napaka: Neveljavno geslo ‘password’: %s."
 
 #: src/nmcli/devices.c:4578 src/nmcli/devices.c:4808
-#, fuzzy, c-format
+#, c-format
 msgid "Error: '%s' cannot repeat."
-msgstr "Napaka: naprave '%s' ni mogoče najti"
+msgstr "Napaka: »%s« se ne more ponoviti."
 
 #: src/nmcli/devices.c:4713 src/nmcli/devices.c:4716 src/nmcli/devices.c:4720
 #: src/nmcli/devices.c:4723 src/nmtui/nmt-page-wifi.c:269
@@ -15440,9 +15277,8 @@ msgid "Error: 'device lldp list': %s"
 msgstr "Napaka: 'dev list': %s"
 
 #: src/nmcli/devices.c:5096
-#, fuzzy
 msgid "Checkpoint was removed."
-msgstr "povezava je odstranjena"
+msgstr "Nadzorna točka je bila odstranjena."
 
 #. The command is done, we're in the confirmation prompt.
 #: src/nmcli/devices.c:5103
@@ -15450,38 +15286,37 @@ msgid "No"
 msgstr "Ne"
 
 #: src/nmcli/devices.c:5116
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Destroying a checkpoint failed: %s"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: Uničenje kontrolne točke ni uspelo: %s"
 
 #: src/nmcli/devices.c:5138 src/nmcli/devices.c:5139
 msgid "Yes"
 msgstr "Da"
 
 #: src/nmcli/devices.c:5165
-#, fuzzy, c-format
-#| msgid "Error: Connection activation failed: %s"
+#, c-format
 msgid "Error: Creating a checkpoint failed: %s"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: Ustvarjanje kontrolne točke ni uspelo: %s"
 
 #: src/nmcli/devices.c:5181
 #, c-format
 msgid "Error: %s"
 msgstr "Napaka: %s"
 
-#: src/nmcli/devices.c:5220 src/nmcli/nmcli.c:890
-#, fuzzy, c-format
+#: src/nmcli/devices.c:5220 src/nmcli/nmcli.c:891
+#, c-format
 msgid "Error: '%s' is not a valid timeout."
 msgstr "Napaka: »%s« ni veljavna časovna omejitev."
 
 #: src/nmcli/devices.c:5247
 #, fuzzy
 msgid "Error: Expected a command to run after '--'"
-msgstr "Napaka: manjka argument za možnost '%s'."
+msgstr "Napaka: Pričakovano je, da se bo po »--« zagnal ukaz"
 
 #: src/nmcli/general.c:31
-msgid "asleep"
-msgstr "v mirovanju"
+msgid "network off"
+msgstr "omrežje izklopljeno"
 
 #: src/nmcli/general.c:32
 msgid "connecting"
@@ -15508,19 +15343,16 @@ msgid "running"
 msgstr "v teku"
 
 #: src/nmcli/general.c:138
-#, fuzzy
 msgid "starting"
-msgstr "Začenjanje"
+msgstr "začenjanje"
 
 #: src/nmcli/general.c:138
-#, fuzzy
 msgid "started"
-msgstr "Začeto"
+msgstr "začeto"
 
 #: src/nmcli/general.c:151 src/nmcli/general.c:162
-#, fuzzy
 msgid "missing"
-msgstr "Manjkajoče"
+msgstr "manjka"
 
 #: src/nmcli/general.c:187
 msgid "enabled"
@@ -15889,9 +15721,9 @@ msgid "NetworkManager permissions"
 msgstr "Dovoljenja programa NetworkManager"
 
 #: src/nmcli/general.c:588
-#, fuzzy, c-format
+#, c-format
 msgid "Error: 'general permissions': %s"
-msgstr "Napaka: 'nm permissions': %s"
+msgstr "Napaka: 'general permissions': %s"
 
 #: src/nmcli/general.c:635
 #, c-format
@@ -15899,10 +15731,11 @@ msgid "Error: failed to reload: %s"
 msgstr "Napaka: ni bilo mogoče znova naložiti: %s"
 
 #: src/nmcli/general.c:676
-#, fuzzy, c-format
+#, c-format
 msgid "Error: invalid reload flag '%s'. Allowed flags are: %s"
 msgstr ""
-"Napaka: neveljaven parameter 'sleep': '%s'; uporabite 'true' ali 'false'."
+"Napaka: neveljavna zastavica za ponovno nalaganje »%s«. Dovoljene zastavice "
+"so: %s"
 
 #: src/nmcli/general.c:687
 #, c-format
@@ -15910,9 +15743,8 @@ msgid "Error: extra argument '%s'"
 msgstr "Napaka: dodatni argument »%s«"
 
 #: src/nmcli/general.c:738
-#, fuzzy
 msgid "NetworkManager logging"
-msgstr "Dovoljenja programa NetworkManager"
+msgstr "Beleženje v zapisnik NetworkManager"
 
 #: src/nmcli/general.c:742
 #, fuzzy, c-format
@@ -15920,29 +15752,30 @@ msgid "Error: 'general logging': %s"
 msgstr "Napaka: 'con list': %s"
 
 #: src/nmcli/general.c:775
-#, fuzzy, c-format
+#, c-format
 msgid "Error: failed to set logging: %s"
-msgstr "Napaka: 'dev list': %s"
+msgstr "Napaka: pisanje zapisnika ni bilo mogoče nastaviti: %s"
 
 #: src/nmcli/general.c:908
-#, fuzzy, c-format
+#, c-format
 msgid "Error: failed to set hostname: %s"
-msgstr "Določanje maske signala je spodletelo: %d"
+msgstr "Napaka: ni bilo mogoče nastaviti imena gostitelja: %s"
 
 #: src/nmcli/general.c:969
-#, fuzzy, c-format
+#, c-format
 msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
-msgstr "Napaka: vrednost '--fields' '%s' ni veljavna, dovoljena polja: %s"
+msgstr ""
+"Napaka: Vrednost »--fields« »%s« tukaj ni veljavna (dovoljeno polje: %s)"
 
 #: src/nmcli/general.c:996
-#, fuzzy, c-format
+#, c-format
 msgid "Error: invalid '%s' argument: '%s' (use on/off)."
-msgstr "Napaka: neveljaven 'wifi' parameter: '%s'."
+msgstr "Napaka: neveljaven argument »%s«: »%s« (uporabite on/off)."
 
 #: src/nmcli/general.c:1022
-#, fuzzy, c-format
+#, c-format
 msgid "Error: failed to set networking: %s"
-msgstr "Napaka: 'dev list': %s"
+msgstr "Napaka: ni bilo mogoče nastaviti omreževanja: %s"
 
 #. no arguments -> get current state
 #: src/nmcli/general.c:1067 src/nmcli/general.c:1079
@@ -15963,7 +15796,7 @@ msgstr "Omogoči ali onemogoči sistemske omrežne povezave"
 #: src/nmcli/general.c:1124
 #, fuzzy
 msgid "Radio switches"
-msgstr "Radijske stikala"
+msgstr "Radijska stikala"
 
 #: src/nmcli/general.c:1150
 #, fuzzy, c-format
@@ -15972,52 +15805,45 @@ msgstr "Napaka: 'dev list': %s"
 
 #. no argument, show current Wi-Fi state
 #: src/nmcli/general.c:1168
-#, fuzzy
 msgid "Wi-Fi radio switch"
-msgstr "Radijski stikalo Wi-Fi"
+msgstr "Radijsko stikalo Wi-Fi"
 
 #. no argument, show current WWAN (mobile broadband) state
 #: src/nmcli/general.c:1204
-#, fuzzy
 msgid "WWAN radio switch"
-msgstr "Radijske stikalo WWAN"
+msgstr "Radijsko stikalo WWAN"
 
 #: src/nmcli/general.c:1244
-#, fuzzy
 msgid "NetworkManager is running"
-msgstr ""
-"Prišlo je do napake, zato brezžičnega omrežja ni mogoče uporabljati.\n"
-"Podrobnosti o napaki: program NetworkManager ni zagnan."
+msgstr "NetworkManager je zagnan"
 
 #: src/nmcli/general.c:1244
-#, fuzzy
 msgid "NetworkManager is stopped"
-msgstr "Stanje NetworkManager"
+msgstr "NetworkManager je ustavljen"
 
 #: src/nmcli/general.c:1255
-#, fuzzy, c-format
+#, c-format
 msgid "Hostname set to '%s'\n"
 msgstr "Ime gostitelja je nastavljeno na »%s«\n"
 
 #: src/nmcli/general.c:1270
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is now the primary connection\n"
-msgstr "Napaka: '%s' ni dejavna povezava."
+msgstr "»%s« je zdaj primarna povezava\n"
 
 #: src/nmcli/general.c:1272
-#, fuzzy
 msgid "There's no primary connection\n"
-msgstr "Primarna povezava ni\n"
+msgstr "Primarne povezave ni\n"
 
 #: src/nmcli/general.c:1285
-#, fuzzy, c-format
+#, c-format
 msgid "Connectivity is now '%s'\n"
-msgstr "Povezljivost je zdaj \"%s\"\n"
+msgstr "Povezljivost je zdaj »%s«\n"
 
 #: src/nmcli/general.c:1300
-#, fuzzy, c-format
+#, c-format
 msgid "Networkmanager is now in the '%s' state\n"
-msgstr "NetworkManager je prešel v pripravljenost"
+msgstr "NetworkManager je zdaj v stanju »%s«\n"
 
 #: src/nmcli/general.c:1321
 #, fuzzy
@@ -16059,17 +15885,14 @@ msgid "sw"
 msgstr "sw"
 
 #: src/nmcli/general.c:1394
-#, fuzzy
 msgid "hw"
-msgstr "Hw"
+msgstr "hw"
 
 #: src/nmcli/general.c:1396
-#, fuzzy
 msgid "sriov"
-msgstr "Šriov"
+msgstr "sriov"
 
 #: src/nmcli/general.c:1399
-#, fuzzy
 msgid "iface"
 msgstr "iface"
 
@@ -16078,28 +15901,23 @@ msgid "port"
 msgstr "vrata"
 
 #: src/nmcli/general.c:1408
-#, fuzzy
 msgid "mtu"
-msgstr "_MTU"
+msgstr "mtu"
 
 #: src/nmcli/general.c:1429
-#, fuzzy
-#| msgid "Controller"
 msgid "controller"
-msgstr "Brez krmilnika"
+msgstr "krmilnik"
 
-#: src/nmcli/general.c:1433 src/nmtui/nm-editor-utils.c:255
-#: src/nmtui/nmt-connect-connection-list.c:393
+#: src/nmcli/general.c:1433 src/nmtui/nm-editor-utils.c:263
+#: src/nmtui/nmt-connect-connection-list.c:394
 msgid "VPN"
 msgstr "VPN"
 
 #: src/nmcli/general.c:1435
-#, fuzzy
 msgid "ip4 default"
 msgstr "IP4 privzeto"
 
 #: src/nmcli/general.c:1437
-#, fuzzy
 msgid "ip6 default"
 msgstr "IP6 privzeto"
 
@@ -16109,10 +15927,10 @@ msgid "%s VPN connection"
 msgstr "Povezava VPN %s"
 
 #: src/nmcli/general.c:1541
-#, fuzzy, c-format
+#, c-format
 msgctxt "nmcli-overview"
 msgid "%s: %s to %s"
-msgstr "%s (vključuje %s, %s, %s, %s in %s)"
+msgstr "%s: %s do %s"
 
 #: src/nmcli/general.c:1550
 #, c-format
@@ -16121,7 +15939,6 @@ msgid "%s: %s"
 msgstr "%s: %s"
 
 #: src/nmcli/general.c:1601
-#, fuzzy
 msgid ""
 "Use \"nmcli device show\" to get complete information about known devices "
 "and\n"
@@ -16130,17 +15947,17 @@ msgid ""
 "Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage "
 "details.\n"
 msgstr ""
-"Uporabite »prikaz naprave nmkli«, da pridobite popolne informacije o znanih "
+"Uporabite »nmcli device show«, da pridobite popolne informacije o znanih "
 "napravah in\n"
-"»NMCLI Connection Show« za pregled aktivnih profilov povezave.\n"
+"»nmcli connection show« za pregled aktivnih profilov povezave.\n"
 "\n"
 "Za popolne podrobnosti o uporabi si oglejte strani priročnika nmcli(1) in "
 "nmcli-examples(7).\n"
 
 #: src/nmcli/general.c:1618
-#, fuzzy, c-format
+#, c-format
 msgid "Error: 'monitor' command '%s' is not valid."
-msgstr "Napaka: ukaz 'con' '%s' ni veljaven."
+msgstr "Napaka: ukaz 'monitor' »%s« ni veljaven."
 
 #: src/nmcli/nmcli.c:246
 #, fuzzy
@@ -16174,7 +15991,7 @@ msgid ""
 "  m[onitor]       monitor NetworkManager changes\n"
 "\n"
 msgstr ""
-"Uporaba: nmcli [MOŽNOSTI] OBJECT { UKAZ | pomoč }\n"
+"Uporaba: nmcli [MOŽNOSTI] PREDMET { UKAZ | help }\n"
 "\n"
 "MOŽNOSTI\n"
 "  -a, --ask ask za manjkajoče parametre\n"
@@ -16201,189 +16018,180 @@ msgstr ""
 "  a[gent] NetworkManager tajni agent ali polkit agent\n"
 "  m[onitor] spremlja spremembe v NetworkManagerju\n"
 "\n"
-"</seconds></field,...></field,...>"
+"</seconds></field,...></field,...>\n"
 
 #: src/nmcli/nmcli.c:318
 #, c-format
 msgid "Error: missing argument for '%s' option."
 msgstr "Napaka: manjka argument za možnost »%s«."
 
-#: src/nmcli/nmcli.c:635
-#, fuzzy, c-format
+#: src/nmcli/nmcli.c:636
+#, c-format
 msgid "Unexpected end of file following '%s'\n"
 msgstr "Nepričakovan konec datoteke po »%s«\n"
 
-#: src/nmcli/nmcli.c:642
-#, fuzzy, c-format
+#: src/nmcli/nmcli.c:643
+#, c-format
 msgid "Expected whitespace following '%s'\n"
-msgstr "Pričakovani presledki po »%s«\n"
+msgstr "Pričakovani presledek za »%s«\n"
 
-#: src/nmcli/nmcli.c:653
-#, fuzzy, c-format
+#: src/nmcli/nmcli.c:654
+#, c-format
 msgid "Expected a value for '%s'\n"
-msgstr "Pričakovana je vrednost GdaBinary, pridobljena pa %s"
+msgstr "Pričakovana vrednost za »%s«\n"
 
-#: src/nmcli/nmcli.c:669
-#, fuzzy, c-format
+#: src/nmcli/nmcli.c:670
+#, c-format
 msgid "Expected a line break following '%s'\n"
-msgstr "Pričakovali so prelom vrstice po pesmi »%s«\n"
+msgstr "Pričakovan prelom vrstice po »%s«\n"
 
-#: src/nmcli/nmcli.c:797
+#: src/nmcli/nmcli.c:798
 msgid "Error: Option '--terse' is specified the second time."
 msgstr "Napaka: možnost »--terse« je podana dvakrat."
 
-#: src/nmcli/nmcli.c:803
+#: src/nmcli/nmcli.c:804
 msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
 msgstr "Napaka: možnosti »--terse« in »--pretty« se med seboj izključujeta."
 
-#: src/nmcli/nmcli.c:811
+#: src/nmcli/nmcli.c:812
 msgid "Error: Option '--pretty' is specified the second time."
 msgstr "Napaka: možnost »--pretty« je podana dvakrat."
 
-#: src/nmcli/nmcli.c:817
+#: src/nmcli/nmcli.c:818
 msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
 msgstr "Napaka: možnosti »--pretty« in »--tearse« se med seboj izključujeta."
 
-#: src/nmcli/nmcli.c:832
-#, fuzzy, c-format
+#: src/nmcli/nmcli.c:833
+#, c-format
 msgid "Error: '%s' is not a valid argument for '%s' option."
 msgstr "Napaka: »%s« ni veljaven argument za možnost »%s«."
 
-#: src/nmcli/nmcli.c:849 src/nmcli/nmcli.c:864
+#: src/nmcli/nmcli.c:850 src/nmcli/nmcli.c:865
 #, c-format
 msgid "Error: '%s' is not valid argument for '%s' option."
 msgstr "Napaka: »%s« ni veljaven argument za možnost »%s«."
 
-#: src/nmcli/nmcli.c:897
+#: src/nmcli/nmcli.c:898
 #, c-format
 msgid "nmcli tool, version %s\n"
 msgstr "orodje nmcli, različica %s\n"
 
-#: src/nmcli/nmcli.c:906
+#: src/nmcli/nmcli.c:907
 #, c-format
 msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
 msgstr "Napaka: možnost »%s« ni prepoznana, poskusite »nmcli -help«."
 
-#: src/nmcli/nmcli.c:964 src/nmcli/nmcli.c:973
-#, fuzzy, c-format
+#: src/nmcli/nmcli.c:965 src/nmcli/nmcli.c:974
+#, c-format
 msgid "Error: nmcli terminated by signal %s (%d)"
-msgstr "Napaka: nmcli se konča s signalom %s (%d)"
+msgstr "Napaka: nmcli okončan s signalom %s (%d)"
 
-#: src/nmcli/nmcli.c:1040
+#: src/nmcli/nmcli.c:1041
 msgid "Success"
 msgstr "Uspešno zaključeno"
 
 #: src/nmcli/polkit-agent.c:40
-#, fuzzy, c-format
+#, c-format
 msgid "Error: polkit agent failed: %s\n"
-msgstr "Napaka: začenjanje povezave ni uspelo: %s."
+msgstr "Napaka: agent polkit ni uspel: %s\n"
 
 #: src/nmcli/polkit-agent.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "Warning: polkit agent initialization failed: %s\n"
-msgstr "Začenjanje modema spodletelo"
+msgstr "Opozorilo: inicializacija agenta polkit ni uspela: %s\n"
 
 #: src/nmcli/settings.c:32
-#, fuzzy, c-format
+#, c-format
 msgid "Do you also want to set '%s' to '%s'? [yes]: "
 msgstr "Ali želite tudi nastaviti '%s' na '%s'? [da]: "
 
 #: src/nmcli/settings.c:34
-#, fuzzy, c-format
+#, c-format
 msgid "Do you also want to clear '%s'? [yes]: "
-msgstr "Ali želite tudi vi počistiti '%s'? [da]: "
+msgstr "Ali želite tudi počistiti '%s'? [da]: "
 
-#: src/nmcli/settings.c:249
-#, fuzzy, c-format
+#: src/nmcli/settings.c:250
+#, c-format
 msgid ""
 "Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
 msgstr ""
-"Opozorilo: %s. %s nastavljen na »%s«, vendar ga lahko v infrastrukturnem "
+"Opozorilo: %s.%s nastavljen na »%s«, vendar ga lahko v infrastrukturnem "
 "načinu prezrete\n"
 
-#: src/nmcli/settings.c:269
-#, fuzzy, c-format
+#: src/nmcli/settings.c:270
+#, c-format
 msgid "Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"
 msgstr ""
-"Opozorilo: nastavitev %s. %s zahteva odstranitev nastavitev IPv4 in IPv6\n"
+"Opozorilo: nastavitev %s.%s zahteva odstranitev nastavitev IPv4 in IPv6\n"
 
-#: src/nmcli/settings.c:272
-#, fuzzy
+#: src/nmcli/settings.c:273
 msgid "Do you want to remove them? [yes] "
 msgstr "Ali jih želite odstraniti? [da] "
 
-#: src/nmcli/settings.c:379
-#, fuzzy, c-format
+#: src/nmcli/settings.c:380
+#, c-format
 msgid "Warning: %s is not an UUID of any existing connection profile\n"
 msgstr "Opozorilo: %s ni UUID nobenega obstoječega profila povezave\n"
 
-#: src/nmcli/settings.c:384 src/nmcli/settings.c:397
-#, fuzzy, c-format
+#: src/nmcli/settings.c:385 src/nmcli/settings.c:398
+#, c-format
 msgid "'%s' is not a VPN connection profile"
-msgstr "Povezava z VPN je spodletela"
+msgstr "»%s« ni profil povezave VPN"
 
-#: src/nmcli/settings.c:391
-#, fuzzy, c-format
+#: src/nmcli/settings.c:392
+#, c-format
 msgid "'%s' is not a name of any existing profile"
-msgstr "Povezava z VPN je spodletela"
+msgstr "\"%s\" ni ime nobenega obstoječega profila"
 
-#: src/nmcli/settings.c:437
+#: src/nmcli/settings.c:438
 #, c-format
 msgid "Warning: %s\n"
 msgstr "Opozorilo: %s\n"
 
-#: src/nmcli/settings.c:440
-#, fuzzy, c-format
+#: src/nmcli/settings.c:441
+#, c-format
 msgid "Info: %s\n"
-msgstr ""
-"PODATKI:\n"
-"%s\n"
+msgstr "Informacije: %s\n"
 
-#: src/nmcli/settings.c:551
-#, fuzzy
+#: src/nmcli/settings.c:552
 msgid "don't know how to get the property value"
-msgstr "Ne vem, kako dobiti vrednost nepremičnine"
+msgstr "ni znano, kako dobiti vrednost lastnosti"
 
-#: src/nmcli/settings.c:647
-#, fuzzy
+#: src/nmcli/settings.c:648
 msgid "the property can't be changed"
-msgstr "Nepremičnine ni mogoče spremeniti"
+msgstr "lastnosti ni mogoče spremeniti"
 
-#: src/nmcli/settings.c:733
-#, fuzzy
+#: src/nmcli/settings.c:734
 msgid "[NM property description]"
-msgstr "[Opis namestitve NM]"
+msgstr "[Opis lastnosti NM]"
 
-#: src/nmcli/settings.c:743
-#, fuzzy
+#: src/nmcli/settings.c:744
 msgid "[nmcli specific description]"
 msgstr "[Specifični opis NMCLI]"
 
 #: src/nmcli/utils.c:308
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Argument '%s' was expected, but '%s' provided."
-msgstr ""
-"Napaka: Argument »%s« je bil pričakovan, vendar je bil zagotovljen »%s«."
+msgstr "Napaka: Argument »%s« je bil pričakovan, vendar je bil podan »%s«."
 
 #: src/nmcli/utils.c:315
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Unexpected argument '%s'"
-msgstr "Napaka: manjka argument za možnost '%s'."
+msgstr "Napaka: nepričakovan argument »%s«"
 
 #: src/nmcli/utils.c:702
-#, fuzzy, c-format
+#, c-format
 msgid "invalid field '%s%s%s'; no such field"
-msgstr "Napaka: 'dev wifi': %s; dovoljena polja: %s"
+msgstr "neveljavno polje »%s%s%s«; takšnega polja ni"
 
 #: src/nmcli/utils.c:710
-#, fuzzy, c-format
+#, c-format
 msgid "invalid field '%s%s%s'; allowed fields: [%s]"
-msgstr "Napaka: 'dev wifi': %s; dovoljena polja: %s"
+msgstr "neveljavno polje »%s%s%s«; dovoljena polja: [%s]"
 
 #: src/nmcli/utils.c:806
-#, fuzzy
 msgid "failure to select field"
-msgstr "Izbor določenega APN je spodletel"
+msgstr "neuspeh pri izbiri polja"
 
 #: src/nmcli/utils.c:1472
 #, fuzzy, c-format
@@ -16401,12 +16209,12 @@ msgid "Failed to duplicate pager pipe: %s\n"
 msgstr "Podvajanje cevi pagerja ni uspelo: %s\n"
 
 #: src/nmcli/utils.c:1849
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Restarting "
 "NetworkManager is advised.\n"
 msgstr ""
-"Opozorilo: različici nmcli (%s) in NetworkManager (%s) se ne ujemajo. "
+"Opozorilo: različici nmcli (%s) in NetworkManager (%s) se ne ujemata. "
 "Priporočamo ponovni zagon NetworkManagerja.\n"
 
 #: src/nmcli/utils.h:311
@@ -16435,68 +16243,73 @@ msgstr "Povezava Veth %d"
 
 #: src/nmtui/nm-editor-utils.c:164
 #, c-format
+msgid "Loopback connection %d"
+msgstr "Povezava s povratno zanko %d"
+
+#: src/nmtui/nm-editor-utils.c:172
+#, c-format
 msgid "Wi-Fi connection %d"
 msgstr "Povezava Wi-Fi %d"
 
-#: src/nmtui/nm-editor-utils.c:173
+#: src/nmtui/nm-editor-utils.c:181
 #, c-format
 msgid "InfiniBand connection %d"
 msgstr "Povezava InfiniBand %d"
 
-#: src/nmtui/nm-editor-utils.c:181
-#, fuzzy, c-format
+#: src/nmtui/nm-editor-utils.c:189
+#, c-format
 msgid "Mobile broadband connection %d"
-msgstr "Povezava vezi %d"
+msgstr "Mobilna širokopasovna povezava %d"
 
-#: src/nmtui/nm-editor-utils.c:187 src/nmtui/nmt-page-dsl.c:47
+#: src/nmtui/nm-editor-utils.c:195 src/nmtui/nmt-page-dsl.c:47
 msgid "DSL"
 msgstr "DSL"
 
-#: src/nmtui/nm-editor-utils.c:191
+#: src/nmtui/nm-editor-utils.c:199
 #, c-format
 msgid "DSL connection %d"
 msgstr "Povezava DSL %d"
 
-#: src/nmtui/nm-editor-utils.c:200
+#: src/nmtui/nm-editor-utils.c:208
 #, c-format
 msgid "Bond connection %d"
 msgstr "Povezava vezi %d"
 
-#: src/nmtui/nm-editor-utils.c:210
+#: src/nmtui/nm-editor-utils.c:218
 #, c-format
 msgid "Bridge connection %d"
 msgstr "Povezava mosta %d"
 
-#: src/nmtui/nm-editor-utils.c:219
+#: src/nmtui/nm-editor-utils.c:227
 #, c-format
 msgid "Team connection %d"
 msgstr "Povezava skupine %d"
 
-#: src/nmtui/nm-editor-utils.c:227
+#: src/nmtui/nm-editor-utils.c:235
 #, c-format
 msgid "VLAN connection %d"
 msgstr "Povezava VLAN %d"
 
-#: src/nmtui/nm-editor-utils.c:231 src/nmtui/nmt-page-ip-tunnel.c:113
+#: src/nmtui/nm-editor-utils.c:239 src/nmtui/nmt-page-ip-tunnel.c:113
 msgid "IP tunnel"
 msgstr "IP-tunel"
 
-#: src/nmtui/nm-editor-utils.c:235
+#: src/nmtui/nm-editor-utils.c:243
 #, c-format
 msgid "IP tunnel connection %d"
 msgstr "Povezava IP-tunel %d"
 
-#: src/nmtui/nm-editor-utils.c:243
-#, fuzzy, c-format
+#: src/nmtui/nm-editor-utils.c:251
+#, c-format
 msgid "MACsec connection %d"
-msgstr "Povezava MACSEC %d"
+msgstr "Povezava MACsec %d"
 
-#: src/nmtui/nm-editor-utils.c:258
+#: src/nmtui/nm-editor-utils.c:266
 #, c-format
 msgid "VPN connection %d"
 msgstr "Povezava VPN %d"
 
-#: src/nmtui/nm-editor-utils.c:275
+#: src/nmtui/nm-editor-utils.c:283
 #, c-format
 msgid "WireGuard connection %d"
 msgstr "Povezava WireGuard %d"
@@ -16538,9 +16351,8 @@ msgid "Show expert TLS options"
 msgstr "Pokaži strokovne možnosti TLS"
 
 #: src/nmtui/nmt-8021x-fields.c:331
-#, fuzzy
 msgid "Wpa_supplicant settings:"
-msgstr "neveljavno polje '%s'"
+msgstr "Nastavitve Wpa_supplicant:"
 
 #: src/nmtui/nmt-8021x-fields.c:333
 msgid "Cipher string"
@@ -16561,24 +16373,21 @@ msgid "CA cert password"
 msgstr "Geslo potrdila CA"
 
 #: src/nmtui/nmt-8021x-fields.c:404
-#, fuzzy
 msgid "User cert"
-msgstr "Uporabniški certifikat"
+msgstr "Uporabniško potrdilo"
 
 #: src/nmtui/nmt-8021x-fields.c:424
-#, fuzzy
 msgid "User cert password"
 msgstr "Geslo za uporabniško potrdilo"
 
 #: src/nmtui/nmt-8021x-fields.c:427
-#, fuzzy
 msgid "User private key"
-msgstr "Odšifriranje zasebnega ključa je spodletelo."
+msgstr "Zasebni ključ uporabnika"
 
 #: src/nmtui/nmt-8021x-fields.c:445
 #, fuzzy
 msgid "User privkey password"
-msgstr "Pokaži geslo"
+msgstr "Uporabniško geslo privkey"
 
 #: src/nmtui/nmt-8021x-fields.c:454 src/nmtui/nmt-page-ppp.c:141
 msgid "PAP"
@@ -16661,7 +16470,7 @@ msgid "Add"
 msgstr "Dodaj"
 
 #: src/nmtui/nmt-edit-connection-list.c:104 src/nmtui/nmt-page-ip4.c:163
-#: src/nmtui/nmt-page-ip6.c:162 src/nmtui/nmt-page-team-port.c:92
+#: src/nmtui/nmt-page-ip6.c:163 src/nmtui/nmt-page-team-port.c:92
 #: src/nmtui/nmt-page-team.c:145 src/nmtui/nmt-wireguard-peer-list.c:129
 msgid "Edit..."
 msgstr "Uredi ..."
@@ -16679,53 +16488,52 @@ msgstr "Skrij"
 msgid "Show"
 msgstr "Pokaži"
 
-#: src/nmtui/nmt-editor.c:92
-#, fuzzy, c-format
+#: src/nmtui/nmt-editor.c:93
+#, c-format
 msgid "Could not create editor for connection '%s' of type '%s'."
-msgstr "Ni bilo mogoče ustvariti urejevalnika za povezavo '%s' tipa '%s'."
+msgstr "Urejevalnika za povezavo »%s« vrste »%s« ni bilo mogoče ustvariti."
 
-#: src/nmtui/nmt-editor.c:96
-#, fuzzy, c-format
+#: src/nmtui/nmt-editor.c:97
+#, c-format
 msgid "Could not create editor for invalid connection '%s'."
-msgstr "Ni mogoče dodeliti pomnilnika za ustvarjanje datoteke PEM."
+msgstr "Urejevalnika ni bilo mogoče ustvariti za neveljavno povezavo »%s«."
 
-#: src/nmtui/nmt-editor.c:109
+#: src/nmtui/nmt-editor.c:110
 msgid "Edit Connection"
 msgstr "Uredi povezavo"
 
-#: src/nmtui/nmt-editor.c:167
+#: src/nmtui/nmt-editor.c:168
 #, c-format
 msgid "Unable to save connection: %s"
 msgstr "Povezave ni mogoče shraniti: %s"
 
-#: src/nmtui/nmt-editor.c:184
-#, fuzzy, c-format
+#: src/nmtui/nmt-editor.c:185
+#, c-format
 msgid "Unable to add new connection: %s"
-msgstr ""
-"Napaka: dodajanje ali vzpostavljanje nove povezave je spodletelo: (%d) %s."
+msgstr "Nove povezave ni mogoče dodati: %s"
 
-#: src/nmtui/nmt-editor.c:333
+#: src/nmtui/nmt-editor.c:334
 msgid "Profile name"
 msgstr "Ime profila"
 
-#: src/nmtui/nmt-editor.c:344
+#: src/nmtui/nmt-editor.c:348
 msgid "Ethernet device"
 msgstr "Žična omrežna naprava"
 
-#: src/nmtui/nmt-editor.c:346
+#: src/nmtui/nmt-editor.c:350
 msgid "Device"
 msgstr "Naprava"
 
 #. And finally the bottom widgets
-#: src/nmtui/nmt-editor.c:416
+#: src/nmtui/nmt-editor.c:423
 msgid "Automatically connect"
 msgstr "Samodejno poveži"
 
-#: src/nmtui/nmt-editor.c:424
+#: src/nmtui/nmt-editor.c:431
 msgid "Available to all users"
 msgstr "Na voljo vsem uporabnikom"
 
-#: src/nmtui/nmt-editor.c:442 src/nmtui/nmt-password-dialog.c:160
+#: src/nmtui/nmt-editor.c:449 src/nmtui/nmt-password-dialog.c:160
 #: src/nmtui/nmt-route-editor.c:97 src/nmtui/nmt-wireguard-peer-editor.c:146
 #: src/nmtui/nmtui-edit.c:199 src/nmtui/nmtui-edit.c:510
 #: src/nmtui/nmtui-hostname.c:51
@@ -16743,7 +16551,7 @@ msgstr "bajtov"
 #: src/nmtui/nmt-page-bond-port.c:42
 #, fuzzy
 msgid "BOND PORT"
-msgstr "PRISTANIŠČE BOND"
+msgstr "Vezna vrata"
 
 #: src/nmtui/nmt-page-bond.c:82
 msgid "Round-robin"
@@ -16766,12 +16574,10 @@ msgid "802.3ad"
 msgstr "802.3ad"
 
 #: src/nmtui/nmt-page-bond.c:87
-#, fuzzy
 msgid "Adaptive Transmit Load Balancing (tlb)"
 msgstr "Prilagodljivo uravnavanje obremenitve prenosa (tlb)"
 
 #: src/nmtui/nmt-page-bond.c:88
-#, fuzzy
 msgid "Adaptive Load Balancing (alb)"
 msgstr "Prilagodljivo uravnavanje obremenitve (alb)"
 
@@ -16799,9 +16605,8 @@ msgid "Mode"
 msgstr "Način"
 
 #: src/nmtui/nmt-page-bond.c:361
-#, fuzzy
 msgid "Primary"
-msgstr "Osnovni"
+msgstr "Primarni"
 
 #: src/nmtui/nmt-page-bond.c:366
 msgid "Link monitoring"
@@ -16894,10 +16699,6 @@ msgstr "Povezano"
 msgid "INFINIBAND"
 msgstr "INFINIBAND"
 
-#: src/nmtui/nmt-page-infiniband.c:73
-msgid "Transport mode"
-msgstr "Način prenosa"
-
 #. The order must match the NM_IP_TUNNEL_MODE_* enum
 #: src/nmtui/nmt-page-ip-tunnel.c:65
 msgid "IPIP"
@@ -16955,7 +16756,7 @@ msgstr "Vhodni ključ"
 msgid "Output key"
 msgstr "Izhodni ključ"
 
-#: src/nmtui/nmt-page-ip4.c:27 src/nmtui/nmt-page-ip6.c:32
+#: src/nmtui/nmt-page-ip4.c:27 src/nmtui/nmt-page-ip6.c:33
 #: src/nmtui/nmt-page-macsec.c:69 src/nmtui/nmtui-radio.c:68
 #: src/nmtui/nmtui-radio.c:77 src/nmtui/nmtui-radio.c:96
 #: src/nmtui/nmtui-radio.c:105
@@ -16970,15 +16771,15 @@ msgstr "Poveži-krajevno"
 msgid "Manual"
 msgstr "Ročno"
 
-#: src/nmtui/nmt-page-ip4.c:31
+#: src/nmtui/nmt-page-ip4.c:31 src/nmtui/nmt-page-ip6.c:32
 msgid "Shared"
 msgstr "Deljeno"
 
-#: src/nmtui/nmt-page-ip4.c:66 src/nmtui/nmt-page-ip6.c:67
+#: src/nmtui/nmt-page-ip4.c:66 src/nmtui/nmt-page-ip6.c:68
 msgid "(No custom routes)"
 msgstr "(brez poti po meri)"
 
-#: src/nmtui/nmt-page-ip4.c:69 src/nmtui/nmt-page-ip6.c:70
+#: src/nmtui/nmt-page-ip4.c:69 src/nmtui/nmt-page-ip6.c:71
 #, c-format
 msgid "One custom route"
 msgid_plural "%d custom routes"
@@ -16991,36 +16792,35 @@ msgstr[3] "%d poti po meri"
 msgid "IPv4 CONFIGURATION"
 msgstr "PRILAGODITEV IPv4"
 
-#: src/nmtui/nmt-page-ip4.c:123 src/nmtui/nmt-page-ip6.c:124
+#: src/nmtui/nmt-page-ip4.c:123 src/nmtui/nmt-page-ip6.c:125
 msgid "Addresses"
 msgstr "Naslovi"
 
-#: src/nmtui/nmt-page-ip4.c:132 src/nmtui/nmt-page-ip6.c:133
+#: src/nmtui/nmt-page-ip4.c:132 src/nmtui/nmt-page-ip6.c:134
 msgid "Gateway"
 msgstr "Prehod"
 
-#: src/nmtui/nmt-page-ip4.c:141 src/nmtui/nmt-page-ip6.c:142
+#: src/nmtui/nmt-page-ip4.c:141 src/nmtui/nmt-page-ip6.c:143
 msgid "DNS servers"
 msgstr "Strežniki DNS"
 
-#: src/nmtui/nmt-page-ip4.c:149 src/nmtui/nmt-page-ip6.c:150
-#, fuzzy
+#: src/nmtui/nmt-page-ip4.c:149 src/nmtui/nmt-page-ip6.c:151
 msgid "Search domains"
-msgstr "Iskalne domene"
+msgstr "Preišči domene"
 
-#: src/nmtui/nmt-page-ip4.c:165 src/nmtui/nmt-page-ip6.c:164
+#: src/nmtui/nmt-page-ip4.c:165 src/nmtui/nmt-page-ip6.c:165
 msgid "Routing"
 msgstr "Usmerjanje"
 
-#: src/nmtui/nmt-page-ip4.c:167 src/nmtui/nmt-page-ip6.c:166
+#: src/nmtui/nmt-page-ip4.c:167 src/nmtui/nmt-page-ip6.c:167
 msgid "Never use this network for default route"
 msgstr "Nikoli ne uporablj tega omrežja za privzeto pot"
 
-#: src/nmtui/nmt-page-ip4.c:175 src/nmtui/nmt-page-ip6.c:174
+#: src/nmtui/nmt-page-ip4.c:175 src/nmtui/nmt-page-ip6.c:175
 msgid "Ignore automatically obtained routes"
 msgstr "Prezri samodejno pridobljene poti"
 
-#: src/nmtui/nmt-page-ip4.c:183 src/nmtui/nmt-page-ip6.c:182
+#: src/nmtui/nmt-page-ip4.c:183 src/nmtui/nmt-page-ip6.c:183
 msgid "Ignore automatically obtained DNS parameters"
 msgstr "Prezri samodejno pridobljene parametre DNS"
 
@@ -17036,15 +16836,19 @@ msgstr "Prezri"
 msgid "Automatic (DHCP-only)"
 msgstr "Samodejno (le DHCP)"
 
-#: src/nmtui/nmt-page-ip6.c:113
+#: src/nmtui/nmt-page-ip6.c:114
 msgid "IPv6 CONFIGURATION"
 msgstr "PRILAGODITEV IPv6"
 
-#: src/nmtui/nmt-page-ip6.c:192
-#, fuzzy
+#: src/nmtui/nmt-page-ip6.c:193
 msgid "Require IPv6 addressing for this connection"
 msgstr "Zahtevaj naslavljanje IPv6 za to povezavo"
 
+#: src/nmtui/nmt-page-loopback.c:47
+#, fuzzy
+msgid "LOOPBACK"
+msgstr "Povratna zanka"
+
 #: src/nmtui/nmt-page-macsec.c:67
 msgid "PSK"
 msgstr "PSK"
@@ -17086,39 +16890,33 @@ msgid "PPP CONFIGURATION"
 msgstr "PRILAGODITEV PPP"
 
 #: src/nmtui/nmt-page-ppp.c:125
-#, fuzzy
 msgid "Allowed authentication methods:"
-msgstr "Dovoljeni načini overitve"
+msgstr "Dovoljeni načini overitve:"
 
 #: src/nmtui/nmt-page-ppp.c:185
-#, fuzzy
 msgid "Use point-to-point encryption (MPPE)"
-msgstr "Uporabi šifriranje od _točke-do-točke (MPPE)"
+msgstr "Uporabi šifriranje od točke-do-točke (MPPE)"
 
 #: src/nmtui/nmt-page-ppp.c:198
-#, fuzzy
 msgid "Require 128-bit encryption"
-msgstr "_Zahtevaj 128-bitno šifriranje"
+msgstr "Zahtevaj 128-bitno šifriranje"
 
 #: src/nmtui/nmt-page-ppp.c:207
-#, fuzzy
 msgid "Use stateful MPPE"
-msgstr "Uporabi _nepovratni MPPE"
+msgstr "Uporabi nepovratni MPPE"
 
 #: src/nmtui/nmt-page-ppp.c:218
-#, fuzzy
 msgid "Allow BSD data compression"
-msgstr "Dovoli stiskanje podatkov _BSD"
+msgstr "Dovoli stiskanje podatkov BSD"
 
 #: src/nmtui/nmt-page-ppp.c:227
 #, fuzzy
 msgid "Allow Deflate data compression"
-msgstr "Dovoli stiskanje podatkov _deflate"
+msgstr "Dovoli stiskanje podatkov deflate"
 
 #: src/nmtui/nmt-page-ppp.c:236
-#, fuzzy
 msgid "Use TCP header compression"
-msgstr "Uporabi stiskanje _glave TCP"
+msgstr "Uporabi stiskanje glave TCP"
 
 #: src/nmtui/nmt-page-ppp.c:247
 msgid "Send PPP echo packets"
@@ -17143,9 +16941,8 @@ msgid "VETH"
 msgstr "VETH"
 
 #: src/nmtui/nmt-page-vlan.c:82
-#, fuzzy
 msgid "VLAN id"
-msgstr "VLAN ID"
+msgstr "Id VLAN"
 
 #: src/nmtui/nmt-page-wifi.c:51
 msgctxt "Wi-Fi"
@@ -17157,7 +16954,6 @@ msgid "Access Point"
 msgstr "Dostopna točka"
 
 #: src/nmtui/nmt-page-wifi.c:53
-#, fuzzy
 msgid "Ad-Hoc Network"
 msgstr "Ad-hoc omrežje"
 
@@ -17252,9 +17048,8 @@ msgid "Channel"
 msgstr "Kanal"
 
 #: src/nmtui/nmt-page-wifi.c:301 src/nmtui/nmt-page-wifi.c:322
-#, fuzzy
 msgid "WEP index"
-msgstr "WEP "
+msgstr "Indeks WEP"
 
 #: src/nmtui/nmt-page-wifi.c:311 src/nmtui/nmt-page-wifi.c:332
 msgid "Authentication"
@@ -17263,9 +17058,8 @@ msgstr "Overitev"
 #. "dynamic-wep"
 #. FIXME
 #: src/nmtui/nmt-page-wifi.c:338
-#, fuzzy
 msgid "(No support for dynamic-wep yet...)"
-msgstr "(Še ni podpore za dynamic-wep ...)"
+msgstr "(še ni podpore za dynamic-wep ...)"
 
 #: src/nmtui/nmt-page-wifi.c:379
 msgid "BSSID"
@@ -17276,9 +17070,8 @@ msgid "Private key"
 msgstr "Osebni ključ"
 
 #: src/nmtui/nmt-page-wireguard.c:69
-#, fuzzy
 msgid "Listen port"
-msgstr "_Vrata za prisluh"
+msgstr "Vrata za prisluh"
 
 #: src/nmtui/nmt-page-wireguard.c:77
 msgid "Fwmark"
@@ -17301,18 +17094,16 @@ msgid "Store password only for this user"
 msgstr "Shrani geslo samo za tega uporabnika"
 
 #: src/nmtui/nmt-password-fields.c:138
-#, fuzzy
 msgid "Ask password every time"
-msgstr "Vsakič vprašajte geslo"
+msgstr "Vsakič vprašaj za geslo"
 
 #: src/nmtui/nmt-password-fields.c:144
 msgid "Show password"
 msgstr "Pokaži geslo"
 
 #: src/nmtui/nmt-port-list.c:127
-#, fuzzy
 msgid "Select the type of port connection you wish to add."
-msgstr "Izberite vrsto podrejene povezave, ki jo želite dodati."
+msgstr "Izberite vrsto povezave vrat, ki jo želite dodati."
 
 #: src/nmtui/nmt-route-table.c:169
 msgid "Destination"
@@ -17323,7 +17114,6 @@ msgid "Prefix"
 msgstr "Predpona"
 
 #: src/nmtui/nmt-route-table.c:176
-#, fuzzy
 msgid "Next Hop"
 msgstr "Naslednji skok"
 
@@ -17332,9 +17122,8 @@ msgid "Metric"
 msgstr "Metrika"
 
 #: src/nmtui/nmt-route-table.c:201
-#, fuzzy
 msgid "No custom routes are defined."
-msgstr "Načrtovane poti po meri niso določene."
+msgstr "Poti po meri niso določene."
 
 #: src/nmtui/nmt-widget-list.c:131
 msgid "Add..."
@@ -17370,7 +17159,6 @@ msgid "Persistent keepalive"
 msgstr "Ponavljajoče ohranjanje povezave"
 
 #: src/nmtui/nmtui-connect.c:48
-#, fuzzy
 msgid ""
 "openconnect will be run to authenticate.\n"
 "It will return to nmtui when completed."
@@ -17379,19 +17167,19 @@ msgstr ""
 "Ko bo končan, se bo vrnil v nmtui."
 
 #: src/nmtui/nmtui-connect.c:58
-#, fuzzy, c-format
+#, c-format
 msgid "Error: openconnect failed: %s"
-msgstr "Napaka: openconnect ni uspel: %s\n"
+msgstr "Napaka: openconnect ni uspel: %s"
 
 #: src/nmtui/nmtui-connect.c:108
-#, fuzzy, c-format
+#, c-format
 msgid "Activation failed: %s"
-msgstr "povezava je spodletela"
+msgstr "Aktivacija ni uspela: %s"
 
 #: src/nmtui/nmtui-connect.c:161
-#, fuzzy, c-format
+#, c-format
 msgid "Could not deactivate connection: %s"
-msgstr "ni dejavnih povezav na napravi '%s'"
+msgstr "Povezave ni bilo mogoče deaktivirati: %s"
 
 #: src/nmtui/nmtui-connect.c:179
 msgid "Connecting..."
@@ -17517,18 +17305,16 @@ msgid "Edit a connection"
 msgstr "Uredi povezavo"
 
 #: src/nmtui/nmtui.c:42
-#, fuzzy
 msgid "Activate a connection"
-msgstr "Dejavne povezave"
+msgstr "Aktivirajte povezavo"
 
 #: src/nmtui/nmtui.c:43
 msgid "new hostname"
 msgstr "novo ime gostitelja"
 
 #: src/nmtui/nmtui.c:43
-#, fuzzy
 msgid "Set system hostname"
-msgstr "Spremeni trajno sistemsko ime gostitelja"
+msgstr "Nastavite ime gostitelja sistema"
 
 #: src/nmtui/nmtui.c:44
 msgid "radio"
@@ -17539,9 +17325,8 @@ msgid "Radio"
 msgstr "Izbirni gumb"
 
 #: src/nmtui/nmtui.c:85
-#, fuzzy
 msgid "NetworkManager TUI"
-msgstr "Stanje NetworkManager"
+msgstr "TUI NetworkManager"
 
 #: src/nmtui/nmtui.c:91
 msgid "Please select an option"
diff --git a/src/contrib/nm-vpn-plugin-utils.c b/src/contrib/nm-vpn-plugin-utils.c
index a9407608..24b08ac6 100644
--- a/src/contrib/nm-vpn-plugin-utils.c
+++ b/src/contrib/nm-vpn-plugin-utils.c
@@ -155,3 +155,33 @@ nm_vpn_plugin_utils_load_editor(const char                   *module_path,
     g_return_val_if_fail(NM_IS_VPN_EDITOR(editor), NULL);
     return editor;
 }
+
+char *
+nm_vpn_plugin_utils_get_cert_path(const char *plugin)
+{
+    const char *path;
+
+    g_return_val_if_fail(plugin, NULL);
+
+    /* Users can set NM_CERT_PATH=~/.cert to be compatible with the certificate
+     * directory used in the past. */
+    path = g_getenv("NM_CERT_PATH");
+    if (path)
+        return g_build_filename(path, plugin, NULL);
+
+    /* Otherwise use XDG_DATA_HOME. We use subdirectory "networkmanagement/certificates"
+     * because the SELinux policy already has rules to set the correct labels in that
+     * directory. */
+    path = g_getenv("XDG_DATA_HOME");
+    if (path)
+        return g_build_filename(path, "networkmanagement", "certificates", plugin, NULL);
+
+    /* Use the default value for XDG_DATA_HOME */
+    return g_build_filename(g_get_home_dir(),
+                            ".local",
+                            "share",
+                            "networkmanagement",
+                            "certificates",
+                            plugin,
+                            NULL);
+}
diff --git a/src/contrib/nm-vpn-plugin-utils.h b/src/contrib/nm-vpn-plugin-utils.h
index 6a6ea0b9..78e29d0b 100644
--- a/src/contrib/nm-vpn-plugin-utils.h
+++ b/src/contrib/nm-vpn-plugin-utils.h
@@ -24,4 +24,6 @@ NMVpnEditor *nm_vpn_plugin_utils_load_editor(const char                   *modul
                                              gpointer                      user_data,
                                              GError                      **error);
 
+char *nm_vpn_plugin_utils_get_cert_path(const char *plugin);
+
 #endif /* __NM_VPN_PLUGIN_UTILS_H__ */
diff --git a/src/core/devices/nm-device-bridge.c b/src/core/devices/nm-device-bridge.c
index 45cdd83f..6ca3737f 100644
--- a/src/core/devices/nm-device-bridge.c
+++ b/src/core/devices/nm-device-bridge.c
@@ -1066,7 +1066,7 @@ attach_port(NMDevice                  *device,
 
             plat_vlans = setting_vlans_to_platform(vlans, &num_vlans);
 
-            /* Since the link was just enportd, there are no existing VLANs
+            /* Since the link was just attached, there are no existing VLANs
              * (except for the default one) and so there's no need to flush. */
 
             if (plat_vlans
diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c
index db1245b3..11f691de 100644
--- a/src/core/devices/nm-device-ethernet.c
+++ b/src/core/devices/nm-device-ethernet.c
@@ -15,7 +15,6 @@
 #include <linux/if_ether.h>
 
 #include "NetworkManagerUtils.h"
-#include "NetworkManagerUtils.h"
 #include "libnm-core-aux-intern/nm-libnm-core-utils.h"
 #include "libnm-core-intern/nm-core-internal.h"
 #include "libnm-glib-aux/nm-uuid.h"
@@ -708,6 +707,9 @@ supplicant_iface_start(NMDeviceEthernet *self)
     NMDeviceEthernetPrivate            *priv   = NM_DEVICE_ETHERNET_GET_PRIVATE(self);
     gs_unref_object NMSupplicantConfig *config = NULL;
     gs_free_error GError               *error  = NULL;
+    NMActRequest                       *request;
+    NMActiveConnection                 *controller_ac;
+    NMDevice                           *controller;
 
     config = build_supplicant_config(self, &error);
     if (!config) {
@@ -722,6 +724,16 @@ supplicant_iface_start(NMDeviceEthernet *self)
     }
 
     nm_supplicant_interface_disconnect(priv->supplicant.iface);
+
+    /* Tell the supplicant in which bridge the interface is */
+    if ((request = nm_device_get_act_request(NM_DEVICE(self)))
+        && (controller_ac = nm_active_connection_get_controller(NM_ACTIVE_CONNECTION(request)))
+        && (controller = nm_active_connection_get_device(controller_ac))
+        && nm_device_get_device_type(controller) == NM_DEVICE_TYPE_BRIDGE) {
+        nm_supplicant_interface_set_bridge(priv->supplicant.iface, nm_device_get_iface(controller));
+    } else
+        nm_supplicant_interface_set_bridge(priv->supplicant.iface, NULL);
+
     nm_supplicant_interface_assoc(priv->supplicant.iface, config, supplicant_iface_assoc_cb, self);
     return TRUE;
 }
@@ -1901,7 +1913,7 @@ get_ip_method_auto(NMDevice *device, int addr_family)
         /* We cannot do DHCPv4 on a PPP link, instead we get "auto" IP addresses
          * by pppd. Return "manual" here, which has the suitable effect to a
          * (zero) manual addresses in addition. */
-        return NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
+        return NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
     }
 
     return NM_SETTING_IP6_CONFIG_METHOD_AUTO;
diff --git a/src/core/devices/nm-device-macsec.c b/src/core/devices/nm-device-macsec.c
index 1659ea05..eb39cb2a 100644
--- a/src/core/devices/nm-device-macsec.c
+++ b/src/core/devices/nm-device-macsec.c
@@ -440,6 +440,9 @@ supplicant_iface_start(NMDeviceMacsec *self)
     NMDeviceMacsecPrivate              *priv   = NM_DEVICE_MACSEC_GET_PRIVATE(self);
     gs_unref_object NMSupplicantConfig *config = NULL;
     gs_free_error GError               *error  = NULL;
+    NMActRequest                       *request;
+    NMActiveConnection                 *controller_ac;
+    NMDevice                           *controller;
 
     config = build_supplicant_config(self, &error);
     if (!config) {
@@ -452,6 +455,16 @@ supplicant_iface_start(NMDeviceMacsec *self)
     }
 
     nm_supplicant_interface_disconnect(priv->supplicant.iface);
+
+    /* Tell the supplicant in which bridge the interface is */
+    if ((request = nm_device_get_act_request(NM_DEVICE(self)))
+        && (controller_ac = nm_active_connection_get_controller(NM_ACTIVE_CONNECTION(request)))
+        && (controller = nm_active_connection_get_device(controller_ac))
+        && nm_device_get_device_type(controller) == NM_DEVICE_TYPE_BRIDGE) {
+        nm_supplicant_interface_set_bridge(priv->supplicant.iface, nm_device_get_iface(controller));
+    } else
+        nm_supplicant_interface_set_bridge(priv->supplicant.iface, NULL);
+
     nm_supplicant_interface_assoc(priv->supplicant.iface, config, supplicant_iface_assoc_cb, self);
     return TRUE;
 }
diff --git a/src/core/devices/nm-device-private.h b/src/core/devices/nm-device-private.h
index 2568d9f1..6d828597 100644
--- a/src/core/devices/nm-device-private.h
+++ b/src/core/devices/nm-device-private.h
@@ -115,9 +115,6 @@ gboolean nm_device_sysctl_ip_conf_set(NMDevice   *self,
 
 NML3ConfigData *nm_device_create_l3_config_data(NMDevice *self, NMIPConfigSource source);
 
-NML3ConfigData *nm_device_create_l3_config_data_from_connection(NMDevice     *self,
-                                                                NMConnection *connection);
-
 void nm_device_ip_method_dhcp4_start(NMDevice *self);
 
 void nm_device_ip_method_autoconf6_start(NMDevice *self);
diff --git a/src/core/devices/nm-device-utils.c b/src/core/devices/nm-device-utils.c
index 3e86e2e8..be1de3ea 100644
--- a/src/core/devices/nm-device-utils.c
+++ b/src/core/devices/nm-device-utils.c
@@ -143,7 +143,9 @@ NM_UTILS_LOOKUP_STR_DEFINE(
     NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_STATE_REASON_UNMANAGED_USER_SETTINGS,
                              "unmanaged-user-settings"),
     NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_STATE_REASON_UNMANAGED_USER_UDEV, "unmanaged-user-udev"),
-    NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_STATE_REASON_NETWORKING_OFF, "networking-off"), );
+    NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_STATE_REASON_NETWORKING_OFF, "networking-off"),
+    NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_STATE_REASON_MODEM_NO_OPERATOR_CODE,
+                             "modem-no-operator-code"), );
 
 NM_UTILS_LOOKUP_STR_DEFINE(nm_device_mtu_source_to_string,
                            NMDeviceMtuSource,
diff --git a/src/core/devices/nm-device-wireguard.c b/src/core/devices/nm-device-wireguard.c
index 299e3b30..d98059ba 100644
--- a/src/core/devices/nm-device-wireguard.c
+++ b/src/core/devices/nm-device-wireguard.c
@@ -1672,6 +1672,57 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason)
     return ret;
 }
 
+static gboolean
+skip_peer_route(const NMIPAddr    *peer_addr,
+                guint              peer_addr_prefix,
+                int                addr_family,
+                NMSettingIPConfig *s_ip)
+{
+    guint num_addresses;
+    guint i;
+
+    /*
+     * If the allowed-ip subnet is already reachable on the interface via the
+     * prefix route of a static IP address, skip adding the peer route.
+     * We don't want to override the prefix route with a new one because the
+     * prefix route also specifies the correct source IP address.
+     *
+     * wg-quick does something similar here:
+     * https://git.zx2c4.com/wireguard-tools/tree/src/wg-quick/linux.bash?h=v1.0.20250521#n177
+     * The condition in wg-quick is a bit different because it checks that no
+     * duplicate route exists on the interface. We can't do exactly the same
+     * because here we don't have visibility on all the platform routes.
+     */
+
+    if (!s_ip)
+        return FALSE;
+
+    num_addresses = nm_setting_ip_config_get_num_addresses(s_ip);
+    for (i = 0; i < num_addresses; i++) {
+        NMIPAddr     setting_addr;
+        NMIPAddr     peer_addr_tmp;
+        guint        setting_prefix;
+        NMIPAddress *a;
+
+        peer_addr_tmp = *peer_addr;
+
+        a = nm_setting_ip_config_get_address(s_ip, i);
+        nm_ip_address_get_address_binary(a, &setting_addr);
+        setting_prefix = nm_ip_address_get_prefix(a);
+
+        if (setting_prefix > peer_addr_prefix)
+            continue;
+
+        nm_ip_addr_clear_host_address(addr_family, &setting_addr, NULL, setting_prefix);
+        nm_ip_addr_clear_host_address(addr_family, &peer_addr_tmp, NULL, setting_prefix);
+
+        if (nm_ip_addr_equal(addr_family, &peer_addr_tmp, &setting_addr))
+            return TRUE;
+    }
+
+    return FALSE;
+}
+
 static const NML3ConfigData *
 _get_dev2_ip_config(NMDeviceWireGuard *self, int addr_family)
 {
@@ -1738,6 +1789,7 @@ _get_dev2_ip_config(NMDeviceWireGuard *self, int addr_family)
 
         n_aips = nm_wireguard_peer_get_allowed_ips_len(peer);
         for (j = 0; j < n_aips; j++) {
+            NMSettingIPConfig *s_ip;
             NMPlatformIPXRoute rt;
             NMIPAddr           addrbin;
             const char        *aip;
@@ -1745,7 +1797,8 @@ _get_dev2_ip_config(NMDeviceWireGuard *self, int addr_family)
             int                prefix;
             guint32            rtable_coerced;
 
-            aip = nm_wireguard_peer_get_allowed_ip(peer, j, &valid);
+            aip  = nm_wireguard_peer_get_allowed_ip(peer, j, &valid);
+            s_ip = nm_connection_get_setting_ip_config(connection, addr_family);
 
             if (!valid || !nm_inet_parse_with_prefix_bin(addr_family, aip, NULL, &addrbin, &prefix))
                 continue;
@@ -1754,9 +1807,6 @@ _get_dev2_ip_config(NMDeviceWireGuard *self, int addr_family)
                 prefix = (addr_family == AF_INET) ? 32 : 128;
 
             if (prefix == 0) {
-                NMSettingIPConfig *s_ip;
-
-                s_ip = nm_connection_get_setting_ip_config(connection, addr_family);
                 if (nm_setting_ip_config_get_never_default(s_ip))
                     continue;
             }
@@ -1769,6 +1819,9 @@ _get_dev2_ip_config(NMDeviceWireGuard *self, int addr_family)
 
             nm_ip_addr_clear_host_address(addr_family, &addrbin, NULL, prefix);
 
+            if (skip_peer_route(&addrbin, prefix, addr_family, s_ip))
+                continue;
+
             rtable_coerced = route_table_coerced;
 
             if (prefix == 0 && auto_default_route_enabled) {
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index b0a3f780..46fb2339 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -113,6 +113,19 @@ typedef enum {
     RELEASE_PORT_TYPE_CONFIG_FORCE,
 } ReleasePortType;
 
+/**
+ * CleanupType:
+ * @CLEANUP_TYPE_KEEP: Cleanup internally but keep the real device's config. This is
+ *   often used when moving a partially managed device to "unmanaged" (but not only).
+ * @CLEANUP_TYPE_REMOVED: The device suddently disappeared. Cleanup internally but don't
+ *   make any action on the real device at all, as it no longer exists.
+ * @CLEANUP_TYPE_DECONFIGURE: Also deconfigure the real device. This is the typical
+ *   action when a connection or device is set to "down", or fully managed devices
+ *   moved to "unmanaged".
+ * @CLEANUP_TYPE_KEEP_REAPPLY: Like %CLEANUP_TYPE_KEEP, but indicating that it's a
+ *   reapply. Some special actions can be done if we're doing a reapply, like keeping
+ *   the existing DHCP lease, for example.
+ */
 typedef enum {
     CLEANUP_TYPE_KEEP,
     CLEANUP_TYPE_REMOVED,
@@ -265,11 +278,11 @@ typedef struct {
     NMDeviceIPState state;
     union {
         struct {
-            NMDnsMasqManager      *dnsmasq_manager;
-            NMNetnsSharedIPHandle *shared_ip_handle;
-            NMFirewallConfig      *firewall_config;
-            gulong                 dnsmasq_state_id;
-            const NML3ConfigData  *l3cd;
+            NMDnsMasqManager     *dnsmasq_manager;
+            NMNetnsIPReservation *ip_reservation;
+            NMFirewallConfig     *firewall_config;
+            gulong                dnsmasq_state_id;
+            const NML3ConfigData *l3cd;
         } v4;
         struct {
         } v6;
@@ -1411,14 +1424,12 @@ _prop_get_ipvx_routed_dns(NMDevice *self, int addr_family)
 }
 
 static NMSettingConnectionMdns
-_prop_get_connection_mdns(NMDevice *self)
+_prop_get_connection_mdns(NMDevice *self, NMConnection *connection)
 {
-    NMConnection           *connection;
     NMSettingConnectionMdns mdns = NM_SETTING_CONNECTION_MDNS_DEFAULT;
 
     g_return_val_if_fail(NM_IS_DEVICE(self), NM_SETTING_CONNECTION_MDNS_DEFAULT);
 
-    connection = nm_device_get_applied_connection(self);
     if (connection)
         mdns = nm_setting_connection_get_mdns(nm_connection_get_setting_connection(connection));
     if (mdns != NM_SETTING_CONNECTION_MDNS_DEFAULT)
@@ -1453,14 +1464,12 @@ _prop_get_sriov_preserve_on_down(NMDevice *self, NMSettingSriov *s_sriov)
 }
 
 static NMSettingConnectionLlmnr
-_prop_get_connection_llmnr(NMDevice *self)
+_prop_get_connection_llmnr(NMDevice *self, NMConnection *connection)
 {
-    NMConnection            *connection;
     NMSettingConnectionLlmnr llmnr = NM_SETTING_CONNECTION_LLMNR_DEFAULT;
 
     g_return_val_if_fail(NM_IS_DEVICE(self), NM_SETTING_CONNECTION_LLMNR_DEFAULT);
 
-    connection = nm_device_get_applied_connection(self);
     if (connection)
         llmnr = nm_setting_connection_get_llmnr(nm_connection_get_setting_connection(connection));
     if (llmnr != NM_SETTING_CONNECTION_LLMNR_DEFAULT)
@@ -1475,14 +1484,12 @@ _prop_get_connection_llmnr(NMDevice *self)
 }
 
 static NMSettingConnectionDnsOverTls
-_prop_get_connection_dns_over_tls(NMDevice *self)
+_prop_get_connection_dns_over_tls(NMDevice *self, NMConnection *connection)
 {
-    NMConnection                 *connection;
     NMSettingConnectionDnsOverTls dns_over_tls = NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT;
 
     g_return_val_if_fail(NM_IS_DEVICE(self), NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT);
 
-    connection = nm_device_get_applied_connection(self);
     if (connection)
         dns_over_tls = nm_setting_connection_get_dns_over_tls(
             nm_connection_get_setting_connection(connection));
@@ -1497,15 +1504,33 @@ _prop_get_connection_dns_over_tls(NMDevice *self)
                                                        NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT);
 }
 
+static NMSettingConnectionDnssec
+_prop_get_connection_dnssec(NMDevice *self, NMConnection *connection)
+{
+    NMSettingConnectionDnssec dnssec = NM_SETTING_CONNECTION_DNSSEC_DEFAULT;
+
+    g_return_val_if_fail(NM_IS_DEVICE(self), NM_SETTING_CONNECTION_DNSSEC_DEFAULT);
+
+    if (connection)
+        dnssec = nm_setting_connection_get_dnssec(nm_connection_get_setting_connection(connection));
+    if (dnssec != NM_SETTING_CONNECTION_DNSSEC_DEFAULT)
+        return dnssec;
+
+    return nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA,
+                                                       NM_CON_DEFAULT("connection.dnssec"),
+                                                       self,
+                                                       NM_SETTING_CONNECTION_DNSSEC_NO,
+                                                       NM_SETTING_CONNECTION_DNSSEC_YES,
+                                                       NM_SETTING_CONNECTION_DNSSEC_DEFAULT);
+}
+
 static NMMptcpFlags
-_prop_get_connection_mptcp_flags(NMDevice *self)
+_prop_get_connection_mptcp_flags(NMDevice *self, NMConnection *connection)
 {
-    NMConnection *connection;
-    NMMptcpFlags  mptcp_flags = NM_MPTCP_FLAGS_NONE;
+    NMMptcpFlags mptcp_flags = NM_MPTCP_FLAGS_NONE;
 
     g_return_val_if_fail(NM_IS_DEVICE(self), NM_MPTCP_FLAGS_DISABLED);
 
-    connection = nm_device_get_applied_connection(self);
     if (connection) {
         mptcp_flags =
             nm_setting_connection_get_mptcp_flags(nm_connection_get_setting_connection(connection));
@@ -2471,16 +2496,14 @@ _prop_get_ipv4_dhcp_vendor_class_identifier(NMDevice *self, NMSettingIP4Config *
 }
 
 static NMSettingIP6ConfigPrivacy
-_prop_get_ipv6_ip6_privacy(NMDevice *self)
+_prop_get_ipv6_ip6_privacy(NMDevice *self, NMConnection *connection)
 {
     NMSettingIP6ConfigPrivacy ip6_privacy;
-    NMConnection             *connection;
 
     g_return_val_if_fail(self, NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
 
     /* 1.) First look at the per-connection setting. If it is not -1 (unknown),
      * use it. */
-    connection = nm_device_get_applied_connection(self);
     if (connection) {
         NMSettingIPConfig *s_ip6 = nm_connection_get_setting_ip6_config(connection);
 
@@ -3613,11 +3636,12 @@ nm_device_create_l3_config_data_from_connection(NMDevice *self, NMConnection *co
 
     l3cd =
         nm_l3_config_data_new_from_connection(nm_device_get_multi_index(self), ifindex, connection);
-    nm_l3_config_data_set_mdns(l3cd, _prop_get_connection_mdns(self));
-    nm_l3_config_data_set_llmnr(l3cd, _prop_get_connection_llmnr(self));
-    nm_l3_config_data_set_dns_over_tls(l3cd, _prop_get_connection_dns_over_tls(self));
-    nm_l3_config_data_set_ip6_privacy(l3cd, _prop_get_ipv6_ip6_privacy(self));
-    nm_l3_config_data_set_mptcp_flags(l3cd, _prop_get_connection_mptcp_flags(self));
+    nm_l3_config_data_set_mdns(l3cd, _prop_get_connection_mdns(self, connection));
+    nm_l3_config_data_set_llmnr(l3cd, _prop_get_connection_llmnr(self, connection));
+    nm_l3_config_data_set_dns_over_tls(l3cd, _prop_get_connection_dns_over_tls(self, connection));
+    nm_l3_config_data_set_dnssec(l3cd, _prop_get_connection_dnssec(self, connection));
+    nm_l3_config_data_set_ip6_privacy(l3cd, _prop_get_ipv6_ip6_privacy(self, connection));
+    nm_l3_config_data_set_mptcp_flags(l3cd, _prop_get_connection_mptcp_flags(self, connection));
     return l3cd;
 }
 
@@ -12974,7 +12998,7 @@ _dev_ipac6_start(NMDevice *self)
             .router_solicitations         = router_solicitations,
             .router_solicitation_interval = router_solicitation_interval,
             .ra_timeout                   = ra_timeout,
-            .ip6_privacy                  = _prop_get_ipv6_ip6_privacy(self),
+            .ip6_privacy                  = _prop_get_ipv6_ip6_privacy(self, connection),
         };
 
         priv->ipac6_data.ndisc = nm_lndp_ndisc_new(&config);
@@ -13161,7 +13185,6 @@ _dev_addrgenmode6_set(NMDevice *self, guint8 addr_gen_mode)
     if (!priv->addrgenmode6_data.previous_mode_has) {
         priv->addrgenmode6_data.previous_mode_has = TRUE;
         priv->addrgenmode6_data.previous_mode_val = cur_addr_gen_mode;
-        nm_assert(priv->addrgenmode6_data.previous_mode_val == cur_addr_gen_mode);
     }
 
     _LOGD_ip(AF_INET6,
@@ -13650,7 +13673,7 @@ _dev_ipsharedx_cleanup(NMDevice *self, int addr_family)
             nm_clear_pointer(&priv->ipshared_data_4.v4.firewall_config, nm_firewall_config_free);
         }
 
-        nm_clear_pointer(&priv->ipshared_data_4.v4.shared_ip_handle, nm_netns_shared_ip_release);
+        nm_clear_pointer(&priv->ipshared_data_4.v4.ip_reservation, nm_netns_ip_reservation_release);
         nm_clear_l3cd(&priv->ipshared_data_4.v4.l3cd);
 
         _dev_l3_register_l3cds_set_one(self, L3_CONFIG_DATA_TYPE_SHARED_4, NULL, FALSE);
@@ -13684,13 +13707,14 @@ _dev_ipshared4_new_l3cd(NMDevice *self, NMConnection *connection, NMPlatformIP4A
 
         nm_ip_address_get_address_binary(user, &a);
         nm_platform_ip4_address_set_addr(&address, a, nm_ip_address_get_prefix(user));
-        nm_clear_pointer(&priv->ipshared_data_4.v4.shared_ip_handle, nm_netns_shared_ip_release);
+        nm_clear_pointer(&priv->ipshared_data_4.v4.ip_reservation, nm_netns_ip_reservation_release);
     } else {
-        if (!priv->ipshared_data_4.v4.shared_ip_handle)
-            priv->ipshared_data_4.v4.shared_ip_handle =
-                nm_netns_shared_ip_reserve(nm_device_get_netns(self));
+        if (!priv->ipshared_data_4.v4.ip_reservation)
+            priv->ipshared_data_4.v4.ip_reservation =
+                nm_netns_ip_reservation_get(nm_device_get_netns(self),
+                                            NM_NETNS_IP_RESERVATION_TYPE_SHARED4);
         nm_platform_ip4_address_set_addr(&address,
-                                         priv->ipshared_data_4.v4.shared_ip_handle->addr,
+                                         priv->ipshared_data_4.v4.ip_reservation->addr,
                                          24);
     }
 
@@ -14283,6 +14307,7 @@ can_reapply_change(NMDevice   *self,
                                                  NM_SETTING_CONNECTION_MDNS,
                                                  NM_SETTING_CONNECTION_LLMNR,
                                                  NM_SETTING_CONNECTION_DNS_OVER_TLS,
+                                                 NM_SETTING_CONNECTION_DNSSEC,
                                                  NM_SETTING_CONNECTION_MPTCP_FLAGS,
                                                  NM_SETTING_CONNECTION_WAIT_ACTIVATION_DELAY);
     }
@@ -14541,6 +14566,7 @@ check_and_reapply_connection(NMDevice            *self,
                 NM_SETTING_CONNECTION_MDNS,
                 NM_SETTING_CONNECTION_LLMNR,
                 NM_SETTING_CONNECTION_DNS_OVER_TLS,
+                NM_SETTING_CONNECTION_DNSSEC,
                 NM_SETTING_CONNECTION_MPTCP_FLAGS)) {
             priv->ip_data_4.do_reapply = TRUE;
             priv->ip_data_6.do_reapply = TRUE;
@@ -17285,6 +17311,25 @@ nm_device_cleanup(NMDevice *self, NMDeviceStateReason reason, CleanupType cleanu
         /* controller: release ports */
         nm_device_controller_release_ports_all(self);
 
+        /* port: detach from controller */
+        if (priv->controller) {
+            nm_device_controller_release_port(priv->controller,
+                                              self,
+                                              RELEASE_PORT_TYPE_CONFIG,
+                                              reason);
+        }
+    }
+
+    /* port: mark no longer attached */
+    if (priv->controller && priv->ifindex > 0
+        && nm_platform_link_get_controller(nm_device_get_platform(self), priv->ifindex) <= 0) {
+        nm_device_controller_release_port(priv->controller,
+                                          self,
+                                          RELEASE_PORT_TYPE_NO_CONFIG,
+                                          NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
+    }
+
+    if (cleanup_type == CLEANUP_TYPE_DECONFIGURE) {
         /* Take out any entries in the routing table and any IP address the device had. */
         if (ifindex > 0) {
             NMPlatform *platform = nm_device_get_platform(self);
@@ -17308,15 +17353,6 @@ nm_device_cleanup(NMDevice *self, NMDeviceStateReason reason, CleanupType cleanu
     if (ifindex > 0)
         nm_platform_ip4_dev_route_blacklist_set(nm_device_get_platform(self), ifindex, NULL);
 
-    /* port: mark no longer attached */
-    if (priv->controller && priv->ifindex > 0
-        && nm_platform_link_get_controller(nm_device_get_platform(self), priv->ifindex) <= 0) {
-        nm_device_controller_release_port(priv->controller,
-                                          self,
-                                          RELEASE_PORT_TYPE_NO_CONFIG,
-                                          NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
-    }
-
     lldp_setup(self, NM_TERNARY_FALSE);
 
     nm_device_update_metered(self);
diff --git a/src/core/devices/nm-device.h b/src/core/devices/nm-device.h
index 8632944a..2f287953 100644
--- a/src/core/devices/nm-device.h
+++ b/src/core/devices/nm-device.h
@@ -853,4 +853,7 @@ void nm_routing_rules_sync(NMConnection *applied_connection,
                            NMDevice *self,
                            NMNetns  *netns);
 
+NML3ConfigData *nm_device_create_l3_config_data_from_connection(NMDevice     *self,
+                                                                NMConnection *connection);
+
 #endif /* __NETWORKMANAGER_DEVICE_H__ */
diff --git a/src/core/devices/ovs/nm-ovsdb.c b/src/core/devices/ovs/nm-ovsdb.c
index 1c9484c4..cb67848e 100644
--- a/src/core/devices/ovs/nm-ovsdb.c
+++ b/src/core/devices/ovs/nm-ovsdb.c
@@ -1890,7 +1890,7 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
         == -1) {
         /* This doesn't really have to be an error; the key might
          * be missing if there really are no bridges present. */
-        _LOGD("Bad update: %s", json_error.text);
+        _LOGD("monitor: bad update: %s", json_error.text);
     }
 
     if (ovs) {
@@ -1936,12 +1936,12 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                                              &unused))
                 continue;
 
-            _LOGT("obj[iface:%s]: removed an '%s' interface: %s%s%s",
-                  key,
-                  ovs_interface->type,
+            _LOGT("monitor: %s: interface removed: type=%s, obj[iface:%s]%s%s",
                   ovs_interface->name,
+                  ovs_interface->type,
+                  key,
                   NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid,
-                                       ", ",
+                                       ", connection=",
                                        ovs_interface->connection_uuid,
                                        ""));
             _signal_emit_device_removed(self,
@@ -1989,17 +1989,18 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                 gs_free char *strtmp1 = NULL;
                 gs_free char *strtmp2 = NULL;
 
-                _LOGT("obj[iface:%s]: changed an '%s' interface: %s%s%s, external-ids=%s, "
-                      "other-config=%s",
-                      key,
-                      type,
-                      ovs_interface->name,
-                      NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid,
-                                           ", ",
-                                           ovs_interface->connection_uuid,
-                                           ""),
-                      (strtmp1 = _strdict_to_string(ovs_interface->external_ids)),
-                      (strtmp2 = _strdict_to_string(ovs_interface->other_config)));
+                _LOGT(
+                    "monitor: %s: interface changed: type=%s, obj[iface:%s]%s%s, external-ids=%s, "
+                    "other-config=%s",
+                    ovs_interface->name,
+                    type,
+                    key,
+                    NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid,
+                                         ", connection=",
+                                         ovs_interface->connection_uuid,
+                                         ""),
+                    (strtmp1 = _strdict_to_string(ovs_interface->external_ids)),
+                    (strtmp2 = _strdict_to_string(ovs_interface->other_config)));
             }
         } else {
             gs_free char *strtmp1 = NULL;
@@ -2015,17 +2016,17 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                 .other_config    = g_steal_pointer(&other_config_arr),
             };
             g_hash_table_add(priv->interfaces, ovs_interface);
-            _LOGT(
-                "obj[iface:%s]: added an '%s' interface: %s%s%s, external-ids=%s, other-config=%s",
-                key,
-                ovs_interface->type,
-                ovs_interface->name,
-                NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid,
-                                     ", ",
-                                     ovs_interface->connection_uuid,
-                                     ""),
-                (strtmp1 = _strdict_to_string(ovs_interface->external_ids)),
-                (strtmp2 = _strdict_to_string(ovs_interface->other_config)));
+            _LOGT("monitor: %s: interface added: type=%s, obj[iface:%s]%s%s, external-ids=%s, "
+                  "other-config=%s",
+                  ovs_interface->name,
+                  ovs_interface->type,
+                  key,
+                  NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid,
+                                       ", connection=",
+                                       ovs_interface->connection_uuid,
+                                       ""),
+                  (strtmp1 = _strdict_to_string(ovs_interface->external_ids)),
+                  (strtmp2 = _strdict_to_string(ovs_interface->other_config)));
             _signal_emit_device_added(self,
                                       ovs_interface->name,
                                       NM_DEVICE_TYPE_OVS_INTERFACE,
@@ -2071,11 +2072,11 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
             if (!g_hash_table_steal_extended(priv->ports, &key, (gpointer *) &ovs_port, &unused))
                 continue;
 
-            _LOGT("obj[port:%s]: removed a port: %s%s%s",
-                  key,
+            _LOGT("monitor: %s: port removed: obj[port:%s]%s%s",
                   ovs_port->name,
+                  key,
                   NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid,
-                                       ", ",
+                                       ", connection=",
                                        ovs_port->connection_uuid,
                                        ""));
             _signal_emit_device_removed(self, ovs_port->name, NM_DEVICE_TYPE_OVS_PORT, NULL);
@@ -2122,15 +2123,16 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                 gs_free char *strtmp1 = NULL;
                 gs_free char *strtmp2 = NULL;
 
-                _LOGT("obj[port:%s]: changed a port: %s%s%s, external-ids=%s, other-config=%s",
-                      key,
-                      ovs_port->name,
-                      NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid,
-                                           ", ",
-                                           ovs_port->connection_uuid,
-                                           ""),
-                      (strtmp1 = _strdict_to_string(ovs_port->external_ids)),
-                      (strtmp2 = _strdict_to_string(ovs_port->other_config)));
+                _LOGT(
+                    "monitor: %s: port changed: obj[port:%s]%s%s, external-ids=%s, other-config=%s",
+                    ovs_port->name,
+                    key,
+                    NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid,
+                                         ", connection=",
+                                         ovs_port->connection_uuid,
+                                         ""),
+                    (strtmp1 = _strdict_to_string(ovs_port->external_ids)),
+                    (strtmp2 = _strdict_to_string(ovs_port->other_config)));
             }
         } else {
             gs_free char *strtmp1 = NULL;
@@ -2146,11 +2148,11 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                 .other_config    = g_steal_pointer(&other_config_arr),
             };
             g_hash_table_add(priv->ports, ovs_port);
-            _LOGT("obj[port:%s]: added a port: %s%s%s, external-ids=%s, other-config=%s",
-                  key,
+            _LOGT("monitor: %s: port added: obj[port:%s]%s%s, external-ids=%s, other-config=%s",
                   ovs_port->name,
+                  key,
                   NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid,
-                                       ", ",
+                                       ", connection=",
                                        ovs_port->connection_uuid,
                                        ""),
                   (strtmp1 = _strdict_to_string(ovs_port->external_ids)),
@@ -2192,11 +2194,11 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                                              &unused))
                 continue;
 
-            _LOGT("obj[bridge:%s]: removed a bridge: %s%s%s",
-                  key,
+            _LOGT("monitor: %s: bridge removed: obj[bridge:%s]%s%s",
                   ovs_bridge->name,
+                  key,
                   NM_PRINT_FMT_QUOTED2(ovs_bridge->connection_uuid,
-                                       ", ",
+                                       ", connection=",
                                        ovs_bridge->connection_uuid,
                                        ""));
             _signal_emit_device_removed(self, ovs_bridge->name, NM_DEVICE_TYPE_OVS_BRIDGE, NULL);
@@ -2243,11 +2245,12 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                 gs_free char *strtmp1 = NULL;
                 gs_free char *strtmp2 = NULL;
 
-                _LOGT("obj[bridge:%s]: changed a bridge: %s%s%s, external-ids=%s, other-config=%s",
-                      key,
+                _LOGT("monitor: %s: bridge changed: obj[bridge:%s]%s%s, external-ids=%s, "
+                      "other-config=%s",
                       ovs_bridge->name,
+                      key,
                       NM_PRINT_FMT_QUOTED2(ovs_bridge->connection_uuid,
-                                           ", ",
+                                           ", connection=",
                                            ovs_bridge->connection_uuid,
                                            ""),
                       (strtmp1 = _strdict_to_string(ovs_bridge->external_ids)),
@@ -2267,11 +2270,11 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg)
                 .other_config    = g_steal_pointer(&other_config_arr),
             };
             g_hash_table_add(priv->bridges, ovs_bridge);
-            _LOGT("obj[bridge:%s]: added a bridge: %s%s%s, external-ids=%s, other-config=%s",
-                  key,
+            _LOGT("monitor: %s: bridge added: obj[bridge:%s]%s%s, external-ids=%s, other-config=%s",
                   ovs_bridge->name,
+                  key,
                   NM_PRINT_FMT_QUOTED2(ovs_bridge->connection_uuid,
-                                       ", ",
+                                       ", connection=",
                                        ovs_bridge->connection_uuid,
                                        ""),
                   (strtmp1 = _strdict_to_string(ovs_bridge->external_ids)),
diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c
index 148caa11..b41ed5e1 100644
--- a/src/core/devices/wifi/nm-device-wifi.c
+++ b/src/core/devices/wifi/nm-device-wifi.c
@@ -191,6 +191,9 @@ static void supplicant_iface_notify_p2p_available(NMSupplicantInterface *iface,
                                                   GParamSpec            *pspec,
                                                   NMDeviceWifi          *self);
 
+static void supplicant_iface_notify_wpa_psk_mismatch_cb(NMSupplicantInterface *iface,
+                                                        NMDeviceWifi          *self);
+
 static void periodic_update(NMDeviceWifi *self);
 
 static void ap_add_remove(NMDeviceWifi *self,
@@ -624,6 +627,10 @@ supplicant_interface_acquire_cb(NMSupplicantManager         *supplicant_manager,
                      "notify::" NM_SUPPLICANT_INTERFACE_P2P_AVAILABLE,
                      G_CALLBACK(supplicant_iface_notify_p2p_available),
                      self);
+    g_signal_connect(priv->sup_iface,
+                     NM_SUPPLICANT_INTERFACE_PSK_MISMATCH,
+                     G_CALLBACK(supplicant_iface_notify_wpa_psk_mismatch_cb),
+                     self);
 
     _scan_notify_is_scanning(self);
 
@@ -2398,6 +2405,9 @@ handle_8021x_or_psk_auth_fail(NMDeviceWifi              *self,
 
     g_return_val_if_fail(new_state == NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED, FALSE);
 
+    if (nm_device_get_state(device) != NM_DEVICE_STATE_CONFIG)
+        return FALSE;
+
     req = nm_device_get_act_request(NM_DEVICE(self));
     g_return_val_if_fail(req != NULL, FALSE);
 
@@ -2841,6 +2851,34 @@ handle_auth_or_fail(NMDeviceWifi *self, NMActRequest *req, gboolean new_secrets)
     return TRUE;
 }
 
+static void
+supplicant_iface_notify_wpa_psk_mismatch_cb(NMSupplicantInterface *iface, NMDeviceWifi *self)
+{
+    NMDevice     *device = NM_DEVICE(self);
+    NMActRequest *req;
+    const char   *setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME;
+
+    if (nm_device_get_state(device) != NM_DEVICE_STATE_CONFIG)
+        return;
+
+    _LOGI(LOGD_DEVICE | LOGD_WIFI,
+          "Activation: (wifi) psk mismatch reported by supplicant, asking for new key");
+
+    req = nm_device_get_act_request(NM_DEVICE(self));
+    g_return_if_fail(req != NULL);
+
+    nm_act_request_clear_secrets(req);
+
+    cleanup_association_attempt(self, TRUE);
+    nm_device_state_changed(device,
+                            NM_DEVICE_STATE_NEED_AUTH,
+                            NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT);
+    wifi_secrets_get_secrets(self,
+                             setting_name,
+                             NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION
+                                 | NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW);
+}
+
 /*
  * supplicant_connection_timeout_cb
  *
diff --git a/src/core/devices/wifi/nm-iwd-manager.c b/src/core/devices/wifi/nm-iwd-manager.c
index 76a342e2..bb2e056d 100644
--- a/src/core/devices/wifi/nm-iwd-manager.c
+++ b/src/core/devices/wifi/nm-iwd-manager.c
@@ -684,7 +684,7 @@ iwd_config_write(GKeyFile              *config,
      * in the last few filename characters -- it cannot end in .open, .psk
      * or .8021x.
      */
-    return nm_utils_file_set_contents(filepath, data, length, 0600, times, NULL, error);
+    return nm_utils_file_set_contents(filepath, data, length, 0600, times, NULL, NULL, error);
 }
 
 static const char *
diff --git a/src/core/devices/wwan/nm-modem-broadband.c b/src/core/devices/wwan/nm-modem-broadband.c
index 018e5306..4bd0a45c 100644
--- a/src/core/devices/wwan/nm-modem-broadband.c
+++ b/src/core/devices/wwan/nm-modem-broadband.c
@@ -508,8 +508,9 @@ find_gsm_apn_cb(const char   *apn,
 static gboolean
 try_create_connect_properties(NMModemBroadband *self)
 {
-    NMModemBroadbandPrivate *priv = NM_MODEM_BROADBAND_GET_PRIVATE(self);
-    ConnectContext          *ctx  = priv->ctx;
+    NMModemBroadbandPrivate *priv        = NM_MODEM_BROADBAND_GET_PRIVATE(self);
+    ConnectContext          *ctx         = priv->ctx;
+    NMDeviceStateReason      fail_reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
 
     if (MODEM_CAPS_3GPP(ctx->caps)) {
         NMSettingGsm *s_gsm = nm_connection_get_setting_gsm(ctx->connection);
@@ -522,7 +523,7 @@ try_create_connect_properties(NMModemBroadband *self)
             if (s_gsm)
                 network_id = nm_setting_gsm_get_network_id(s_gsm);
             if (!network_id) {
-                if (mm_modem_get_state(self->_priv.modem_iface) < MM_MODEM_STATE_REGISTERED)
+                if (mm_modem_get_state(self->_priv.modem_iface) != MM_MODEM_STATE_REGISTERED)
                     return FALSE;
                 modem_3gpp = mm_object_get_modem_3gpp(priv->modem_object);
                 network_id = mm_modem_3gpp_get_operator_code(modem_3gpp);
@@ -530,6 +531,7 @@ try_create_connect_properties(NMModemBroadband *self)
             if (!network_id) {
                 _LOGW("failed to connect '%s': unable to determine the network id",
                       nm_connection_get_id(ctx->connection));
+                fail_reason = NM_DEVICE_STATE_REASON_MODEM_NO_OPERATOR_CODE;
                 goto out;
             }
 
@@ -558,7 +560,7 @@ try_create_connect_properties(NMModemBroadband *self)
     }
 
 out:
-    nm_modem_emit_prepare_result(NM_MODEM(self), FALSE, NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED);
+    nm_modem_emit_prepare_result(NM_MODEM(self), FALSE, fail_reason);
     connect_context_clear(self);
     return TRUE;
 }
@@ -1649,6 +1651,8 @@ nm_modem_broadband_new(GObject *object, GError **error)
                         driver,
                         NM_MODEM_OPERATOR_CODE,
                         operator_code,
+                        NM_MODEM_DEVICE_UID,
+                        mm_modem_get_device(modem_iface),
                         NULL);
 }
 
diff --git a/src/core/devices/wwan/nm-modem.c b/src/core/devices/wwan/nm-modem.c
index c4852ea2..9d8f61c5 100644
--- a/src/core/devices/wwan/nm-modem.c
+++ b/src/core/devices/wwan/nm-modem.c
@@ -39,7 +39,8 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMModem,
                              PROP_IP_TYPES,
                              PROP_SIM_OPERATOR_ID,
                              PROP_OPERATOR_CODE,
-                             PROP_APN, );
+                             PROP_APN,
+                             PROP_DEVICE_UID, );
 
 enum {
     PPP_STATS,
@@ -78,6 +79,7 @@ typedef struct _NMModemPrivate {
     char           *sim_operator_id;
     char           *operator_code;
     char           *apn;
+    char           *device_uid;
 
     NMPPPManager *ppp_manager;
     NMPppMgr     *ppp_mgr;
@@ -618,6 +620,12 @@ nm_modem_get_apn(NMModem *self)
     return NM_MODEM_GET_PRIVATE(self)->apn;
 }
 
+const char *
+nm_modem_get_device_uid(NMModem *self)
+{
+    return NM_MODEM_GET_PRIVATE(self)->device_uid;
+}
+
 /*****************************************************************************/
 
 static void
@@ -1121,6 +1129,22 @@ nm_modem_check_connection_compatible(NMModem *self, NMConnection *connection, GE
             }
         }
 
+        str = nm_setting_gsm_get_device_uid(s_gsm);
+        if (str) {
+            if (!priv->device_uid) {
+                nm_utils_error_set_literal(error,
+                                           NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY,
+                                           "GSM profile has device-uid, device does not");
+                return FALSE;
+            }
+            if (!nm_streq(str, priv->device_uid)) {
+                nm_utils_error_set_literal(error,
+                                           NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY,
+                                           "device has differing device-uid than GSM profile");
+                return FALSE;
+            }
+        }
+
         /* SIM properties may not be available before the SIM is unlocked, so
          * to ensure that autoconnect works, the connection's SIM properties
          * are only compared if present on the device.
@@ -1644,6 +1668,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
     case PROP_APN:
         g_value_set_string(value, priv->apn);
         break;
+    case PROP_DEVICE_UID:
+        g_value_set_string(value, priv->device_uid);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -1699,6 +1726,10 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
         /* construct-only */
         priv->operator_code = g_value_dup_string(value);
         break;
+    case PROP_DEVICE_UID:
+        /* construct-only */
+        priv->device_uid = g_value_dup_string(value);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -1758,6 +1789,7 @@ finalize(GObject *object)
     g_free(priv->sim_operator_id);
     g_free(priv->operator_code);
     g_free(priv->apn);
+    g_free(priv->device_uid);
 
     G_OBJECT_CLASS(nm_modem_parent_class)->finalize(object);
 }
@@ -1863,6 +1895,13 @@ nm_modem_class_init(NMModemClass *klass)
     obj_properties[PROP_APN] =
         g_param_spec_string(NM_MODEM_APN, "", "", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+    obj_properties[PROP_DEVICE_UID] =
+        g_param_spec_string(NM_MODEM_DEVICE_UID,
+                            "",
+                            "",
+                            NULL,
+                            G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
     g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
 
     signals[PPP_STATS] = g_signal_new(NM_MODEM_PPP_STATS,
diff --git a/src/core/devices/wwan/nm-modem.h b/src/core/devices/wwan/nm-modem.h
index 021d77b2..1f54b0b6 100644
--- a/src/core/devices/wwan/nm-modem.h
+++ b/src/core/devices/wwan/nm-modem.h
@@ -30,6 +30,7 @@
 #define NM_MODEM_SIM_OPERATOR_ID "sim-operator-id"
 #define NM_MODEM_OPERATOR_CODE   "operator-code"
 #define NM_MODEM_APN             "apn"
+#define NM_MODEM_DEVICE_UID      "device-uid"
 
 /* Signals */
 #define NM_MODEM_PPP_STATS      "ppp-stats"
@@ -154,6 +155,7 @@ const char *nm_modem_get_sim_id(NMModem *modem);
 const char *nm_modem_get_sim_operator_id(NMModem *modem);
 const char *nm_modem_get_operator_code(NMModem *modem);
 const char *nm_modem_get_apn(NMModem *modem);
+const char *nm_modem_get_device_uid(NMModem *modem);
 
 gboolean nm_modem_set_data_port(NMModem        *self,
                                 NMPlatform     *platform,
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
index 3789caf8..5f32f3fa 100644
--- a/src/core/dns/nm-dns-dnsconfd.c
+++ b/src/core/dns/nm-dns-dnsconfd.c
@@ -374,7 +374,7 @@ server_builder_append_base(GVariantBuilder   *argument_builder,
     NMDnsServer dns_server;
     gsize       addr_size;
 
-    if (!nm_dns_uri_parse(address_family, address_string, &dns_server))
+    if (!nm_dns_uri_parse(address_family, address_string, &dns_server, NULL))
         return FALSE;
     addr_size = nm_utils_addr_family_to_size(dns_server.addr_family);
 
diff --git a/src/core/dns/nm-dns-dnsmasq.c b/src/core/dns/nm-dns-dnsmasq.c
index 8e3c10c9..cc0a8788 100644
--- a/src/core/dns/nm-dns-dnsmasq.c
+++ b/src/core/dns/nm-dns-dnsmasq.c
@@ -521,9 +521,10 @@ _gl_pid_spawn_next_step(void)
     argv[argv_idx++] = "--no-resolv"; /* Use only commandline */
     argv[argv_idx++] = "--keep-in-foreground";
     argv[argv_idx++] = "--no-hosts"; /* don't use /etc/hosts to resolve */
-    argv[argv_idx++] = "--bind-interfaces";
+    argv[argv_idx++] = "--bind-dynamic";
     argv[argv_idx++] = "--pid-file=" PIDFILE;
-    argv[argv_idx++] = "--listen-address=127.0.0.1"; /* Should work for both 4 and 6 */
+    argv[argv_idx++] = "--listen-address=127.0.0.1";
+    argv[argv_idx++] = "--listen-address=::1";
     argv[argv_idx++] = "--cache-size=400";
     argv[argv_idx++] = "--clear-on-reload";     /* clear cache when dns server changes */
     argv[argv_idx++] = "--conf-file=/dev/null"; /* avoid loading /etc/dnsmasq.conf */
diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c
index 57e73226..c746e714 100644
--- a/src/core/dns/nm-dns-manager.c
+++ b/src/core/dns/nm-dns-manager.c
@@ -26,6 +26,7 @@
 
 #include "libnm-core-intern/nm-core-internal.h"
 #include "libnm-glib-aux/nm-str-buf.h"
+#include "libnm-glib-aux/nm-io-utils.h"
 
 #include "NetworkManagerUtils.h"
 #include "devices/nm-device.h"
@@ -1006,7 +1007,8 @@ _read_link_cached(const char *path, gboolean *is_cached, char **cached)
 #define MY_RESOLV_CONF_TMP MY_RESOLV_CONF ".tmp"
 #define RESOLV_CONF_TMP    "/etc/.resolv.conf.NetworkManager"
 
-#define NO_STUB_RESOLV_CONF NMRUNDIR "/no-stub-resolv.conf"
+#define NO_STUB_RESOLV_CONF     NMRUNDIR "/no-stub-resolv.conf"
+#define NO_STUB_RESOLV_CONF_TMP NMRUNDIR "/no-stub-resolv.conf.tmp"
 
 static void
 update_resolv_conf_no_stub(NMDnsManager      *self,
@@ -1019,7 +1021,14 @@ update_resolv_conf_no_stub(NMDnsManager      *self,
 
     content = create_resolv_conf(searches, nameservers, options);
 
-    if (!g_file_set_contents(NO_STUB_RESOLV_CONF, content, -1, &local)) {
+    if (!nm_utils_file_set_contents(NO_STUB_RESOLV_CONF,
+                                    content,
+                                    -1,
+                                    0644,
+                                    NULL,
+                                    NO_STUB_RESOLV_CONF_TMP,
+                                    NULL,
+                                    &local)) {
         _LOGD("update-resolv-no-stub: failure to write file: %s", local->message);
         g_error_free(local);
         return;
diff --git a/src/core/dns/nm-dns-systemd-resolved.c b/src/core/dns/nm-dns-systemd-resolved.c
index 0701a1dc..172bd0bc 100644
--- a/src/core/dns/nm-dns-systemd-resolved.c
+++ b/src/core/dns/nm-dns-systemd-resolved.c
@@ -37,6 +37,7 @@
 static const char *const DBUS_OP_SET_LINK_DEFAULT_ROUTE = "SetLinkDefaultRoute";
 static const char *const DBUS_OP_SET_LINK_DNS_OVER_TLS  = "SetLinkDNSOverTLS";
 static const char *const DBUS_OP_SET_LINK_DNS_EX        = "SetLinkDNSEx";
+static const char *const DBUS_OP_SET_LINK_DNSSEC        = "SetLinkDNSSEC";
 
 /*****************************************************************************/
 
@@ -398,7 +399,7 @@ update_add_ip_config(NMDnsSystemdResolved    *self,
     for (i = 0; i < n; i++) {
         NMDnsServer dns_server;
 
-        if (!nm_dns_uri_parse(ip_data->addr_family, strarr[i], &dns_server))
+        if (!nm_dns_uri_parse(ip_data->addr_family, strarr[i], &dns_server, NULL))
             continue;
 
         if (!NM_IN_SET(dns_server.scheme,
@@ -484,9 +485,11 @@ prepare_one_interface(NMDnsSystemdResolved *self, const InterfaceConfig *ic)
     NMSettingConnectionMdns       mdns              = NM_SETTING_CONNECTION_MDNS_DEFAULT;
     NMSettingConnectionLlmnr      llmnr             = NM_SETTING_CONNECTION_LLMNR_DEFAULT;
     NMSettingConnectionDnsOverTls dns_over_tls      = NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT;
+    NMSettingConnectionDnssec     dnssec            = NM_SETTING_CONNECTION_DNSSEC_DEFAULT;
     const char                   *mdns_arg          = NULL;
     const char                   *llmnr_arg         = NULL;
     const char                   *dns_over_tls_arg  = NULL;
+    const char                   *dnssec_arg        = NULL;
     gboolean                      has_config        = FALSE;
     gboolean                      has_default_route = FALSE;
     guint                         i;
@@ -517,6 +520,7 @@ prepare_one_interface(NMDnsSystemdResolved *self, const InterfaceConfig *ic)
                 llmnr = NM_MAX(llmnr, nm_l3_config_data_get_llmnr(ip_data->l3cd));
                 dns_over_tls =
                     NM_MAX(dns_over_tls, nm_l3_config_data_get_dns_over_tls(ip_data->l3cd));
+                dnssec = NM_MAX(dnssec, nm_l3_config_data_get_dnssec(ip_data->l3cd));
             }
         }
     }
@@ -589,8 +593,24 @@ prepare_one_interface(NMDnsSystemdResolved *self, const InterfaceConfig *ic)
     }
     nm_assert(dns_over_tls_arg);
 
+    switch (dnssec) {
+    case NM_SETTING_CONNECTION_DNSSEC_NO:
+        dnssec_arg = "no";
+        break;
+    case NM_SETTING_CONNECTION_DNSSEC_ALLOW_DOWNGRADE:
+        dnssec_arg = "allow-downgrade";
+        break;
+    case NM_SETTING_CONNECTION_DNSSEC_YES:
+        dnssec_arg = "yes";
+        break;
+    case NM_SETTING_CONNECTION_DNSSEC_DEFAULT:
+        dnssec_arg = "";
+        break;
+    }
+    nm_assert(dnssec_arg);
+
     if (!nm_str_is_empty(mdns_arg) || !nm_str_is_empty(llmnr_arg)
-        || !nm_str_is_empty(dns_over_tls_arg))
+        || !nm_str_is_empty(dns_over_tls_arg) || !nm_str_is_empty(dnssec_arg))
         has_config = TRUE;
 
     _request_item_append(self, "SetLinkDomains", ic->ifindex, g_variant_builder_end(&domains));
@@ -618,6 +638,10 @@ prepare_one_interface(NMDnsSystemdResolved *self, const InterfaceConfig *ic)
                          DBUS_OP_SET_LINK_DNS_OVER_TLS,
                          ic->ifindex,
                          g_variant_new("(is)", ic->ifindex, dns_over_tls_arg ?: ""));
+    _request_item_append(self,
+                         DBUS_OP_SET_LINK_DNSSEC,
+                         ic->ifindex,
+                         g_variant_new("(is)", ic->ifindex, dnssec_arg ?: ""));
 
     return has_config;
 }
diff --git a/src/core/main-utils.c b/src/core/main-utils.c
index 0f62da29..d1be6814 100644
--- a/src/core/main-utils.c
+++ b/src/core/main-utils.c
@@ -81,7 +81,7 @@ nm_main_utils_write_pidfile(const char *pidfile)
     char                  pid[16];
 
     nm_sprintf_buf(pid, "%lld", (long long) getpid());
-    if (!nm_utils_file_set_contents(pidfile, pid, -1, 00644, NULL, NULL, &error)) {
+    if (!nm_utils_file_set_contents(pidfile, pid, -1, 00644, NULL, NULL, NULL, &error)) {
         fprintf(stderr, _("Writing to %s failed: %s\n"), pidfile, error->message);
         return FALSE;
     }
diff --git a/src/core/main.c b/src/core/main.c
index 4c7de6cd..8d519c00 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -339,7 +339,7 @@ main(int argc, char *argv[])
         char *path, *slash;
         int   g;
 
-        /* exe is <basedir>/src/.libs/lt-NetworkManager, so chop off
+        /* exe is <builddir>/src/core/NetworkManager, so chop off
          * the last three components */
         path = realpath("/proc/self/exe", NULL);
         g_assert(path != NULL);
diff --git a/src/core/ndisc/nm-lndp-ndisc.c b/src/core/ndisc/nm-lndp-ndisc.c
index f0de2fd5..c19dcc91 100644
--- a/src/core/ndisc/nm-lndp-ndisc.c
+++ b/src/core/ndisc/nm-lndp-ndisc.c
@@ -19,6 +19,7 @@
 #include "libnm-systemd-shared/nm-sd-utils-shared.h"
 #include "nm-l3cfg.h"
 #include "nm-ndisc-private.h"
+#include "nm-core-utils.h"
 
 #define _NMLOG_PREFIX_NAME "ndisc-lndp"
 
@@ -27,6 +28,14 @@
 typedef struct {
     struct ndp *ndp;
     GSource    *event_source;
+
+    struct {
+        NMRateLimit pio_lft;
+        NMRateLimit mtu;
+        NMRateLimit omit_prefix;
+        NMRateLimit omit_dns;
+        NMRateLimit omit_dnssl;
+    } msg_ratelimit;
 } NMLndpNDiscPrivate;
 
 /*****************************************************************************/
@@ -49,6 +58,36 @@ G_DEFINE_TYPE(NMLndpNDisc, nm_lndp_ndisc, NM_TYPE_NDISC)
 
 /*****************************************************************************/
 
+/*
+ * If we log a message about an invalid RA packet, don't repeat the same message
+ * at every packet received or sent. Rate limit the message to 6 every 12 hours
+ * per type and per ndisc instance.
+ */
+
+#define LOG_INV_RA_WINDOW (12 * 3600)
+#define LOG_INV_RA_BURST  6
+
+#define _LOG_INVALID_RA(ndisc, rate_limit, ...)                                  \
+    G_STMT_START                                                                 \
+    {                                                                            \
+        NMNDisc     *__ndisc  = (ndisc);                                         \
+        NMRateLimit *__rl     = (rate_limit);                                    \
+        const char  *__ifname = nm_ndisc_get_ifname(__ndisc);                    \
+                                                                                 \
+        if (__ifname && nm_logging_enabled(LOGL_WARN, LOGD_IP6)                  \
+            && nm_rate_limit_check(__rl, LOG_INV_RA_WINDOW, LOG_INV_RA_BURST)) { \
+            nm_log(LOGL_WARN,                                                    \
+                   LOGD_IP6,                                                     \
+                   __ifname,                                                     \
+                   NULL,                                                         \
+                   "ndisc (%s): " _NM_UTILS_MACRO_FIRST(__VA_ARGS__),            \
+                   __ifname _NM_UTILS_MACRO_REST(__VA_ARGS__));                  \
+        }                                                                        \
+    }                                                                            \
+    G_STMT_END
+
+/*****************************************************************************/
+
 static gboolean
 send_rs(NMNDisc *ndisc, GError **error)
 {
@@ -113,6 +152,7 @@ static int
 receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
 {
     NMNDisc             *ndisc   = (NMNDisc *) user_data;
+    NMLndpNDiscPrivate  *priv    = NM_LNDP_NDISC_GET_PRIVATE(ndisc);
     NMNDiscDataInternal *rdata   = ndisc->rdata;
     NMNDiscConfigMap     changed = 0;
     NMNDiscGateway       gateway;
@@ -229,7 +269,11 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
              * log a system management error in this case.
              */
             if (preferred_time > valid_time) {
-                _LOGW("skipping PIO - preferred lifetime > valid lifetime");
+                _LOG_INVALID_RA(
+                    ndisc,
+                    &priv->msg_ratelimit.pio_lft,
+                    "ignoring Prefix Information Option with invalid lifetimes in received IPv6 "
+                    "router advertisement");
                 continue;
             }
 
@@ -349,7 +393,11 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
              * Kernel would set it, but would flush out all IPv6 addresses away
              * from the link, even the link-local, and we wouldn't be able to
              * listen for further RAs that could fix the MTU. */
-            _LOGW("MTU too small for IPv6 ignored: %d", mtu);
+            _LOG_INVALID_RA(ndisc,
+                            &priv->msg_ratelimit.mtu,
+                            "ignoring too small MTU %u in received IPv6 "
+                            "router advertisement",
+                            mtu);
         }
     }
 
@@ -445,8 +493,11 @@ send_ra(NMNDisc *ndisc, GError **error)
 
         prefix = _ndp_msg_add_option(msg, sizeof(*prefix));
         if (!prefix) {
-            /* Maybe we could sent separate RAs, but why bother... */
-            _LOGW("The RA is too big, had to omit some some prefixes.");
+            /* Maybe we could send separate RAs, but why bother... */
+            _LOG_INVALID_RA(
+                ndisc,
+                &priv->msg_ratelimit.omit_prefix,
+                "the outgoing IPv6 router advertisement is too big: omitting some prefixes");
             break;
         }
 
@@ -475,7 +526,10 @@ send_ra(NMNDisc *ndisc, GError **error)
 
         option = _ndp_msg_add_option(msg, len);
         if (!option) {
-            _LOGW("The RA is too big, had to omit DNS information.");
+            _LOG_INVALID_RA(
+                ndisc,
+                &priv->msg_ratelimit.omit_dns,
+                "the outgoing IPv6 router advertisement is too big: omitting DNS information");
             goto dns_servers_done;
         }
 
@@ -553,7 +607,10 @@ dns_servers_done:
         nm_assert(len / 8u >= 2u);
 
         if (len / 8u >= 256u || !(option = _ndp_msg_add_option(msg, len))) {
-            _LOGW("The RA is too big, had to omit DNS search list.");
+            _LOG_INVALID_RA(
+                ndisc,
+                &priv->msg_ratelimit.omit_dnssl,
+                "the outgoing IPv6 router advertisement is too big: omitting DNS search list");
             goto dns_domains_done;
         }
 
diff --git a/src/core/nm-connectivity.c b/src/core/nm-connectivity.c
index 2aa22331..c7915fd9 100644
--- a/src/core/nm-connectivity.c
+++ b/src/core/nm-connectivity.c
@@ -77,6 +77,8 @@ struct _NMConnectivityCheckHandle {
         ConConfig *con_config;
 
         GCancellable      *resolve_cancellable;
+        int                resolve_ifindex;
+        GDBusConnection   *dbus_connection;
         CURLM             *curl_mhandle;
         CURL              *curl_ehandle;
         struct curl_slist *request_headers;
@@ -953,6 +955,113 @@ systemd_resolved_resolve_cb(GObject *object, GAsyncResult *res, gpointer user_da
     do_curl_request(cb_data, nm_str_buf_get_str(&strbuf_hosts));
 }
 
+static void
+systemd_resolved_resolve(NMConnectivityCheckHandle *cb_data)
+{
+    _LOG2D("start request to '%s' (try resolving '%s' using systemd-resolved with ifindex %d)",
+           cb_data->concheck.con_config->uri,
+           cb_data->concheck.con_config->host,
+           cb_data->concheck.resolve_ifindex);
+
+    g_dbus_connection_call(cb_data->concheck.dbus_connection,
+                           "org.freedesktop.resolve1",
+                           "/org/freedesktop/resolve1",
+                           "org.freedesktop.resolve1.Manager",
+                           "ResolveHostname",
+                           g_variant_new("(isit)",
+                                         (gint32) cb_data->concheck.resolve_ifindex,
+                                         cb_data->concheck.con_config->host,
+                                         (gint32) cb_data->addr_family,
+                                         SD_RESOLVED_DNS),
+                           G_VARIANT_TYPE("(a(iiay)st)"),
+                           G_DBUS_CALL_FLAGS_NONE,
+                           -1,
+                           cb_data->concheck.resolve_cancellable,
+                           systemd_resolved_resolve_cb,
+                           cb_data);
+}
+
+static void
+systemd_resolved_link_scopes_cb(GObject *object, GAsyncResult *res, gpointer user_data)
+{
+    NMConnectivityCheckHandle *cb_data;
+    gs_unref_variant GVariant *result     = NULL;
+    gs_unref_variant GVariant *value      = NULL;
+    gs_free_error GError      *error      = NULL;
+    guint64                    scope_mask = 0;
+
+    result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(object), res, &error);
+    if (nm_utils_error_is_cancelled(error))
+        return;
+
+    cb_data = user_data;
+
+    if (!result) {
+        _LOG2D("unable to obtain systemd-resolved link ScopesMask for interface %d: %s",
+               cb_data->concheck.resolve_ifindex,
+               error->message);
+
+        cb_data->concheck.resolve_ifindex = 0;
+        systemd_resolved_resolve(cb_data);
+        return;
+    }
+
+    g_variant_get(result, "(v)", &value);
+    g_variant_get(value, "t", &scope_mask);
+
+    if (!(scope_mask & SD_RESOLVED_DNS)) {
+        /* there is no per-link DNS configured / active; query all available /
+         * system DNS resolvers instead of restricting the lookup to just this
+         * one, which would turn up no results. */
+        _LOG2D("no per-link DNS available (scope mask %" G_GUINT64_FORMAT
+               "); falling back to system-wide lookups",
+               scope_mask);
+        cb_data->concheck.resolve_ifindex = 0;
+    }
+
+    systemd_resolved_resolve(cb_data);
+}
+
+static void
+systemd_resolved_get_link_cb(GObject *object, GAsyncResult *res, gpointer user_data)
+{
+    NMConnectivityCheckHandle *cb_data;
+    gs_unref_variant GVariant *result    = NULL;
+    gs_free char              *link_path = NULL;
+    gs_free_error GError      *error     = NULL;
+
+    result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(object), res, &error);
+    if (nm_utils_error_is_cancelled(error))
+        return;
+
+    cb_data = user_data;
+
+    if (!result) {
+        _LOG2D("unable to obtain systemd-resolved link D-Bus object for interface %d: %s",
+               cb_data->concheck.resolve_ifindex,
+               error->message);
+
+        cb_data->concheck.resolve_ifindex = 0;
+        systemd_resolved_resolve(cb_data);
+        return;
+    }
+
+    g_variant_get(result, "(o)", &link_path);
+
+    g_dbus_connection_call(cb_data->concheck.dbus_connection,
+                           "org.freedesktop.resolve1",
+                           link_path,
+                           "org.freedesktop.DBus.Properties",
+                           "Get",
+                           g_variant_new("(ss)", "org.freedesktop.resolve1.Link", "ScopesMask"),
+                           G_VARIANT_TYPE("(v)"),
+                           G_DBUS_CALL_FLAGS_NONE,
+                           -1,
+                           cb_data->concheck.resolve_cancellable,
+                           systemd_resolved_link_scopes_cb,
+                           cb_data);
+}
+
 static NMConnectivityState
 check_platform_config(NMConnectivity *self,
                       NMPlatform     *platform,
@@ -1067,6 +1176,7 @@ nm_connectivity_check_start(NMConnectivity             *self,
         }
 
         cb_data->concheck.resolve_cancellable = g_cancellable_new();
+        cb_data->concheck.resolve_ifindex     = ifindex;
 
         /* note that we pick up support for systemd-resolved right away when we need it.
          * We don't need to remember the setting, because we can (cheaply) check anew
@@ -1089,10 +1199,8 @@ nm_connectivity_check_start(NMConnectivity             *self,
         has_systemd_resolved = !!nm_dns_manager_get_systemd_resolved(nm_dns_manager_get());
 
         if (has_systemd_resolved) {
-            GDBusConnection *dbus_connection;
-
-            dbus_connection = NM_MAIN_DBUS_CONNECTION_GET;
-            if (!dbus_connection) {
+            cb_data->concheck.dbus_connection = NM_MAIN_DBUS_CONNECTION_GET;
+            if (!cb_data->concheck.dbus_connection) {
                 /* we have no D-Bus connection? That might happen in configure and quit mode.
                  *
                  * Anyway, something is very odd, just fail connectivity check. */
@@ -1103,25 +1211,19 @@ nm_connectivity_check_start(NMConnectivity             *self,
                 return cb_data;
             }
 
-            g_dbus_connection_call(dbus_connection,
+            /* first check whether there has been a per-link DNS configured */
+            g_dbus_connection_call(cb_data->concheck.dbus_connection,
                                    "org.freedesktop.resolve1",
                                    "/org/freedesktop/resolve1",
                                    "org.freedesktop.resolve1.Manager",
-                                   "ResolveHostname",
-                                   g_variant_new("(isit)",
-                                                 0,
-                                                 cb_data->concheck.con_config->host,
-                                                 (gint32) cb_data->addr_family,
-                                                 SD_RESOLVED_DNS),
-                                   G_VARIANT_TYPE("(a(iiay)st)"),
+                                   "GetLink",
+                                   g_variant_new("(i)", ifindex),
+                                   G_VARIANT_TYPE("(o)"),
                                    G_DBUS_CALL_FLAGS_NONE,
                                    -1,
                                    cb_data->concheck.resolve_cancellable,
-                                   systemd_resolved_resolve_cb,
+                                   systemd_resolved_get_link_cb,
                                    cb_data);
-            _LOG2D("start request to '%s' (try resolving '%s' using systemd-resolved)",
-                   cb_data->concheck.con_config->uri,
-                   cb_data->concheck.con_config->host);
             return cb_data;
         }
 
diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c
index 4a7f760d..deac04e7 100644
--- a/src/core/nm-core-utils.c
+++ b/src/core/nm-core-utils.c
@@ -2865,6 +2865,7 @@ _host_id_read(guint8 **out_host_id, gsize *out_host_id_len)
                                                0600,
                                                NULL,
                                                NULL,
+                                               NULL,
                                                &error)) {
             nm_log_warn(
                 LOGD_CORE,
@@ -5162,6 +5163,14 @@ helper_have_data(int fd, GIOCondition condition, gpointer user_data)
     n_read = nm_utils_fd_read(fd, &info->in_buffer);
     _LOG2T(info, "read returns %ld", (long) n_read);
 
+    if (info->in_buffer.len > 32 * 1024 * 1024) {
+        helper_complete(info,
+                        g_error_new_literal(NM_UTILS_ERROR,
+                                            NM_UTILS_ERROR_UNKNOWN,
+                                            "the output is larger than 32MiB"));
+        return G_SOURCE_CONTINUE;
+    }
+
     if (n_read > 0)
         return G_SOURCE_CONTINUE;
 
@@ -5504,6 +5513,155 @@ nm_utils_shorten_hostname(const char *hostname, char **shortened)
     return TRUE;
 }
 
+/**
+ * nm_utils_connection_supported:
+ * @connection: the connection
+ * @error: on return, the reason why the connection in not supported
+ *
+ * Returns whether the given connection is supported by this version
+ * of NetworkManager.
+ */
+gboolean
+nm_utils_connection_supported(NMConnection *connection, GError **error)
+{
+    const char *type;
+    const char *feature = NULL;
+
+    g_return_val_if_fail(connection, FALSE);
+    g_return_val_if_fail(!error || !*error, FALSE);
+
+    type = nm_connection_get_connection_type(connection);
+
+    if (!WITH_TEAMDCTL) {
+        NMSettingConnection *s_con;
+
+        if (nm_streq0(type, NM_SETTING_TEAM_SETTING_NAME)) {
+            feature = "team";
+            goto out_disabled;
+        }
+
+        /* Match team ports */
+        if ((s_con = nm_connection_get_setting_connection(connection))
+            && nm_streq0(nm_setting_connection_get_port_type(s_con),
+                         NM_SETTING_TEAM_SETTING_NAME)) {
+            feature = "team";
+            goto out_disabled;
+        }
+    }
+
+    if (!WITH_OPENVSWITCH) {
+        if (NM_IN_STRSET(type,
+                         NM_SETTING_OVS_BRIDGE_SETTING_NAME,
+                         NM_SETTING_OVS_PORT_SETTING_NAME,
+                         NM_SETTING_OVS_INTERFACE_SETTING_NAME)) {
+            feature = "Open vSwitch";
+            goto out_disabled;
+        }
+
+        /* Match OVS system interfaces */
+        if (nm_connection_get_setting_ovs_interface(connection)) {
+            feature = "Open vSwitch";
+            goto out_disabled;
+        }
+    }
+
+    if (!WITH_WIFI
+        && NM_IN_STRSET(type,
+                        NM_SETTING_WIRELESS_SETTING_NAME,
+                        NM_SETTING_OLPC_MESH_SETTING_NAME,
+                        NM_SETTING_WIFI_P2P_SETTING_NAME)) {
+        feature = "Wi-Fi";
+        goto out_disabled;
+    }
+
+    if (!WITH_WWAN
+        && NM_IN_STRSET(type, NM_SETTING_GSM_SETTING_NAME, NM_SETTING_CDMA_SETTING_NAME)) {
+        feature = "WWAN";
+        goto out_disabled;
+    }
+
+    if (nm_streq0(type, NM_SETTING_WIMAX_SETTING_NAME)) {
+        feature = "WiMAX";
+        goto out_removed;
+    }
+
+    return TRUE;
+
+out_disabled:
+    nm_assert(feature);
+    g_set_error(error,
+                NM_SETTINGS_ERROR,
+                NM_SETTINGS_ERROR_FEATURE_DISABLED,
+                "%s support is disabled in this build",
+                feature);
+    return FALSE;
+
+out_removed:
+    nm_assert(feature);
+    g_set_error(error,
+                NM_SETTINGS_ERROR,
+                NM_SETTINGS_ERROR_FEATURE_REMOVED,
+                "%s is no longer supported",
+                feature);
+    return FALSE;
+}
+
+/*****************************************************************************/
+
+/**
+ * nm_rate_limit_check():
+ * @rate_limit: the NMRateLimit instance
+ * @window_sec: the time window in seconds, between 1 and 864000 (ten days)
+ * @burst: the number of max allowed event occurrences in the given time
+ *   window
+ *
+ * The function rate limits an event. Call it multiple times with the
+ * same @window_sec, and @burst values.
+ *
+ * Returns: TRUE if the event is allowed, FALSE if it is rate-limited
+ */
+gboolean
+nm_rate_limit_check(NMRateLimit *rate_limit, gint32 window_sec, gint32 burst)
+{
+    gint64 now;
+    gint64 old_ts_msec;
+    gint64 window_msec;
+    gint64 capacity;
+    gint64 elapsed;
+
+    nm_assert(window_sec >= 1 && window_sec <= 864000);
+    nm_assert(burst >= 1);
+
+    /* This implements a simple token bucket algorithm. For each millisecond,
+     * refill "burst" tokens. Thus, during a full time window we
+     * refill (window_msec * burst) tokens. Each event consumes @window_msec
+     * tokens. */
+
+    window_msec         = (gint64) window_sec * NM_UTILS_MSEC_PER_SEC;
+    capacity            = window_msec * (gint64) burst;
+    old_ts_msec         = rate_limit->ts_msec;
+    now                 = nm_utils_get_monotonic_timestamp_msec();
+    rate_limit->ts_msec = now;
+
+    elapsed = now - old_ts_msec;
+    if (old_ts_msec == 0 || elapsed > window_msec) {
+        /* On the first call, or in case a whole window passed, (re)start with
+         * a full budget */
+        rate_limit->tokens = capacity;
+    } else {
+        rate_limit->tokens += elapsed * (gint64) burst;
+        rate_limit->tokens = NM_MIN(rate_limit->tokens, capacity);
+    }
+
+    /* Consume the tokens */
+    if (rate_limit->tokens >= window_msec) {
+        rate_limit->tokens -= window_msec;
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
 const char *
 nm_utils_get_connection_first_permissions_user(NMConnection *connection)
 {
diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h
index 224018c6..cccccae6 100644
--- a/src/core/nm-core-utils.h
+++ b/src/core/nm-core-utils.h
@@ -494,6 +494,19 @@ gid_t nm_utils_get_nm_gid(void);
 
 /*****************************************************************************/
 
+gboolean nm_utils_connection_supported(NMConnection *connection, GError **error);
+
+/*****************************************************************************/
+
+typedef struct {
+    gint64 ts_msec;
+    gint64 tokens;
+} NMRateLimit;
+
+gboolean nm_rate_limit_check(NMRateLimit *rate_limit, gint32 window_sec, gint32 burst);
+
+/*****************************************************************************/
+
 const char *nm_utils_get_connection_first_permissions_user(NMConnection *connection);
 
 /*****************************************************************************/
diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c
index 666aa8a3..328f59b6 100644
--- a/src/core/nm-l3-config-data.c
+++ b/src/core/nm-l3-config-data.c
@@ -120,6 +120,7 @@ struct _NML3ConfigData {
     NMSettingConnectionMdns       mdns;
     NMSettingConnectionLlmnr      llmnr;
     NMSettingConnectionDnsOverTls dns_over_tls;
+    NMSettingConnectionDnssec     dnssec;
     NMUtilsIPv6IfaceId            ip6_token;
 
     NML3ConfigDatFlags flags;
@@ -577,6 +578,16 @@ nm_l3_config_data_log(const NML3ConfigData *self,
                                            NULL)));
     }
 
+    if (self->dnssec != NM_SETTING_CONNECTION_DNSSEC_DEFAULT) {
+        gs_free char *s = NULL;
+
+        _L("dnssec: %s",
+           (s = _nm_utils_enum_to_str_full(nm_setting_connection_dnssec_get_type(),
+                                           self->dnssec,
+                                           " ",
+                                           NULL)));
+    }
+
     if (self->mptcp_flags != NM_MPTCP_FLAGS_NONE) {
         gs_free char *s = NULL;
 
@@ -694,6 +705,7 @@ nm_l3_config_data_new(NMDedupMultiIndex *multi_idx, int ifindex, NMIPConfigSourc
         .mdns                           = NM_SETTING_CONNECTION_MDNS_DEFAULT,
         .llmnr                          = NM_SETTING_CONNECTION_LLMNR_DEFAULT,
         .dns_over_tls                   = NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT,
+        .dnssec                         = NM_SETTING_CONNECTION_DNSSEC_DEFAULT,
         .flags                          = NM_L3_CONFIG_DAT_FLAGS_NONE,
         .metered                        = NM_TERNARY_DEFAULT,
         .proxy_browser_only             = NM_TERNARY_DEFAULT,
@@ -1767,6 +1779,26 @@ nm_l3_config_data_set_dns_over_tls(NML3ConfigData *self, NMSettingConnectionDnsO
     return TRUE;
 }
 
+NMSettingConnectionDnssec
+nm_l3_config_data_get_dnssec(const NML3ConfigData *self)
+{
+    nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE));
+
+    return self->dnssec;
+}
+
+gboolean
+nm_l3_config_data_set_dnssec(NML3ConfigData *self, NMSettingConnectionDnssec dnssec)
+{
+    nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE));
+
+    if (self->dnssec == dnssec)
+        return FALSE;
+
+    self->dnssec = dnssec;
+    return TRUE;
+}
+
 NMIPRouteTableSyncMode
 nm_l3_config_data_get_route_table_sync(const NML3ConfigData *self, int addr_family)
 {
@@ -2446,6 +2478,7 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a,
         NM_CMP_DIRECT(a->mdns, b->mdns);
         NM_CMP_DIRECT(a->llmnr, b->llmnr);
         NM_CMP_DIRECT(a->dns_over_tls, b->dns_over_tls);
+        NM_CMP_DIRECT(a->dnssec, b->dnssec);
     }
 
     if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_OTHER)) {
@@ -3211,6 +3244,12 @@ nm_l3_config_data_hash_dns(const NML3ConfigData *l3cd,
         empty = FALSE;
     }
 
+    val = nm_l3_config_data_get_dnssec(l3cd);
+    if (val != NM_SETTING_CONNECTION_DNSSEC_DEFAULT) {
+        g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
+        empty = FALSE;
+    }
+
     if (!empty) {
         int prio = 0;
 
@@ -3461,6 +3500,9 @@ nm_l3_config_data_merge(NML3ConfigData       *self,
     if (self->dns_over_tls == NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT)
         self->dns_over_tls = src->dns_over_tls;
 
+    if (self->dnssec == NM_SETTING_CONNECTION_DNSSEC_DEFAULT)
+        self->dnssec = src->dnssec;
+
     if (self->ip6_token.id == 0)
         self->ip6_token.id = src->ip6_token.id;
 
diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h
index 265e126d..4102b6e1 100644
--- a/src/core/nm-l3-config-data.h
+++ b/src/core/nm-l3-config-data.h
@@ -458,6 +458,10 @@ NMSettingConnectionDnsOverTls nm_l3_config_data_get_dns_over_tls(const NML3Confi
 gboolean nm_l3_config_data_set_dns_over_tls(NML3ConfigData               *self,
                                             NMSettingConnectionDnsOverTls dns_over_tls);
 
+NMSettingConnectionDnssec nm_l3_config_data_get_dnssec(const NML3ConfigData *self);
+
+gboolean nm_l3_config_data_set_dnssec(NML3ConfigData *self, NMSettingConnectionDnssec dnssec);
+
 NMIPRouteTableSyncMode nm_l3_config_data_get_route_table_sync(const NML3ConfigData *self,
                                                               int                   addr_family);
 
diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c
index 1797cd0f..0d93f76b 100644
--- a/src/core/nm-l3cfg.c
+++ b/src/core/nm-l3cfg.c
@@ -40,8 +40,7 @@ G_STATIC_ASSERT(NM_ACD_TIMEOUT_RFC5227_MSEC == N_ACD_TIMEOUT_RFC5227);
 
 #define ACD_SUPPORTED_ETH_ALEN                  ETH_ALEN
 #define ACD_ENSURE_RATELIMIT_MSEC               ((guint32) 4000u)
-#define ACD_WAIT_PROBING_EXTRA_TIME_MSEC        ((guint32) (1000u + ACD_ENSURE_RATELIMIT_MSEC))
-#define ACD_WAIT_PROBING_EXTRA_TIME2_MSEC       ((guint32) 1000u)
+#define ACD_WAIT_PROBING_EXTRA_TIME_MSEC        ((guint32) (2000u + ACD_ENSURE_RATELIMIT_MSEC))
 #define ACD_WAIT_TIME_PROBING_FULL_RESTART_MSEC ((guint32) 30000u)
 #define ACD_WAIT_TIME_CONFLICT_RESTART_MSEC     ((guint32) 120000u)
 #define ACD_WAIT_TIME_ANNOUNCE_RESTART_MSEC     ((guint32) 30000u)
@@ -2740,9 +2739,8 @@ handle_init:
             nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec);
 
             if (acd_data->info.state == NM_L3_ACD_ADDR_STATE_PROBING) {
-                if ((*p_now_msec) > acd_data->probing_timestamp_msec
-                                        + ACD_WAIT_PROBING_EXTRA_TIME_MSEC
-                                        + ACD_WAIT_PROBING_EXTRA_TIME2_MSEC) {
+                if ((*p_now_msec)
+                    > acd_data->probing_timestamp_msec + ACD_WAIT_PROBING_EXTRA_TIME_MSEC) {
                     /* hm. We failed to create a new probe too long. Something is really wrong
                      * internally, but let's ignore the issue and assume the address is good. What
                      * else would we do? Assume the address is USED? */
@@ -2948,7 +2946,7 @@ handle_init:
             nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec);
 
             if (acd_data->probing_timestamp_msec + acd_data->probing_timeout_msec
-                    + ACD_WAIT_PROBING_EXTRA_TIME_MSEC + ACD_WAIT_PROBING_EXTRA_TIME2_MSEC
+                    + ACD_WAIT_PROBING_EXTRA_TIME_MSEC
                 >= (*p_now_msec)) {
                 /* The probing already started quite a while ago. We ignore the link event
                  * and let the probe come to it's natural end. */
@@ -3058,9 +3056,10 @@ handle_start_probing:
         }
 
         _LOGT_acd(acd_data,
-                  "%sstart probing (timeout %u msec, %s)",
+                  "%sstart probing (timeout %u msec, ebpf %s; %s)",
                   orig_state == NM_L3_ACD_ADDR_STATE_INIT ? "" : "re",
                   acd_data->probing_timeout_msec,
+                  n_acd_has_bpf(self->priv.p->nacd) ? "enabled" : "disabled",
                   log_reason);
         return;
     }
@@ -3155,10 +3154,11 @@ handle_start_defending:
         }
 
         _LOGT_acd(acd_data,
-                  "start announcing (defend=%s) (probe created)",
+                  "start announcing (defend=%s) (probe created with ebpf %s)",
                   _l3_acd_defend_type_to_string(acd_data->acd_defend_type_current,
                                                 sbuf256,
-                                                sizeof(sbuf256)));
+                                                sizeof(sbuf256)),
+                  n_acd_has_bpf(self->priv.p->nacd) ? "enabled" : "disabled");
         acd_data->acd_defend_type_is_active = FALSE;
         acd_data->nacd_probe                = probe;
         return;
@@ -3989,7 +3989,7 @@ _l3cfg_routed_dns_apply(NML3Cfg *self, const NML3ConfigData *l3cd)
             NMDnsServer               dns;
             int                       r;
 
-            if (!nm_dns_uri_parse(addr_family, nameservers[i], &dns))
+            if (!nm_dns_uri_parse(addr_family, nameservers[i], &dns, NULL))
                 continue;
 
             /* Find the gateway to the DNS over the current interface. When
@@ -5054,8 +5054,8 @@ _l3_commit_mptcp_af(NML3Cfg          *self,
             (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_SIGNAL) ? MPTCP_PM_ADDR_FLAG_SIGNAL : 0)
             | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_SUBFLOW) ? MPTCP_PM_ADDR_FLAG_SUBFLOW : 0)
             | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_BACKUP) ? MPTCP_PM_ADDR_FLAG_BACKUP : 0)
-            | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_FULLMESH) ? MPTCP_PM_ADDR_FLAG_FULLMESH
-                                                                  : 0);
+            | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_FULLMESH) ? MPTCP_PM_ADDR_FLAG_FULLMESH : 0)
+            | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_LAMINAR) ? MPTCP_PM_ADDR_FLAG_LAMINAR : 0);
         NMPlatformMptcpAddr a = {
             .ifindex     = self->priv.ifindex,
             .id          = 0,
diff --git a/src/core/nm-netns.c b/src/core/nm-netns.c
index f481bc36..f55d1132 100644
--- a/src/core/nm-netns.c
+++ b/src/core/nm-netns.c
@@ -68,7 +68,7 @@ typedef struct {
     NMPNetns         *platform_netns;
     NMPGlobalTracker *global_tracker;
     GHashTable       *l3cfgs;
-    GHashTable       *shared_ips;
+    GHashTable       *ip_reservation[_NM_NETNS_IP_RESERVATION_TYPE_NUM];
     GHashTable       *ecmp_track_by_obj;
     GHashTable       *ecmp_track_by_ecmpid;
 
@@ -571,106 +571,150 @@ notify_watcher:
 
 /*****************************************************************************/
 
-NMNetnsSharedIPHandle *
-nm_netns_shared_ip_reserve(NMNetns *self)
-{
-    NMNetnsPrivate        *priv;
-    NMNetnsSharedIPHandle *handle;
-    const in_addr_t        addr_start = ntohl(0x0a2a0001u); /* 10.42.0.1 */
-    in_addr_t              addr;
-    char                   sbuf_addr[NM_INET_ADDRSTRLEN];
+typedef struct {
+    const char *name;
+    guint32     start_addr; /* host byte order */
+    guint       prefix_len;
+    guint       num_addrs;
+    gboolean    allow_reuse;
+} IPReservationTypeDesc;
+
+static const IPReservationTypeDesc ip_reservation_types[_NM_NETNS_IP_RESERVATION_TYPE_NUM] = {
+    [NM_NETNS_IP_RESERVATION_TYPE_SHARED4] =
+        {
+            .name        = "shared-ip4",
+            .start_addr  = 0x0a2a0001, /* 10.42.0.1 */
+            .prefix_len  = 24,
+            .num_addrs   = 256,
+            .allow_reuse = TRUE,
+        },
+};
 
-    /* Find an unused address in the 10.42.x.x range */
+NMNetnsIPReservation *
+nm_netns_ip_reservation_get(NMNetns *self, NMNetnsIPReservationType type)
+{
+    NMNetnsPrivate              *priv;
+    const IPReservationTypeDesc *desc;
+    NMNetnsIPReservation        *res;
+    GHashTable                 **table;
+    in_addr_t                    addr;
+    char                         buf[NM_INET_ADDRSTRLEN];
 
     g_return_val_if_fail(NM_IS_NETNS(self), NULL);
+    g_return_val_if_fail(type < _NM_NETNS_IP_RESERVATION_TYPE_NUM, NULL);
 
-    priv = NM_NETNS_GET_PRIVATE(self);
+    priv  = NM_NETNS_GET_PRIVATE(self);
+    desc  = &ip_reservation_types[type];
+    table = &priv->ip_reservation[type];
 
-    if (!priv->shared_ips) {
-        addr             = addr_start;
-        priv->shared_ips = g_hash_table_new(nm_puint32_hash, nm_puint32_equal);
+    if (!*table) {
+        addr   = htonl(desc->start_addr);
+        *table = g_hash_table_new(nm_puint32_hash, nm_puint32_equal);
         g_object_ref(self);
     } else {
         guint32 count;
 
-        nm_assert(g_hash_table_size(priv->shared_ips) > 0);
+        nm_assert(g_hash_table_size(*table) > 0);
+        nm_assert(desc->prefix_len > 0 && desc->prefix_len <= 32);
 
         count = 0u;
         for (;;) {
-            addr = addr_start + htonl(count << 8u);
+            addr = htonl(desc->start_addr + (count << (32 - desc->prefix_len)));
 
-            handle = g_hash_table_lookup(priv->shared_ips, &addr);
-            if (!handle)
+            res = g_hash_table_lookup(*table, &addr);
+            if (!res)
                 break;
 
             count++;
 
-            if (count > 0xFFu) {
-                if (handle->_ref_count == 1) {
-                    _LOGE("shared-ip4: ran out of shared IP addresses. Reuse %s/24",
-                          nm_inet4_ntop(handle->addr, sbuf_addr));
+            if (count >= desc->num_addrs) {
+                if (!desc->allow_reuse) {
+                    _LOGE("%s: ran out of IP addresses", desc->name);
+                    return NULL;
+                }
+
+                if (res->_ref_count == 1) {
+                    _LOGE("%s: ran out of IP addresses. Reuse %s/%u",
+                          desc->name,
+                          nm_inet4_ntop(res->addr, buf),
+                          desc->prefix_len);
                 } else {
-                    _LOGD("shared-ip4: reserved IP address range %s/24 (duplicate)",
-                          nm_inet4_ntop(handle->addr, sbuf_addr));
+                    _LOGD("%s: reserved IP address %s/%u (duplicate)",
+                          desc->name,
+                          nm_inet4_ntop(res->addr, buf),
+                          desc->prefix_len);
                 }
-                handle->_ref_count++;
-                return handle;
+                res->_ref_count++;
+                return res;
             }
         }
     }
 
-    handle  = g_slice_new(NMNetnsSharedIPHandle);
-    *handle = (NMNetnsSharedIPHandle) {
+    res  = g_slice_new(NMNetnsIPReservation);
+    *res = (NMNetnsIPReservation) {
         .addr       = addr,
         ._ref_count = 1,
         ._self      = self,
+        ._type      = type,
     };
 
-    g_hash_table_add(priv->shared_ips, handle);
+    g_hash_table_add(*table, res);
 
-    _LOGD("shared-ip4: reserved IP address range %s/24", nm_inet4_ntop(handle->addr, sbuf_addr));
-    return handle;
+    _LOGD("%s: reserved IP address %s/%u",
+          desc->name,
+          nm_inet4_ntop(res->addr, buf),
+          desc->prefix_len);
+    return res;
 }
 
 void
-nm_netns_shared_ip_release(NMNetnsSharedIPHandle *handle)
+nm_netns_ip_reservation_release(NMNetnsIPReservation *res)
 {
-    NMNetns        *self;
-    NMNetnsPrivate *priv;
-    char            sbuf_addr[NM_INET_ADDRSTRLEN];
-
-    g_return_if_fail(handle);
+    NMNetns                     *self;
+    NMNetnsPrivate              *priv;
+    const IPReservationTypeDesc *desc;
+    GHashTable                 **table;
+    char                         buf[NM_INET_ADDRSTRLEN];
 
-    self = handle->_self;
+    g_return_if_fail(res);
+    g_return_if_fail(res->_type < _NM_NETNS_IP_RESERVATION_TYPE_NUM);
 
+    self = res->_self;
     g_return_if_fail(NM_IS_NETNS(self));
 
-    priv = NM_NETNS_GET_PRIVATE(self);
-
-    nm_assert(handle->_ref_count > 0);
-    nm_assert(handle == nm_g_hash_table_lookup(priv->shared_ips, handle));
-
-    if (handle->_ref_count > 1) {
-        nm_assert(handle->addr == ntohl(0x0A2AFF01u)); /* 10.42.255.1 */
-        handle->_ref_count--;
-        _LOGD("shared-ip4: release IP address range %s/24 (%d more references held)",
-              nm_inet4_ntop(handle->addr, sbuf_addr),
-              handle->_ref_count);
+    priv  = NM_NETNS_GET_PRIVATE(self);
+    desc  = &ip_reservation_types[res->_type];
+    table = &priv->ip_reservation[res->_type];
+
+    nm_assert(res->_ref_count > 0);
+    nm_assert(res == nm_g_hash_table_lookup(*table, res));
+
+    if (res->_ref_count > 1) {
+        nm_assert(desc->allow_reuse);
+        res->_ref_count--;
+        _LOGD("%s: release IP address reservation %s/%u (%d more references held)",
+              desc->name,
+              nm_inet4_ntop(res->addr, buf),
+              desc->prefix_len,
+              res->_ref_count);
         return;
     }
 
-    if (!g_hash_table_remove(priv->shared_ips, handle))
+    if (!g_hash_table_remove(*table, res))
         nm_assert_not_reached();
 
-    if (g_hash_table_size(priv->shared_ips) == 0) {
-        nm_clear_pointer(&priv->shared_ips, g_hash_table_unref);
+    _LOGD("%s: release IP address reservation %s/%u",
+          desc->name,
+          nm_inet4_ntop(res->addr, buf),
+          desc->prefix_len);
+
+    if (g_hash_table_size(*table) == 0) {
+        nm_clear_pointer(table, g_hash_table_unref);
         g_object_unref(self);
     }
 
-    _LOGD("shared-ip4: release IP address range %s/24", nm_inet4_ntop(handle->addr, sbuf_addr));
-
-    handle->_self = NULL;
-    nm_g_slice_free(handle);
+    res->_self = NULL;
+    nm_g_slice_free(res);
 }
 
 /*****************************************************************************/
@@ -1560,11 +1604,14 @@ dispose(GObject *object)
 
     nm_assert(nm_g_hash_table_size(priv->l3cfgs) == 0);
     nm_assert(c_list_is_empty(&priv->l3cfg_signal_pending_lst_head));
-    nm_assert(!priv->shared_ips);
     nm_assert(nm_g_hash_table_size(priv->watcher_idx) == 0);
     nm_assert(nm_g_hash_table_size(priv->watcher_by_tag_idx) == 0);
     nm_assert(nm_g_hash_table_size(priv->watcher_ip_data_idx) == 0);
 
+    for (guint i = 0; i < _NM_NETNS_IP_RESERVATION_TYPE_NUM; i++) {
+        nm_assert(!priv->ip_reservation[i]);
+    }
+
     nm_clear_pointer(&priv->ecmp_track_by_obj, g_hash_table_destroy);
     nm_clear_pointer(&priv->ecmp_track_by_ecmpid, g_hash_table_destroy);
 
diff --git a/src/core/nm-netns.h b/src/core/nm-netns.h
index 43e9c781..5ddb852a 100644
--- a/src/core/nm-netns.h
+++ b/src/core/nm-netns.h
@@ -41,15 +41,22 @@ NML3Cfg *nm_netns_l3cfg_acquire(NMNetns *netns, int ifindex);
 
 /*****************************************************************************/
 
+typedef enum {
+    NM_NETNS_IP_RESERVATION_TYPE_SHARED4,
+
+    _NM_NETNS_IP_RESERVATION_TYPE_NUM,
+} NMNetnsIPReservationType;
+
 typedef struct {
-    in_addr_t addr;
-    int       _ref_count;
-    NMNetns  *_self;
-} NMNetnsSharedIPHandle;
+    in_addr_t                addr;
+    int                      _ref_count;
+    NMNetnsIPReservationType _type;
+    NMNetns                 *_self;
+} NMNetnsIPReservation;
 
-NMNetnsSharedIPHandle *nm_netns_shared_ip_reserve(NMNetns *self);
+NMNetnsIPReservation *nm_netns_ip_reservation_get(NMNetns *self, NMNetnsIPReservationType type);
 
-void nm_netns_shared_ip_release(NMNetnsSharedIPHandle *handle);
+void nm_netns_ip_reservation_release(NMNetnsIPReservation *reservation);
 
 /*****************************************************************************/
 
diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c
index 0288795e..f7be1a9f 100644
--- a/src/core/nm-policy.c
+++ b/src/core/nm-policy.c
@@ -2353,7 +2353,10 @@ device_state_changed(NMDevice           *device,
         }
         if (sett_conn) {
             /* Reset auto retries back to default since connection was successful */
-            nm_manager_devcon_autoconnect_retries_reset(priv->manager, device, sett_conn);
+            nm_manager_devcon_autoconnect_reset_reconnect_all(priv->manager,
+                                                              device,
+                                                              sett_conn,
+                                                              FALSE);
         }
 
         /* Since there is no guarantee that device_l3cd_changed() is called
diff --git a/src/core/platform/tests/monitor.c b/src/core/platform/tests/monitor.c
index c83192bb..f413facf 100644
--- a/src/core/platform/tests/monitor.c
+++ b/src/core/platform/tests/monitor.c
@@ -186,6 +186,7 @@ ip_again:
                                00644,
                                NULL,
                                NULL,
+                               NULL,
                                NULL);
 
     nm_log_dbg(LOGD_PLATFORM, "dump to file complete");
diff --git a/src/core/platform/tests/test-link.c b/src/core/platform/tests/test-link.c
index fab6bd2e..77e7e641 100644
--- a/src/core/platform/tests/test-link.c
+++ b/src/core/platform/tests/test-link.c
@@ -123,7 +123,8 @@ software_add(NMLinkType link_type, const char *name)
         gboolean bond0_exists = !!nm_platform_link_get_by_ifname(NM_PLATFORM_GET, "bond0");
         int      r;
         const NMPlatformLnkBond nm_platform_lnk_bond_default = {
-            .mode = nmtst_rand_select(3, 1),
+            .mode        = nmtst_rand_select(3, 1),
+            .use_carrier = 1,
         };
 
         r = nm_platform_link_bond_add(NM_PLATFORM_GET, name, &nm_platform_lnk_bond_default, NULL);
diff --git a/src/core/platform/tests/test-route.c b/src/core/platform/tests/test-route.c
index f8f7070b..fbad2447 100644
--- a/src/core/platform/tests/test-route.c
+++ b/src/core/platform/tests/test-route.c
@@ -624,6 +624,79 @@ test_ip4_zero_gateway(void)
 }
 
 static void
+test_via(void)
+{
+    int                ifindex = nm_platform_link_get_ifindex(NM_PLATFORM_GET, DEVICE_NAME);
+    GPtrArray         *routes;
+    NMPlatformIP4Route rts[1];
+    struct in6_addr    gateway6;
+    const int          metric = 22987;
+    NMPlatformIP4Route route4;
+    guint              mss = 1000;
+    in_addr_t          net4;
+
+    /* Test IPv4 routes with a IPv6 gateway (using RTA_VIA attribute) */
+
+    inet_pton(AF_INET6, "fd01::1", &gateway6);
+    inet_pton(AF_INET, "1.2.3.4", &net4);
+
+    /* Add direct route to IPv6 gateway: ip route add dev $DEV fd01::1/128 */
+    nmtstp_ip6_route_add(NM_PLATFORM_GET,
+                         ifindex,
+                         NM_IP_CONFIG_SOURCE_USER,
+                         gateway6,
+                         128,
+                         in6addr_any,
+                         in6addr_any,
+                         metric,
+                         mss);
+    g_assert(nmtstp_ip6_route_get(NM_PLATFORM_GET, ifindex, &gateway6, 128, metric, NULL, 0));
+
+    /* Add IPv4 route via IPv6 gateway: ip route add dev $DEV 1.2.3.4/32 via inet6 fd01::1 */
+    route4 = (NMPlatformIP4Route) {
+        .ifindex         = ifindex,
+        .rt_source       = NM_IP_CONFIG_SOURCE_USER,
+        .network         = net4,
+        .plen            = 32,
+        .metric          = metric,
+        .via.addr_family = AF_INET6,
+        .via.addr.addr6  = gateway6,
+        .mss             = mss,
+    };
+    g_assert(NMTST_NM_ERR_SUCCESS(
+        nm_platform_ip4_route_add(NM_PLATFORM_GET, NMP_NLM_FLAG_REPLACE, &route4, NULL)));
+    g_assert(nmtstp_ip4_route_get(NM_PLATFORM_GET, ifindex, net4, 32, metric, 0));
+
+    /* Test route listing */
+    routes = nmtstp_ip4_route_get_all(NM_PLATFORM_GET, ifindex);
+    g_assert_cmpint(routes->len, ==, 1);
+
+    memset(rts, 0, sizeof(rts));
+    rts[0].rt_source       = nmp_utils_ip_config_source_round_trip_rtprot(NM_IP_CONFIG_SOURCE_USER);
+    rts[0].scope_inv       = nm_platform_route_scope_inv(RT_SCOPE_LINK);
+    rts[0].network         = net4;
+    rts[0].plen            = 32;
+    rts[0].ifindex         = ifindex;
+    rts[0].gateway         = INADDR_ANY;
+    rts[0].metric          = metric;
+    rts[0].mss             = mss;
+    rts[0].via.addr_family = AF_INET6;
+    rts[0].via.addr.addr6  = gateway6;
+    rts[0].n_nexthops      = 1;
+    nmtst_platform_ip4_routes_equal_aptr((const NMPObject *const *) routes->pdata,
+                                         rts,
+                                         routes->len,
+                                         TRUE);
+    g_ptr_array_unref(routes);
+
+    /* Delete routes */
+    g_assert(nmtstp_platform_ip6_route_delete(NM_PLATFORM_GET, ifindex, gateway6, 128, metric));
+    g_assert(!nmtstp_ip6_route_get(NM_PLATFORM_GET, ifindex, &gateway6, 128, metric, NULL, 0));
+    g_assert(nmtstp_platform_ip4_route_delete(NM_PLATFORM_GET, ifindex, net4, 32, metric));
+    g_assert(!nmtstp_ip4_route_get(NM_PLATFORM_GET, ifindex, net4, 32, metric, 0));
+}
+
+static void
 test_ip4_route_options(gconstpointer test_data)
 {
     const int TEST_IDX = GPOINTER_TO_INT(test_data);
@@ -2421,6 +2494,7 @@ _nmtstp_setup_tests(void)
         add_test_func("/route/ip4_route_get", test_ip4_route_get);
         add_test_func("/route/ip6_route_get", test_ip6_route_get);
         add_test_func("/route/ip4_zero_gateway", test_ip4_zero_gateway);
+        add_test_func("/route/via", test_via);
     }
 
     if (nmtstp_is_root_test()) {
diff --git a/src/core/settings/nm-settings-storage.h b/src/core/settings/nm-settings-storage.h
index 65750152..8847acc3 100644
--- a/src/core/settings/nm-settings-storage.h
+++ b/src/core/settings/nm-settings-storage.h
@@ -27,6 +27,19 @@
 
 struct _NMSettingsPlugin;
 
+/**
+ * NMSettingsStorage:
+ * @_plugin: The settings plugin that provides this storage.
+ * @_uuid: UUID of the profile represented by this storage.
+ * @_filename: Backing filename (can be NULL for in-memory or meta-data).
+ * @_storage_lst: Node in the per-plugin storage list.
+ * @_storage_by_uuid_lst: Node in the per-UUID storage list.
+ *
+ * Describes the origin and identity of one profile instance as provided by a
+ * specific settings plugin and (optionally) a backing file. A single UUID may
+ * have multiple storages from different plugins; plugin order determines
+ * priority.
+ */
 typedef struct NMSettingsStorage {
     GObject                   parent;
     struct _NMSettingsPlugin *_plugin;
diff --git a/src/core/settings/nm-settings.c b/src/core/settings/nm-settings.c
index 50d98ece..702c53d5 100644
--- a/src/core/settings/nm-settings.c
+++ b/src/core/settings/nm-settings.c
@@ -76,6 +76,17 @@ static NM_CACHED_QUARK_FCN("default-wired-connection-blocked",
 
 /*****************************************************************************/
 
+/**
+ * StorageData:
+ * @sd_lst: Node used in per-UUID storage lists.
+ * @storage: Storage provider instance for this UUID.
+ * @connection: Connection object backed by @storage, or NULL for meta-data.
+ * @prioritize: Request to prioritize this storage during merge.
+ *
+ * Per-UUID storage entry used to accumulate and merge updates from plugins.
+ * Items live temporarily in the dirty list and are merged into the current list
+ * with stable priority ordering.
+ */
 typedef struct _StorageData {
     CList              sd_lst;
     NMSettingsStorage *storage;
@@ -165,6 +176,20 @@ _storage_data_is_alive(StorageData *sd)
 
 /*****************************************************************************/
 
+/**
+ * SettConnEntry:
+ * @uuid: Normalized UUID key for this entry (points to @_uuid_data).
+ * @sett_conn: Current NMSettingsConnection selected for @uuid, or NULL.
+ * @storage: The storage that currently owns @sett_conn, or NULL.
+ * @sd_lst_head: Head of current storages list for @uuid (high to low priority).
+ * @dirty_sd_lst_head: Head of pending storage updates to merge.
+ * @sce_dirty_lst: Node in the global dirty queue.
+ * @_uuid_data: Inline storage backing @uuid.
+ *
+ * Tracks one connection profile across all storages and its dirty state.
+ * It holds the authoritative in-memory connection and the sets of storages
+ * providing or updating it.
+ */
 typedef struct {
     const char           *uuid;
     NMSettingsConnection *sett_conn;
@@ -1368,10 +1393,11 @@ _connection_changed_track(NMSettings        *self,
                           NMConnection      *connection,
                           gboolean           prioritize)
 {
-    NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE(self);
-    SettConnEntry     *sett_conn_entry;
-    StorageData       *sd;
-    const char        *uuid;
+    NMSettingsPrivate    *priv = NM_SETTINGS_GET_PRIVATE(self);
+    SettConnEntry        *sett_conn_entry;
+    StorageData          *sd;
+    const char           *uuid;
+    gs_free_error GError *error = NULL;
 
     nm_assert_valid_settings_storage(NULL, storage);
 
@@ -1382,6 +1408,17 @@ _connection_changed_track(NMSettings        *self,
               || (_nm_connection_verify(connection, NULL) == NM_SETTING_VERIFY_SUCCESS));
     nm_assert(!connection || nm_streq0(uuid, nm_connection_get_uuid(connection)));
 
+    if (connection && !nm_utils_connection_supported(connection, &error)) {
+        _LOGD("storage[%s," NM_SETTINGS_STORAGE_PRINT_FMT
+              "]: ignoring connection \"%s\" from file \"%s\": %s",
+              uuid,
+              NM_SETTINGS_STORAGE_PRINT_ARG(storage),
+              nm_connection_get_id(connection),
+              nm_settings_storage_get_filename(storage),
+              error->message);
+        connection = NULL;
+    }
+
     nm_assert_connection_unchanging(connection);
 
     sett_conn_entry =
@@ -1851,6 +1888,9 @@ nm_settings_add_connection(NMSettings                     *self,
 
     NM_SET_OUT(out_sett_conn, NULL);
 
+    if (!nm_utils_connection_supported(connection, error))
+        return FALSE;
+
     uuid = nm_connection_get_uuid(connection);
 
     sett_conn_entry = _sett_conn_entries_get(self, uuid);
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
index 1e2e2d92..b9e3f919 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -2056,8 +2056,9 @@ make_ip4_setting(shvarFile *ifcfg,
          * Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
          */
         for (i = 1; i < 10000; i++) {
-            NMDnsServer dns;
-            char        tag[256];
+            NMDnsServer           dns;
+            char                  tag[256];
+            gs_free_error GError *local = NULL;
 
             numbered_tag(tag, "DNS", i);
             nm_clear_g_free(&value);
@@ -2065,12 +2066,13 @@ make_ip4_setting(shvarFile *ifcfg,
             if (!v)
                 break;
 
-            if (!nm_dns_uri_parse(AF_UNSPEC, v, &dns)) {
+            if (!nm_dns_uri_parse(AF_UNSPEC, v, &dns, &local)) {
                 g_set_error(error,
                             NM_SETTINGS_ERROR,
                             NM_SETTINGS_ERROR_INVALID_CONNECTION,
-                            "Invalid DNS server address '%s'",
-                            v);
+                            "Invalid DNS server address '%s': %s",
+                            v,
+                            local->message);
                 return NULL;
             }
 
@@ -2607,8 +2609,9 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
      * Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
      */
     for (i = 1; i < 10000; i++) {
-        NMDnsServer dns;
-        char        tag[256];
+        gs_free_error GError *err = NULL;
+        NMDnsServer           dns;
+        char                  tag[256];
 
         numbered_tag(tag, "DNS", i);
         nm_clear_g_free(&value);
@@ -2616,14 +2619,15 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
         if (!v)
             break;
 
-        if (!nm_dns_uri_parse(AF_UNSPEC, v, &dns)) {
+        if (!nm_dns_uri_parse(AF_UNSPEC, v, &dns, &err)) {
             if (is_disabled)
                 continue;
             g_set_error(error,
                         NM_SETTINGS_ERROR,
                         NM_SETTINGS_ERROR_INVALID_CONNECTION,
-                        "Invalid DNS server address '%s'",
-                        v);
+                        "Invalid DNS server address '%s': %s",
+                        v,
+                        err->message);
             return NULL;
         }
         if (dns.addr_family == AF_INET6) {
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
index 39cbddc5..21908090 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -320,6 +320,7 @@ write_blobs(GHashTable *blobs, GError **error)
                                         0600,
                                         NULL,
                                         NULL,
+                                        NULL,
                                         &write_error)) {
             g_set_error(error,
                         NM_SETTINGS_ERROR,
@@ -3626,6 +3627,14 @@ do_write_construct(NMConnection                   *connection,
 
     write_ip_routing_rules(connection, ifcfg, route_ignore);
 
+    if (nm_setting_connection_get_dnssec(s_con) != NM_SETTING_CONNECTION_DNSSEC_DEFAULT) {
+        set_error_unsupported(error,
+                              connection,
+                              NM_SETTING_CONNECTION_SETTING_NAME "." NM_SETTING_CONNECTION_DNSSEC,
+                              TRUE);
+        return FALSE;
+    }
+
     write_connection_setting(s_con, ifcfg, interface_name);
 
     NM_SET_OUT(out_ifcfg, g_steal_pointer(&ifcfg));
diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-utils.c b/src/core/settings/plugins/keyfile/nms-keyfile-utils.c
index 7c0e329e..26fb3441 100644
--- a/src/core/settings/plugins/keyfile/nms-keyfile-utils.c
+++ b/src/core/settings/plugins/keyfile/nms-keyfile-utils.c
@@ -280,6 +280,7 @@ nms_keyfile_nmmeta_write(const char *dirname,
                                         length,
                                         0600,
                                         NULL,
+                                        NULL,
                                         &errsv,
                                         NULL)) {
             NM_SET_OUT(out_full_filename, g_steal_pointer(&full_filename_tmp));
diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-writer.c b/src/core/settings/plugins/keyfile/nms-keyfile-writer.c
index b1dd2e44..c7c88260 100644
--- a/src/core/settings/plugins/keyfile/nms-keyfile-writer.c
+++ b/src/core/settings/plugins/keyfile/nms-keyfile-writer.c
@@ -133,6 +133,7 @@ cert_writer(NMConnection                     *connection,
                                              0600,
                                              NULL,
                                              NULL,
+                                             NULL,
                                              &local);
         if (success) {
             /* Write the path value to the keyfile.
@@ -384,7 +385,14 @@ _internal_write_connection(NMConnection                   *connection,
         }
     }
 
-    nm_utils_file_set_contents(path, kf_content_buf, kf_content_len, 0600, NULL, NULL, &local_err);
+    nm_utils_file_set_contents(path,
+                               kf_content_buf,
+                               kf_content_len,
+                               0600,
+                               NULL,
+                               NULL,
+                               NULL,
+                               &local_err);
     if (local_err) {
         g_set_error(error,
                     NM_SETTINGS_ERROR,
diff --git a/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Write_GSM b/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Write_GSM
index 2f6dc26c..eec403cb 100644
--- a/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Write_GSM
+++ b/src/core/settings/plugins/keyfile/tests/keyfiles/Test_Write_GSM
@@ -8,6 +8,7 @@ timestamp=305415219
 [gsm]
 apn=internet2.voicestream.com
 device-id=da812de91eec16620b06cd0ca5cbc7ea25245222
+device-uid=MODEM1
 home-only=true
 network-id=254098
 password=parliament2
diff --git a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
index df5dfd40..badb40d3 100644
--- a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
+++ b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
@@ -1408,6 +1408,8 @@ test_write_gsm_connection(void)
                  "89148000000060671234",
                  NM_SETTING_GSM_SIM_OPERATOR_ID,
                  "310260",
+                 NM_SETTING_GSM_DEVICE_UID,
+                 "MODEM1",
                  NULL);
 
     write_test_connection_and_reread(connection, TRUE, TEST_KEYFILES_DIR "/Test_Write_GSM");
diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c
index 56cc832b..233afe48 100644
--- a/src/core/supplicant/nm-supplicant-config.c
+++ b/src/core/supplicant/nm-supplicant-config.c
@@ -206,20 +206,30 @@ nm_supplicant_config_add_blob(NMSupplicantConfig *self,
     ConfigOption              *old_opt;
     ConfigOption              *opt;
     NMSupplOptType             type;
-    const guint8              *data;
     gsize                      data_len;
+    gs_free char              *full_value = NULL;
 
     g_return_val_if_fail(NM_IS_SUPPLICANT_CONFIG(self), FALSE);
     g_return_val_if_fail(key != NULL, FALSE);
     g_return_val_if_fail(value != NULL, FALSE);
     g_return_val_if_fail(blobid != NULL, FALSE);
 
-    data = g_bytes_get_data(value, &data_len);
+    g_bytes_get_data(value, &data_len);
     g_return_val_if_fail(data_len > 0, FALSE);
 
-    priv = NM_SUPPLICANT_CONFIG_GET_PRIVATE(self);
+    if (data_len > 32 * 1024 * 1024) {
+        g_set_error(error,
+                    NM_SUPPLICANT_ERROR,
+                    NM_SUPPLICANT_ERROR_CONFIG,
+                    "blob '%s' is larger than 32MiB",
+                    key);
+        return FALSE;
+    }
+
+    priv       = NM_SUPPLICANT_CONFIG_GET_PRIVATE(self);
+    full_value = g_strdup_printf("blob://%s", blobid);
 
-    type = nm_supplicant_settings_verify_setting(key, (const char *) data, data_len);
+    type = nm_supplicant_settings_verify_setting(key, full_value, strlen(full_value));
     if (type == NM_SUPPL_OPT_TYPE_INVALID) {
         g_set_error(error,
                     NM_SUPPLICANT_ERROR,
@@ -240,7 +250,7 @@ nm_supplicant_config_add_blob(NMSupplicantConfig *self,
     }
 
     opt        = g_slice_new0(ConfigOption);
-    opt->value = g_strdup_printf("blob://%s", blobid);
+    opt->value = g_steal_pointer(&full_value);
     opt->len   = strlen(opt->value);
     opt->type  = type;
 
@@ -521,6 +531,7 @@ get_ap_params(guint                         freq,
     case NM_SETTING_WIRELESS_CHANNEL_WIDTH_80MHZ:
     {
         guint channel;
+        guint center_channel = 0;
 
         if (freq < 5000) {
             /* the setting is not valid */
@@ -530,12 +541,29 @@ get_ap_params(guint                         freq,
 
         /* Determine the center channel according to the table at
          * https://en.wikipedia.org/wiki/List_of_WLAN_channels */
+
         channel = (freq - 5000) / 5;
-        channel = ((channel / 4 - 1) / 4) * 16 + 10;
 
-        *out_ht40             = 1;
-        *out_max_oper_chwidth = 1;
-        *out_center_freq      = 5000 + 5 * channel;
+        if (channel >= 36 && channel <= 48)
+            center_channel = 42;
+        else if (channel >= 52 && channel <= 64)
+            center_channel = 58;
+        else if (channel >= 100 && channel <= 112)
+            center_channel = 106;
+        else if (channel >= 116 && channel <= 128)
+            center_channel = 122;
+        else if (channel >= 132 && channel <= 144)
+            center_channel = 138;
+        else if (channel >= 149 && channel <= 161)
+            center_channel = 155;
+        else if (channel >= 165 && channel <= 177)
+            center_channel = 171;
+
+        if (center_channel) {
+            *out_ht40             = 1;
+            *out_max_oper_chwidth = 1;
+            *out_center_freq      = 5000 + 5 * center_channel;
+        }
 
         return;
     }
@@ -1016,7 +1044,7 @@ nm_supplicant_config_add_setting_wireless_security(NMSupplicantConfig
         if (_get_capability(priv, NM_SUPPL_CAP_TYPE_SAE)
             && _get_capability(priv, NM_SUPPL_CAP_TYPE_PMF)
             && _get_capability(priv, NM_SUPPL_CAP_TYPE_BIP)
-            && (!is_ap || pmf != NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE)) {
+            && (pmf != NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE)) {
             g_string_append(key_mgmt_conf, " SAE");
             if (!is_ap && _get_capability(priv, NM_SUPPL_CAP_TYPE_FT))
                 g_string_append(key_mgmt_conf, " FT-SAE");
diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c
index ef72447a..5c60a7b6 100644
--- a/src/core/supplicant/nm-supplicant-interface.c
+++ b/src/core/supplicant/nm-supplicant-interface.c
@@ -66,6 +66,7 @@ enum {
     WPS_CREDENTIALS, /* WPS credentials received */
     GROUP_STARTED,   /* a new Group (interface) was created */
     GROUP_FINISHED,  /* a Group (interface) has been finished */
+    PSK_MISMATCH,    /* supplicant reported incorrect PSK */
     LAST_SIGNAL
 };
 
@@ -3232,6 +3233,10 @@ _signal_handle(NMSupplicantInterface *self,
             return;
         }
 
+        if (nm_streq(signal_name, "PskMismatch")) {
+            g_signal_emit(self, signals[PSK_MISMATCH], 0);
+            return;
+        }
         return;
     }
 
@@ -3864,4 +3869,14 @@ nm_supplicant_interface_class_init(NMSupplicantInterfaceClass *klass)
                                            G_TYPE_NONE,
                                            1,
                                            G_TYPE_STRING);
+
+    signals[PSK_MISMATCH] = g_signal_new(NM_SUPPLICANT_INTERFACE_PSK_MISMATCH,
+                                         G_OBJECT_CLASS_TYPE(object_class),
+                                         G_SIGNAL_RUN_LAST,
+                                         0,
+                                         NULL,
+                                         NULL,
+                                         NULL,
+                                         G_TYPE_NONE,
+                                         0);
 }
diff --git a/src/core/supplicant/nm-supplicant-interface.h b/src/core/supplicant/nm-supplicant-interface.h
index b8d9b013..961de1b1 100644
--- a/src/core/supplicant/nm-supplicant-interface.h
+++ b/src/core/supplicant/nm-supplicant-interface.h
@@ -86,6 +86,7 @@ typedef enum {
 #define NM_SUPPLICANT_INTERFACE_WPS_CREDENTIALS "wps-credentials"
 #define NM_SUPPLICANT_INTERFACE_GROUP_STARTED   "group-started"
 #define NM_SUPPLICANT_INTERFACE_GROUP_FINISHED  "group-finished"
+#define NM_SUPPLICANT_INTERFACE_PSK_MISMATCH    "wpa-psk-mismatch"
 
 typedef struct _NMSupplicantInterfaceClass NMSupplicantInterfaceClass;
 
diff --git a/src/core/tests/meson.build b/src/core/tests/meson.build
index 78c689f7..31acad94 100644
--- a/src/core/tests/meson.build
+++ b/src/core/tests/meson.build
@@ -6,6 +6,7 @@ test_units = [
   'test-core',
   'test-core-with-expect',
   'test-dcb',
+  'test-netns',
   'test-l3cfg',
   'test-utils',
   'test-wired-defname',
diff --git a/src/core/tests/test-netns.c b/src/core/tests/test-netns.c
new file mode 100644
index 00000000..26ecbcb8
--- /dev/null
+++ b/src/core/tests/test-netns.c
@@ -0,0 +1,69 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "src/core/nm-default-daemon.h"
+
+#include "nm-netns.h"
+#include "nm-test-utils-core.h"
+
+static void
+test_ip_reservation_shared4(void)
+{
+    gs_unref_object NMPlatform *platform = NULL;
+    gs_unref_object NMNetns    *netns    = NULL;
+    NMNetnsIPReservation       *res[256];
+    NMNetnsIPReservation       *res1;
+    NMNetnsIPReservation       *res2;
+    char                        buf[NM_INET_ADDRSTRLEN];
+    guint                       i;
+
+    platform = g_object_ref(NM_PLATFORM_GET);
+    netns    = nm_netns_new(platform);
+
+    /* Allocate addresses from 10.42.0.1 to 10.42.255.1 */
+    for (i = 0; i < 256; i++) {
+        res[i] = nm_netns_ip_reservation_get(netns, NM_NETNS_IP_RESERVATION_TYPE_SHARED4);
+        g_snprintf(buf, sizeof(buf), "10.42.%u.1", i);
+        nmtst_assert_ip4_address(res[i]->addr, buf);
+        g_assert_cmpint(res[i]->_ref_count, ==, 1);
+    }
+
+    /* Release an address and get it back */
+    nm_netns_ip_reservation_release(res[139]);
+    res[139] = nm_netns_ip_reservation_get(netns, NM_NETNS_IP_RESERVATION_TYPE_SHARED4);
+    nmtst_assert_ip4_address(res[139]->addr, "10.42.139.1");
+
+    /* Reuse 10.42.255.1 once */
+    NMTST_EXPECT_NM_ERROR("netns[*]: shared-ip4: ran out of IP addresses. Reuse 10.42.255.1/24");
+    res1 = nm_netns_ip_reservation_get(netns, NM_NETNS_IP_RESERVATION_TYPE_SHARED4);
+    g_test_assert_expected_messages();
+    nmtst_assert_ip4_address(res1->addr, "10.42.255.1");
+    g_assert_cmpint(res1->_ref_count, ==, 2);
+
+    /* Reuse 10.42.255.1 twice */
+    res2 = nm_netns_ip_reservation_get(netns, NM_NETNS_IP_RESERVATION_TYPE_SHARED4);
+    g_assert(res2 == res1);
+    nmtst_assert_ip4_address(res1->addr, "10.42.255.1");
+    g_assert_cmpint(res2->_ref_count, ==, 3);
+
+    /* Release all */
+    nm_netns_ip_reservation_release(res1);
+    nm_netns_ip_reservation_release(res2);
+    for (i = 0; i < 256; i++) {
+        nm_netns_ip_reservation_release(res[i]);
+    }
+}
+
+/*****************************************************************************/
+
+NMTST_DEFINE();
+
+int
+main(int argc, char **argv)
+{
+    nmtst_init_with_logging(&argc, &argv, NULL, "ALL");
+    nm_linux_platform_setup();
+
+    g_test_add_func("/netns/ip_reservation/shared4", test_ip_reservation_shared4);
+
+    return g_test_run();
+}
diff --git a/src/core/tests/test-utils.c b/src/core/tests/test-utils.c
index 2bcb6f69..0418d3ae 100644
--- a/src/core/tests/test-utils.c
+++ b/src/core/tests/test-utils.c
@@ -261,6 +261,70 @@ test_shorten_hostname(void)
 }
 
 /*****************************************************************************/
+typedef struct {
+    NMRateLimit ratelimit;
+    GMainLoop  *loop;
+    GSource    *source;
+    guint       num;
+} RateLimitData;
+
+static int
+rate_limit_window_expire_cb(gpointer user_data)
+{
+    RateLimitData *data = user_data;
+
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+
+    g_assert(!nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(!nm_rate_limit_check(&data->ratelimit, 1, 5));
+
+    nm_clear_g_source_inst(&data->source);
+    g_main_loop_quit(data->loop);
+
+    return G_SOURCE_CONTINUE;
+}
+
+static int
+rate_limit_check_cb(gpointer user_data)
+{
+    RateLimitData *data = user_data;
+
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(nm_rate_limit_check(&data->ratelimit, 1, 5));
+
+    g_assert(!nm_rate_limit_check(&data->ratelimit, 1, 5));
+    g_assert(!nm_rate_limit_check(&data->ratelimit, 1, 5));
+
+    nm_clear_g_source_inst(&data->source);
+    data->source = nm_g_timeout_add_source(1000, rate_limit_window_expire_cb, data);
+
+    return G_SOURCE_CONTINUE;
+}
+
+static void
+test_rate_limit_check(void)
+{
+    RateLimitData data;
+
+    data = (RateLimitData) {
+        .loop      = g_main_loop_new(NULL, FALSE),
+        .ratelimit = {},
+        .source    = nm_g_timeout_add_source(1, rate_limit_check_cb, &data),
+        .num       = 0,
+    };
+
+    g_main_loop_run(data.loop);
+    g_main_loop_unref(data.loop);
+}
+
+/*****************************************************************************/
 
 NMTST_DEFINE();
 
@@ -272,6 +336,7 @@ main(int argc, char **argv)
     g_test_add_func("/utils/stable_privacy", test_stable_privacy);
     g_test_add_func("/utils/hw_addr_gen_stable_eth", test_hw_addr_gen_stable_eth);
     g_test_add_func("/utils/shorten-hostname", test_shorten_hostname);
+    g_test_add_func("/utils/rate-limit-check", test_rate_limit_check);
 
     return g_test_run();
 }
diff --git a/src/core/vpn/nm-vpn-connection.c b/src/core/vpn/nm-vpn-connection.c
index 22364ef9..54478c53 100644
--- a/src/core/vpn/nm-vpn-connection.c
+++ b/src/core/vpn/nm-vpn-connection.c
@@ -26,10 +26,12 @@
 #include "nm-active-connection.h"
 #include "nm-config.h"
 #include "nm-dbus-manager.h"
+#include "devices/nm-device.h"
 #include "nm-dispatcher.h"
 #include "nm-firewalld-manager.h"
 #include "nm-ip-config.h"
 #include "nm-l3-config-data.h"
+#include "nm-manager.h"
 #include "nm-netns.h"
 #include "nm-pacrunner-manager.h"
 #include "nm-vpn-manager.h"
@@ -173,6 +175,7 @@ typedef struct {
     };
 
     GSource           *init_fail_on_idle_source;
+    GSource           *check_device_added_idle_source;
     GSource           *connect_timeout_source;
     GCancellable      *main_cancellable;
     GVariant          *connect_hash;
@@ -227,6 +230,8 @@ static void _set_vpn_state(NMVpnConnection              *self,
 static void
 _l3cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, NMVpnConnection *self);
 
+static void _check_complete(NMVpnConnection *self, gboolean success);
+
 /*****************************************************************************/
 
 #define _NMLOG_DOMAIN      LOGD_VPN
@@ -1403,15 +1408,29 @@ fw_change_zone_cb(NMFirewalldManager       *firewalld_manager,
     _apply_config(self);
 }
 
+static gboolean
+_check_device_added_idle_cb(gpointer user_data)
+{
+    NMVpnConnection        *self = user_data;
+    NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE(self);
+
+    _check_complete(self, TRUE);
+    nm_clear_g_source_inst(&priv->check_device_added_idle_source);
+
+    return G_SOURCE_CONTINUE;
+}
+
 static void
 _check_complete(NMVpnConnection *self, gboolean success)
 {
     NMVpnConnectionPrivate                 *priv = NM_VPN_CONNECTION_GET_PRIVATE(self);
     nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL;
     NMConnection                           *connection;
+    NMDevice                               *device;
     NMSettingConnection                    *s_con;
     const char                             *zone;
     const char                             *iface;
+    int                                     ifindex;
 
     if (priv->vpn_state < STATE_IP_CONFIG_GET || priv->vpn_state > STATE_ACTIVATED)
         return;
@@ -1437,10 +1456,34 @@ _check_complete(NMVpnConnection *self, gboolean success)
     }
 
     connection = _get_applied_connection(self);
+    ifindex    = nm_vpn_connection_get_ip_ifindex(self, FALSE);
+    device     = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, ifindex);
+
+    /* We have a defined interface index, but the device is not processed yet.
+     * The processing of the new kernel link could be queued in an idle handler,
+     * so schedule an idle handler once to check if the device has been processed.
+     */
+    if (ifindex > 0 && !device && !priv->check_device_added_idle_source) {
+        priv->check_device_added_idle_source =
+            nm_g_idle_add_source(_check_device_added_idle_cb, self);
+        return;
+    }
 
-    l3cd = nm_l3_config_data_new_from_connection(nm_netns_get_multi_idx(priv->netns),
-                                                 nm_vpn_connection_get_ip_ifindex(self, TRUE),
-                                                 connection);
+    /* Use nm_device_create_l3_config_data_from_connection here if possible. This ensures that
+     * connection properties like mdns, llmnr, dns-over-tls or dnssec are applied to vpn connections
+     * If this vpn connection does not have its own device resort to nm_l3_config_data_new_from_connection
+     * since we can't properly apply these properties anyway
+     */
+    if (ifindex > 0) {
+        nm_assert(device);
+        l3cd = nm_device_create_l3_config_data_from_connection(device, connection);
+    } else {
+        l3cd = nm_l3_config_data_new_from_connection(nm_netns_get_multi_idx(priv->netns),
+                                                     nm_vpn_connection_get_ip_ifindex(self, TRUE),
+                                                     connection);
+        _LOGD("VPN connection does not have its own device. Some connection properties won't be "
+              "supported.");
+    }
 
     nm_l3_config_data_set_allow_routes_without_address(l3cd, AF_INET, TRUE);
     nm_l3_config_data_set_allow_routes_without_address(l3cd, AF_INET6, TRUE);
@@ -3025,6 +3068,8 @@ dispose(GObject *object)
 
     nm_clear_g_source_inst(&priv->init_fail_on_idle_source);
 
+    nm_clear_g_source_inst(&priv->check_device_added_idle_source);
+
     nm_clear_g_cancellable(&priv->main_cancellable);
 
     nm_clear_g_source_inst(&priv->start_timeout_source);
diff --git a/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c b/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c
index f727b3d9..6a25b652 100644
--- a/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c
+++ b/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c
@@ -234,6 +234,227 @@ test_team_link_watcher_tofro_string(void)
                            NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE);
 }
 
+static void
+test_wireguard_peer(void)
+{
+    guint i;
+    struct {
+        const char *input;
+        const char *canonical; /* canonical string representation */
+
+        gboolean    invalid;
+        const char *pubkey;
+        const char *endpoint;
+        guint16     keepalive;
+        guint       num_allowed_ips;
+        const char *allowed_ips[2];
+        const char *psk;
+        int         psk_flags;
+    } tests[] = {{
+                     /* Public key only */
+                     .input     = "MWEKYcE9MEh5RoGDuJYrJ2YgkoosONGhuHRBAC00e14=",
+                     .canonical = "MWEKYcE9MEh5RoGDuJYrJ2YgkoosONGhuHRBAC00e14=",
+                     .pubkey    = "MWEKYcE9MEh5RoGDuJYrJ2YgkoosONGhuHRBAC00e14=",
+                 },
+                 {
+                     /* IPv4 endpoint */
+                     .input     = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=1.2.3.4:5555",
+                     .canonical = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=1.2.3.4:5555",
+                     .pubkey    = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04=",
+                     .endpoint  = "1.2.3.4:5555",
+                 },
+                 {
+                     /* IPv6 endpoint */
+                     .input     = "aPsdPkeqH4l5Nax3g3e8A8f7g0hJk2l3m4N5p6q7R8s="
+                                  " endpoint=[fd01:db8::1]:8080",
+                     .canonical = "aPsdPkeqH4l5Nax3g3e8A8f7g0hJk2l3m4N5p6q7R8s="
+                                  " endpoint=[fd01:db8::1]:8080",
+                     .pubkey    = "aPsdPkeqH4l5Nax3g3e8A8f7g0hJk2l3m4N5p6q7R8s=",
+                     .endpoint  = "[fd01:db8::1]:8080",
+                 },
+                 {
+                     /* IPv6 endpoint, without brackets */
+                     .input     = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=fd01::12:8080",
+                     .canonical = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=fd01::12:8080",
+                     .pubkey    = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04=",
+                     .endpoint  = "fd01::12:8080",
+                 },
+                 {
+                     /* Single IPv4 allowed-ip */
+                     .input           = "s4fmZZA3gMGVv8+0hkSwrmeLC6nNd+Pd6DlSaufLKhY="
+                                        " allowed-ips=172.16.0.0/16",
+                     .canonical       = "s4fmZZA3gMGVv8+0hkSwrmeLC6nNd+Pd6DlSaufLKhY="
+                                        " allowed-ips=172.16.0.0/16",
+                     .pubkey          = "s4fmZZA3gMGVv8+0hkSwrmeLC6nNd+Pd6DlSaufLKhY=",
+                     .num_allowed_ips = 1,
+                     .allowed_ips     = {"172.16.0.0/16"},
+                 },
+                 {
+                     /* Multiple allowed-ips */
+                     .input           = "V02J2zmCi2LHX2KMK+ZOgDNhZzK4JXjGNr7CYfz9DxQ="
+                                        " allowed-ips=192.168.2.0/24;2001:db8:a::/48",
+                     .canonical       = "V02J2zmCi2LHX2KMK+ZOgDNhZzK4JXjGNr7CYfz9DxQ="
+                                        " allowed-ips=192.168.2.0/24;2001:db8:a::/48",
+                     .pubkey          = "V02J2zmCi2LHX2KMK+ZOgDNhZzK4JXjGNr7CYfz9DxQ=",
+                     .num_allowed_ips = 2,
+                     .allowed_ips     = {"192.168.2.0/24", "2001:db8:a::/48"},
+                 },
+                 {
+                     /* Persistent-keepalive */
+                     .input     = "D1FTp8Wy1oJQI045yXo9EMdxJqjXHC3VhTCPTh3lSQM="
+                                  " persistent-keepalive=25",
+                     .canonical = "D1FTp8Wy1oJQI045yXo9EMdxJqjXHC3VhTCPTh3lSQM="
+                                  " persistent-keepalive=25",
+                     .pubkey    = "D1FTp8Wy1oJQI045yXo9EMdxJqjXHC3VhTCPTh3lSQM=",
+                     .keepalive = 25,
+                 },
+                 {
+                     /* Preshared-key without flags (should default to 0) */
+                     .input     = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA=",
+                     .canonical = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA="
+                                  " preshared-key-flags=0",
+                     .pubkey    = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0=",
+                     .psk       = "16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA=",
+                     .psk_flags = 0,
+                 },
+                 {
+                     /* Preshared-key flags as string */
+                     .input     = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA="
+                                  " preshared-key-flags=not-saved",
+                     .canonical = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA="
+                                  " preshared-key-flags=2",
+                     .pubkey    = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0=",
+                     .psk       = "16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA=",
+                     .psk_flags = 2,
+                 },
+                 {
+                     /* Non-canonical order and extra whitespaces */
+                     .input           = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY="
+                                        "  preshared-key=EVVP8pOzn8R3nQtv62/hnGsXzyagEgykSboFe4EFhQc="
+                                        " endpoint=vpn.example.com:51820  "
+                                        " preshared-key-flags=1"
+                                        " persistent-keepalive=45"
+                                        " allowed-ips=0.0.0.0/0;::/0",
+                     .canonical       = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY="
+                                        " allowed-ips=0.0.0.0/0;::/0"
+                                        " endpoint=vpn.example.com:51820"
+                                        " persistent-keepalive=45"
+                                        " preshared-key=EVVP8pOzn8R3nQtv62/hnGsXzyagEgykSboFe4EFhQc="
+                                        " preshared-key-flags=1",
+                     .pubkey          = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY=",
+                     .endpoint        = "vpn.example.com:51820",
+                     .keepalive       = 45,
+                     .num_allowed_ips = 2,
+                     .allowed_ips     = {"0.0.0.0/0", "::/0"},
+                     .psk             = "EVVP8pOzn8R3nQtv62/hnGsXzyagEgykSboFe4EFhQc=",
+                     .psk_flags       = 1,
+                 },
+                 {
+                     /* Empty string */
+                     .input   = "",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid public key*/
+                     .input   = "aaaaaaaaaaaaaaaaaaaaaaa=",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Missing value*/
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "persistent-keepalive=",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Unknown attribute */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "persistent-keepalive=12 foobarness=13",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid IPv4 allowed-ip*/
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "allowed-ips=192.168.10.256/32",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid IPv6 allowed-ip */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "allowed-ips=fd01::1::3/64",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Endpoint with no port */
+                     .input   = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                " endpoint=1.2.3.4",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid endpoint */
+                     .input   = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                " endpoint=1.2.3.5.6",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid persistent-keepalive */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "persistent-keepalive=yes",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid PSK */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY="
+                                " preshared-key=pskpskpskpskpskpskpskpskpskpskpskpsk",
+                     .invalid = TRUE,
+                 }};
+
+    for (i = 0; i < G_N_ELEMENTS(tests); i++) {
+        nm_auto_unref_wgpeer NMWireGuardPeer *peer   = NULL;
+        gs_free_error GError                 *error  = NULL;
+        gs_free char                         *newstr = NULL;
+        guint                                 j;
+
+        peer = _nm_utils_wireguard_peer_from_string(tests[i].input, &error);
+        if (tests[i].invalid) {
+            g_assert(!peer);
+            g_assert(error);
+            continue;
+        }
+        g_assert_no_error(error);
+        g_assert_nonnull(peer);
+
+        newstr = _nm_utils_wireguard_peer_to_string(peer);
+        g_assert_nonnull(newstr);
+        g_assert_cmpstr(tests[i].canonical, ==, newstr);
+
+        g_assert_cmpstr(tests[i].pubkey, ==, nm_wireguard_peer_get_public_key(peer));
+        g_assert_cmpstr(tests[i].endpoint, ==, nm_wireguard_peer_get_endpoint(peer));
+
+        g_assert_cmpint(tests[i].num_allowed_ips, ==, nm_wireguard_peer_get_allowed_ips_len(peer));
+        for (j = 0; j < tests[i].num_allowed_ips; j++) {
+            g_assert_cmpstr(tests[i].allowed_ips[j],
+                            ==,
+                            nm_wireguard_peer_get_allowed_ip(peer, j, NULL));
+        }
+
+        g_assert_cmpint(tests[i].keepalive, ==, nm_wireguard_peer_get_persistent_keepalive(peer));
+        g_assert_cmpstr(tests[i].psk, ==, nm_wireguard_peer_get_preshared_key(peer));
+        if (tests[i].psk) {
+            g_assert_cmpint(tests[i].psk_flags,
+                            ==,
+                            nm_wireguard_peer_get_preshared_key_flags(peer));
+        }
+    }
+}
+
 /*****************************************************************************/
 
 NMTST_DEFINE();
@@ -245,6 +466,7 @@ main(int argc, char **argv)
 
     g_test_add_func("/libnm-core-aux/test_team_link_watcher_tofro_string",
                     test_team_link_watcher_tofro_string);
+    g_test_add_func("/libnm-core-aux/test-wireguard-peer", test_wireguard_peer);
 
     return g_test_run();
 }
diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver
index bd66e61d..6c48978a 100644
--- a/src/libnm-client-impl/libnm.ver
+++ b/src/libnm-client-impl/libnm.ver
@@ -2064,6 +2064,11 @@ global:
 	nm_ethtool_optname_is_fec;
 } libnm_1_50_0;
 
+libnm_1_52_2 {
+	#nm_utils_copy_cert_as_user@libnm_1_52_2;
+	#nm_vpn_plugin_info_supports_safe_private_file_access@libnm_1_52_2;
+} libnm_1_52_0;
+
 libnm_1_54_0 {
 global:
 	nm_setting_ip_config_forwarding_get_type;
@@ -2085,7 +2090,16 @@ global:
 } libnm_1_54_0;
 
 libnm_1_54_3 {
+	#nm_utils_copy_cert_as_user@libnm_1_54_3;
+	#nm_vpn_plugin_info_supports_safe_private_file_access@libnm_1_54_3;
+} libnm_1_54_2;
+
+libnm_1_56_0 {
 global:
+	nm_dns_server_validate;
+	nm_setting_gsm_get_device_uid;
+	nm_setting_connection_get_dnssec;
+	nm_setting_connection_dnssec_get_type;
 	nm_utils_copy_cert_as_user;
 	nm_vpn_plugin_info_supports_safe_private_file_access;
-} libnm_1_54_2;
+} libnm_1_54_0;
diff --git a/src/libnm-client-impl/nm-client.c b/src/libnm-client-impl/nm-client.c
index 13343cbf..b81ac6e5 100644
--- a/src/libnm-client-impl/nm-client.c
+++ b/src/libnm-client-impl/nm-client.c
@@ -9339,3 +9339,27 @@ NM_BACKPORT_SYMBOL(libnm_1_50_4,
                    (optname));
 
 NM_BACKPORT_SYMBOL(libnm_1_50_4, GType, nm_setting_ethtool_fec_mode_get_type, (void), ());
+
+NM_BACKPORT_SYMBOL(libnm_1_52_2,
+                   char *,
+                   nm_utils_copy_cert_as_user,
+                   (const char *filename, const char *user, GError **error),
+                   (filename, user, error));
+
+NM_BACKPORT_SYMBOL(libnm_1_52_2,
+                   gboolean,
+                   nm_vpn_plugin_info_supports_safe_private_file_access,
+                   (NMVpnPluginInfo * self),
+                   (self));
+
+NM_BACKPORT_SYMBOL(libnm_1_54_3,
+                   char *,
+                   nm_utils_copy_cert_as_user,
+                   (const char *filename, const char *user, GError **error),
+                   (filename, user, error));
+
+NM_BACKPORT_SYMBOL(libnm_1_54_3,
+                   gboolean,
+                   nm_vpn_plugin_info_supports_safe_private_file_access,
+                   (NMVpnPluginInfo * self),
+                   (self));
diff --git a/src/libnm-client-impl/tests/test-gir.py b/src/libnm-client-impl/tests/test-gir.py
index 81518e37..554080fa 100755
--- a/src/libnm-client-impl/tests/test-gir.py
+++ b/src/libnm-client-impl/tests/test-gir.py
@@ -93,8 +93,6 @@ def syms_from_ver(verfile):
     # hardcode it.
     c_syms["nm_ethtool_optname_is_feature"] = "1.20"
     c_syms["nm_setting_bond_port_get_prio"] = "1.44"
-    c_syms["nm_utils_copy_cert_as_user"] = "1.56"
-    c_syms["nm_vpn_plugin_info_supports_safe_private_file_access"] = "1.56"
 
     return c_syms
 
diff --git a/src/libnm-client-impl/tests/test-libnm.c b/src/libnm-client-impl/tests/test-libnm.c
index f56521a4..b30d02a5 100644
--- a/src/libnm-client-impl/tests/test-libnm.c
+++ b/src/libnm-client-impl/tests/test-libnm.c
@@ -2756,6 +2756,8 @@ test_types(void)
         G(nm_setting_connection_lldp_get_type),
         G(nm_setting_connection_llmnr_get_type),
         G(nm_setting_connection_mdns_get_type),
+        G(nm_setting_connection_dns_over_tls_get_type),
+        G(nm_setting_connection_dnssec_get_type),
         G(nm_setting_dcb_flags_get_type),
         G(nm_setting_dcb_get_type),
         G(nm_setting_diff_result_get_type),
diff --git a/src/libnm-core-aux-extern/nm-libnm-core-aux.c b/src/libnm-core-aux-extern/nm-libnm-core-aux.c
index dfc70e35..b12000fc 100644
--- a/src/libnm-core-aux-extern/nm-libnm-core-aux.c
+++ b/src/libnm-core-aux-extern/nm-libnm-core-aux.c
@@ -7,6 +7,7 @@
 
 #include "nm-libnm-core-aux.h"
 
+#include "nm-errors.h"
 #include "libnm-core-aux-intern/nm-libnm-core-utils.h"
 #include "libnm-glib-aux/nm-str-buf.h"
 
@@ -475,3 +476,177 @@ _nm_ip_route_to_string(NMIPRoute *route, NMStrBuf *strbuf)
         nm_str_buf_append_printf(strbuf, " metric %" G_GINT64_FORMAT, metric);
     }
 }
+
+/*****************************************************************************/
+
+char *
+_nm_utils_wireguard_peer_to_string(NMWireGuardPeer *peer)
+{
+    GString    *str;
+    const char *endpoint;
+    const char *psk;
+    guint16     keepalive;
+    guint       i;
+    guint       len;
+
+    g_return_val_if_fail(peer, "");
+
+    nm_assert(nm_wireguard_peer_is_valid(peer, TRUE, TRUE, NULL));
+
+    str = g_string_new("");
+    g_string_append(str, nm_wireguard_peer_get_public_key(peer));
+
+    len = nm_wireguard_peer_get_allowed_ips_len(peer);
+    if (len > 0) {
+        g_string_append(str, " allowed-ips=");
+        for (i = 0; i < len; i++) {
+            g_string_append(str, nm_wireguard_peer_get_allowed_ip(peer, i, NULL));
+            if (i < len - 1)
+                g_string_append(str, ";");
+        }
+    }
+
+    endpoint = nm_wireguard_peer_get_endpoint(peer);
+    if (endpoint) {
+        g_string_append_printf(str, " endpoint=%s", endpoint);
+    }
+
+    keepalive = nm_wireguard_peer_get_persistent_keepalive(peer);
+    if (keepalive != 0) {
+        g_string_append_printf(str, " persistent-keepalive=%hu", keepalive);
+    }
+
+    psk = nm_wireguard_peer_get_preshared_key(peer);
+    if (psk) {
+        g_string_append_printf(str, " preshared-key=%s", psk);
+        g_string_append_printf(str,
+                               " preshared-key-flags=%u",
+                               (guint) nm_wireguard_peer_get_preshared_key_flags(peer));
+    }
+
+    return g_string_free(str, FALSE);
+}
+
+NMWireGuardPeer *
+_nm_utils_wireguard_peer_from_string(const char *str, GError **error)
+{
+    nm_auto_unref_wgpeer NMWireGuardPeer *peer          = NULL;
+    gs_strfreev char                    **tokens        = NULL;
+    gboolean                              has_psk       = FALSE;
+    gboolean                              has_psk_flags = FALSE;
+    char                                 *value;
+    guint                                 i;
+
+    peer = nm_wireguard_peer_new();
+
+    tokens = g_strsplit_set(str, " ", 0);
+    for (i = 0; tokens[i]; i++) {
+        if (i == 0) {
+            if (!nm_wireguard_peer_set_public_key(peer, tokens[i], FALSE)) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            "invalid public key '%s'",
+                            tokens[i]);
+                return NULL;
+            }
+            continue;
+        }
+
+        if (tokens[i][0] == '\0')
+            continue;
+
+        value = strchr(tokens[i], '=');
+        if (!value || value[1] == '\0') {
+            g_set_error(error,
+                        NM_CONNECTION_ERROR,
+                        NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                        "attribute without value '%s'",
+                        tokens[i]);
+            return NULL;
+        }
+
+        *value = '\0';
+        value++;
+
+        if (nm_streq(tokens[i], "allowed-ips")) {
+            gs_strfreev char **ips = NULL;
+            guint              j;
+
+            ips = g_strsplit_set(value, ";", 0);
+            for (j = 0; ips[j]; j++) {
+                if (!nm_wireguard_peer_append_allowed_ip(peer, ips[j], FALSE)) {
+                    g_set_error(error,
+                                NM_CONNECTION_ERROR,
+                                NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                                "invalid allowed-ip '%s'",
+                                ips[j]);
+                    return NULL;
+                }
+            }
+        } else if (nm_streq(tokens[i], "endpoint")) {
+            if (!nm_wireguard_peer_set_endpoint(peer, value, FALSE)) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            "invalid endpoint '%s'",
+                            value);
+                return NULL;
+            }
+        } else if (nm_streq(tokens[i], "persistent-keepalive")) {
+            gint64 keepalive;
+
+            keepalive = _nm_utils_ascii_str_to_int64(value, 10, 0, G_MAXUINT16, -1);
+            if (keepalive == -1) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            "invalid persistent-keepalive value '%s'",
+                            value);
+                return NULL;
+            }
+            nm_wireguard_peer_set_persistent_keepalive(peer, (guint16) keepalive);
+        } else if (nm_streq(tokens[i], "preshared-key")) {
+            if (!nm_wireguard_peer_set_preshared_key(peer, value, FALSE)) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            "invalid preshared-key '%s'",
+                            value);
+                return NULL;
+            }
+            has_psk = TRUE;
+        } else if (nm_streq(tokens[i], "preshared-key-flags")) {
+            int flags;
+
+            if (!nm_utils_enum_from_str(NM_TYPE_SETTING_SECRET_FLAGS, value, &flags, NULL)) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            "invalid preshared-key-flags '%s'",
+                            value);
+                return NULL;
+            }
+            nm_wireguard_peer_set_preshared_key_flags(peer, (NMSettingSecretFlags) flags);
+            has_psk_flags = TRUE;
+        } else {
+            g_set_error(error,
+                        NM_CONNECTION_ERROR,
+                        NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                        "invalid attribute '%s'",
+                        tokens[i]);
+            return NULL;
+        }
+    }
+
+    if (has_psk && !has_psk_flags) {
+        /* The flags are NOT_REQUIRED by default. With this flag, the PSK would not
+         * be saved by default, unless the user explicitly sets a different value. */
+        nm_wireguard_peer_set_preshared_key_flags(peer, NM_SETTING_SECRET_FLAG_NONE);
+    }
+
+    if (!nm_wireguard_peer_is_valid(peer, TRUE, TRUE, error))
+        return NULL;
+
+    return g_steal_pointer(&peer);
+}
diff --git a/src/libnm-core-aux-extern/nm-libnm-core-aux.h b/src/libnm-core-aux-extern/nm-libnm-core-aux.h
index e45e98ab..aa7ea631 100644
--- a/src/libnm-core-aux-extern/nm-libnm-core-aux.h
+++ b/src/libnm-core-aux-extern/nm-libnm-core-aux.h
@@ -6,8 +6,9 @@
 #ifndef __NM_LIBNM_CORE_AUX_H__
 #define __NM_LIBNM_CORE_AUX_H__
 
-#include "nm-setting-team.h"
 #include "nm-setting-ip-config.h"
+#include "nm-setting-team.h"
+#include "nm-setting-wireguard.h"
 
 typedef enum {
     NM_TEAM_LINK_WATCHER_TYPE_NONE     = 0,
@@ -39,4 +40,7 @@ void _nm_ip_route_to_string(NMIPRoute *route, struct _NMStrBuf *strbuf);
 
 NMTeamLinkWatcher *nm_utils_team_link_watcher_from_string(const char *str, GError **error);
 
+char            *_nm_utils_wireguard_peer_to_string(NMWireGuardPeer *peer);
+NMWireGuardPeer *_nm_utils_wireguard_peer_from_string(const char *str, GError **error);
+
 #endif /* __NM_LIBNM_CORE_AUX_H__ */
diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.c b/src/libnm-core-aux-intern/nm-libnm-core-utils.c
index 94aa42bc..2d709e20 100644
--- a/src/libnm-core-aux-intern/nm-libnm-core-utils.c
+++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.c
@@ -705,6 +705,7 @@ nm_mptcp_flags_normalize(NMMptcpFlags flags)
  * @addr_family: the address family, or AF_UNSPEC to autodetect it
  * @str: the name server URI string to parse
  * @dns: the name server descriptor to fill, or %NULL
+ * @error: the error to set if the string cannot be parsed
  *
  * Parses the given name server URI string. Each name server is represented
  * by the following grammar:
@@ -731,7 +732,7 @@ nm_mptcp_flags_normalize(NMMptcpFlags flags)
  * Returns: %TRUE on success, %FALSE on failure
  */
 gboolean
-nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
+nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns, GError **error)
 {
     NMDnsServer   dns_stack;
     gs_free char *addr_port_heap = NULL;
@@ -746,8 +747,13 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
     if (!dns)
         dns = &dns_stack;
 
-    if (!str)
+    if (!str) {
+        g_set_error_literal(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("the string is empty"));
         return FALSE;
+    }
 
     *dns = (NMDnsServer) {0};
 
@@ -765,12 +771,21 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
         }
 
         if (name && name[0] == '\0') {
-            /* empty DoT server name is not allowed */
+            g_set_error_literal(error,
+                                NM_CONNECTION_ERROR,
+                                NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                                _("the DNS-over-TLS server name is empty"));
             return FALSE;
         }
 
-        if (!nm_inet_parse_bin(addr_family, str, &dns->addr_family, &dns->addr))
+        if (!nm_inet_parse_bin(addr_family, str, &dns->addr_family, &dns->addr)) {
+            g_set_error(error,
+                        NM_CONNECTION_ERROR,
+                        NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                        _("\"%s\" is not a valid IP address or a supported URI"),
+                        str);
             return FALSE;
+        }
 
         dns->servername = name;
         dns->scheme     = NM_DNS_URI_SCHEME_NONE;
@@ -784,7 +799,10 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
         addr_port = nm_strndup_a(100, addr_port, name - addr_port, &addr_port_heap);
         name++;
         if (*name == '\0') {
-            /* empty DoT server name not allowed */
+            g_set_error_literal(error,
+                                NM_CONNECTION_ERROR,
+                                NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                                _("the DNS-over-TLS server name is empty"));
             return FALSE;
         }
         dns->servername = name;
@@ -797,8 +815,13 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
         addr_family = AF_INET6;
         addr_port++;
         end = strchr(addr_port, ']');
-        if (!end)
+        if (!end) {
+            g_set_error_literal(error,
+                                NM_CONNECTION_ERROR,
+                                NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                                _("unterminated square bracket"));
             return FALSE;
+        }
         addr = nm_strndup_a(100, addr_port, end - addr_port, &addr_heap);
 
         /* IPv6 link-local scope-id */
@@ -806,8 +829,13 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
         if (perc) {
             *perc = '\0';
             if (g_strlcpy(dns->interface, perc + 1, sizeof(dns->interface))
-                >= sizeof(dns->interface))
+                >= sizeof(dns->interface)) {
+                g_set_error_literal(error,
+                                    NM_CONNECTION_ERROR,
+                                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                                    _("the interface name is too long"));
                 return FALSE;
+            }
         }
 
         /* port */
@@ -815,8 +843,14 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
         if (*end == ':') {
             end++;
             dns->port = _nm_utils_ascii_str_to_int64(end, 10, 1, 65535, 0);
-            if (dns->port == 0)
+            if (dns->port == 0) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("\"%s\" is not a valid port number"),
+                            end);
                 return FALSE;
+            }
         }
     } else if (addr_family != AF_INET6) {
         /* square brackets are mandatory for IPv6, so it must be IPv4 */
@@ -830,23 +864,49 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns)
             addr = nm_strndup_a(100, addr_port, port - addr_port, &addr_heap);
             port++;
             dns->port = _nm_utils_ascii_str_to_int64(port, 10, 1, 65535, 0);
-            if (dns->port == 0)
+            if (dns->port == 0) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("\"%s\" is not a valid port number"),
+                            port);
                 return FALSE;
+            }
         }
     } else {
+        g_set_error_literal(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("IPv6 addresses must be enclosed in square brackets"));
         return FALSE;
     }
 
-    if (!nm_inet_parse_bin(addr_family, addr, &dns->addr_family, &dns->addr))
+    if (!nm_inet_parse_bin(addr_family, addr, &dns->addr_family, &dns->addr)) {
+        g_set_error(error,
+                    NM_CONNECTION_ERROR,
+                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                    _("\"%s\" is not a valid IP address"),
+                    addr);
         return FALSE;
+    }
 
-    if (dns->scheme != NM_DNS_URI_SCHEME_TLS && dns->servername)
+    if (dns->scheme != NM_DNS_URI_SCHEME_TLS && dns->servername) {
+        g_set_error_literal(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("the server name is only supported for DNS-over-TLS"));
         return FALSE;
+    }
 
     /* For now, allow the interface only for IPv6 link-local addresses */
     if (dns->interface[0]
-        && (dns->addr_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&dns->addr.addr6)))
+        && (dns->addr_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&dns->addr.addr6))) {
+        g_set_error_literal(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("the scope-id is only supported for IPv6 link-local addresses"));
         return FALSE;
+    }
 
     return TRUE;
 }
@@ -870,7 +930,7 @@ nm_dns_uri_parse_plain(int addr_family, const char *str, char *out_addrstr, NMIP
 {
     NMDnsServer dns;
 
-    if (!nm_dns_uri_parse(addr_family, str, &dns))
+    if (!nm_dns_uri_parse(addr_family, str, &dns, NULL))
         return FALSE;
 
     switch (dns.scheme) {
@@ -922,7 +982,7 @@ nm_dns_uri_normalize(int addr_family, const char *str, char **out_free)
     nm_assert(str);
     nm_assert(out_free && !*out_free);
 
-    if (!nm_dns_uri_parse(addr_family, str, &dns))
+    if (!nm_dns_uri_parse(addr_family, str, &dns, NULL))
         return NULL;
 
     nm_inet_ntop(dns.addr_family, &dns.addr, addrstr);
diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.h b/src/libnm-core-aux-intern/nm-libnm-core-utils.h
index eeb720d9..0e75982e 100644
--- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h
+++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h
@@ -300,13 +300,15 @@ gpointer _nm_connection_new_setting(NMConnection *connection, GType gtype);
 
 /*****************************************************************************/
 
-#define _NM_MPTCP_FLAGS_ALL                                                              \
-    ((NMMptcpFlags) (NM_MPTCP_FLAGS_DISABLED | NM_MPTCP_FLAGS_ENABLED                    \
-                     | NM_MPTCP_FLAGS_ALSO_WITHOUT_SYSCTL                                \
-                     | NM_MPTCP_FLAGS_ALSO_WITHOUT_DEFAULT_ROUTE | NM_MPTCP_FLAGS_SIGNAL \
-                     | NM_MPTCP_FLAGS_SUBFLOW | NM_MPTCP_FLAGS_BACKUP | NM_MPTCP_FLAGS_FULLMESH))
+#define _NM_MPTCP_FLAGS_ALL                                                                     \
+    ((NMMptcpFlags) (NM_MPTCP_FLAGS_DISABLED | NM_MPTCP_FLAGS_ENABLED                           \
+                     | NM_MPTCP_FLAGS_ALSO_WITHOUT_SYSCTL                                       \
+                     | NM_MPTCP_FLAGS_ALSO_WITHOUT_DEFAULT_ROUTE | NM_MPTCP_FLAGS_SIGNAL        \
+                     | NM_MPTCP_FLAGS_SUBFLOW | NM_MPTCP_FLAGS_BACKUP | NM_MPTCP_FLAGS_FULLMESH \
+                     | NM_MPTCP_FLAGS_LAMINAR))
 
-#define _NM_MPTCP_FLAGS_DEFAULT ((NMMptcpFlags) (NM_MPTCP_FLAGS_ENABLED | NM_MPTCP_FLAGS_SUBFLOW))
+#define _NM_MPTCP_FLAGS_DEFAULT \
+    ((NMMptcpFlags) (NM_MPTCP_FLAGS_ENABLED | NM_MPTCP_FLAGS_SUBFLOW | NM_MPTCP_FLAGS_LAMINAR))
 
 NMMptcpFlags nm_mptcp_flags_normalize(NMMptcpFlags flags);
 
@@ -330,7 +332,7 @@ typedef struct {
     guint16        port;
 } NMDnsServer;
 
-gboolean nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *out_dns);
+gboolean nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *out_dns, GError **error);
 gboolean
 nm_dns_uri_parse_plain(int addr_family, const char *str, char *out_addrstr, NMIPAddr *out_addr);
 const char *nm_dns_uri_normalize(int addr_family, const char *str, char **out_free);
diff --git a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in
index ce4832dc..c83deea9 100644
--- a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in
+++ b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in
@@ -810,6 +810,10 @@
                   dbus-type="i"
                   gprop-type="gint"
                   />
+        <property name="dnssec"
+                  dbus-type="i"
+                  gprop-type="gint"
+                  />
         <property name="down-on-poweroff"
                   dbus-type="i"
                   gprop-type="gint"
@@ -1393,6 +1397,10 @@
                   dbus-type="s"
                   gprop-type="gchararray"
                   />
+        <property name="device-uid"
+                  dbus-type="s"
+                  gprop-type="gchararray"
+                  />
         <property name="home-only"
                   dbus-type="b"
                   gprop-type="gboolean"
diff --git a/src/libnm-core-impl/nm-keyfile.c b/src/libnm-core-impl/nm-keyfile.c
index f8f735e9..70758f0f 100644
--- a/src/libnm-core-impl/nm-keyfile.c
+++ b/src/libnm-core-impl/nm-keyfile.c
@@ -1158,14 +1158,17 @@ ip_dns_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key)
     addr_family = NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting);
 
     for (i = 0, n = 0; i < length; i++) {
-        if (!nm_dns_uri_parse(addr_family, list[i], NULL)) {
+        gs_free_error GError *error = NULL;
+
+        if (!nm_dns_uri_parse(addr_family, list[i], NULL, &error)) {
             if (!read_handle_warn(info,
                                   key,
                                   key,
                                   NM_KEYFILE_WARN_SEVERITY_WARN,
-                                  _("ignoring invalid DNS server IPv%c address '%s'"),
+                                  _("ignoring invalid DNS server IPv%c address '%s': %s"),
                                   nm_utils_addr_family_to_char(addr_family),
-                                  list[i])) {
+                                  list[i],
+                                  error->message)) {
                 do {
                     nm_clear_g_free(&list[i]);
                 } while (++i < length);
@@ -1184,6 +1187,46 @@ ip_dns_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key)
 }
 
 static void
+ip_dns_search_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key)
+{
+    gs_strfreev char **list = NULL;
+    gsize              length;
+
+    nm_assert(NM_IS_SETTING_IP4_CONFIG(setting) || NM_IS_SETTING_IP6_CONFIG(setting));
+
+    list = nm_keyfile_plugin_kf_get_string_list(info->keyfile,
+                                                nm_setting_get_name(setting),
+                                                key,
+                                                &length,
+                                                NULL);
+    nm_assert(length == NM_PTRARRAY_LEN(list));
+    if (length == 0)
+        return;
+
+    if (length == 1 && strpbrk(list[0], ", ")) {
+        /* By mistake, we accepted invalid characters like ',' in DNS search domains.
+         * Now we do some validation that would cause the connection to be rejected by
+         * the daemon. Let's continue accepting ',' and ' ' as separators but emit a
+         * warning */
+        char **list2;
+
+        read_handle_warn(info,
+                         key,
+                         key,
+                         NM_KEYFILE_WARN_SEVERITY_WARN,
+                         _("normalizing invalid separator ',' or ' ' in DNS search value '%s', "
+                           "only ';' will be valid separators in keyfiles in the future"),
+                         list[0]);
+
+        list2 = g_strsplit_set(list[0], ", ", -1);
+        g_strfreev(list);
+        list = list2;
+    }
+
+    g_object_set(setting, key, list, NULL);
+}
+
+static void
 ip6_addr_gen_mode_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key)
 {
     NMSettingIP6ConfigAddrGenMode addr_gen_mode;
@@ -3081,6 +3124,7 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
                                 .parser              = ip_dns_parser,
                                 .writer              = dns_writer, ),
             PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_OPTIONS, .always_write = TRUE, ),
+            PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_SEARCH, .parser = ip_dns_search_parser, ),
             PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .parser = gateway_parser, ),
             PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
                                 .parser_no_check_key = TRUE,
@@ -3109,6 +3153,7 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
                                 .parser              = ip_dns_parser,
                                 .writer              = dns_writer, ),
             PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_OPTIONS, .always_write = TRUE, ),
+            PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS_SEARCH, .parser = ip_dns_search_parser, ),
             PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .parser = gateway_parser, ),
             PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES,
                                 .parser_no_check_key = TRUE,
diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c
index ec3a1fed..0ad97846 100644
--- a/src/libnm-core-impl/nm-setting-connection.c
+++ b/src/libnm-core-impl/nm-setting-connection.c
@@ -71,6 +71,7 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingConnection,
                              PROP_MDNS,
                              PROP_LLMNR,
                              PROP_DNS_OVER_TLS,
+                             PROP_DNSSEC,
                              PROP_MPTCP_FLAGS,
                              PROP_STABLE_ID,
                              PROP_AUTH_RETRIES,
@@ -103,6 +104,7 @@ typedef struct {
     gint32      mdns;
     gint32      llmnr;
     gint32      dns_over_tls;
+    gint32      dnssec;
     gint32      wait_device_timeout;
     gint32      lldp;
     gint32      wait_activation_delay;
@@ -1335,6 +1337,22 @@ nm_setting_connection_get_dns_over_tls(NMSettingConnection *setting)
 }
 
 /**
+ * nm_setting_connection_get_dnssec:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns: the #NMSettingConnection:dnssec property of the setting.
+ *
+ * Since: 1.56
+ **/
+NMSettingConnectionDnssec
+nm_setting_connection_get_dnssec(NMSettingConnection *setting)
+{
+    g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), NM_SETTING_CONNECTION_DNSSEC_DEFAULT);
+
+    return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->dnssec;
+}
+
+/**
  * nm_setting_connection_get_mptcp_flags:
  * @setting: the #NMSettingConnection
  *
@@ -3447,6 +3465,33 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass)
                                              NMSettingConnectionPrivate,
                                              dns_over_tls);
 
+    /**
+     * NMSettingConnection:dnssec:
+     *
+     * Whether DNSSEC (dnssec) is enabled for the connection.
+     *
+     * The permitted values are: "yes" (2) use DNSSEC and disable fallback,
+     * "allow-downgrade" (1) use DNSSEC but allow fallback if the server does not support it,
+     * "no" (0) don't ever use DNSSEC.
+     * The effect of "default" (-1) depends on the dns plugin used.
+     * Systemd-resolved uses its global setting in this case.
+     *
+     * This feature requires a plugin which supports DNSSEC. Otherwise, the
+     * setting has no effect. One such plugin is systemd-resolved.
+     *
+     * Since: 1.56
+     **/
+    _nm_setting_property_define_direct_enum(properties_override,
+                                            obj_properties,
+                                            NM_SETTING_CONNECTION_DNSSEC,
+                                            PROP_DNSSEC,
+                                            NM_TYPE_SETTING_CONNECTION_DNSSEC,
+                                            NM_SETTING_CONNECTION_DNSSEC_DEFAULT,
+                                            NM_SETTING_PARAM_NONE,
+                                            NULL,
+                                            NMSettingConnectionPrivate,
+                                            dnssec);
+
     /* Notes about "mptcp-flags":
      *
      * It is a bit odd that NMMptcpFlags mixes flags with different purposes:
@@ -3454,7 +3499,7 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass)
      * - "disabled", "disabled-on-local-iface", "enable": whether MPTCP handling
      *   is enabled. The flag "disabled-on-local-iface" enables it based on whether
      *   the interface has a default route.
-     * - "signal", "subflow", "backup", "fullmesh": the endpoint flags
+     * - "signal", "subflow", "backup", "fullmesh", "laminar": the endpoint flags
      *   that are used.
      *
      * The reason is, that it is useful to have one "connection.mptcp-flags"
@@ -3514,7 +3559,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass)
      *
      * When MPTCP handling is enabled then endpoints are configured with
      * the specified address flags "signal" (0x10), "subflow" (0x20), "backup" (0x40),
-     * "fullmesh" (0x80). See ip-mptcp(8) manual for additional information about the flags.
+     * "fullmesh" (0x80), "laminar" (0x100). See ip-mptcp(8) manual for
+     * additional information about the flags.
      *
      * If the flags are zero (0x0), the global connection default from NetworkManager.conf is
      * honored. If still unspecified, the fallback is "enabled,subflow".
diff --git a/src/libnm-core-impl/nm-setting-gsm.c b/src/libnm-core-impl/nm-setting-gsm.c
index 02e0e236..e6c43c96 100644
--- a/src/libnm-core-impl/nm-setting-gsm.c
+++ b/src/libnm-core-impl/nm-setting-gsm.c
@@ -47,7 +47,8 @@ NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_AUTO_CONFIG,
                                   PROP_INITIAL_EPS_REFUSE_PAP,
                                   PROP_INITIAL_EPS_REFUSE_CHAP,
                                   PROP_INITIAL_EPS_REFUSE_MSCHAP,
-                                  PROP_INITIAL_EPS_REFUSE_MSCHAPV2, );
+                                  PROP_INITIAL_EPS_REFUSE_MSCHAPV2,
+                                  PROP_DEVICE_UID, );
 
 typedef struct {
     char   *number;
@@ -75,6 +76,7 @@ typedef struct {
     bool    auto_config;
     bool    home_only;
     bool    initial_eps_config;
+    char   *device_uid;
 } NMSettingGsmPrivate;
 
 /**
@@ -465,6 +467,22 @@ nm_setting_gsm_get_initial_eps_refuse_mschapv2(NMSettingGsm *setting)
     return NM_SETTING_GSM_GET_PRIVATE(setting)->initial_eps_refuse_mschapv2;
 }
 
+/**
+ * nm_setting_gsm_get_device_uid:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:device-uid property of the setting
+ *
+ * Since: 1.56
+ **/
+const char *
+nm_setting_gsm_get_device_uid(NMSettingGsm *setting)
+{
+    g_return_val_if_fail(NM_IS_SETTING_GSM(setting), NULL);
+
+    return NM_SETTING_GSM_GET_PRIVATE(setting)->device_uid;
+}
+
 static gboolean
 _verify_apn(const char *apn, gboolean allow_empty, const char *property_name, GError **error)
 {
@@ -1149,6 +1167,26 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass)
                                                NMSettingGsmPrivate,
                                                initial_eps_refuse_mschapv2);
 
+    /**
+     * NMSettingGsm:device-uid:
+     *
+     * The device UID (as given by the WWAN management service) which this
+     * connection applies to. In contrast to #NMSettingGsm:device-id, which is
+     * an inherent property of the connected device, this setting refers to
+     * a property set by a UDEV-rule. Refer to the "Common udev tags" ->
+     * "ID_MM_PHYSDEV_UID" documentation of ModemManager. If given, the
+     * connection will only apply to the specified device.
+     *
+     * Since: 1.56
+     **/
+    _nm_setting_property_define_direct_string(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_GSM_DEVICE_UID,
+                                              PROP_DEVICE_UID,
+                                              NM_SETTING_PARAM_NONE,
+                                              NMSettingGsmPrivate,
+                                              device_uid);
+
     /* Ignore incoming deprecated properties */
     _nm_properties_override_dbus(properties_override,
                                  "allowed-bands",
diff --git a/src/libnm-core-impl/nm-setting-hsr.c b/src/libnm-core-impl/nm-setting-hsr.c
index 1edf4a14..2f6bf9de 100644
--- a/src/libnm-core-impl/nm-setting-hsr.c
+++ b/src/libnm-core-impl/nm-setting-hsr.c
@@ -131,7 +131,7 @@ nm_setting_hsr_get_prp(NMSettingHsr *setting)
  *
  * Returns: the #NMSettingHsr:protocol-version property of the setting
  *
- * Since: 1.56, 1.54.2
+ * Since: 1.56
  **/
 NMSettingHsrProtocolVersion
 nm_setting_hsr_get_protocol_version(NMSettingHsr *setting)
@@ -147,7 +147,7 @@ nm_setting_hsr_get_protocol_version(NMSettingHsr *setting)
  *
  * Returns: the #NMSettingHsr:interlink property of the setting
  *
- * Since: 1.56, 1.54.2
+ * Since: 1.56
  **/
 const char *
 nm_setting_hsr_get_interlink(NMSettingHsr *setting)
@@ -320,7 +320,7 @@ nm_setting_hsr_class_init(NMSettingHsrClass *klass)
       * %NM_SETTING_HSR_PROTOCOL_VERSION_HSR_2010 sets the protocol version to HSRv0 (IEC 62439-3:2010).
       * %NM_SETTING_HSR_PROTOCOL_VERSION_HSR_2012 sets the protocol version to HSRv1 (IEC 62439-3:2012).
       *
-      * Since: 1.56, 1.54.2
+      * Since: 1.56
       **/
     _nm_setting_property_define_direct_enum(properties_override,
                                             obj_properties,
@@ -338,7 +338,7 @@ nm_setting_hsr_class_init(NMSettingHsrClass *klass)
       *
       * The optional interlink port name of the HSR interface.
       *
-      * Since: 1.56, 1.54.2
+      * Since: 1.56
       **/
     _nm_setting_property_define_direct_string(properties_override,
                                               obj_properties,
diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c
index ad95eb1a..1aecc20c 100644
--- a/src/libnm-core-impl/nm-setting-ip-config.c
+++ b/src/libnm-core-impl/nm-setting-ip-config.c
@@ -4221,6 +4221,25 @@ nm_setting_ip_config_clear_dns(NMSettingIPConfig *setting)
     }
 }
 
+/**
+ * nm_dns_server_validate:
+ * @str: the string containing the DNS server
+ * @family: the IP address family (%AF_INET for IPv4, %AF_INET6 for IPv6,
+ *   %AF_UNSPEC to accept both IPv4 and IPv6)
+ * @error: (nullable): a pointer to %NULL #GError, or %NULL
+ *
+ * Validates a DNS name server string.
+ *
+ * Return: %TRUE if the name server is valid, %FALSE otherwise
+ *
+ * Since: 1.56
+ */
+gboolean
+nm_dns_server_validate(const char *str, int family, GError **error)
+{
+    return nm_dns_uri_parse(family, str, NULL, error);
+}
+
 GPtrArray *
 _nm_setting_ip_config_get_dns_array(NMSettingIPConfig *setting)
 {
@@ -5630,14 +5649,19 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
     /* Validate DNS */
     if (priv->dns) {
         for (i = 0; i < priv->dns->len; i++) {
-            const char *dns = priv->dns->pdata[i];
+            const char           *dns   = priv->dns->pdata[i];
+            gs_free_error GError *local = NULL;
 
-            if (!nm_dns_uri_parse(NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), dns, NULL)) {
+            if (!nm_dns_uri_parse(NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting),
+                                  dns,
+                                  NULL,
+                                  &local)) {
                 g_set_error(error,
                             NM_CONNECTION_ERROR,
                             NM_CONNECTION_ERROR_INVALID_PROPERTY,
-                            _("%u. DNS server address is invalid"),
-                            (i + 1u));
+                            _("%u. DNS server address is invalid: %s"),
+                            (i + 1u),
+                            local->message);
                 g_prefix_error(error,
                                "%s.%s: ",
                                nm_setting_get_name(setting),
@@ -5647,6 +5671,28 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
         }
     }
 
+    /* Validate DNS search domains */
+    if (nm_strvarray_get_strv_notempty(priv->dns_search.arr, NULL)) {
+        for (i = 0; i < priv->dns_search.arr->len; i++) {
+            const char *dns_search = nm_strvarray_get_idx(priv->dns_search.arr, i);
+
+            /* TODO: currently we only check that no wrong list separators have
+             * been used by mistake. Proper domain name validation would be better. */
+            if (strpbrk(dns_search, ",; ")) {
+                g_set_error(error,
+                            NM_CONNECTION_ERROR,
+                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                            _("DNS search domain '%s' is invalid"),
+                            dns_search);
+                g_prefix_error(error,
+                               "%s.%s: ",
+                               nm_setting_get_name(setting),
+                               NM_SETTING_IP_CONFIG_DNS_SEARCH);
+                return FALSE;
+            }
+        }
+    }
+
     /* Validate addresses */
     for (i = 0; i < priv->addresses->len; i++) {
         NMIPAddress *addr = (NMIPAddress *) priv->addresses->pdata[i];
@@ -6694,7 +6740,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass)
      * NMSettingIPConfig:gateway:
      *
      * The gateway associated with this configuration. This is only meaningful
-     * if #NMSettingIPConfig:addresses is also set.
+     * if addresses are also set on the device.
      *
      * Setting the gateway causes NetworkManager to configure a standard default route
      * with the gateway as next hop. This is ignored if #NMSettingIPConfig:never-default
diff --git a/src/libnm-core-impl/nm-setting-wireguard.c b/src/libnm-core-impl/nm-setting-wireguard.c
index 614be0f6..9a324188 100644
--- a/src/libnm-core-impl/nm-setting-wireguard.c
+++ b/src/libnm-core-impl/nm-setting-wireguard.c
@@ -2532,6 +2532,73 @@ nm_setting_wireguard_class_init(NMSettingWireGuardClass *klass)
                                                     NMSettingWireGuard,
                                                     _priv.ip6_auto_default_route);
 
+    /* ---nmcli---
+     * property: peers
+     * format: a comma-separated list of WireGuard peers
+     * description:
+     *  A comma-separated list of WireGuard peers. Each peer has the following syntax:
+     *
+     *   PUBLIC_KEY [ATTRIBUTE=VALUE [ATTRIBUTE=VALUE]...]
+     *
+     *   The supported attributes are: endpoint, allowed-ips, persistent-keepalive,
+     *   preshared-key, preshared-key-flags.
+     * description-docbook:
+     *   <para>
+     *   A comma-separated list of WireGuard peers. Each peer has the following syntax:
+     *   </para>
+     *   <para>
+     *   <literal>
+     *   <replaceable>public-key</replaceable>
+     *   [<replaceable>attribute</replaceable>=<replaceable>value</replaceable>
+     *   [<replaceable>attribute</replaceable>=<replaceable>value</replaceable>]...]
+     *   </literal>
+     *   </para>
+     *   <para>
+     *   The public key is required and must be encoded as base64; it can be
+     *   calculated by running <command>wg pubkey</command> on the private key,
+     *   and it is usually transmitted out of band to the author of the configuration
+     *   file.
+     *   </para>
+     *   <para>
+     *   The supported attributes are:
+     *   <variablelist>
+     *     <varlistentry>
+     *       <term><varname>endpoint</varname></term>
+     *       <listitem><para>An endpoint IP or hostname, followed by a colon, and then
+     *       a port number.</para></listitem>
+     *     </varlistentry>
+     *
+     *     <varlistentry>
+     *       <term><varname></varname></term>
+     *       <listitem><para></para></listitem>
+     *     </varlistentry>
+     *     <varlistentry>
+     *       <term><varname>allowed-ips</varname></term>
+     *       <listitem><para>A semicolon-separated list of IP (v4 or v6) addresses
+     *       with CIDR masks from which incoming traffic for this peer is allowed
+     *       and to which outgoing traffic for this peer is directed
+     *       </para></listitem>
+     *     </varlistentry>
+     *     <varlistentry>
+     *       <term><varname>persistent-keepalive</varname></term>
+     *       <listitem><para>An interval in seconds, between 1 and 65535, of
+     *       how often to send an authenticated empty packet to the peer for the
+     *       purpose of keeping a stateful firewall or NAT mapping valid persistently.
+     *       </para></listitem>
+     *     </varlistentry>
+     *     <varlistentry>
+     *       <term><varname>preshared-key</varname></term>
+     *       <listitem><para>A base64 preshared key generated by "wg genpsk". Optional,
+     *       and may be omitted.</para></listitem>
+     *     </varlistentry>
+     *     <varlistentry>
+     *       <term><varname>preshared-key-flags</varname></term>
+     *       <listitem><para>The secret flags for the preshared-key.</para></listitem>
+     *     </varlistentry>
+     *   </variablelist>
+     *   </para>
+     * ---end---
+     */
     /* ---dbus---
      * property: peers
      * format: array of 'a{sv}'
diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c
index 9a78e947..1bf00831 100644
--- a/src/libnm-core-impl/nm-utils.c
+++ b/src/libnm-core-impl/nm-utils.c
@@ -6336,7 +6336,7 @@ helper_child_terminated(GPid pid, int status, gpointer user_data)
  *   if an error occurred, including when the given user can't access the
  *   file.
  *
- * Since: 1.56, 1.54.3
+ * Since: 1.56
  */
 char *
 nm_utils_copy_cert_as_user(const char *filename, const char *user, GError **error)
@@ -6444,6 +6444,7 @@ nm_utils_copy_cert_as_user(const char *filename, const char *user, GError **erro
                                     0600,
                                     NULL,
                                     NULL,
+                                    NULL,
                                     error)) {
         return NULL;
     }
diff --git a/src/libnm-core-impl/nm-vpn-plugin-info.c b/src/libnm-core-impl/nm-vpn-plugin-info.c
index 04b0fb16..47dc9e3b 100644
--- a/src/libnm-core-impl/nm-vpn-plugin-info.c
+++ b/src/libnm-core-impl/nm-vpn-plugin-info.c
@@ -921,7 +921,7 @@ nm_vpn_plugin_info_supports_multiple(NMVpnPluginInfo *self)
  *     private connections in a safe way (i.e. checking user permissions), or
        if the service doesn't need to read any file from disk.
  *
- * Since: 1.56, 1.54.3
+ * Since: 1.56
  */
 gboolean
 nm_vpn_plugin_info_supports_safe_private_file_access(NMVpnPluginInfo *self)
diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c
index 43e73c3d..cd480045 100644
--- a/src/libnm-core-impl/tests/test-general.c
+++ b/src/libnm-core-impl/tests/test-general.c
@@ -4032,6 +4032,7 @@ test_connection_diff_a_only(void)
           {NM_SETTING_CONNECTION_MDNS, NM_SETTING_DIFF_RESULT_IN_A},
           {NM_SETTING_CONNECTION_LLMNR, NM_SETTING_DIFF_RESULT_IN_A},
           {NM_SETTING_CONNECTION_DNS_OVER_TLS, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_DNSSEC, NM_SETTING_DIFF_RESULT_IN_A},
           {NM_SETTING_CONNECTION_MPTCP_FLAGS, NM_SETTING_DIFF_RESULT_IN_A},
           {NM_SETTING_CONNECTION_MUD_URL, NM_SETTING_DIFF_RESULT_IN_A},
           {NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A},
@@ -11400,12 +11401,16 @@ test_connection_path(void)
 static void
 t_dns_0(const char *str)
 {
-    NMDnsServer server = {};
-    gboolean    ret;
+    gs_free_error GError *error  = NULL;
+    NMDnsServer           server = {};
+    gboolean              ret;
 
-    ret = nm_dns_uri_parse(AF_UNSPEC, str, &server);
+    ret = nm_dns_uri_parse(AF_UNSPEC, str, &server, &error);
 
     g_assert(!ret);
+    g_assert(error);
+    g_assert(error->message);
+    g_assert(error->message[0] != '\0');
 }
 
 static void
@@ -11422,10 +11427,12 @@ dns_uri_parse_ok(const char    *str,
     gboolean    ret;
 
     for (int i = 0; i < 2; i++) {
-        gboolean af_unspec = i;
+        gs_free_error GError *error     = NULL;
+        gboolean              af_unspec = i;
 
-        ret = nm_dns_uri_parse(af_unspec ? AF_UNSPEC : addr_family, str, &dns);
+        ret = nm_dns_uri_parse(af_unspec ? AF_UNSPEC : addr_family, str, &dns, &error);
         g_assert(ret);
+        g_assert_no_error(error);
 
         g_assert_cmpint(addr_family, ==, dns.addr_family);
         g_assert_cmpint(port, ==, dns.port);
@@ -11436,8 +11443,9 @@ dns_uri_parse_ok(const char    *str,
         g_assert_cmpstr(addrstr, ==, addr);
 
         /* Parse with the wrong address family must fail */
-        ret = nm_dns_uri_parse(addr_family == AF_INET ? AF_INET6 : AF_INET, str, &dns);
+        ret = nm_dns_uri_parse(addr_family == AF_INET ? AF_INET6 : AF_INET, str, &dns, &error);
         g_assert(!ret);
+        g_assert(error);
     }
 }
 
diff --git a/src/libnm-core-impl/tests/test-setting.c b/src/libnm-core-impl/tests/test-setting.c
index 13d95189..f3070c17 100644
--- a/src/libnm-core-impl/tests/test-setting.c
+++ b/src/libnm-core-impl/tests/test-setting.c
@@ -5460,6 +5460,44 @@ test_settings_dns(void)
     }
 }
 
+static void
+_assert_dns_searches(gboolean valid, ...)
+{
+    NMConnection      *con;
+    NMSettingIPConfig *ip4, *ip6;
+    const char        *dns_search;
+    va_list            args;
+
+    con = nmtst_create_minimal_connection("test-dns-search",
+                                          NULL,
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          NULL);
+    nmtst_connection_normalize(con);
+    ip4 = nm_connection_get_setting_ip4_config(con);
+    ip6 = nm_connection_get_setting_ip6_config(con);
+
+    va_start(args, valid);
+    while ((dns_search = va_arg(args, const char *))) {
+        nm_setting_ip_config_add_dns_search(ip4, dns_search);
+        nm_setting_ip_config_add_dns_search(ip6, dns_search);
+    }
+    va_end(args);
+
+    g_assert(valid == nm_setting_verify((NMSetting *) ip4, con, NULL));
+    g_assert(valid == nm_setting_verify((NMSetting *) ip6, con, NULL));
+}
+
+static void
+test_settings_dns_search_domains(void)
+{
+    _assert_dns_searches(TRUE, "example.com", NULL);
+    _assert_dns_searches(TRUE, "sub.example.com", NULL);
+    _assert_dns_searches(TRUE, "example.com", "sub.example.com", NULL);
+    _assert_dns_searches(FALSE, "example.com,sub.example.com", NULL);
+    _assert_dns_searches(FALSE, "example.com;sub.example.com", NULL);
+    _assert_dns_searches(FALSE, "example.com sub.example.com", NULL);
+}
+
 /*****************************************************************************/
 
 static void
@@ -5787,6 +5825,7 @@ main(int argc, char **argv)
     g_test_add_func("/libnm/settings/6lowpan/1", test_6lowpan_1);
 
     g_test_add_func("/libnm/settings/dns", test_settings_dns);
+    g_test_add_func("/libnm/settings/dns_search_domain", test_settings_dns_search_domains);
 
     g_test_add_func("/libnm/settings/sriov/vf", test_sriov_vf);
     g_test_add_func("/libnm/settings/sriov/vf-dup", test_sriov_vf_dup);
diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h
index e62d64e1..42bff04a 100644
--- a/src/libnm-core-public/nm-dbus-interface.h
+++ b/src/libnm-core-public/nm-dbus-interface.h
@@ -648,6 +648,8 @@ typedef enum {
  *   Since: 1.48
  * @NM_DEVICE_STATE_REASON_UNMANAGED_USER_UDEV: The device is unmanaged via udev rule. Since: 1.48
  * @NM_DEVICE_STATE_REASON_NETWORKING_OFF: NetworkManager was disabled (networking off). Since: 1.56
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_OPERATOR_CODE: The modem's operator code wasn't available,
+ *   and auto-configuration was requested. Since: 1.56
  *
  * Device state change reason codes
  */
@@ -732,6 +734,7 @@ typedef enum {
     NM_DEVICE_STATE_REASON_UNMANAGED_USER_SETTINGS        = 76,
     NM_DEVICE_STATE_REASON_UNMANAGED_USER_UDEV            = 77,
     NM_DEVICE_STATE_REASON_NETWORKING_OFF                 = 78,
+    NM_DEVICE_STATE_REASON_MODEM_NO_OPERATOR_CODE         = 79,
 } NMDeviceStateReason;
 
 /**
@@ -1457,6 +1460,16 @@ typedef enum /*< flags >*/ {
  *   any additional addresses using the MPTCP ADD_ADDR sub-option, this will behave the same
  *   as a plain subflow endpoint. When the peer does announce addresses, each received ADD_ADDR
  *   sub-option will trigger creation of an additional subflow to generate a full mesh topology.
+ * @NM_MPTCP_FLAGS_LAMINAR: Flag for the MPTCP endpoint. The endpoint will be
+ *   used to create new subflows from the associated address to additional
+ *   addresses announced by the other peer. This will be done if allowed by the
+ *   MPTCP limits, and if the associated address is not already being used by
+ *   another subflow from the same MPTCP connection. Note that the 'fullmesh'
+ *   flag takes precedence over the 'laminar' one. Without any of these two
+ *   flags, the path-manager will create new subflows to additional addresses
+ *   announced by the other peer by selecting the source address from the
+ *   routing tables, which is harder to configure if the announced address is
+ *   not known in advance. Since: 1.56
  *
  * Since: 1.40
  */
@@ -1473,6 +1486,7 @@ typedef enum /*< flags >*/ {
     NM_MPTCP_FLAGS_SUBFLOW  = 0x20,
     NM_MPTCP_FLAGS_BACKUP   = 0x40,
     NM_MPTCP_FLAGS_FULLMESH = 0x80,
+    NM_MPTCP_FLAGS_LAMINAR  = 0x100,
 } NMMptcpFlags;
 
 /* For secrets requests, hints starting with "x-vpn-message:" are a message to show, not
diff --git a/src/libnm-core-public/nm-errors.h b/src/libnm-core-public/nm-errors.h
index 11ce25f1..1cf238c0 100644
--- a/src/libnm-core-public/nm-errors.h
+++ b/src/libnm-core-public/nm-errors.h
@@ -256,6 +256,11 @@ GQuark nm_secret_agent_error_quark(void);
  * @NM_SETTINGS_ERROR_NOT_SUPPORTED_BY_PLUGIN: the requested operation is not
  *   supported by the settings plugin currently in use for the specified object.
  *   Since: 1.44.
+ * @NM_SETTINGS_ERROR_FEATURE_DISABLED: the requested operation failed because it
+ *   requires a feature that is disabled in this build of NetworkManager.
+ *   Since: 1.56
+ * @NM_SETTINGS_ERROR_FEATURE_REMOVED: the requested operation failed because it
+ *   requires a feature that is no longer supported. Since: 1.56
  *
  * Errors related to the settings/persistent configuration interface of
  * NetworkManager.
@@ -275,6 +280,8 @@ typedef enum {
     NM_SETTINGS_ERROR_INVALID_ARGUMENTS,       /*< nick=InvalidArguments >*/
     NM_SETTINGS_ERROR_VERSION_ID_MISMATCH,     /*< nick=VersionIdMismatch >*/
     NM_SETTINGS_ERROR_NOT_SUPPORTED_BY_PLUGIN, /*< nick=NotSupportedByPlugin >*/
+    NM_SETTINGS_ERROR_FEATURE_DISABLED,        /*< nick=FeatureDisabled >*/
+    NM_SETTINGS_ERROR_FEATURE_REMOVED,         /*< nick=FeatureRemoved >*/
 } NMSettingsError;
 
 GQuark nm_settings_error_quark(void);
diff --git a/src/libnm-core-public/nm-setting-connection.h b/src/libnm-core-public/nm-setting-connection.h
index 6547c5be..51cf99fb 100644
--- a/src/libnm-core-public/nm-setting-connection.h
+++ b/src/libnm-core-public/nm-setting-connection.h
@@ -60,6 +60,7 @@ G_BEGIN_DECLS
 #define NM_SETTING_CONNECTION_MDNS                          "mdns"
 #define NM_SETTING_CONNECTION_LLMNR                         "llmnr"
 #define NM_SETTING_CONNECTION_DNS_OVER_TLS                  "dns-over-tls"
+#define NM_SETTING_CONNECTION_DNSSEC                        "dnssec"
 #define NM_SETTING_CONNECTION_MPTCP_FLAGS                   "mptcp-flags"
 #define NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT           "wait-device-timeout"
 #define NM_SETTING_CONNECTION_MUD_URL                       "mud-url"
@@ -163,6 +164,24 @@ typedef enum {
 } NMSettingConnectionDnsOverTls;
 
 /**
+ * NMSettingConnectionDnssec:
+ * @NM_SETTING_CONNECTION_DNSSEC_DEFAULT: default value
+ * @NM_SETTING_CONNECTION_DNSSEC_NO: disable DNSSEC
+ * @NM_SETTING_CONNECTION_DNSSEC_ALLOW_DOWNGRADE: enable DNSSEC but allow fallback to non-DNSSEC mode
+ * @NM_SETTING_CONNECTION_DNSSEC_YES: force enable DNSSEC
+ *
+ * #NMSettingConnectionDnssec values indicate whether DNSSEC should be enabled.
+ *
+ * Since: 1.56
+ */
+typedef enum {
+    NM_SETTING_CONNECTION_DNSSEC_DEFAULT         = -1,
+    NM_SETTING_CONNECTION_DNSSEC_NO              = 0,
+    NM_SETTING_CONNECTION_DNSSEC_ALLOW_DOWNGRADE = 1,
+    NM_SETTING_CONNECTION_DNSSEC_YES             = 2,
+} NMSettingConnectionDnssec;
+
+/**
  * NMSettingConnectionDownOnPoweroff:
  * @NM_SETTING_CONNECTION_DOWN_ON_POWEROFF_DEFAULT: default value
  * @NM_SETTING_CONNECTION_DOWN_ON_POWEROFF_NO: disable down-on-poweroff
@@ -304,6 +323,9 @@ void nm_setting_connection_clear_ip_ping_addresses(NMSettingConnection *setting)
 NM_AVAILABLE_IN_1_52
 NMTernary nm_setting_connection_get_ip_ping_addresses_require_all(NMSettingConnection *setting);
 
+NM_AVAILABLE_IN_1_56
+NMSettingConnectionDnssec nm_setting_connection_get_dnssec(NMSettingConnection *setting);
+
 G_END_DECLS
 
 #endif /* __NM_SETTING_CONNECTION_H__ */
diff --git a/src/libnm-core-public/nm-setting-gsm.h b/src/libnm-core-public/nm-setting-gsm.h
index c8663502..4f71f70e 100644
--- a/src/libnm-core-public/nm-setting-gsm.h
+++ b/src/libnm-core-public/nm-setting-gsm.h
@@ -50,6 +50,7 @@ G_BEGIN_DECLS
 #define NM_SETTING_GSM_INITIAL_EPS_BEARER_REFUSE_CHAP     "initial-eps-bearer-refuse-chap"
 #define NM_SETTING_GSM_INITIAL_EPS_BEARER_REFUSE_MSCHAP   "initial-eps-bearer-refuse-mschap"
 #define NM_SETTING_GSM_INITIAL_EPS_BEARER_REFUSE_MSCHAPV2 "initial-eps-bearer-refuse-mschapv2"
+#define NM_SETTING_GSM_DEVICE_UID                         "device-uid"
 
 /* Deprecated */
 #define NM_SETTING_GSM_NUMBER "number"
@@ -99,6 +100,8 @@ gboolean nm_setting_gsm_get_initial_eps_refuse_mschap(NMSettingGsm *setting);
 NM_AVAILABLE_IN_1_52
 gboolean nm_setting_gsm_get_initial_eps_refuse_mschapv2(NMSettingGsm *setting);
 
+const char *nm_setting_gsm_get_device_uid(NMSettingGsm *setting);
+
 NM_DEPRECATED_IN_1_16
 const char *nm_setting_gsm_get_number(NMSettingGsm *setting);
 
diff --git a/src/libnm-core-public/nm-setting-hsr.h b/src/libnm-core-public/nm-setting-hsr.h
index 414f2b34..3110bd9a 100644
--- a/src/libnm-core-public/nm-setting-hsr.h
+++ b/src/libnm-core-public/nm-setting-hsr.h
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
  *
  * #NMSettingHsrProtocolVersion values indicate the HSR protocol version.
  *
- * Since: 1.56, 1.54.2
+ * Since: 1.56
  */
 typedef enum {
     NM_SETTING_HSR_PROTOCOL_VERSION_DEFAULT  = -1,
@@ -61,9 +61,9 @@ NM_AVAILABLE_IN_1_46
 guint32 nm_setting_hsr_get_multicast_spec(NMSettingHsr *setting);
 NM_AVAILABLE_IN_1_46
 gboolean nm_setting_hsr_get_prp(NMSettingHsr *setting);
-NM_AVAILABLE_IN_1_54_2
+NM_AVAILABLE_IN_1_56
 NMSettingHsrProtocolVersion nm_setting_hsr_get_protocol_version(NMSettingHsr *setting);
-NM_AVAILABLE_IN_1_54_2
+NM_AVAILABLE_IN_1_56
 const char *nm_setting_hsr_get_interlink(NMSettingHsr *setting);
 
 G_END_DECLS
diff --git a/src/libnm-core-public/nm-setting-ip-config.h b/src/libnm-core-public/nm-setting-ip-config.h
index 625b941f..de05325f 100644
--- a/src/libnm-core-public/nm-setting-ip-config.h
+++ b/src/libnm-core-public/nm-setting-ip-config.h
@@ -567,6 +567,9 @@ int nm_setting_ip_config_get_shared_dhcp_lease_time(NMSettingIPConfig *setting);
 NM_AVAILABLE_IN_1_54
 NMSettingIPConfigForwarding nm_setting_ip_config_get_forwarding(NMSettingIPConfig *setting);
 
+NM_AVAILABLE_IN_1_56
+gboolean nm_dns_server_validate(const char *str, int family, GError **error);
+
 G_END_DECLS
 
 #endif /* NM_SETTING_IP_CONFIG_H */
diff --git a/src/libnm-core-public/nm-utils.h b/src/libnm-core-public/nm-utils.h
index dd7977a1..e46bf472 100644
--- a/src/libnm-core-public/nm-utils.h
+++ b/src/libnm-core-public/nm-utils.h
@@ -261,7 +261,7 @@ nm_utils_base64secret_decode(const char *base64_key, gsize required_key_len, gui
 NM_AVAILABLE_IN_1_42
 void nm_utils_ensure_gtypes(void);
 
-NM_AVAILABLE_IN_1_54_3
+NM_AVAILABLE_IN_1_56
 char *nm_utils_copy_cert_as_user(const char *filename, const char *user, GError **error);
 
 G_END_DECLS
diff --git a/src/libnm-core-public/nm-version-macros.h.in b/src/libnm-core-public/nm-version-macros.h.in
index 9771944d..b8b89a44 100644
--- a/src/libnm-core-public/nm-version-macros.h.in
+++ b/src/libnm-core-public/nm-version-macros.h.in
@@ -78,20 +78,19 @@
 #define NM_VERSION_1_50   (NM_ENCODE_VERSION(1, 50, 0))
 #define NM_VERSION_1_52   (NM_ENCODE_VERSION(1, 52, 0))
 #define NM_VERSION_1_54   (NM_ENCODE_VERSION(1, 54, 0))
-#define NM_VERSION_1_54_2 (NM_ENCODE_VERSION(1, 54, 2))
-#define NM_VERSION_1_54_3 (NM_ENCODE_VERSION(1, 54, 3))
+#define NM_VERSION_1_56   (NM_ENCODE_VERSION(1, 56, 0))
 
 /* For releases, NM_API_VERSION is equal to NM_VERSION.
  *
- * For development builds, NM_API_VERSION is the next
- * stable API after NM_VERSION. When you run a development
+ * For development and RC builds, NM_API_VERSION is the next
+ * stable API after NM_VERSION. When you run a devel or RC
  * version, you are already using the future API, even if
  * it is not yet released. Hence, the currently used API
  * version is the future one.  */
 #define NM_API_VERSION                                                  \
     (((NM_MINOR_VERSION % 2) == 1)                                      \
          ? NM_ENCODE_VERSION(NM_MAJOR_VERSION, NM_MINOR_VERSION + 1, 0) \
-         : NM_ENCODE_VERSION(NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION + 1))
+         : NM_VERSION)
 
 /* deprecated. */
 #define NM_VERSION_CUR_STABLE NM_API_VERSION
diff --git a/src/libnm-core-public/nm-version.h b/src/libnm-core-public/nm-version.h
index 26ede654..af45b679 100644
--- a/src/libnm-core-public/nm-version.h
+++ b/src/libnm-core-public/nm-version.h
@@ -12,16 +12,16 @@
 
 /* Deprecation / Availability macros */
 
-#if !defined(NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
-#undef NM_VERSION_MIN_REQUIRED
-#define NM_VERSION_MIN_REQUIRED (NM_API_VERSION)
-#endif
-
 #if !defined(NM_VERSION_MAX_ALLOWED) || (NM_VERSION_MAX_ALLOWED == 0)
 #undef NM_VERSION_MAX_ALLOWED
 #define NM_VERSION_MAX_ALLOWED (NM_API_VERSION)
 #endif
 
+#if !defined(NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
+#undef NM_VERSION_MIN_REQUIRED
+#define NM_VERSION_MIN_REQUIRED (NM_VERSION_MAX_ALLOWED)
+#endif
+
 /* sanity checks */
 #if NM_VERSION_MIN_REQUIRED > NM_API_VERSION
 #error "NM_VERSION_MIN_REQUIRED must be <= NM_API_VERSION"
@@ -439,16 +439,18 @@
 #define NM_AVAILABLE_IN_1_54
 #endif
 
-#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_54_2
-#define NM_AVAILABLE_IN_1_54_2 G_UNAVAILABLE(1, 54.2)
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_56
+#define NM_DEPRECATED_IN_1_56        G_DEPRECATED
+#define NM_DEPRECATED_IN_1_56_FOR(f) G_DEPRECATED_FOR(f)
 #else
-#define NM_AVAILABLE_IN_1_54_2
+#define NM_DEPRECATED_IN_1_56
+#define NM_DEPRECATED_IN_1_56_FOR(f)
 #endif
 
-#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_54_3
-#define NM_AVAILABLE_IN_1_54_3 G_UNAVAILABLE(1, 54.3)
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_56
+#define NM_AVAILABLE_IN_1_56 G_UNAVAILABLE(1, 56)
 #else
-#define NM_AVAILABLE_IN_1_54_3
+#define NM_AVAILABLE_IN_1_56
 #endif
 
 /*
diff --git a/src/libnm-core-public/nm-vpn-plugin-info.h b/src/libnm-core-public/nm-vpn-plugin-info.h
index a6396862..0f2618ac 100644
--- a/src/libnm-core-public/nm-vpn-plugin-info.h
+++ b/src/libnm-core-public/nm-vpn-plugin-info.h
@@ -64,7 +64,7 @@ NM_AVAILABLE_IN_1_4
 gboolean nm_vpn_plugin_info_supports_hints(NMVpnPluginInfo *self);
 NM_AVAILABLE_IN_1_42
 gboolean nm_vpn_plugin_info_supports_multiple(NMVpnPluginInfo *self);
-NM_AVAILABLE_IN_1_54_3
+NM_AVAILABLE_IN_1_56
 gboolean nm_vpn_plugin_info_supports_safe_private_file_access(NMVpnPluginInfo *self);
 NM_AVAILABLE_IN_1_4
 const char *const *nm_vpn_plugin_info_get_aliases(NMVpnPluginInfo *self);
diff --git a/src/libnm-glib-aux/nm-io-utils.c b/src/libnm-glib-aux/nm-io-utils.c
index 9443172b..d26ecee4 100644
--- a/src/libnm-glib-aux/nm-io-utils.c
+++ b/src/libnm-glib-aux/nm-io-utils.c
@@ -415,8 +415,10 @@ nm_utils_file_get_contents(int                         dirfd,
 
 /*
  * Copied from GLib's g_file_set_contents() et al., but allows
- * specifying a mode for the new file and optionally the last access
- * and last modification times.
+ * specifying:
+ * - the file mode (@mode)
+ * - optionally, the last access and modification times (@times)
+ * - optionally, a fixed name for the temporary file (@tmp_name)
  */
 gboolean
 nm_utils_file_set_contents(const char            *filename,
@@ -424,10 +426,11 @@ nm_utils_file_set_contents(const char            *filename,
                            gssize                 length,
                            mode_t                 mode,
                            const struct timespec *times,
+                           const char            *tmp_name,
                            int                   *out_errsv,
                            GError               **error)
 {
-    gs_free char *tmp_name = NULL;
+    gs_free char *tmp_name_free = NULL;
     struct stat   statbuf;
     int           errsv;
     gssize        s;
@@ -442,8 +445,13 @@ nm_utils_file_set_contents(const char            *filename,
     if (length == -1)
         length = strlen(contents);
 
-    tmp_name = g_strdup_printf("%s.XXXXXX", filename);
-    fd       = g_mkstemp_full(tmp_name, O_RDWR | O_CLOEXEC, mode);
+    if (tmp_name) {
+        fd = open(tmp_name, O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC, mode);
+    } else {
+        tmp_name_free = g_strdup_printf("%s.XXXXXX", filename);
+        tmp_name      = tmp_name_free;
+        fd            = g_mkstemp_full(tmp_name_free, O_RDWR | O_CLOEXEC, mode);
+    }
     if (fd < 0) {
         return _get_contents_error_errno(error, out_errsv, "failed to create file %s", tmp_name);
     }
diff --git a/src/libnm-glib-aux/nm-io-utils.h b/src/libnm-glib-aux/nm-io-utils.h
index 0021138f..ff02ecb1 100644
--- a/src/libnm-glib-aux/nm-io-utils.h
+++ b/src/libnm-glib-aux/nm-io-utils.h
@@ -55,6 +55,7 @@ gboolean nm_utils_file_set_contents(const char            *filename,
                                     gssize                 length,
                                     mode_t                 mode,
                                     const struct timespec *times,
+                                    const char            *tmp_name,
                                     int                   *out_errsv,
                                     GError               **error);
 
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index 0c1097c2..cc5b99e0 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -59,6 +59,7 @@ G_STATIC_ASSERT(NM_MPTCP_PM_ADDR_FLAG_SUBFLOW == MPTCP_PM_ADDR_FLAG_SUBFLOW);
 G_STATIC_ASSERT(NM_MPTCP_PM_ADDR_FLAG_BACKUP == MPTCP_PM_ADDR_FLAG_BACKUP);
 G_STATIC_ASSERT(NM_MPTCP_PM_ADDR_FLAG_FULLMESH == MPTCP_PM_ADDR_FLAG_FULLMESH);
 G_STATIC_ASSERT(NM_MPTCP_PM_ADDR_FLAG_IMPLICIT == MPTCP_PM_ADDR_FLAG_IMPLICIT);
+G_STATIC_ASSERT(NM_MPTCP_PM_ADDR_FLAG_LAMINAR == MPTCP_PM_ADDR_FLAG_LAMINAR);
 
 /*****************************************************************************/
 
@@ -4014,6 +4015,7 @@ _new_from_nl_route(const struct nlmsghdr *nlh, gboolean id_only, ParseNlmsgIter
         [RTA_PREF]      = {.type = NLA_U8},
         [RTA_FLOW]      = {.type = NLA_U32},
         [RTA_CACHEINFO] = {.minlen = nm_offsetofend(struct rta_cacheinfo, rta_tsage)},
+        [RTA_VIA]       = {.minlen = nm_offsetofend(struct rtvia, rtvia_family)},
         [RTA_METRICS]   = {.type = NLA_NESTED},
         [RTA_MULTIPATH] = {.type = NLA_NESTED},
     };
@@ -4030,9 +4032,11 @@ _new_from_nl_route(const struct nlmsghdr *nlh, gboolean id_only, ParseNlmsgIter
         guint8   weight;
         int      ifindex;
         NMIPAddr gateway;
+        gboolean is_via;
     } nh = {
         .found    = FALSE,
         .has_more = FALSE,
+        .is_via   = FALSE,
     };
     guint                           v4_n_nexthops = 0;
     NMPlatformIP4RtNextHop          v4_nh_extra_nexthops_stack[10];
@@ -4201,13 +4205,26 @@ rta_multipath_done:
         return nm_assert_unreachable_val(NULL);
     }
 
-    if (tb[RTA_OIF] || tb[RTA_GATEWAY] || tb[RTA_FLOW]) {
+    if (tb[RTA_OIF] || tb[RTA_GATEWAY] || tb[RTA_FLOW] || tb[RTA_VIA]) {
         int      ifindex = 0;
         NMIPAddr gateway = {};
 
         if (tb[RTA_OIF])
             ifindex = nla_get_u32(tb[RTA_OIF]);
-        if (_check_addr_or_return_null(tb, RTA_GATEWAY, addr_len))
+
+        if (tb[RTA_VIA]) {
+            struct rtvia *rtvia;
+
+            /* Used when the gateway family doesn't match the route family */
+            rtvia = nla_data(tb[RTA_VIA]);
+            if (rtvia->rtvia_family != AF_INET6)
+                return NULL;
+            if (nla_len(tb[RTA_VIA]) < sizeof(struct rtvia) + sizeof(struct in6_addr))
+                return NULL;
+
+            nh.is_via = TRUE;
+            memcpy(&gateway, rtvia->rtvia_addr, sizeof(struct in6_addr));
+        } else if (_check_addr_or_return_null(tb, RTA_GATEWAY, addr_len))
             memcpy(&gateway, nla_data(tb[RTA_GATEWAY]), addr_len);
 
         if (!nh.found) {
@@ -4223,6 +4240,9 @@ rta_multipath_done:
         } else {
             /* Kernel supports new style nexthop configuration,
              * verify that it is a duplicate and ignore old-style nexthop. */
+            if (nh.is_via)
+                return NULL;
+
             if (nh.ifindex != ifindex || memcmp(&nh.gateway, &gateway, addr_len) != 0) {
                 /* we have a RTA_MULTIPATH attribute that does not agree.
                  * That seems not right. Error out. */
@@ -4238,7 +4258,7 @@ rta_multipath_done:
          * 1 (lo). Of course it does!! */
         if (nh.found) {
             if (IS_IPv4) {
-                if (nh.ifindex != 0 || nh.gateway.addr4 != 0) {
+                if (nh.ifindex != 0 || nh.gateway.addr4 != 0 || nh.is_via) {
                     /* we only accept kernel to notify about the ifindex/gateway, if it
                      * is zero. This is only to be a bit forgiving, but we really don't
                      * know how to handle such routes that have an ifindex. */
@@ -4337,9 +4357,14 @@ rta_multipath_done:
     if (tb[RTA_PRIORITY])
         obj->ip_route.metric = nla_get_u32(tb[RTA_PRIORITY]);
 
-    if (IS_IPv4)
-        obj->ip4_route.gateway = nh.gateway.addr4;
-    else
+    if (IS_IPv4) {
+        if (nh.is_via) {
+            obj->ip4_route.via.addr_family = AF_INET6;
+            obj->ip4_route.via.addr        = nh.gateway;
+        } else {
+            obj->ip4_route.gateway = nh.gateway.addr4;
+        }
+    } else
         obj->ip6_route.gateway = nh.gateway.addr6;
 
     if (IS_IPv4)
@@ -5838,7 +5863,24 @@ _nl_msg_new_route(uint16_t nlmsg_type, uint16_t nlmsg_flags, const NMPObject *ob
 
     /* We currently don't have need for multi-hop routes... */
     if (IS_IPv4) {
-        NLA_PUT(msg, RTA_GATEWAY, addr_len, &obj->ip4_route.gateway);
+        if (obj->ip4_route.gateway == INADDR_ANY && obj->ip4_route.via.addr_family != AF_UNSPEC) {
+            struct rtvia *rtvia;
+
+            nm_assert(obj->ip4_route.via.addr_family == AF_INET6);
+
+            rtvia = nla_data(nla_reserve(
+                msg,
+                RTA_VIA,
+                sizeof(*rtvia) + nm_utils_addr_family_to_size(obj->ip4_route.via.addr_family)));
+            if (!rtvia)
+                goto nla_put_failure;
+            rtvia->rtvia_family = obj->ip4_route.via.addr_family;
+            memcpy(rtvia->rtvia_addr,
+                   obj->ip4_route.via.addr.addr_ptr,
+                   nm_utils_addr_family_to_size(obj->ip4_route.via.addr_family));
+        } else {
+            NLA_PUT(msg, RTA_GATEWAY, addr_len, &obj->ip4_route.gateway);
+        }
     } else {
         if (!IN6_IS_ADDR_UNSPECIFIED(&obj->ip6_route.gateway))
             NLA_PUT(msg, RTA_GATEWAY, addr_len, &obj->ip6_route.gateway);
diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c
index 33c763c3..853157d2 100644
--- a/src/libnm-platform/nm-platform.c
+++ b/src/libnm-platform/nm-platform.c
@@ -7206,7 +7206,7 @@ nm_platform_ip4_route_to_string_full(const NMPlatformIP4Route     *route,
 {
     char *buf0;
     char  s_network[INET_ADDRSTRLEN];
-    char  s_gateway[INET_ADDRSTRLEN];
+    char  s_gateway[INET6_ADDRSTRLEN];
     char  s_pref_src[INET_ADDRSTRLEN];
     char  str_dev[30];
     char  str_mss[32];
@@ -7235,10 +7235,13 @@ nm_platform_ip4_route_to_string_full(const NMPlatformIP4Route     *route,
 
     inet_ntop(AF_INET, &route->network, s_network, sizeof(s_network));
 
-    if (route->gateway == 0)
-        s_gateway[0] = '\0';
-    else
+    if (route->gateway != INADDR_ANY) {
         inet_ntop(AF_INET, &route->gateway, s_gateway, sizeof(s_gateway));
+    } else if (route->via.addr_family == AF_INET6) {
+        inet_ntop(AF_INET6, route->via.addr.addr_ptr, s_gateway, sizeof(s_gateway));
+    } else {
+        s_gateway[0] = '\0';
+    }
 
     nm_strbuf_append(
         &buf,
@@ -7979,7 +7982,8 @@ static NM_UTILS_FLAGS2STR_DEFINE(_mptcp_flags_to_string,
                                  NM_UTILS_FLAGS2STR(NM_MPTCP_PM_ADDR_FLAG_SIGNAL, "signal"),
                                  NM_UTILS_FLAGS2STR(NM_MPTCP_PM_ADDR_FLAG_SUBFLOW, "subflow"),
                                  NM_UTILS_FLAGS2STR(NM_MPTCP_PM_ADDR_FLAG_BACKUP, "backup"),
-                                 NM_UTILS_FLAGS2STR(NM_MPTCP_PM_ADDR_FLAG_FULLMESH, "fullmesh"));
+                                 NM_UTILS_FLAGS2STR(NM_MPTCP_PM_ADDR_FLAG_FULLMESH, "fullmesh"),
+                                 NM_UTILS_FLAGS2STR(NM_MPTCP_PM_ADDR_FLAG_LAMINAR, "laminar"));
 
 const char *
 nm_platform_mptcp_addr_to_string(const NMPlatformMptcpAddr *mptcp_addr, char *buf, gsize len)
@@ -8978,6 +8982,9 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj,
                 nm_hash_update_vals(h,
                                     obj->ifindex,
                                     n_nexthops,
+                                    obj->via.addr_family,
+                                    obj->via.addr_family == AF_INET6 ? obj->via.addr.addr6
+                                                                     : in6addr_any,
                                     obj->gateway,
                                     _ip4_route_weight_normalize(n_nexthops, obj->weight, FALSE));
             }
@@ -9128,6 +9135,10 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a,
             if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) {
                 NM_CMP_FIELD(a, b, ifindex);
                 NM_CMP_FIELD(a, b, gateway);
+                NM_CMP_FIELD(a, b, via.addr_family);
+                if (a->via.addr_family == AF_INET6) {
+                    NM_CMP_FIELD_IN6ADDR(a, b, via.addr.addr6);
+                }
                 n_nexthops = nm_platform_ip4_route_get_n_nexthops(a);
                 NM_CMP_DIRECT(n_nexthops, nm_platform_ip4_route_get_n_nexthops(b));
                 NM_CMP_DIRECT(_ip4_route_weight_normalize(n_nexthops, a->weight, FALSE),
@@ -9153,6 +9164,10 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a,
         NM_CMP_FIELD_UNSAFE(a, b, metric_any);
         NM_CMP_FIELD(a, b, metric);
         NM_CMP_FIELD(a, b, gateway);
+        NM_CMP_FIELD(a, b, via.addr_family);
+        if (a->via.addr_family == AF_INET6) {
+            NM_CMP_FIELD_IN6ADDR(a, b, via.addr.addr6);
+        }
         if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) {
             n_nexthops = nm_platform_ip4_route_get_n_nexthops(a);
             NM_CMP_DIRECT(n_nexthops, nm_platform_ip4_route_get_n_nexthops(b));
diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h
index a63f40c7..033dc515 100644
--- a/src/libnm-platform/nm-platform.h
+++ b/src/libnm-platform/nm-platform.h
@@ -46,6 +46,7 @@ typedef gboolean (*NMPObjectPredicateFunc)(const NMPObject *obj, gpointer user_d
 #define NM_MPTCP_PM_ADDR_FLAG_BACKUP   ((guint32) (1 << 2))
 #define NM_MPTCP_PM_ADDR_FLAG_FULLMESH ((guint32) (1 << 3))
 #define NM_MPTCP_PM_ADDR_FLAG_IMPLICIT ((guint32) (1 << 4))
+#define NM_MPTCP_PM_ADDR_FLAG_LAMINAR  ((guint32) (1 << 5))
 
 /* Redefine this in host's endianness */
 #define NM_GRE_KEY 0x2000
@@ -443,6 +444,12 @@ struct _NMPlatformIP4Route {
      * the first hop. */
     in_addr_t gateway;
 
+    /* RTA_VIA. Part of the primary key for a route. Allows a gateway for a
+     * route to exist in a different address family.
+     * Only valid if: n_nexthops == 1, gateway == 0, via.family != AF_UNSPEC
+     */
+    NMIPAddrTyped via;
+
     /* RTA_PREFSRC (called "src" by iproute2).
      *
      * pref_src is part of the ID of an IPv4 route. When deleting a route,
@@ -2406,6 +2413,14 @@ nm_platform_ip_route_get_gateway(int addr_family, const NMPlatformIPRoute *route
     return &((NMPlatformIP6Route *) route)->gateway;
 }
 
+static inline const NMIPAddrTyped *
+nm_platform_ip4_route_get_via(const NMPlatformIP4Route *route)
+{
+    nm_assert(route);
+
+    return &route->via;
+}
+
 static inline gconstpointer
 nm_platform_ip_route_get_pref_src(int addr_family, const NMPlatformIPRoute *route)
 {
diff --git a/src/libnm-platform/nmp-ethtool.c b/src/libnm-platform/nmp-ethtool.c
index ed028f6a..28d12ffb 100644
--- a/src/libnm-platform/nmp-ethtool.c
+++ b/src/libnm-platform/nmp-ethtool.c
@@ -153,7 +153,7 @@ ethtool_send_and_recv(struct nl_sock *sock,
 
 out:
     if (nle < 0 && err_msg && *err_msg == NULL)
-        *err_msg = strdup(nm_strerror(nle));
+        *err_msg = g_strdup(nm_strerror(nle));
 
     if (nle >= 0 && cb_result < 0)
         nle = cb_result;
diff --git a/src/libnm-platform/nmp-object.c b/src/libnm-platform/nmp-object.c
index e11bfb3f..56533c99 100644
--- a/src/libnm-platform/nmp-object.c
+++ b/src/libnm-platform/nmp-object.c
@@ -893,7 +893,7 @@ const NMPObject *
 nmp_object_stackinit_id_ip6_address(NMPObject *obj, int ifindex, const struct in6_addr *address)
 {
     _nmp_object_stackinit_from_type(obj, NMP_OBJECT_TYPE_IP6_ADDRESS);
-    obj->ip4_address.ifindex = ifindex;
+    obj->ip6_address.ifindex = ifindex;
     if (address)
         obj->ip6_address.address = *address;
     return obj;
diff --git a/src/libnm-systemd-core/meson.build b/src/libnm-systemd-core/meson.build
index 15e1c8a6..00d8a77b 100644
--- a/src/libnm-systemd-core/meson.build
+++ b/src/libnm-systemd-core/meson.build
@@ -12,6 +12,7 @@ libnm_systemd_core = static_library(
     'src/libsystemd-network/sd-dhcp6-lease.c',
     'src/libsystemd/sd-device/device-private.c',
     'src/libsystemd/sd-device/sd-device.c',
+    'src/libsystemd/sd-device/device-util.c',
     'src/libsystemd/sd-event/event-util.c',
     'src/libsystemd/sd-event/sd-event.c',
     'src/libsystemd/sd-id128/id128-util.c',
diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h
index ecd62ea8..2ef8dc86 100644
--- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h
+++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h
@@ -8,8 +8,8 @@
 #include <net/ethernet.h>
 #include <netinet/in.h>
 
-#include "sd-event.h"
 #include "sd-dhcp6-client.h"
+#include "sd-event.h"
 
 #include "dhcp-duid-internal.h"
 #include "dhcp6-client-internal.h"
diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h
index 60cd84f2..62c38588 100644
--- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h
+++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h
@@ -8,10 +8,10 @@
 #include <inttypes.h>
 
 #include "sd-dhcp6-lease.h"
-#include "dns-resolver-internal.h"
 
 #include "dhcp6-option.h"
 #include "dhcp6-protocol.h"
+#include "dns-resolver-internal.h"
 #include "macro.h"
 #include "set.h"
 #include "time-util.h"
diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c
index 03732692..1c695a87 100644
--- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c
+++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c
@@ -6,13 +6,13 @@
 #include "nm-sd-adapt-core.h"
 
 #include <errno.h>
+#include <linux/if_packet.h>
 #include <netinet/in.h>
 #include <netinet/ip6.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
 #include <unistd.h>
-#include <linux/if_packet.h>
 
 #include "dhcp6-internal.h"
 #include "dhcp6-protocol.h"
diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c
index 5655c0d7..a7cd6a24 100644
--- a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c
@@ -6,11 +6,11 @@
 #include "nm-sd-adapt-core.h"
 
 #include <errno.h>
-#include <sys/ioctl.h>
 #ifdef __GLIBC__
 #include <linux/if_arp.h>
 #endif
 #include <linux/if_infiniband.h>
+#include <sys/ioctl.h>
 
 #include "sd-dhcp6-client.h"
 
@@ -1295,7 +1295,8 @@ static int client_receive_message(
 
         sd_dhcp6_client *client = ASSERT_PTR(userdata);
         DHCP6_CLIENT_DONT_DESTROY(client);
-        /* This needs to be initialized with zero. See #20741. */
+        /* This needs to be initialized with zero. See #20741.
+         * The issue is fixed on glibc-2.35 (8fba672472ae0055387e9315fc2eddfa6775ca79). */
         CMSG_BUFFER_TYPE(CMSG_SPACE_TIMEVAL) control = {};
         struct iovec iov;
         union sockaddr_union sa = {};
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-device/device-internal.h b/src/libnm-systemd-core/src/libsystemd/sd-device/device-internal.h
index a465eb25..cbd89849 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-device/device-internal.h
+++ b/src/libnm-systemd-core/src/libsystemd/sd-device/device-internal.h
@@ -13,6 +13,43 @@
 struct sd_device {
         unsigned n_ref;
 
+        /* syspath */
+        char *syspath;
+        const char *devpath;
+        const char *sysnum;
+        char *sysname;
+
+        /* only set when device is passed through netlink */
+        sd_device_action_t action;
+        uint64_t seqnum;
+
+        /* basic kernel properties */
+        char *subsystem;
+        char *driver_subsystem; /* only set for the 'drivers' subsystem */
+        char *driver;
+        char *devtype;
+
+        /* device node properties */
+        char *devname;
+        dev_t devnum;
+        mode_t devmode;
+        uid_t devuid;
+        gid_t devgid;
+
+        /* block device properties */
+        uint64_t diskseq; /* Block device sequence number, monothonically incremented by the kernel on create/attach */
+
+        /* network interface properties */
+        int ifindex;
+
+        /* determined by devnnum, ifindex, subsystem, and sysname */
+        char *device_id;
+
+        /* sysfs attributes */
+        Hashmap *sysattr_values; /* cached sysattr values */
+        Set *sysattrs; /* names of sysattrs */
+        Iterator sysattrs_iterator;
+
         /* The database version indicates the supported features by the udev database.
          * This is saved and parsed in V field.
          *
@@ -21,68 +58,38 @@ struct sd_device {
          */
         unsigned database_version;
 
-        sd_device *parent;
+        /* when device is initialized by udevd */
+        usec_t usec_initialized;
 
-        OrderedHashmap *properties;
+        /* properties */
+        OrderedHashmap *properties; /* all properties set from uevent and by udevd */
         Iterator properties_iterator;
         uint64_t properties_generation; /* changes whenever the properties are changed */
         uint64_t properties_iterator_generation; /* generation when iteration was started */
+        OrderedHashmap *properties_db; /* the subset of the properties that should be written to the db */
+        char **properties_strv; /* the properties hashmap as a strv */
+        char *properties_nulstr; /* the same as a nulstr */
+        size_t properties_nulstr_len;
 
-        /* the subset of the properties that should be written to the db */
-        OrderedHashmap *properties_db;
-
-        Hashmap *sysattr_values; /* cached sysattr values */
-
-        Set *sysattrs; /* names of sysattrs */
-        Iterator sysattrs_iterator;
-
+        /* TAG keyword */
         Set *all_tags, *current_tags;
         Iterator all_tags_iterator, current_tags_iterator;
         uint64_t all_tags_iterator_generation, current_tags_iterator_generation; /* generation when iteration was started */
         uint64_t tags_generation; /* changes whenever the tags are changed */
 
+        /* SYMLINK keyword */
         Set *devlinks;
         Iterator devlinks_iterator;
         uint64_t devlinks_generation; /* changes whenever the devlinks are changed */
         uint64_t devlinks_iterator_generation; /* generation when iteration was started */
         int devlink_priority;
 
+        /* parent and child devices */
+        sd_device *parent;
         Hashmap *children;
         Iterator children_iterator;
         bool children_enumerated;
 
-        int ifindex;
-        char *devtype;
-        char *devname;
-        dev_t devnum;
-
-        char **properties_strv; /* the properties hashmap as a strv */
-        char *properties_nulstr; /* the same as a nulstr */
-        size_t properties_nulstr_len;
-
-        char *syspath;
-        const char *devpath;
-        const char *sysnum;
-        char *sysname;
-
-        char *subsystem;
-        char *driver_subsystem; /* only set for the 'drivers' subsystem */
-        char *driver;
-
-        char *device_id;
-
-        usec_t usec_initialized;
-
-        mode_t devmode;
-        uid_t devuid;
-        gid_t devgid;
-
-        uint64_t diskseq; /* Block device sequence number, monothonically incremented by the kernel on create/attach */
-
-        /* only set when device is passed through netlink */
-        sd_device_action_t action;
-        uint64_t seqnum;
-
         bool parent_set:1; /* no need to try to reload parent */
         bool sysattrs_read:1; /* don't try to re-read sysattrs once read */
         bool property_tags_outdated:1; /* need to update TAGS= or CURRENT_TAGS= property */
@@ -92,7 +99,6 @@ struct sd_device {
         bool driver_set:1; /* don't reread driver */
         bool uevent_loaded:1; /* don't reread uevent */
         bool db_loaded; /* don't reread db */
-
         bool is_initialized:1;
         bool sealed:1; /* don't read more information from uevent/db */
         bool db_persist:1; /* don't clean up the db when switching from initrd to real root */
@@ -106,6 +112,8 @@ static inline int device_add_property_internal(sd_device *device, const char *ke
 
 int device_set_syspath(sd_device *device, const char *_syspath, bool verify);
 int device_set_ifindex(sd_device *device, const char *ifindex);
+int device_set_devuid(sd_device *device, const char *uid);
+int device_set_devgid(sd_device *device, const char *gid);
 int device_set_devmode(sd_device *device, const char *devmode);
 int device_set_devname(sd_device *device, const char *devname);
 int device_set_devtype(sd_device *device, const char *devtype);
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.c b/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.c
index 6b17e772..aa73184d 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.c
+++ b/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.c
@@ -119,6 +119,10 @@ int device_get_devnode_mode(sd_device *device, mode_t *ret) {
 
         assert(device);
 
+        r = device_read_uevent_file(device);
+        if (r < 0)
+                return r;
+
         r = device_read_db(device);
         if (r < 0)
                 return r;
@@ -137,6 +141,10 @@ int device_get_devnode_uid(sd_device *device, uid_t *ret) {
 
         assert(device);
 
+        r = device_read_uevent_file(device);
+        if (r < 0)
+                return r;
+
         r = device_read_db(device);
         if (r < 0)
                 return r;
@@ -150,7 +158,9 @@ int device_get_devnode_uid(sd_device *device, uid_t *ret) {
         return 0;
 }
 
-static int device_set_devuid(sd_device *device, const char *uid) {
+#endif  /* NM_IGNORED */
+
+int device_set_devuid(sd_device *device, const char *uid) {
         uid_t u;
         int r;
 
@@ -175,6 +185,10 @@ int device_get_devnode_gid(sd_device *device, gid_t *ret) {
 
         assert(device);
 
+        r = device_read_uevent_file(device);
+        if (r < 0)
+                return r;
+
         r = device_read_db(device);
         if (r < 0)
                 return r;
@@ -188,7 +202,7 @@ int device_get_devnode_gid(sd_device *device, gid_t *ret) {
         return 0;
 }
 
-static int device_set_devgid(sd_device *device, const char *gid) {
+int device_set_devgid(sd_device *device, const char *gid) {
         gid_t g;
         int r;
 
@@ -208,6 +222,8 @@ static int device_set_devgid(sd_device *device, const char *gid) {
         return 0;
 }
 
+#if 0  /* NM_IGNORED */
+
 int device_set_action(sd_device *device, sd_device_action_t a) {
         int r;
 
@@ -432,10 +448,11 @@ static int device_verify(sd_device *device) {
                 return log_device_debug_errno(device, SYNTHETIC_ERRNO(EINVAL),
                                               "sd-device: Device created from strv or nulstr lacks devpath, subsystem, action or seqnum.");
 
-        if (streq(device->subsystem, "drivers")) {
+        if (device_in_subsystem(device, "drivers")) {
                 r = device_set_drivers_subsystem(device);
                 if (r < 0)
-                        return r;
+                        return log_device_debug_errno(device, r,
+                                                      "sd-device: Failed to set driver subsystem: %m");
         }
 
         device->sealed = true;
@@ -682,8 +699,8 @@ int device_clone_with_db(sd_device *device, sd_device **ret) {
 void device_cleanup_tags(sd_device *device) {
         assert(device);
 
-        device->all_tags = set_free_free(device->all_tags);
-        device->current_tags = set_free_free(device->current_tags);
+        device->all_tags = set_free(device->all_tags);
+        device->current_tags = set_free(device->current_tags);
         device->property_tags_outdated = true;
         device->tags_generation++;
 }
@@ -691,7 +708,7 @@ void device_cleanup_tags(sd_device *device) {
 void device_cleanup_devlinks(sd_device *device) {
         assert(device);
 
-        set_free_free(device->devlinks);
+        set_free(device->devlinks);
         device->devlinks = NULL;
         device->property_devlinks_outdated = true;
         device->devlinks_generation++;
@@ -955,8 +972,4 @@ static const char* const device_action_table[_SD_DEVICE_ACTION_MAX] = {
 };
 
 DEFINE_STRING_TABLE_LOOKUP(device_action, sd_device_action_t);
-
-void dump_device_action_table(void) {
-        DUMP_STRING_TABLE(device_action, sd_device_action_t, _SD_DEVICE_ACTION_MAX);
-}
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.h b/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.h
index eab54203..e07ca602 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.h
+++ b/src/libnm-systemd-core/src/libsystemd/sd-device/device-private.h
@@ -9,6 +9,7 @@
 
 #include "sd-device.h"
 
+#include "chase.h"
 #include "macro.h"
 
 int device_new_from_mode_and_devnum(sd_device **ret, mode_t mode, dev_t devnum);
@@ -17,8 +18,10 @@ int device_new_from_strv(sd_device **ret, char **strv);
 
 int device_opendir(sd_device *device, const char *subdir, DIR **ret);
 
+int device_get_sysnum_unsigned(sd_device *device, unsigned *ret);
 int device_get_property_bool(sd_device *device, const char *key);
 int device_get_property_int(sd_device *device, const char *key, int *ret);
+int device_get_ifname(sd_device *device, const char **ret);
 int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret_value);
 int device_get_sysattr_unsigned_full(sd_device *device, const char *sysattr, unsigned base, unsigned *ret_value);
 static inline int device_get_sysattr_unsigned(sd_device *device, const char *sysattr, unsigned *ret_value) {
@@ -31,9 +34,11 @@ int device_get_devnode_mode(sd_device *device, mode_t *ret);
 int device_get_devnode_uid(sd_device *device, uid_t *ret);
 int device_get_devnode_gid(sd_device *device, gid_t *ret);
 
+#if 0  /* NM_IGNORED */
+int device_chase(sd_device *device, const char *path, ChaseFlags flags, char **ret_resolved, int *ret_fd);
 void device_clear_sysattr_cache(sd_device *device);
-int device_cache_sysattr_value(sd_device *device, const char *key, char *value);
-int device_get_cached_sysattr_value(sd_device *device, const char *key, const char **ret_value);
+int device_cache_sysattr_value(sd_device *device, char *key, char *value, int error);
+#endif  /* NM_IGNORED */
 
 void device_seal(sd_device *device);
 void device_set_is_initialized(sd_device *device);
@@ -76,4 +81,3 @@ int device_read_uevent_file(sd_device *device);
 int device_set_action(sd_device *device, sd_device_action_t a);
 sd_device_action_t device_action_from_string(const char *s) _pure_;
 const char* device_action_to_string(sd_device_action_t a) _const_;
-void dump_device_action_table(void);
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.c b/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.c
new file mode 100644
index 00000000..e289523f
--- /dev/null
+++ b/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.c
@@ -0,0 +1,156 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "nm-sd-adapt-shared.h"
+
+#include "device-private.h"
+#include "device-util.h"
+#include "devnum-util.h"
+#include "fd-util.h"
+#include "string-util.h"
+#include "strv.h"
+
+#if 0  /* NM_IGNORED */
+int devname_from_devnum(mode_t mode, dev_t devnum, char **ret) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        const char *devname;
+        int r;
+
+        assert(ret);
+
+        if (devnum_is_zero(devnum))
+                return device_path_make_inaccessible(mode, ret);
+
+        r = device_new_from_mode_and_devnum(&dev, mode, devnum);
+        if (r < 0)
+                return r;
+
+        r = sd_device_get_devname(dev, &devname);
+        if (r < 0)
+                return r;
+
+        return strdup_to(ret, devname);
+}
+
+int device_open_from_devnum(mode_t mode, dev_t devnum, int flags, char **ret_devname) {
+        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
+
+        r = device_new_from_mode_and_devnum(&dev, mode, devnum);
+        if (r < 0)
+                return r;
+
+        fd = sd_device_open(dev, flags);
+        if (fd < 0)
+                return fd;
+
+        if (ret_devname) {
+                const char *devname;
+
+                r = sd_device_get_devname(dev, &devname);
+                if (r < 0)
+                        return r;
+
+                r = strdup_to(ret_devname, devname);
+                if (r < 0)
+                        return r;
+        }
+
+        return TAKE_FD(fd);
+}
+
+static int add_string_field(
+                sd_device *device,
+                const char *field,
+                int (*func)(sd_device *dev, const char **s),
+                char ***strv) {
+
+        const char *s;
+        int r;
+
+        assert(device);
+        assert(field);
+        assert(func);
+        assert(strv);
+
+        r = func(device, &s);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"%s\" property, ignoring: %m", field);
+        if (r >= 0)
+                (void) strv_extend_assignment(strv, field, s);
+
+        return 0;
+}
+
+char** device_make_log_fields(sd_device *device) {
+        _cleanup_strv_free_ char **strv = NULL;
+        dev_t devnum;
+        int ifindex;
+        sd_device_action_t action;
+        uint64_t seqnum, diskseq;
+        int r;
+
+        assert(device);
+
+        (void) add_string_field(device, "SYSPATH", sd_device_get_syspath, &strv);
+        (void) add_string_field(device, "SUBSYSTEM", sd_device_get_subsystem, &strv);
+        (void) add_string_field(device, "DEVTYPE", sd_device_get_devtype, &strv);
+        (void) add_string_field(device, "DRIVER", sd_device_get_driver, &strv);
+        (void) add_string_field(device, "DEVPATH", sd_device_get_devpath, &strv);
+        (void) add_string_field(device, "DEVNAME", sd_device_get_devname, &strv);
+        (void) add_string_field(device, "SYSNAME", sd_device_get_sysname, &strv);
+        (void) add_string_field(device, "SYSNUM", sd_device_get_sysnum, &strv);
+
+        r = sd_device_get_devnum(device, &devnum);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"DEVNUM\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "DEVNUM="DEVNUM_FORMAT_STR, DEVNUM_FORMAT_VAL(devnum));
+
+        r = sd_device_get_ifindex(device, &ifindex);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"IFINDEX\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "IFINDEX=%i", ifindex);
+
+        r = sd_device_get_action(device, &action);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"ACTION\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "ACTION=%s", device_action_to_string(action));
+
+        r = sd_device_get_seqnum(device, &seqnum);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"SEQNUM\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "SEQNUM=%"PRIu64, seqnum);
+
+        r = sd_device_get_diskseq(device, &diskseq);
+        if (r < 0 && r != -ENOENT)
+                log_device_debug_errno(device, r, "Failed to get device \"DISKSEQ\" property, ignoring: %m");
+        if (r >= 0)
+                (void) strv_extendf(&strv, "DISKSEQ=%"PRIu64, diskseq);
+
+        return TAKE_PTR(strv);
+}
+#endif  /* NM_IGNORED */
+
+bool device_in_subsystem(sd_device *device, const char *subsystem) {
+        const char *s = NULL;
+
+        assert(device);
+
+        (void) sd_device_get_subsystem(device, &s);
+        return streq_ptr(s, subsystem);
+}
+
+#if 0 /* NM_IGNORED */
+bool device_is_devtype(sd_device *device, const char *devtype) {
+        const char *s = NULL;
+
+        assert(device);
+
+        (void) sd_device_get_devtype(device, &s);
+        return streq_ptr(s, devtype);
+}
+#endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.h b/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.h
index b17993d5..070e564a 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.h
+++ b/src/libnm-systemd-core/src/libsystemd/sd-device/device-util.h
@@ -110,6 +110,19 @@ bool device_is_devtype(sd_device *device, const char *devtype);
 static inline bool device_property_can_set(const char *property) {
         return property &&
                 !STR_IN_SET(property,
-                            "ACTION", "DEVLINKS", "DEVNAME", "DEVPATH", "DEVTYPE", "DRIVER",
-                            "IFINDEX", "MAJOR", "MINOR", "SEQNUM", "SUBSYSTEM", "TAGS");
+                            /* basic properties set by kernel, only in netlink event */
+                            "ACTION", "SEQNUM", "SYNTH_UUID",
+                            /* basic properties set by kernel, both in netlink event and uevent file */
+                            "DEVPATH", "DEVPATH_OLD", "SUBSYSTEM", "DEVTYPE", "DRIVER", "MODALIAS",
+                            /* device node */
+                            "DEVNAME", "DEVMODE", "DEVUID", "DEVGID", "MAJOR", "MINOR",
+                            /* block device */
+                            "DISKSEQ", "PARTN",
+                            /* network interface (INTERFACE_OLD is set by udevd) */
+                            "IFINDEX", "INTERFACE", "INTERFACE_OLD",
+                            /* basic properties set by udevd */
+                            "DEVLINKS", "TAGS", "CURRENT_TAGS", "USEC_INITIALIZED", "UDEV_DATABASE_VERSION") &&
+                /* Similar to SYNTH_UUID, but set based on KEY=VALUE arguments passed by userspace.
+                 * See kernel's f36776fafbaa0094390dd4e7e3e29805e0b82730 (v4.13) */
+                !startswith(property, "SYNTH_ARG_");
 }
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-device/sd-device.c b/src/libnm-systemd-core/src/libsystemd/sd-device/sd-device.c
index 480223d0..fce184df 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-device/sd-device.c
+++ b/src/libnm-systemd-core/src/libsystemd/sd-device/sd-device.c
@@ -375,7 +375,7 @@ _public_ int sd_device_new_from_ifindex(sd_device **ret, int ifindex) {
         assert_return(ret, -EINVAL);
         assert_return(ifindex > 0, -EINVAL);
 
-        r = rtnl_get_ifname_full(NULL, ifindex, &ifname, NULL);
+        r = rtnl_get_ifname(NULL, ifindex, &ifname);
         if (r < 0)
                 return r;
 
@@ -516,7 +516,7 @@ _public_ int sd_device_new_from_subsystem_sysname(
                         if (streq(sep, "drivers")) /* If the sysname is "drivers", then it's the drivers directory itself that is meant. */
                                 r = device_new_from_path_join(&device, subsystem, subsys, "drivers", "/sys/bus/", subsys, "/drivers", NULL);
                         else
-                                r = device_new_from_path_join(&device, subsystem, subsys, sep, "/sys/bus/", subsys, "/drivers/", sep);
+                                r = device_new_from_path_join(&device, subsystem, subsys, sysname + (sep - name), "/sys/bus/", subsys, "/drivers/", sep);
                         if (r < 0)
                                 return r;
                 }
@@ -776,16 +776,24 @@ static int handle_uevent_line(
         assert(major);
         assert(minor);
 
+        if (streq(key, "SUBSYSTEM"))
+                return device_set_subsystem(device, value);
         if (streq(key, "DEVTYPE"))
                 return device_set_devtype(device, value);
         if (streq(key, "IFINDEX"))
                 return device_set_ifindex(device, value);
         if (streq(key, "DEVNAME"))
                 return device_set_devname(device, value);
+        if (streq(key, "DEVUID"))
+                return device_set_devuid(device, value);
+        if (streq(key, "DEVGID"))
+                return device_set_devgid(device, value);
         if (streq(key, "DEVMODE"))
                 return device_set_devmode(device, value);
         if (streq(key, "DISKSEQ"))
                 return device_set_diskseq(device, value);
+        if (streq(key, "DRIVER"))
+                return device_set_driver(device, value);
         if (streq(key, "MAJOR"))
                 *major = value;
         else if (streq(key, "MINOR"))
@@ -800,7 +808,7 @@ int device_read_uevent_file(sd_device *device) {
         _cleanup_free_ char *uevent = NULL;
         const char *syspath, *key = NULL, *value = NULL, *major = NULL, *minor = NULL;
         char *path;
-        size_t uevent_len = 0;
+        size_t uevent_len;
         int r;
 
         enum {
@@ -882,6 +890,13 @@ int device_read_uevent_file(sd_device *device) {
                         log_device_debug_errno(device, r, "sd-device: Failed to set 'MAJOR=%s' or 'MINOR=%s' from '%s', ignoring: %m", major, strna(minor), path);
         }
 
+        if (device_in_subsystem(device, "drivers")) {
+                r = device_set_drivers_subsystem(device);
+                if (r < 0)
+                        log_device_debug_errno(device, r,
+                                               "sd-device: Failed to set driver subsystem, ignoring: %m");
+        }
+
         return 0;
 }
 
@@ -904,6 +919,21 @@ _public_ int sd_device_get_ifindex(sd_device *device, int *ifindex) {
 }
 
 #if 0 /* NM_IGNORED */
+int device_get_ifname(sd_device *device, const char **ret) {
+        int r;
+
+        assert_return(device, -EINVAL);
+
+        /* First, check if the device is a network interface. */
+        r = sd_device_get_ifindex(device, NULL);
+        if (r < 0)
+                return r;
+
+        /* The sysname and ifname may be different, as '!' in sysname are replaced with '/'.
+         * For network interfaces, we can use INTERFACE property. */
+        return sd_device_get_property_value(device, "INTERFACE", ret);
+}
+
 _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
         int r;
 
@@ -1228,6 +1258,10 @@ _public_ int sd_device_get_subsystem(sd_device *device, const char **ret) {
 
         assert_return(device, -EINVAL);
 
+        r = device_read_uevent_file(device);
+        if (r < 0)
+                return r;
+
         if (!device->subsystem_set) {
                 _cleanup_free_ char *subsystem = NULL;
                 const char *syspath;
@@ -1371,6 +1405,10 @@ int device_set_driver(sd_device *device, const char *driver) {
 _public_ int sd_device_get_driver(sd_device *device, const char **ret) {
         assert_return(device, -EINVAL);
 
+        r = device_read_uevent_file(device);
+        if (r < 0)
+                return r;
+
         if (!device->driver_set) {
                 _cleanup_free_ char *driver = NULL;
                 const char *syspath;
@@ -1497,6 +1535,26 @@ _public_ int sd_device_get_sysnum(sd_device *device, const char **ret) {
         return 0;
 }
 
+int device_get_sysnum_unsigned(sd_device *device, unsigned *ret) {
+        int r;
+
+        assert(device);
+
+        const char *s;
+        r = sd_device_get_sysnum(device, &s);
+        if (r < 0)
+                return r;
+
+        unsigned n;
+        r = safe_atou_full(s, SAFE_ATO_REFUSE_PLUS_MINUS | SAFE_ATO_REFUSE_LEADING_WHITESPACE | 10, &n);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = n;
+        return 0;
+}
+
 _public_ int sd_device_get_action(sd_device *device, sd_device_action_t *ret) {
         assert_return(device, -EINVAL);
 
@@ -1726,18 +1784,13 @@ _public_ int sd_device_get_device_id(sd_device *device, const char **ret) {
 
         if (!device->device_id) {
                 _cleanup_free_ char *id = NULL;
-                const char *subsystem;
                 dev_t devnum;
                 int ifindex, r;
 
-                r = sd_device_get_subsystem(device, &subsystem);
-                if (r < 0)
-                        return r;
-
                 if (sd_device_get_devnum(device, &devnum) >= 0) {
                         /* use dev_t — b259:131072, c254:0 */
                         if (asprintf(&id, "%c" DEVNUM_FORMAT_STR,
-                                     streq(subsystem, "block") ? 'b' : 'c',
+                                     device_in_subsystem(device, "block") ? 'b' : 'c',
                                      DEVNUM_FORMAT_VAL(devnum)) < 0)
                                 return -ENOMEM;
                 } else if (sd_device_get_ifindex(device, &ifindex) >= 0) {
@@ -1755,13 +1808,18 @@ _public_ int sd_device_get_device_id(sd_device *device, const char **ret) {
                         if (r == O_DIRECTORY)
                                 return -EINVAL;
 
-                        if (streq(subsystem, "drivers")) {
+                        if (device_in_subsystem(device, "drivers"))
                                 /* the 'drivers' pseudo-subsystem is special, and needs the real
                                  * subsystem encoded as well */
-                                assert(device->driver_subsystem);
-                                id = strjoin("+drivers:", device->driver_subsystem, ":", sysname);
-                        } else
+                                id = strjoin("+drivers:", ASSERT_PTR(device->driver_subsystem), ":", sysname);
+                        else {
+                                const char *subsystem;
+                                r = sd_device_get_subsystem(device, &subsystem);
+                                if (r < 0)
+                                        return r;
+
                                 id = strjoin("+", subsystem, ":", sysname);
+                        }
                         if (!id)
                                 return -ENOMEM;
                 }
@@ -2355,134 +2413,224 @@ void device_clear_sysattr_cache(sd_device *device) {
         device->sysattr_values = hashmap_free(device->sysattr_values);
 }
 
-int device_cache_sysattr_value(sd_device *device, const char *key, char *value) {
-        _unused_ _cleanup_free_ char *old_value = NULL;
-        _cleanup_free_ char *new_key = NULL;
+typedef struct SysAttrCacheEntry {
+        char *key;
+        char *value;
+        int error;
+} SysAttrCacheEntry;
+
+static SysAttrCacheEntry* sysattr_cache_entry_free(SysAttrCacheEntry *p) {
+        if (!p)
+                return NULL;
+
+        free(p->key);
+        free(p->value);
+        return mfree(p);
+}
+
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+                sysattr_cache_hash_ops,
+                char, path_hash_func, path_compare,
+                SysAttrCacheEntry, sysattr_cache_entry_free);
+
+static int device_cache_sysattr_value_full(sd_device *device, char *key, char *value, int error, bool ignore_uevent) {
         int r;
 
         assert(device);
         assert(key);
+        assert(value || error > 0);
 
-        /* This takes the reference of the input value. The input value may be NULL.
-         * This replaces the value if it already exists. */
+        /* This takes the reference of the input arguments when cached, hence the caller must not free them
+         * when a positive return value is returned. The input value may be NULL. This replaces an already
+         * existing entry. */
 
-        /* First, remove the old cache entry. So, we do not need to clear cache on error. */
-        old_value = hashmap_remove2(device->sysattr_values, key, (void **) &new_key);
-        if (!new_key) {
-                new_key = strdup(key);
-                if (!new_key)
-                        return -ENOMEM;
-        }
+        if (ignore_uevent && streq(last_path_component(key), "uevent"))
+                return 0; /* not cached */
 
-        r = hashmap_ensure_put(&device->sysattr_values, &path_hash_ops_free_free, new_key, value);
+        /* Remove the old cache entry. So, we do not need to clear cache on error. */
+        sysattr_cache_entry_free(hashmap_remove(device->sysattr_values, key));
+
+        /* We use ENOANO as a recognizable error code when we have not read the attribute. */
+        if (error == ENOANO)
+                error = ESTALE;
+
+        _cleanup_free_ SysAttrCacheEntry *entry = new(SysAttrCacheEntry, 1);
+        if (!entry)
+                return -ENOMEM;
+
+        *entry = (SysAttrCacheEntry) {
+                .key = key,
+                .value = value,
+                .error = error,
+        };
+
+        r = hashmap_ensure_put(&device->sysattr_values, &sysattr_cache_hash_ops, entry->key, entry);
         if (r < 0)
                 return r;
 
-        TAKE_PTR(new_key);
+        TAKE_PTR(entry);
+        return 1; /* cached */
+}
 
-        return 0;
+int device_cache_sysattr_value(sd_device *device, char *key, char *value, int error) {
+        return device_cache_sysattr_value_full(device, key, value, error, /* ignore_uevent = */ true);
 }
 
-int device_get_cached_sysattr_value(sd_device *device, const char *key, const char **ret_value) {
-        const char *k = NULL, *value;
+static int device_get_cached_sysattr_value(sd_device *device, const char *key, const char **ret_value) {
+        SysAttrCacheEntry *entry;
 
         assert(device);
         assert(key);
 
-        value = hashmap_get2(device->sysattr_values, key, (void **) &k);
-        if (!k)
-                return -ESTALE; /* We have not read the attribute. */
-        if (!value)
-                return -ENOENT; /* We have looked up the attribute before and it did not exist. */
+        entry = hashmap_get(device->sysattr_values, key);
+        if (!entry)
+                return -ENOANO; /* We have not read the attribute. */
+        if (!entry->value) {
+                /* We have looked up the attribute before and failed. Return the cached error code. */
+                assert(entry->error > 0);
+                return -entry->error;
+        }
         if (ret_value)
-                *ret_value = value;
+                *ret_value = entry->value;
         return 0;
 }
 
-/* We cache all sysattr lookups. If an attribute does not exist, it is stored
- * with a NULL value in the cache, otherwise the returned string is stored */
-_public_ int sd_device_get_sysattr_value(sd_device *device, const char *sysattr, const char **ret_value) {
-        _cleanup_free_ char *value = NULL, *path = NULL;
-        const char *syspath;
-        struct stat statbuf;
+int device_chase(sd_device *device, const char *path, ChaseFlags flags, char **ret_resolved, int *ret_fd) {
         int r;
 
-        assert_return(device, -EINVAL);
-        assert_return(sysattr, -EINVAL);
+        assert(device);
+        assert(path);
 
-        /* look for possibly already cached result */
-        r = device_get_cached_sysattr_value(device, sysattr, ret_value);
-        if (r != -ESTALE)
+        const char *syspath;
+        r = sd_device_get_syspath(device, &syspath);
+        if (r < 0)
                 return r;
 
-        r = sd_device_get_syspath(device, &syspath);
+        /* Here, CHASE_PREFIX_ROOT is borrowed. If the flag is set or the specified path is relative, then
+         * the path will be prefixed with the syspath. Note, we do not pass CHASE_PREFIX_ROOT flag with
+         * syspath as root to chase(), but we manually concatenate the specified path with syspath before
+         * calling chase(). Otherwise, we cannot set/get attributes of parent or sibling devices. */
+        _cleanup_free_ char *prefixed = NULL;
+        if (FLAGS_SET(flags, CHASE_PREFIX_ROOT) || !path_is_absolute(path)) {
+                prefixed = path_join(syspath, path);
+                if (!prefixed)
+                        return -ENOMEM;
+                path = prefixed;
+                flags &= ~CHASE_PREFIX_ROOT;
+        }
+
+        _cleanup_free_ char *resolved = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        r = chase(path, /* root = */ NULL, CHASE_NO_AUTOFS | flags, &resolved, ret_fd ? &fd : NULL);
         if (r < 0)
                 return r;
 
-        path = path_join(syspath, sysattr);
-        if (!path)
-                return -ENOMEM;
+        /* Refuse to reading/writing files outside of sysfs. */
+        if (!path_startswith(resolved, "/sys/"))
+                return -EINVAL;
 
-        if (lstat(path, &statbuf) < 0) {
-                int k;
+        if (ret_resolved) {
+                /* Always return relative path. */
+                r = path_make_relative(syspath, resolved, ret_resolved);
+                if (r < 0)
+                        return r;
+        }
 
-                r = -errno;
+        if (ret_fd)
+                *ret_fd = TAKE_FD(fd);
 
-                /* remember that we could not access the sysattr */
-                k = device_cache_sysattr_value(device, sysattr, NULL);
-                if (k < 0)
-                        log_device_debug_errno(device, k,
-                                               "sd-device: failed to cache attribute '%s' with NULL, ignoring: %m",
-                                               sysattr);
+        return 0;
+}
+
+_public_ int sd_device_get_sysattr_value(sd_device *device, const char *sysattr, const char **ret_value) {
+        _cleanup_free_ char *resolved = NULL, *value = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        int r;
 
+        assert_return(device, -EINVAL);
+        assert_return(sysattr, -EINVAL);
+
+        /* Look for possibly already cached result. */
+        r = device_get_cached_sysattr_value(device, sysattr, ret_value);
+        if (r != -ENOANO)
                 return r;
-        } else if (S_ISLNK(statbuf.st_mode)) {
-                /* Some core links return only the last element of the target path,
-                 * these are just values, the paths should not be exposed. */
-                if (STR_IN_SET(sysattr, "driver", "subsystem", "module")) {
-                        r = readlink_value(path, &value);
-                        if (r < 0)
-                                return r;
-                } else
-                        return -EINVAL;
-        } else if (S_ISDIR(statbuf.st_mode))
-                /* skip directories */
-                return -EISDIR;
-        else if (!(statbuf.st_mode & S_IRUSR))
-                /* skip non-readable files */
-                return -EPERM;
-        else {
-                size_t size;
-
-                /* Read attribute value, Some attributes contain embedded '\0'. So, it is necessary to
-                 * also get the size of the result. See issue #20025. */
-                r = read_full_virtual_file(path, &value, &size);
+
+        /* Special cases: read the symlink and return the last component of the value. Some core links return
+         * only the last element of the target path, these are just values, the paths should not be exposed. */
+        if (STR_IN_SET(sysattr, "driver", "subsystem", "module")) {
+                _cleanup_free_ char *prefixed = NULL;
+                const char *syspath;
+
+                r = sd_device_get_syspath(device, &syspath);
                 if (r < 0)
                         return r;
 
-                /* drop trailing newlines */
-                while (size > 0 && strchr(NEWLINE, value[--size]))
-                        value[size] = '\0';
+                prefixed = path_join(syspath, sysattr);
+                if (!prefixed)
+                        return -ENOMEM;
+
+                r = readlink_value(prefixed, &value);
+                if (r != -EINVAL) /* -EINVAL means the path is not a symlink. */
+                        goto cache_result;
         }
 
-        /* Unfortunately, we need to return 'const char*' instead of 'char*'. Hence, failure in caching
-         * sysattr value is critical unlike the other places. */
-        r = device_cache_sysattr_value(device, sysattr, value);
-        if (r < 0) {
-                log_device_debug_errno(device, r,
-                                       "sd-device: failed to cache attribute '%s' with '%s'%s: %m",
-                                       sysattr, value, ret_value ? "" : ", ignoring");
-                if (ret_value)
-                        return r;
+        r = device_chase(device, sysattr, CHASE_PREFIX_ROOT, &resolved, &fd);
+        if (r < 0)
+                goto cache_result;
 
-                return 0;
+        /* Look for cached result again with the resolved path. */
+        r = device_get_cached_sysattr_value(device, resolved, ret_value);
+        if (r != -ENOANO)
+                return r;
+
+        /* Read attribute value, Some attributes contain embedded '\0'. So, it is necessary to also get the
+         * size of the result. See issue #20025. */
+        size_t size;
+        r = read_virtual_file_fd(fd, SIZE_MAX, &value, &size);
+        if (r < 0)
+                goto cache_result;
+
+        delete_trailing_chars(value, NEWLINE);
+        r = 0;
+
+cache_result:
+        if (r == -ENOMEM)
+                return r; /* Do not cache -ENOMEM, as the failure may be transient. */
+
+        if (!resolved) {
+                /* If we have not or could not chase the path, assume 'sysattr' is normalized. */
+                resolved = strdup(sysattr);
+                if (!resolved)
+                        return RET_GATHER(r, -ENOMEM);
         }
 
-        if (ret_value)
+        int k = device_cache_sysattr_value_full(device, resolved, value, -r, /* ignore_uevent = */ false);
+        if (k < 0) {
+                if (r < 0)
+                        log_device_debug_errno(device, k,
+                                               "sd-device: failed to cache error code (%i) in reading attribute '%s', ignoring: %m",
+                                               -r, resolved);
+                else {
+                        /* Unfortunately, we need to return 'const char*' instead of 'char*'. Hence, failure in caching
+                         * sysattr value is critical unlike the other places. */
+                        log_device_debug_errno(device, k,
+                                               "sd-device: failed to cache attribute '%s' with '%s'%s: %m",
+                                               resolved, value, ret_value ? "" : ", ignoring");
+                        if (ret_value)
+                                return k;
+                }
+
+                return r;
+        }
+        assert(k > 0);
+
+        if (ret_value && r >= 0)
                 *ret_value = value;
 
+        /* device_cache_sysattr_value_full() takes 'resolved' and 'value' on success. */
+        TAKE_PTR(resolved);
         TAKE_PTR(value);
-        return 0;
+        return r;
 }
 
 int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret_value) {
@@ -2556,19 +2704,22 @@ int device_get_sysattr_bool(sd_device *device, const char *sysattr) {
         return parse_boolean(value);
 }
 
-static void device_remove_cached_sysattr_value(sd_device *device, const char *_key) {
-        _cleanup_free_ char *key = NULL;
+static int device_remove_cached_sysattr_value(sd_device *device, const char *sysattr) {
+        int r;
 
         assert(device);
-        assert(_key);
+        assert(sysattr);
 
-        free(hashmap_remove2(device->sysattr_values, _key, (void **) &key));
+        _cleanup_free_ char *resolved = NULL;
+        r = device_chase(device, sysattr, CHASE_PREFIX_ROOT | CHASE_NONEXISTENT, &resolved, /* ret_fd = */ NULL);
+        if (r < 0)
+                return r;
+
+        sysattr_cache_entry_free(hashmap_remove(device->sysattr_values, resolved));
+        return 0;
 }
 
-_public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, const char *_value) {
-        _cleanup_free_ char *value = NULL, *path = NULL;
-        const char *syspath;
-        size_t len;
+_public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, const char *value) {
         int r;
 
         assert_return(device, -EINVAL);
@@ -2576,52 +2727,43 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr,
 
         /* Set the attribute and save it in the cache. */
 
-        if (!_value) {
+        if (!value)
                 /* If input value is NULL, then clear cache and not write anything. */
-                device_remove_cached_sysattr_value(device, sysattr);
-                return 0;
-        }
+                return device_remove_cached_sysattr_value(device, sysattr);
 
-        r = sd_device_get_syspath(device, &syspath);
-        if (r < 0)
+        _cleanup_free_ char *resolved = NULL;
+        _cleanup_close_ int fd = -EBADF;
+        r = device_chase(device, sysattr, CHASE_PREFIX_ROOT, &resolved, &fd);
+        if (r < 0) {
+                /* On failure, clear cache entry, hopefully, 'sysattr' is normalized. */
+                sysattr_cache_entry_free(hashmap_remove(device->sysattr_values, sysattr));
                 return r;
+        }
 
-        path = path_join(syspath, sysattr);
-        if (!path)
+        /* value length is limited to 4k */
+        _cleanup_free_ char *copied = strndup(value, 4096);
+        if (!copied)
                 return -ENOMEM;
 
-        len = strlen(_value);
-
         /* drop trailing newlines */
-        while (len > 0 && strchr(NEWLINE, _value[len - 1]))
-                len--;
+        delete_trailing_chars(copied, NEWLINE);
 
-        /* value length is limited to 4k */
-        if (len > 4096)
-                return -EINVAL;
-
-        value = strndup(_value, len);
-        if (!value)
-                return -ENOMEM;
-
-        r = write_string_file(path, value, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_NOFOLLOW);
+        r = write_string_file_fd(fd, copied, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_AVOID_NEWLINE);
         if (r < 0) {
                 /* On failure, clear cache entry, as we do not know how it fails. */
-                device_remove_cached_sysattr_value(device, sysattr);
+                sysattr_cache_entry_free(hashmap_remove(device->sysattr_values, resolved));
                 return r;
         }
 
-        /* Do not cache action string written into uevent file. */
-        if (streq(sysattr, "uevent"))
-                return 0;
-
-        r = device_cache_sysattr_value(device, sysattr, value);
+        r = device_cache_sysattr_value(device, resolved, copied, 0);
         if (r < 0)
                 log_device_debug_errno(device, r,
-                                       "sd-device: failed to cache attribute '%s' with '%s', ignoring: %m",
-                                       sysattr, value);
-        else
-                TAKE_PTR(value);
+                                       "sd-device: failed to cache written attribute '%s' with '%s', ignoring: %m",
+                                       resolved, copied);
+        else if (r > 0) {
+                TAKE_PTR(resolved);
+                TAKE_PTR(copied);
+        }
 
         return 0;
 }
@@ -2634,10 +2776,8 @@ _public_ int sd_device_set_sysattr_valuef(sd_device *device, const char *sysattr
         assert_return(device, -EINVAL);
         assert_return(sysattr, -EINVAL);
 
-        if (!format) {
-                device_remove_cached_sysattr_value(device, sysattr);
-                return 0;
-        }
+        if (!format)
+                return device_remove_cached_sysattr_value(device, sysattr);
 
         va_start(ap, format);
         r = vasprintf(&value, format, ap);
@@ -2650,16 +2790,7 @@ _public_ int sd_device_set_sysattr_valuef(sd_device *device, const char *sysattr
 }
 
 _public_ int sd_device_trigger(sd_device *device, sd_device_action_t action) {
-        const char *s;
-
-        assert_return(device, -EINVAL);
-
-        s = device_action_to_string(action);
-        if (!s)
-                return -EINVAL;
-
-        /* This uses the simple no-UUID interface of kernel < 4.13 */
-        return sd_device_set_sysattr_value(device, "uevent", s);
+        return sd_device_trigger_with_uuid(device, action, NULL);
 }
 
 _public_ int sd_device_trigger_with_uuid(
@@ -2673,10 +2804,6 @@ _public_ int sd_device_trigger_with_uuid(
 
         assert_return(device, -EINVAL);
 
-        /* If no one wants to know the UUID, use the simple interface from pre-4.13 times */
-        if (!ret_uuid)
-                return sd_device_trigger(device, action);
-
         s = device_action_to_string(action);
         if (!s)
                 return -EINVAL;
@@ -2691,7 +2818,8 @@ _public_ int sd_device_trigger_with_uuid(
         if (r < 0)
                 return r;
 
-        *ret_uuid = u;
+        if (ret_uuid)
+                *ret_uuid = u;
         return 0;
 }
 
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c
index ac986e48..f8c374b9 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c
+++ b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c
@@ -4,12 +4,21 @@
 
 #include <errno.h>
 
+#include "errno-util.h"
 #include "event-source.h"
 #include "event-util.h"
 #include "fd-util.h"
 #include "log.h"
 #include "string-util.h"
 
+#define SI_FLAG_FORWARD  (INT32_C(1) << 30)
+#define SI_FLAG_POSITIVE (INT32_C(1) << 29)
+
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+                event_source_hash_ops,
+                void, trivial_hash_func, trivial_compare_func,
+                sd_event_source, sd_event_source_disable_unref);
+
 int event_reset_time(
                 sd_event *e,
                 sd_event_source **s,
@@ -157,19 +166,73 @@ int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handle
 
 int event_add_child_pidref(
                 sd_event *e,
-                sd_event_source **s,
+                sd_event_source **ret,
                 const PidRef *pid,
                 int options,
                 sd_event_child_handler_t callback,
                 void *userdata) {
 
+        int r;
+
+        assert(e);
+
         if (!pidref_is_set(pid))
                 return -ESRCH;
 
-        if (pid->fd >= 0)
-                return sd_event_add_child_pidfd(e, s, pid->fd, options, callback, userdata);
+        if (pidref_is_remote(pid))
+                return -EREMOTE;
+
+        if (pid->fd < 0)
+                return sd_event_add_child(e, ret, pid->pid, options, callback, userdata);
+
+        _cleanup_close_ int copy_fd = fcntl(pid->fd, F_DUPFD_CLOEXEC, 3);
+        if (copy_fd < 0)
+                return -errno;
 
-        return sd_event_add_child(e, s, pid->pid, options, callback, userdata);
+        _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+        r = sd_event_add_child_pidfd(e, &s, copy_fd, options, callback, userdata);
+        if (r < 0)
+                return r;
+
+        r = sd_event_source_set_child_pidfd_own(s, true);
+        if (r < 0)
+                return r;
+
+        TAKE_FD(copy_fd);
+
+        if (ret)
+                *ret = TAKE_PTR(s);
+        else {
+                r = sd_event_source_set_floating(s, true);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+int event_source_get_child_pidref(sd_event_source *s, PidRef *ret) {
+        int r;
+
+        assert(s);
+        assert(ret);
+
+        pid_t pid;
+        r = sd_event_source_get_child_pid(s, &pid);
+        if (r < 0)
+                return r;
+
+        int pidfd = sd_event_source_get_child_pidfd(s);
+        if (pidfd < 0)
+                return pidfd;
+
+        /* Note, we don't actually duplicate the fd here, i.e. we do not pass ownership of this PidRef to the caller */
+        *ret = (PidRef) {
+                .pid = pid,
+                .fd = pidfd,
+        };
+
+        return 0;
 }
 
 dual_timestamp* event_dual_timestamp_now(sd_event *e, dual_timestamp *ts) {
@@ -180,4 +243,91 @@ dual_timestamp* event_dual_timestamp_now(sd_event *e, dual_timestamp *ts) {
         assert_se(sd_event_now(e, CLOCK_MONOTONIC, &ts->monotonic) >= 0);
         return ts;
 }
+
+void event_source_unref_many(sd_event_source **array, size_t n) {
+        FOREACH_ARRAY(v, array, n)
+                sd_event_source_unref(*v);
+
+        free(array);
+}
+
+static int event_forward_signal_callback(sd_event_source *s, const struct signalfd_siginfo *ssi, void *userdata) {
+        sd_event_source *child = ASSERT_PTR(userdata);
+
+        assert(ssi);
+
+        siginfo_t si = {
+                .si_signo = ssi->ssi_signo,
+                /* We include some extra information to indicate the signal was forwarded and originally a positive
+                 * value since we can only set negative values ourselves as positive values are prohibited by the
+                 * kernel. */
+                .si_code = (ssi->ssi_code & (SI_FLAG_FORWARD|SI_FLAG_POSITIVE)) ? INT_MIN :
+                           (ssi->ssi_code >= 0 ? (-ssi->ssi_code - 1) | SI_FLAG_POSITIVE | SI_FLAG_FORWARD : ssi->ssi_code | SI_FLAG_FORWARD),
+                .si_errno = ssi->ssi_errno,
+        };
+
+        /* The following fields are implemented as macros, hence we cannot use compound initialization for them. */
+        si.si_pid = ssi->ssi_pid;
+        si.si_uid = ssi->ssi_uid;
+        si.si_int = ssi->ssi_int;
+        si.si_ptr = UINT64_TO_PTR(ssi->ssi_ptr);
+
+        return sd_event_source_send_child_signal(child, ssi->ssi_signo, &si, /* flags = */ 0);
+}
+
+static void event_forward_signal_destroy(void *userdata) {
+        sd_event_source *child = ASSERT_PTR(userdata);
+        sd_event_source_unref(child);
+}
+
+int event_forward_signals(
+                sd_event *e,
+                sd_event_source *child,
+                const int *signals,
+                size_t n_signals,
+                sd_event_source ***ret_sources,
+                size_t *ret_n_sources) {
+
+        sd_event_source **sources = NULL;
+        size_t n_sources = 0;
+        int r;
+
+        CLEANUP_ARRAY(sources, n_sources, event_source_unref_many);
+
+        assert(e);
+        assert(child);
+        assert(child->type == SOURCE_CHILD);
+        assert(signals || n_signals == 0);
+        assert(ret_sources);
+        assert(ret_n_sources);
+
+        if (n_signals == 0) {
+                *ret_sources = NULL;
+                *ret_n_sources = 0;
+                return 0;
+        }
+
+        sources = new0(sd_event_source*, n_signals);
+        if (!sources)
+                return -ENOMEM;
+
+        FOREACH_ARRAY(sig, signals, n_signals) {
+                _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+                r = sd_event_add_signal(e, &s, *sig | SD_EVENT_SIGNAL_PROCMASK, event_forward_signal_callback, child);
+                if (r < 0)
+                        return r;
+
+                r = sd_event_source_set_destroy_callback(s, event_forward_signal_destroy);
+                if (r < 0)
+                        return r;
+
+                sd_event_source_ref(child);
+                sources[n_sources++] = TAKE_PTR(s);
+        }
+
+        *ret_sources = TAKE_PTR(sources);
+        *ret_n_sources = n_sources;
+
+        return 0;
+}
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h
index c0db014f..692184db 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h
+++ b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h
@@ -5,8 +5,11 @@
 
 #include "sd-event.h"
 
+#include "hash-funcs.h"
 #include "pidref.h"
 
+extern const struct hash_ops event_source_hash_ops;
+
 int event_reset_time(
                 sd_event *e,
                 sd_event_source **s,
@@ -38,5 +41,11 @@ int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handle
 #if 0 /* NM_IGNORED */
 int event_add_child_pidref(sd_event *e, sd_event_source **s, const PidRef *pid, int options, sd_event_child_handler_t callback, void *userdata);
 
+int event_source_get_child_pidref(sd_event_source *s, PidRef *ret);
+
 dual_timestamp* event_dual_timestamp_now(sd_event *e, dual_timestamp *ts);
+
+void event_source_unref_many(sd_event_source **array, size_t n);
+
+int event_forward_signals(sd_event *e, sd_event_source *child, const int *signals, size_t n_signals, sd_event_source ***ret_sources, size_t *ret_n_sources);
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c b/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c
index b345b145..4f04e058 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c
+++ b/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c
@@ -5,6 +5,7 @@
 #include <sys/epoll.h>
 #include <sys/timerfd.h>
 #include <sys/wait.h>
+#include <threads.h>
 
 #include "sd-daemon.h"
 #include "sd-event.h"
@@ -26,12 +27,11 @@
 #include "memory-util.h"
 #include "missing_magic.h"
 #include "missing_syscall.h"
-#include "missing_threads.h"
 #include "missing_wait.h"
 #include "origin-id.h"
 #include "path-util.h"
-#include "prioq.h"
 #include "pidfd-util.h"
+#include "prioq.h"
 #include "process-util.h"
 #include "psi-util.h"
 #include "set.h"
@@ -45,11 +45,10 @@
 
 #define DEFAULT_ACCURACY_USEC (250 * USEC_PER_MSEC)
 
-static bool EVENT_SOURCE_WATCH_PIDFD(sd_event_source *s) {
+static bool EVENT_SOURCE_WATCH_PIDFD(const sd_event_source *s) {
         /* Returns true if this is a PID event source and can be implemented by watching EPOLLIN */
         return s &&
                 s->type == SOURCE_CHILD &&
-                s->child.pidfd >= 0 &&
                 s->child.options == WEXITED;
 }
 
@@ -434,7 +433,7 @@ _public_ int sd_event_new(sd_event** ret) {
 
         if (secure_getenv("SD_EVENT_PROFILE_DELAYS")) {
                 log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 %s 2^63 us will be logged every 5s.",
-                          special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                          glyph(GLYPH_ELLIPSIS));
                 e->profile_delays = true;
         }
 
@@ -992,7 +991,7 @@ static void source_disconnect(sd_event_source *s) {
                                 s->event->n_online_child_sources--;
                         }
 
-                        (void) hashmap_remove(s->event->child_sources, PID_TO_PTR(s->child.pid));
+                        assert_se(hashmap_remove(s->event->child_sources, PID_TO_PTR(s->child.pid)));
                 }
 
                 if (EVENT_SOURCE_WATCH_PIDFD(s))
@@ -1092,12 +1091,11 @@ static sd_event_source* source_free(sd_event_source *s) {
                 /* Eventually the kernel will do this automatically for us, but for now let's emulate this (unreliably) in userspace. */
 
                 if (s->child.process_owned) {
+                        assert(s->child.pid > 0);
+                        assert(s->child.pidfd >= 0);
 
                         if (!s->child.exited) {
-                                if (s->child.pidfd >= 0)
-                                        r = RET_NERRNO(pidfd_send_signal(s->child.pidfd, SIGKILL, NULL, 0));
-                                else
-                                        r = RET_NERRNO(kill(s->child.pid, SIGKILL));
+                                r = RET_NERRNO(pidfd_send_signal(s->child.pidfd, SIGKILL, NULL, 0));
                                 if (r < 0 && r != -ESRCH)
                                         log_debug_errno(r, "Failed to kill process " PID_FMT ", ignoring: %m",
                                                         s->child.pid);
@@ -1107,10 +1105,7 @@ static sd_event_source* source_free(sd_event_source *s) {
                                 siginfo_t si = {};
 
                                 /* Reap the child if we can */
-                                if (s->child.pidfd >= 0)
-                                        (void) waitid(P_PIDFD, s->child.pidfd, &si, WEXITED);
-                                else
-                                        (void) waitid(P_PID, s->child.pid, &si, WEXITED);
+                                (void) waitid(P_PIDFD, s->child.pidfd, &si, WEXITED);
                         }
                 }
 
@@ -1903,15 +1898,15 @@ _public_ int sd_event_trim_memory(void) {
                    LOG_MESSAGE("Memory trimming took %s, returned %s to OS.",
                                FORMAT_TIMESPAN(period, 0),
                                FORMAT_BYTES(l)),
-                   "MESSAGE_ID=" SD_MESSAGE_MEMORY_TRIM_STR,
-                   "TRIMMED_BYTES=%zu", l,
-                   "TRIMMED_USEC=" USEC_FMT, period);
+                   LOG_MESSAGE_ID(SD_MESSAGE_MEMORY_TRIM_STR),
+                   LOG_ITEM("TRIMMED_BYTES=%zu", l),
+                   LOG_ITEM("TRIMMED_USEC=" USEC_FMT, period));
 #else
         log_struct(LOG_DEBUG,
                    LOG_MESSAGE("Memory trimming took %s.",
                                FORMAT_TIMESPAN(period, 0)),
-                   "MESSAGE_ID=" SD_MESSAGE_MEMORY_TRIM_STR,
-                   "TRIMMED_USEC=" USEC_FMT, period);
+                   LOG_MESSAGE_ID(SD_MESSAGE_MEMORY_TRIM_STR),
+                   LOG_ITEM("TRIMMED_USEC=" USEC_FMT, period));
 #endif
 
         return 0;
@@ -2740,9 +2735,11 @@ _public_ int sd_event_source_get_io_revents(sd_event_source *s, uint32_t *ret) {
         assert_return(s, -EINVAL);
         assert_return(ret, -EINVAL);
         assert_return(s->type == SOURCE_IO, -EDOM);
-        assert_return(s->pending, -ENODATA);
         assert_return(!event_origin_changed(s->event), -ECHILD);
 
+        if (!s->pending)
+                return -ENODATA;
+
         *ret = s->io.revents;
         return 0;
 }
@@ -3009,13 +3006,13 @@ static int event_source_online(
 
         case SOURCE_CHILD:
                 if (EVENT_SOURCE_WATCH_PIDFD(s)) {
-                        /* yes, we have pidfd */
+                        /* yes, we can rely on pidfd */
 
                         r = source_child_pidfd_register(s, enabled);
                         if (r < 0)
                                 return r;
                 } else {
-                        /* no pidfd, or something other to watch for than WEXITED */
+                        /* something other to watch for than WEXITED */
 
                         r = event_make_signal_data(s->event, SIGCHLD, NULL);
                         if (r < 0) {
@@ -3208,9 +3205,6 @@ _public_ int sd_event_source_get_child_pidfd(sd_event_source *s) {
         assert_return(s->type == SOURCE_CHILD, -EDOM);
         assert_return(!event_origin_changed(s->event), -ECHILD);
 
-        if (s->child.pidfd < 0)
-                return -EOPNOTSUPP;
-
         return s->child.pidfd;
 }
 
@@ -3219,51 +3213,26 @@ _public_ int sd_event_source_send_child_signal(sd_event_source *s, int sig, cons
         assert_return(s->type == SOURCE_CHILD, -EDOM);
         assert_return(!event_origin_changed(s->event), -ECHILD);
         assert_return(SIGNAL_VALID(sig), -EINVAL);
+        assert(s->child.pidfd >= 0);
 
-        /* If we already have seen indication the process exited refuse sending a signal early. This way we
-         * can be sure we don't accidentally kill the wrong process on PID reuse when pidfds are not
-         * available. */
+        /* If we already have seen indication the process exited refuse sending a signal early. */
         if (s->child.exited)
                 return -ESRCH;
+        assert(!s->child.waited);
 
-        if (s->child.pidfd >= 0) {
-                siginfo_t copy;
-
-                /* pidfd_send_signal() changes the siginfo_t argument. This is weird, let's hence copy the
-                 * structure here */
-                if (si)
-                        copy = *si;
-
-                if (pidfd_send_signal(s->child.pidfd, sig, si ? &copy : NULL, 0) < 0)
-                        return -errno;
-
-                return 0;
-        }
-
-        /* Flags are only supported for pidfd_send_signal(), not for rt_sigqueueinfo(), hence let's refuse
-         * this here. */
-        if (flags != 0)
-                return -EOPNOTSUPP;
+        /* pidfd_send_signal() changes the siginfo_t argument. This is weird, let's hence copy the structure here. */
+        siginfo_t copy;
+        if (si)
+                copy = *si;
 
-        if (si) {
-                /* We use rt_sigqueueinfo() only if siginfo_t is specified. */
-                siginfo_t copy = *si;
-
-                if (rt_sigqueueinfo(s->child.pid, sig, &copy) < 0)
-                        return -errno;
-        } else if (kill(s->child.pid, sig) < 0)
-                return -errno;
-
-        return 0;
+        return RET_NERRNO(pidfd_send_signal(s->child.pidfd, sig, si ? &copy : NULL, flags));
 }
 
 _public_ int sd_event_source_get_child_pidfd_own(sd_event_source *s) {
         assert_return(s, -EINVAL);
         assert_return(s->type == SOURCE_CHILD, -EDOM);
         assert_return(!event_origin_changed(s->event), -ECHILD);
-
-        if (s->child.pidfd < 0)
-                return -EOPNOTSUPP;
+        assert(s->child.pidfd >= 0);
 
         return s->child.pidfd_owned;
 }
@@ -3272,9 +3241,7 @@ _public_ int sd_event_source_set_child_pidfd_own(sd_event_source *s, int own) {
         assert_return(s, -EINVAL);
         assert_return(s->type == SOURCE_CHILD, -EDOM);
         assert_return(!event_origin_changed(s->event), -ECHILD);
-
-        if (s->child.pidfd < 0)
-                return -EOPNOTSUPP;
+        assert(s->child.pidfd >= 0);
 
         s->child.pidfd_owned = own;
         return 0;
@@ -3733,9 +3700,9 @@ static int process_child(sd_event *e, int64_t threshold, int64_t *ret_min_priori
 
         e->need_process_child = false;
 
-        /* So, this is ugly. We iteratively invoke waitid() with P_PID + WNOHANG for each PID we wait
-         * for, instead of using P_ALL. This is because we only want to get child information of very
-         * specific child processes, and not all of them. We might not have processed the SIGCHLD event
+        /* So, this is ugly. We iteratively invoke waitid() + WNOHANG with each child process we shall wait for,
+         * instead of using P_ALL. This is because we only want to get child information of very specific
+         * child processes, and not all of them. We might not have processed the SIGCHLD event
          * of a previous invocation and we don't want to maintain a unbounded *per-child* event queue,
          * hence we really don't want anything flushed out of the kernel's queue that we don't care
          * about. Since this is O(n) this means that if you have a lot of processes you probably want
@@ -3746,6 +3713,7 @@ static int process_child(sd_event *e, int64_t threshold, int64_t *ret_min_priori
 
         HASHMAP_FOREACH(s, e->child_sources) {
                 assert(s->type == SOURCE_CHILD);
+                assert(s->child.pidfd >= 0);
 
                 if (s->priority > threshold)
                         continue;
@@ -3765,23 +3733,21 @@ static int process_child(sd_event *e, int64_t threshold, int64_t *ret_min_priori
                         continue;
 
                 zero(s->child.siginfo);
-                if (waitid(P_PID, s->child.pid, &s->child.siginfo,
+                if (waitid(P_PIDFD, s->child.pidfd, &s->child.siginfo,
                            WNOHANG | (s->child.options & WEXITED ? WNOWAIT : 0) | s->child.options) < 0)
                         return negative_errno();
 
                 if (s->child.siginfo.si_pid != 0) {
-                        bool zombie = IN_SET(s->child.siginfo.si_code, CLD_EXITED, CLD_KILLED, CLD_DUMPED);
+                        bool zombie = SIGINFO_CODE_IS_DEAD(s->child.siginfo.si_code);
 
                         if (zombie)
                                 s->child.exited = true;
-
-                        if (!zombie && (s->child.options & WEXITED)) {
-                                /* If the child isn't dead then let's immediately remove the state
-                                 * change from the queue, since there's no benefit in leaving it
-                                 * queued. */
+                        else if (s->child.options & WEXITED) {
+                                /* If the child isn't dead then let's immediately remove the state change
+                                 * from the queue, since there's no benefit in leaving it queued. */
 
                                 assert(s->child.options & (WSTOPPED|WCONTINUED));
-                                (void) waitid(P_PID, s->child.pid, &s->child.siginfo, WNOHANG|(s->child.options & (WSTOPPED|WCONTINUED)));
+                                (void) waitid(P_PIDFD, s->child.pidfd, &s->child.siginfo, WNOHANG|(s->child.options & (WSTOPPED|WCONTINUED)));
                         }
 
                         r = source_set_pending(s, true);
@@ -3802,6 +3768,7 @@ static int process_pidfd(sd_event *e, sd_event_source *s, uint32_t revents) {
         assert(e);
         assert(s);
         assert(s->type == SOURCE_CHILD);
+        assert(s->child.pidfd >= 0);
 
         if (s->pending)
                 return 0;
@@ -3812,14 +3779,19 @@ static int process_pidfd(sd_event *e, sd_event_source *s, uint32_t revents) {
         if (!EVENT_SOURCE_WATCH_PIDFD(s))
                 return 0;
 
+        /* Note that pidfd would also generate EPOLLHUP when the process gets reaped. But at this point we
+         * only permit EPOLLIN, under the assumption that upon EPOLLHUP the child source should already
+         * be set to pending, and we would have returned early above. */
+        assert(!s->child.exited);
+
         zero(s->child.siginfo);
-        if (waitid(P_PID, s->child.pid, &s->child.siginfo, WNOHANG | WNOWAIT | s->child.options) < 0)
+        if (waitid(P_PIDFD, s->child.pidfd, &s->child.siginfo, WNOHANG | WNOWAIT | s->child.options) < 0)
                 return -errno;
 
         if (s->child.siginfo.si_pid == 0)
                 return 0;
 
-        if (IN_SET(s->child.siginfo.si_code, CLD_EXITED, CLD_KILLED, CLD_DUMPED))
+        if (SIGINFO_CODE_IS_DEAD(s->child.siginfo.si_code))
                 s->child.exited = true;
 
         return source_set_pending(s, true);
@@ -4232,15 +4204,13 @@ static int source_dispatch(sd_event_source *s) {
                 break;
 
         case SOURCE_CHILD: {
-                bool zombie;
-
-                zombie = IN_SET(s->child.siginfo.si_code, CLD_EXITED, CLD_KILLED, CLD_DUMPED);
+                bool zombie = SIGINFO_CODE_IS_DEAD(s->child.siginfo.si_code);
 
                 r = s->child.callback(s, &s->child.siginfo, s->userdata);
 
                 /* Now, reap the PID for good. */
                 if (zombie) {
-                        (void) waitid(P_PID, s->child.pid, &s->child.siginfo, WNOHANG|WEXITED);
+                        (void) waitid(P_PIDFD, s->child.pidfd, &s->child.siginfo, WNOHANG|WEXITED);
                         s->child.waited = true;
                 }
 
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c b/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c
index 6d515a94..406e6f22 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c
+++ b/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c
@@ -11,6 +11,7 @@
 #include "hexdecoct.h"
 #include "id128-util.h"
 #include "io-util.h"
+#include "log.h"
 #include "namespace-util.h"
 #include "process-util.h"
 #include "sha256.h"
diff --git a/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c b/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c
index 9f6ef719..8f3cd8c4 100644
--- a/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c
+++ b/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c
@@ -4,6 +4,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <threads.h>
 #include <unistd.h>
 
 #include "sd-id128.h"
@@ -16,16 +17,16 @@
 #include "id128-util.h"
 #include "io-util.h"
 #include "keyring-util.h"
+#include "log.h"
 #include "macro.h"
 #include "missing_syscall.h"
-#include "missing_threads.h"
 #include "path-util.h"
 #include "random-util.h"
 #include "stat-util.h"
 #include "user-util.h"
 
 #if 0 /* NM_IGNORED */
-_public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]) {
+_public_ char *sd_id128_to_string(sd_id128_t id, char s[static SD_ID128_STRING_MAX]) {
         size_t k = 0;
 
         assert_return(s, NULL);
@@ -41,7 +42,7 @@ _public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID12
         return s;
 }
 
-_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]) {
+_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[static SD_ID128_UUID_STRING_MAX]) {
         size_t k = 0;
 
         assert_return(s, NULL);
@@ -221,8 +222,10 @@ static int get_invocation_from_keyring(sd_id128_t *ret) {
 
         key = request_key("user", "invocation_id", NULL, 0);
         if (key == -1) {
-                /* Keyring support not available? No invocation key stored? */
-                if (IN_SET(errno, ENOSYS, ENOKEY))
+                /* Keyring support not available? Keyring access locked down? No invocation key stored? */
+                if (ERRNO_IS_NOT_SUPPORTED(errno) ||
+                    ERRNO_IS_PRIVILEGE(errno) ||
+                    errno == ENOKEY)
                         return -ENXIO;
 
                 return -errno;
diff --git a/src/libnm-systemd-core/src/systemd/_sd-common.h b/src/libnm-systemd-core/src/systemd/_sd-common.h
index 5792dd81..00537eaf 100644
--- a/src/libnm-systemd-core/src/systemd/_sd-common.h
+++ b/src/libnm-systemd-core/src/systemd/_sd-common.h
@@ -19,7 +19,7 @@
 
 /* This is a private header; never even think of including this directly! */
 
-#if defined(__INCLUDE_LEVEL__) && __INCLUDE_LEVEL__ <= 1 && !defined(__COVERITY__)
+#if defined(__INCLUDE_LEVEL__) && __INCLUDE_LEVEL__ <= 1 && !defined(__COVERITY__) && !defined(__clang_analyzer__)
 #  error "Do not include _sd-common.h directly; it is a private header."
 #endif
 
diff --git a/src/libnm-systemd-core/src/systemd/sd-device.h b/src/libnm-systemd-core/src/systemd/sd-device.h
index f627ae6d..8f6141b3 100644
--- a/src/libnm-systemd-core/src/systemd/sd-device.h
+++ b/src/libnm-systemd-core/src/systemd/sd-device.h
@@ -23,11 +23,10 @@
 #include <sys/sysmacros.h>
 #include <sys/types.h>
 
+#include "_sd-common.h"
 #include "sd-event.h"
 #include "sd-id128.h"
 
-#include "_sd-common.h"
-
 _SD_BEGIN_DECLARATIONS;
 
 typedef struct sd_device sd_device;
diff --git a/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h b/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h
index d551b4dd..6054dc44 100644
--- a/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h
+++ b/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h
@@ -23,14 +23,13 @@
 #include <net/ethernet.h>
 #include <sys/types.h>
 
+#include "_sd-common.h"
 #include "sd-device.h"
 #include "sd-dhcp-duid.h"
 #include "sd-dhcp6-lease.h"
 #include "sd-dhcp6-option.h"
 #include "sd-event.h"
 
-#include "_sd-common.h"
-
 _SD_BEGIN_DECLARATIONS;
 
 enum {
diff --git a/src/libnm-systemd-core/src/systemd/sd-dhcp6-lease.h b/src/libnm-systemd-core/src/systemd/sd-dhcp6-lease.h
index d6bcceb2..5d082b0c 100644
--- a/src/libnm-systemd-core/src/systemd/sd-dhcp6-lease.h
+++ b/src/libnm-systemd-core/src/systemd/sd-dhcp6-lease.h
@@ -23,9 +23,8 @@
 #include <netinet/in.h>
 #include <sys/types.h>
 
-#include "sd-dhcp6-option.h"
-
 #include "_sd-common.h"
+#include "sd-dhcp6-option.h"
 
 _SD_BEGIN_DECLARATIONS;
 
diff --git a/src/libnm-systemd-core/src/systemd/sd-dhcp6-option.h b/src/libnm-systemd-core/src/systemd/sd-dhcp6-option.h
index 32012426..69f3eaa3 100644
--- a/src/libnm-systemd-core/src/systemd/sd-dhcp6-option.h
+++ b/src/libnm-systemd-core/src/systemd/sd-dhcp6-option.h
@@ -20,9 +20,8 @@
 #include <inttypes.h>
 #include <sys/types.h>
 
-#include "sd-dhcp6-protocol.h"
-
 #include "_sd-common.h"
+#include "sd-dhcp6-protocol.h"
 
 _SD_BEGIN_DECLARATIONS;
 
diff --git a/src/libnm-systemd-core/src/systemd/sd-ndisc.h b/src/libnm-systemd-core/src/systemd/sd-ndisc.h
index 85fcf6bc..a8f8c47b 100644
--- a/src/libnm-systemd-core/src/systemd/sd-ndisc.h
+++ b/src/libnm-systemd-core/src/systemd/sd-ndisc.h
@@ -25,14 +25,13 @@
 #include <netinet/in.h>
 #include <sys/types.h>
 
+#include "_sd-common.h"
 #include "sd-event.h"
 #include "sd-ndisc-neighbor.h"
 #include "sd-ndisc-protocol.h"
 #include "sd-ndisc-redirect.h"
 #include "sd-ndisc-router.h"
 
-#include "_sd-common.h"
-
 _SD_BEGIN_DECLARATIONS;
 
 typedef struct sd_ndisc sd_ndisc;
diff --git a/src/libnm-systemd-shared/meson.build b/src/libnm-systemd-shared/meson.build
index 7a88d78d..27199546 100644
--- a/src/libnm-systemd-shared/meson.build
+++ b/src/libnm-systemd-shared/meson.build
@@ -30,6 +30,7 @@ libnm_systemd_shared = static_library(
     'src/basic/locale-util.c',
     'src/basic/memory-util.c',
     'src/basic/mempool.c',
+    'src/basic/mountpoint-util.c',
     'src/basic/ordered-set.c',
     'src/basic/parse-util.c',
     'src/basic/path-util.c',
@@ -49,6 +50,7 @@ libnm_systemd_shared = static_library(
     'src/basic/time-util.c',
     'src/basic/tmpfile-util.c',
     'src/basic/utf8.c',
+    'src/basic/user-util.c',
     'src/fundamental/sha256-fundamental.c',
     'src/fundamental/string-util-fundamental.c',
     'src/shared/dns-domain.c',
diff --git a/src/libnm-systemd-shared/src/basic/alloc-util.c b/src/libnm-systemd-shared/src/basic/alloc-util.c
index f9686666..a2c0caa1 100644
--- a/src/libnm-systemd-shared/src/basic/alloc-util.c
+++ b/src/libnm-systemd-shared/src/basic/alloc-util.c
@@ -8,7 +8,6 @@
 
 #include "alloc-util.h"
 #include "macro.h"
-#include "memory-util.h"
 
 void* memdup(const void *p, size_t l) {
         void *ret;
diff --git a/src/libnm-systemd-shared/src/basic/alloc-util.h b/src/libnm-systemd-shared/src/basic/alloc-util.h
index ba712982..764a364a 100644
--- a/src/libnm-systemd-shared/src/basic/alloc-util.h
+++ b/src/libnm-systemd-shared/src/basic/alloc-util.h
@@ -7,7 +7,9 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "assert-util.h"
 #include "macro.h"
+#include "memory-util.h"
 
 #if HAS_FEATURE_MEMORY_SANITIZER
 #  include <sanitizer/msan_interface.h>
@@ -119,15 +121,6 @@ _malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t s
         return malloc(size * need ?: 1);
 }
 
-#if !HAVE_REALLOCARRAY
-_alloc_(2, 3) static inline void *reallocarray(void *p, size_t need, size_t size) {
-        if (size_multiply_overflow(size, need))
-                return NULL;
-
-        return realloc(p, size * need ?: 1);
-}
-#endif
-
 _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t need, size_t size) {
         if (size_multiply_overflow(size, need))
                 return NULL;
@@ -275,5 +268,3 @@ _alloc_(2) static inline void *realloc0(void *p, size_t new_size) {
 
         return q;
 }
-
-#include "memory-util.h"
diff --git a/src/libnm-systemd-shared/src/basic/assert-util.h b/src/libnm-systemd-shared/src/basic/assert-util.h
new file mode 100644
index 00000000..30860594
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/assert-util.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "assert-fundamental.h"
+#include "macro.h"
+
+/* Logging for various assertions */
+
+void log_set_assert_return_is_critical(bool b);
+bool log_get_assert_return_is_critical(void) _pure_;
+
+#if 0 /* NM_IGNORED */
+void log_assert_failed_return(const char *text, const char *file, int line, const char *func);
+#else /* NM_IGNORED */
+#define log_assert_failed_return(text, file, line, func)                         \
+    ({                                                                           \
+        log_internal(LOG_DEBUG,                                                  \
+                     0,                                                          \
+                     file,                                                       \
+                     line,                                                       \
+                     func,                                                       \
+                     "Assertion '%s' failed at %s:%u, function %s(). Ignoring.", \
+                     text,                                                       \
+                     file,                                                       \
+                     line,                                                       \
+                     func);                                                      \
+        g_return_if_fail_warning(G_LOG_DOMAIN, G_STRFUNC, text);                 \
+        (void) 0;                                                                \
+    })
+#endif /* NM_IGNORED */
+
+#define assert_log(expr, message) ((_likely_(expr))                     \
+        ? (true)                                                        \
+        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
+
+#define assert_return(expr, r)                                          \
+        do {                                                            \
+                if (!assert_log(expr, #expr))                           \
+                        return (r);                                     \
+        } while (false)
+
+#define assert_return_errno(expr, r, err)                               \
+        do {                                                            \
+                if (!assert_log(expr, #expr)) {                         \
+                        errno = err;                                    \
+                        return (r);                                     \
+                }                                                       \
+        } while (false)
diff --git a/src/libnm-systemd-shared/src/basic/bitfield.h b/src/libnm-systemd-shared/src/basic/bitfield.h
index 048e08d7..c6eaaa48 100644
--- a/src/libnm-systemd-shared/src/basic/bitfield.h
+++ b/src/libnm-systemd-shared/src/basic/bitfield.h
@@ -7,6 +7,7 @@
 #define _INDEX_TO_MASK(type, i, uniq)                                   \
         ({                                                              \
                 int UNIQ_T(_i, uniq) = (i);                             \
+                assert(UNIQ_T(_i, uniq) >= 0);                          \
                 assert(UNIQ_T(_i, uniq) < (int)sizeof(type) * 8);       \
                 ((type)1) << UNIQ_T(_i, uniq);                          \
         })
diff --git a/src/libnm-systemd-shared/src/basic/cgroup-util.h b/src/libnm-systemd-shared/src/basic/cgroup-util.h
index 77294779..269d68c5 100644
--- a/src/libnm-systemd-shared/src/basic/cgroup-util.h
+++ b/src/libnm-systemd-shared/src/basic/cgroup-util.h
@@ -263,8 +263,7 @@ int cg_get_attribute_as_bool(const char *controller, const char *path, const cha
 int cg_get_owner(const char *path, uid_t *ret_uid);
 
 int cg_set_xattr(const char *path, const char *name, const void *value, size_t size, int flags);
-int cg_get_xattr(const char *path, const char *name, void *value, size_t size);
-int cg_get_xattr_malloc(const char *path, const char *name, char **ret);
+int cg_get_xattr_malloc(const char *path, const char *name, char **ret, size_t *ret_size);
 /* Returns negative on error, and 0 or 1 on success for the bool value */
 int cg_get_xattr_bool(const char *path, const char *name);
 int cg_remove_xattr(const char *path, const char *name);
@@ -312,10 +311,6 @@ int cg_mask_supported_subtree(const char *root, CGroupMask *ret);
 int cg_mask_from_string(const char *s, CGroupMask *ret);
 int cg_mask_to_string(CGroupMask mask, char **ret);
 
-int cg_kernel_controllers(Set **controllers);
-
-bool cg_ns_supported(void);
-bool cg_freezer_supported(void);
 bool cg_kill_supported(void);
 
 int cg_all_unified(void);
@@ -329,9 +324,6 @@ static inline int cg_unified(void) {
 const char* cgroup_controller_to_string(CGroupController c) _const_;
 CGroupController cgroup_controller_from_string(const char *s) _pure_;
 
-bool is_cgroup_fs(const struct statfs *s);
-bool fd_is_cgroup_fs(int fd);
-
 typedef enum ManagedOOMMode {
         MANAGED_OOM_AUTO,
         MANAGED_OOM_KILL,
@@ -365,4 +357,4 @@ typedef union {
                 .file_handle.handle_type = FILEID_KERNFS,       \
         }
 
-#define CG_FILE_HANDLE_CGROUPID(fh) (*(uint64_t*) (fh).file_handle.f_handle)
+#define CG_FILE_HANDLE_CGROUPID(fh) (*CAST_ALIGN_PTR(uint64_t, (fh).file_handle.f_handle))
diff --git a/src/libnm-systemd-shared/src/basic/chattr-util.c b/src/libnm-systemd-shared/src/basic/chattr-util.c
index 2a63e46d..0a27e023 100644
--- a/src/libnm-systemd-shared/src/basic/chattr-util.c
+++ b/src/libnm-systemd-shared/src/basic/chattr-util.c
@@ -6,13 +6,13 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
-#include <linux/fs.h>
 
 #include "bitfield.h"
 #include "chattr-util.h"
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fs-util.h"
+#include "log.h"
 #include "macro.h"
 #include "string-util.h"
 
diff --git a/src/libnm-systemd-shared/src/basic/chattr-util.h b/src/libnm-systemd-shared/src/basic/chattr-util.h
index 1fe38e32..472054d5 100644
--- a/src/libnm-systemd-shared/src/basic/chattr-util.h
+++ b/src/libnm-systemd-shared/src/basic/chattr-util.h
@@ -2,7 +2,6 @@
 #pragma once
 
 #include <fcntl.h>
-#include <linux/fs.h>
 #include <stdbool.h>
 #include <stddef.h>
 
@@ -41,14 +40,14 @@ typedef enum ChattrApplyFlags {
 } ChattrApplyFlags;
 
 int chattr_full(int dir_fd, const char *path, unsigned value, unsigned mask, unsigned *ret_previous, unsigned *ret_final, ChattrApplyFlags flags);
-static inline int chattr_at(int dir_fd, const char *path, unsigned value, unsigned mask, unsigned *previous) {
-        return chattr_full(dir_fd, path, value, mask, previous, NULL, 0);
+static inline int chattr_at(int dir_fd, const char *path, unsigned value, unsigned mask) {
+        return chattr_full(dir_fd, path, value, mask, NULL, NULL, 0);
 }
-static inline int chattr_fd(int fd, unsigned value, unsigned mask, unsigned *previous) {
-        return chattr_full(fd, NULL, value, mask, previous, NULL, 0);
+static inline int chattr_fd(int fd, unsigned value, unsigned mask) {
+        return chattr_full(fd, NULL, value, mask, NULL, NULL, 0);
 }
-static inline int chattr_path(const char *path, unsigned value, unsigned mask, unsigned *previous) {
-        return chattr_full(AT_FDCWD, path, value, mask, previous, NULL, 0);
+static inline int chattr_path(const char *path, unsigned value, unsigned mask) {
+        return chattr_full(AT_FDCWD, path, value, mask, NULL, NULL, 0);
 }
 
 int read_attr_fd(int fd, unsigned *ret);
diff --git a/src/libnm-systemd-shared/src/basic/devnum-util.h b/src/libnm-systemd-shared/src/basic/devnum-util.h
index e109de99..0efca567 100644
--- a/src/libnm-systemd-shared/src/basic/devnum-util.h
+++ b/src/libnm-systemd-shared/src/basic/devnum-util.h
@@ -9,6 +9,9 @@
 
 int parse_devnum(const char *s, dev_t *ret);
 
+#define DEVNUM_MAJOR_MAX ((UINT32_C(1) << 12) - 1U)
+#define DEVNUM_MINOR_MAX ((UINT32_C(1) << 20) - 1U)
+
 /* glibc and the Linux kernel have different ideas about the major/minor size. These calls will check whether the
  * specified major is valid by the Linux kernel's standards, not by glibc's. Linux has 20bits of minor, and 12 bits of
  * major space. See MINORBITS in linux/kdev_t.h in the kernel sources. (If you wonder why we define _y here, instead of
@@ -18,14 +21,14 @@ int parse_devnum(const char *s, dev_t *ret);
 #define DEVICE_MAJOR_VALID(x)                                           \
         ({                                                              \
                 typeof(x) _x = (x), _y = 0;                             \
-                _x >= _y && _x < (UINT32_C(1) << 12);                   \
+                _x >= _y && _x <= DEVNUM_MAJOR_MAX;                     \
                                                                         \
         })
 
 #define DEVICE_MINOR_VALID(x)                                           \
         ({                                                              \
                 typeof(x) _x = (x), _y = 0;                             \
-                _x >= _y && _x < (UINT32_C(1) << 20);                   \
+                _x >= _y && _x <= DEVNUM_MINOR_MAX;                     \
         })
 
 int device_path_make_major_minor(mode_t mode, dev_t devnum, char **ret);
@@ -54,3 +57,6 @@ static inline char *format_devnum(dev_t d, char buf[static DEVNUM_STR_MAX]) {
 static inline bool devnum_is_zero(dev_t d) {
         return major(d) == 0 && minor(d) == 0;
 }
+
+#define DEVNUM_TO_PTR(u) ((void*) (uintptr_t) (u))
+#define PTR_TO_DEVNUM(p) ((dev_t) ((uintptr_t) (p)))
diff --git a/src/libnm-systemd-shared/src/basic/env-file.c b/src/libnm-systemd-shared/src/basic/env-file.c
index 75b2febf..d705765b 100644
--- a/src/libnm-systemd-shared/src/basic/env-file.c
+++ b/src/libnm-systemd-shared/src/basic/env-file.c
@@ -9,6 +9,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "fs-util.h"
+#include "log.h"
 #include "string-util.h"
 #include "strv.h"
 #include "tmpfile-util.h"
diff --git a/src/libnm-systemd-shared/src/basic/env-util.c b/src/libnm-systemd-shared/src/basic/env-util.c
index 2fe7332c..8dd52c09 100644
--- a/src/libnm-systemd-shared/src/basic/env-util.c
+++ b/src/libnm-systemd-shared/src/basic/env-util.c
@@ -13,6 +13,7 @@
 #include "errno-util.h"
 #include "escape.h"
 #include "extract-word.h"
+#include "log.h"
 #include "macro.h"
 #include "parse-util.h"
 #include "path-util.h"
@@ -549,7 +550,7 @@ char* strv_env_get_n(char * const *l, const char *name, size_t k, ReplaceEnvFlag
                         return NULL;
 
                 t = strndupa_safe(name, k);
-                return getenv(t);
+                return secure_getenv(t);
         };
 
         return NULL;
@@ -700,7 +701,7 @@ int replace_env_full(
         _cleanup_strv_free_ char **unset_variables = NULL, **bad_variables = NULL;
         const char *e, *word = format, *test_value = NULL; /* test_value is initialized to appease gcc */
         _cleanup_free_ char *s = NULL;
-        char ***pu, ***pb, *k;
+        char ***pu, ***pb;
         size_t i, len = 0; /* len is initialized to appease gcc */
         int nest = 0, r;
 
@@ -722,33 +723,24 @@ int replace_env_full(
 
                 case CURLY:
                         if (*e == '{') {
-                                k = strnappend(s, word, e-word-1);
-                                if (!k)
+                                if (!strextendn(&s, word, e-word-1))
                                         return -ENOMEM;
 
-                                free_and_replace(s, k);
-
                                 word = e-1;
                                 state = VARIABLE;
                                 nest++;
 
                         } else if (*e == '$') {
-                                k = strnappend(s, word, e-word);
-                                if (!k)
+                                if (!strextendn(&s, word, e-word))
                                         return -ENOMEM;
 
-                                free_and_replace(s, k);
-
                                 word = e+1;
                                 state = WORD;
 
                         } else if (FLAGS_SET(flags, REPLACE_ENV_ALLOW_BRACELESS) && strchr(VALID_BASH_ENV_NAME_CHARS, *e)) {
-                                k = strnappend(s, word, e-word-1);
-                                if (!k)
+                                if (!strextendn(&s, word, e-word-1))
                                         return -ENOMEM;
 
-                                free_and_replace(s, k);
-
                                 word = e-1;
                                 state = VARIABLE_RAW;
 
@@ -1121,7 +1113,7 @@ int getenv_steal_erase(const char *name, char **ret) {
          * it from there. Usecase: reading passwords from the env block (which is a bad idea, but useful for
          * testing, and given that people are likely going to misuse this, be thorough) */
 
-        e = getenv(name);
+        e = secure_getenv(name);
         if (!e) {
                 if (ret)
                         *ret = NULL;
@@ -1145,25 +1137,6 @@ int getenv_steal_erase(const char *name, char **ret) {
         return 1;
 }
 
-int set_full_environment(char **env) {
-        int r;
-
-        clearenv();
-
-        STRV_FOREACH(e, env) {
-                _cleanup_free_ char *k = NULL, *v = NULL;
-
-                r = split_pair(*e, "=", &k, &v);
-                if (r < 0)
-                        return r;
-
-                if (setenv(k, v, /* overwrite= */ true) < 0)
-                        return -errno;
-        }
-
-        return 0;
-}
-
 int setenvf(const char *name, bool overwrite, const char *valuef, ...) {
         _cleanup_free_ char *value = NULL;
         va_list ap;
diff --git a/src/libnm-systemd-shared/src/basic/env-util.h b/src/libnm-systemd-shared/src/basic/env-util.h
index 203ed65b..52771ecc 100644
--- a/src/libnm-systemd-shared/src/basic/env-util.h
+++ b/src/libnm-systemd-shared/src/basic/env-util.h
@@ -82,6 +82,4 @@ int getenv_path_list(const char *name, char ***ret_paths);
 
 int getenv_steal_erase(const char *name, char **ret);
 
-int set_full_environment(char **env);
-
 int setenvf(const char *name, bool overwrite, const char *valuef, ...) _printf_(3,4);
diff --git a/src/libnm-systemd-shared/src/basic/errno-util.h b/src/libnm-systemd-shared/src/basic/errno-util.h
index 02572e3b..01b4d59e 100644
--- a/src/libnm-systemd-shared/src/basic/errno-util.h
+++ b/src/libnm-systemd-shared/src/basic/errno-util.h
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "assert-util.h"
 #include "macro.h"
 
 /* strerror(3) says that glibc uses a maximum length of 1024 bytes. */
diff --git a/src/libnm-systemd-shared/src/basic/escape.c b/src/libnm-systemd-shared/src/basic/escape.c
index e882aced..ff1d817c 100644
--- a/src/libnm-systemd-shared/src/basic/escape.c
+++ b/src/libnm-systemd-shared/src/basic/escape.c
@@ -82,10 +82,15 @@ char* cescape_length(const char *s, size_t n) {
         const char *f;
         char *r, *t;
 
+        /* Does C style string escaping. May be reversed with cunescape(). */
+
         assert(s || n == 0);
 
-        /* Does C style string escaping. May be reversed with
-         * cunescape(). */
+        if (n == SIZE_MAX)
+                n = strlen(s);
+
+        if (n > (SIZE_MAX - 1) / 4)
+                return NULL;
 
         r = new(char, n*4 + 1);
         if (!r)
@@ -99,12 +104,6 @@ char* cescape_length(const char *s, size_t n) {
         return r;
 }
 
-char* cescape(const char *s) {
-        assert(s);
-
-        return cescape_length(s, strlen(s));
-}
-
 int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul) {
         int r = 1;
 
@@ -452,7 +451,7 @@ char* escape_non_printable_full(const char *str, size_t console_width, XEscapeFl
 char* octescape(const char *s, size_t len) {
         char *buf, *t;
 
-        /* Escapes all chars in bad, in addition to \ and " chars, in \nnn style escaping. */
+        /* Escapes \ and " chars, in \nnn style escaping. */
 
         assert(s || len == 0);
 
@@ -482,13 +481,19 @@ char* octescape(const char *s, size_t len) {
         return buf;
 }
 
-char* decescape(const char *s, const char *bad, size_t len) {
+char* decescape(const char *s, size_t len, const char *bad) {
         char *buf, *t;
 
         /* Escapes all chars in bad, in addition to \ and " chars, in \nnn decimal style escaping. */
 
         assert(s || len == 0);
 
+        if (len == SIZE_MAX)
+                len = strlen(s);
+
+        if (len > (SIZE_MAX - 1) / 4)
+                return NULL;
+
         t = buf = new(char, len * 4 + 1);
         if (!buf)
                 return NULL;
diff --git a/src/libnm-systemd-shared/src/basic/escape.h b/src/libnm-systemd-shared/src/basic/escape.h
index 65caf0db..05c27f68 100644
--- a/src/libnm-systemd-shared/src/basic/escape.h
+++ b/src/libnm-systemd-shared/src/basic/escape.h
@@ -8,7 +8,6 @@
 #include <uchar.h>
 
 #include "string-util.h"
-#include "missing_type.h"
 
 /* What characters are special in the shell? */
 /* must be escaped outside and inside double-quotes */
@@ -41,9 +40,11 @@ typedef enum ShellEscapeFlags {
         SHELL_ESCAPE_EMPTY = 1 << 2, /* Format empty arguments as "". */
 } ShellEscapeFlags;
 
-char* cescape(const char *s);
-char* cescape_length(const char *s, size_t n);
 int cescape_char(char c, char *buf);
+char* cescape_length(const char *s, size_t n) _nonnull_if_nonzero_(1, 2);
+static inline char* cescape(const char *s) {
+        return cescape_length(s, SIZE_MAX);
+}
 
 int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul);
 
@@ -65,7 +66,7 @@ static inline char* xescape(const char *s, const char *bad) {
         return xescape_full(s, bad, SIZE_MAX, 0);
 }
 char* octescape(const char *s, size_t len);
-char* decescape(const char *s, const char *bad, size_t len);
+char* decescape(const char *s, size_t len, const char *bad) _nonnull_if_nonzero_(1, 2);
 char* escape_non_printable_full(const char *str, size_t console_width, XEscapeFlags flags);
 
 char* shell_escape(const char *s, const char *bad);
diff --git a/src/libnm-systemd-shared/src/basic/ether-addr-util.c b/src/libnm-systemd-shared/src/basic/ether-addr-util.c
index 2643c974..168fd329 100644
--- a/src/libnm-systemd-shared/src/basic/ether-addr-util.c
+++ b/src/libnm-systemd-shared/src/basic/ether-addr-util.c
@@ -10,6 +10,7 @@
 
 #include "ether-addr-util.h"
 #include "hexdecoct.h"
+#include "log.h"
 #include "macro.h"
 #include "string-util.h"
 
@@ -87,22 +88,6 @@ char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR
         return buffer;
 }
 
-int ether_addr_to_string_alloc(const struct ether_addr *addr, char **ret) {
-        char *buf;
-
-        assert(addr);
-        assert(ret);
-
-        buf = new(char, ETHER_ADDR_TO_STRING_MAX);
-        if (!buf)
-                return -ENOMEM;
-
-        ether_addr_to_string(addr, buf);
-
-        *ret = buf;
-        return 0;
-}
-
 int ether_addr_compare(const struct ether_addr *a, const struct ether_addr *b) {
         return memcmp(a, b, ETH_ALEN);
 }
diff --git a/src/libnm-systemd-shared/src/basic/ether-addr-util.h b/src/libnm-systemd-shared/src/basic/ether-addr-util.h
index 8ebf9c03..168c6500 100644
--- a/src/libnm-systemd-shared/src/basic/ether-addr-util.h
+++ b/src/libnm-systemd-shared/src/basic/ether-addr-util.h
@@ -72,7 +72,6 @@ extern const struct hash_ops hw_addr_hash_ops_free;
 
 #define ETHER_ADDR_TO_STRING_MAX (3*6)
 char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]);
-int ether_addr_to_string_alloc(const struct ether_addr *addr, char **ret);
 /* Use only as function argument, never stand-alone! */
 #define ETHER_ADDR_TO_STR(addr) ether_addr_to_string((addr), (char[ETHER_ADDR_TO_STRING_MAX]){})
 
diff --git a/src/libnm-systemd-shared/src/basic/fd-util.c b/src/libnm-systemd-shared/src/basic/fd-util.c
index e052a6a2..fd6a95e0 100644
--- a/src/libnm-systemd-shared/src/basic/fd-util.c
+++ b/src/libnm-systemd-shared/src/basic/fd-util.c
@@ -4,9 +4,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
-#if WANT_LINUX_FS_H
-#include <linux/fs.h>
-#endif
+#include <linux/kcmp.h>
 #include <linux/magic.h>
 #include <sys/ioctl.h>
 #include <sys/resource.h>
@@ -19,6 +17,7 @@
 #include "fileio.h"
 #include "fs-util.h"
 #include "io-util.h"
+#include "log.h"
 #include "macro.h"
 #include "missing_fcntl.h"
 #include "missing_fs.h"
@@ -31,7 +30,6 @@
 #include "sort-util.h"
 #include "stat-util.h"
 #include "stdio-util.h"
-#include "tmpfile-util.h"
 
 /* The maximum number of iterations in the loop to close descriptors in the fallback case
  * when /proc/self/fd/ is inaccessible. */
@@ -1012,13 +1010,13 @@ int fd_verify_safe_flags_full(int fd, int extra_flags) {
         if (flags < 0)
                 return -errno;
 
-        unexpected_flags = flags & ~(O_ACCMODE|O_NOFOLLOW|RAW_O_LARGEFILE|extra_flags);
+        unexpected_flags = flags & ~(O_ACCMODE_STRICT|O_NOFOLLOW|RAW_O_LARGEFILE|extra_flags);
         if (unexpected_flags != 0)
                 return log_debug_errno(SYNTHETIC_ERRNO(EREMOTEIO),
                                        "Unexpected flags set for extrinsic fd: 0%o",
                                        (unsigned) unexpected_flags);
 
-        return flags & (O_ACCMODE | extra_flags); /* return the flags variable, but remove the noise */
+        return flags & (O_ACCMODE_STRICT | extra_flags); /* return the flags variable, but remove the noise */
 }
 
 int read_nr_open(void) {
@@ -1095,30 +1093,27 @@ int path_is_root_at(int dir_fd, const char *path) {
 }
 
 int fds_are_same_mount(int fd1, int fd2) {
-        STRUCT_NEW_STATX_DEFINE(st1);
-        STRUCT_NEW_STATX_DEFINE(st2);
+        struct statx sx1 = {}, sx2 = {}; /* explicitly initialize the struct to make msan silent. */
         int r;
 
         assert(fd1 >= 0);
         assert(fd2 >= 0);
 
-        r = statx_fallback(fd1, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &st1.sx);
-        if (r < 0)
-                return r;
+        if (statx(fd1, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sx1) < 0)
+                return -errno;
 
-        r = statx_fallback(fd2, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &st2.sx);
-        if (r < 0)
-                return r;
+        if (statx(fd2, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sx2) < 0)
+                return -errno;
 
         /* First, compare inode. If these are different, the fd does not point to the root directory "/". */
-        if (!statx_inode_same(&st1.sx, &st2.sx))
+        if (!statx_inode_same(&sx1, &sx2))
                 return false;
 
         /* Note, statx() does not provide the mount ID and path_get_mnt_id_at() does not work when an old
          * kernel is used. In that case, let's assume that we do not have such spurious mount points in an
          * early boot stage, and silently skip the following check. */
 
-        if (!FLAGS_SET(st1.nsx.stx_mask, STATX_MNT_ID)) {
+        if (!FLAGS_SET(sx1.stx_mask, STATX_MNT_ID)) {
                 int mntid;
 
                 r = path_get_mnt_id_at_fallback(fd1, "", &mntid);
@@ -1126,11 +1121,11 @@ int fds_are_same_mount(int fd1, int fd2) {
                         return r;
                 assert(mntid >= 0);
 
-                st1.nsx.stx_mnt_id = mntid;
-                st1.nsx.stx_mask |= STATX_MNT_ID;
+                sx1.stx_mnt_id = mntid;
+                sx1.stx_mask |= STATX_MNT_ID;
         }
 
-        if (!FLAGS_SET(st2.nsx.stx_mask, STATX_MNT_ID)) {
+        if (!FLAGS_SET(sx2.stx_mask, STATX_MNT_ID)) {
                 int mntid;
 
                 r = path_get_mnt_id_at_fallback(fd2, "", &mntid);
@@ -1138,15 +1133,15 @@ int fds_are_same_mount(int fd1, int fd2) {
                         return r;
                 assert(mntid >= 0);
 
-                st2.nsx.stx_mnt_id = mntid;
-                st2.nsx.stx_mask |= STATX_MNT_ID;
+                sx2.stx_mnt_id = mntid;
+                sx2.stx_mask |= STATX_MNT_ID;
         }
 
-        return statx_mount_same(&st1.nsx, &st2.nsx);
+        return statx_mount_same(&sx1, &sx2);
 }
 
 const char* accmode_to_string(int flags) {
-        switch (flags & O_ACCMODE) {
+        switch (flags & O_ACCMODE_STRICT) {
         case O_RDONLY:
                 return "ro";
         case O_WRONLY:
diff --git a/src/libnm-systemd-shared/src/basic/fd-util.h b/src/libnm-systemd-shared/src/basic/fd-util.h
index 93b254c6..59c43e81 100644
--- a/src/libnm-systemd-shared/src/basic/fd-util.h
+++ b/src/libnm-systemd-shared/src/basic/fd-util.h
@@ -8,6 +8,7 @@
 #include <sys/socket.h>
 
 #include "macro.h"
+#include "memory-util.h"
 #include "missing_fcntl.h"
 #include "stdio-util.h"
 
diff --git a/src/libnm-systemd-shared/src/basic/fileio.c b/src/libnm-systemd-shared/src/basic/fileio.c
index 78231228..0d83faf2 100644
--- a/src/libnm-systemd-shared/src/basic/fileio.c
+++ b/src/libnm-systemd-shared/src/basic/fileio.c
@@ -247,17 +247,13 @@ static int write_string_file_atomic_at(
         }
 
         r = fopen_temporary_at(dir_fd, fn, &f, &p);
+        if (call_label_ops_post)
+                /* If fopen_temporary_at() failed in the above, propagate the error code, and ignore failures
+                 * in label_ops_post(). */
+                RET_GATHER(r, label_ops_post(f ? fileno(f) : dir_fd, f ? NULL : fn, /* created= */ !!f));
         if (r < 0)
                 goto fail;
 
-        if (call_label_ops_post) {
-                call_label_ops_post = false;
-
-                r = label_ops_post(fileno(f), /* path= */ NULL, /* created= */ true);
-                if (r < 0)
-                        goto fail;
-        }
-
         r = write_string_stream_full(f, line, flags, ts);
         if (r < 0)
                 goto fail;
@@ -280,9 +276,6 @@ static int write_string_file_atomic_at(
         return 0;
 
 fail:
-        if (call_label_ops_post)
-                (void) label_ops_post(f ? fileno(f) : dir_fd, f ? NULL : fn, /* created= */ !!f);
-
         if (f)
                 (void) unlinkat(dir_fd, p, 0);
         return r;
@@ -296,24 +289,27 @@ int write_string_file_full(
                 const struct timespec *ts,
                 const char *label_fn) {
 
-        bool call_label_ops_post = false, made_file = false;
+        bool made_file = false;
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_close_ int fd = -EBADF;
         int r;
 
-        assert(fn);
+        assert(dir_fd == AT_FDCWD || dir_fd >= 0);
         assert(line);
 
         /* We don't know how to verify whether the file contents was already on-disk. */
         assert(!((flags & WRITE_STRING_FILE_VERIFY_ON_FAILURE) && (flags & WRITE_STRING_FILE_SYNC)));
 
         if (flags & WRITE_STRING_FILE_MKDIR_0755) {
+                assert(fn);
+
                 r = mkdirat_parents(dir_fd, fn, 0755);
                 if (r < 0)
                         return r;
         }
 
         if (flags & WRITE_STRING_FILE_ATOMIC) {
+                assert(fn);
                 assert(flags & WRITE_STRING_FILE_CREATE);
 
                 r = write_string_file_atomic_at(dir_fd, fn, line, flags, ts);
@@ -323,37 +319,39 @@ int write_string_file_full(
                 return r;
         }
 
-        mode_t mode = write_string_file_flags_to_mode(flags);
-
-        if (FLAGS_SET(flags, WRITE_STRING_FILE_LABEL|WRITE_STRING_FILE_CREATE)) {
-                r = label_ops_pre(dir_fd, label_fn ?: fn, mode);
-                if (r < 0)
-                        goto fail;
-
-                call_label_ops_post = true;
-        }
-
         /* We manually build our own version of fopen(..., "we") that works without O_CREAT and with O_NOFOLLOW if needed. */
-        fd = openat_report_new(
-                        dir_fd, fn, O_CLOEXEC | O_NOCTTY |
-                        (FLAGS_SET(flags, WRITE_STRING_FILE_NOFOLLOW) ? O_NOFOLLOW : 0) |
-                        (FLAGS_SET(flags, WRITE_STRING_FILE_CREATE) ? O_CREAT : 0) |
-                        (FLAGS_SET(flags, WRITE_STRING_FILE_TRUNCATE) ? O_TRUNC : 0) |
-                        (FLAGS_SET(flags, WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL) ? O_RDWR : O_WRONLY),
-                        mode,
-                        &made_file);
-        if (fd < 0) {
-                r = fd;
-                goto fail;
-        }
+        if (isempty(fn))
+                r = fd = fd_reopen(
+                                ASSERT_FD(dir_fd), O_CLOEXEC | O_NOCTTY |
+                                (FLAGS_SET(flags, WRITE_STRING_FILE_TRUNCATE) ? O_TRUNC : 0) |
+                                (FLAGS_SET(flags, WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL) ? O_RDWR : O_WRONLY));
+        else {
+                mode_t mode = write_string_file_flags_to_mode(flags);
+                bool call_label_ops_post = false;
+
+                if (FLAGS_SET(flags, WRITE_STRING_FILE_LABEL|WRITE_STRING_FILE_CREATE)) {
+                        r = label_ops_pre(dir_fd, label_fn ?: fn, mode);
+                        if (r < 0)
+                                goto fail;
 
-        if (call_label_ops_post) {
-                call_label_ops_post = false;
+                        call_label_ops_post = true;
+                }
 
-                r = label_ops_post(fd, /* path= */ NULL, made_file);
-                if (r < 0)
-                        goto fail;
+                r = fd = openat_report_new(
+                                dir_fd, fn, O_CLOEXEC | O_NOCTTY |
+                                (FLAGS_SET(flags, WRITE_STRING_FILE_NOFOLLOW) ? O_NOFOLLOW : 0) |
+                                (FLAGS_SET(flags, WRITE_STRING_FILE_CREATE) ? O_CREAT : 0) |
+                                (FLAGS_SET(flags, WRITE_STRING_FILE_TRUNCATE) ? O_TRUNC : 0) |
+                                (FLAGS_SET(flags, WRITE_STRING_FILE_SUPPRESS_REDUNDANT_VIRTUAL) ? O_RDWR : O_WRONLY),
+                                mode,
+                                &made_file);
+                if (call_label_ops_post)
+                        /* If openat_report_new() failed in the above, propagate the error code, and ignore
+                         * failures in label_ops_post(). */
+                        RET_GATHER(r, label_ops_post(fd >= 0 ? fd : dir_fd, fd >= 0 ? NULL : fn, made_file));
         }
+        if (r < 0)
+                goto fail;
 
         r = take_fdopen_unlocked(&fd, "w", &f);
         if (r < 0)
@@ -369,9 +367,6 @@ int write_string_file_full(
         return 0;
 
 fail:
-        if (call_label_ops_post)
-                (void) label_ops_post(fd >= 0 ? fd : dir_fd, fd >= 0 ? NULL : fn, made_file);
-
         if (made_file)
                 (void) unlinkat(dir_fd, fn, 0);
 
@@ -383,7 +378,7 @@ fail:
 
         /* OK, the operation failed, but let's see if the right contents in place already. If so, eat up the
          * error. */
-        if (verify_file(fn, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE) || (flags & WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE)) > 0)
+        if (verify_file_at(dir_fd, fn, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE) || (flags & WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE)) > 0)
                 return 0;
 
         return r;
@@ -445,7 +440,6 @@ int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_ext
         size_t l, k;
         int r;
 
-        assert(fn);
         assert(blob);
 
         l = strlen(blob);
@@ -457,7 +451,7 @@ int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_ext
         if (!buf)
                 return -ENOMEM;
 
-        r = fopen_unlocked_at(dir_fd, fn, "re", 0, &f);
+        r = fopen_unlocked_at(dir_fd, strempty(fn), "re", 0, &f);
         if (r < 0)
                 return r;
 
@@ -478,7 +472,13 @@ int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_ext
 }
 #endif /* NM_IGNORED */
 
-int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *ret_size) {
+int read_virtual_file_at(
+                int dir_fd,
+                const char *filename,
+                size_t max_size,
+                char **ret_contents,
+                size_t *ret_size) {
+
         _cleanup_free_ char *buf = NULL;
         size_t n, size;
         int n_retries;
@@ -495,11 +495,23 @@ int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *r
          * max_size specifies a limit on the bytes read. If max_size is SIZE_MAX, the full file is read. If
          * the full file is too large to read, an error is returned. For other values of max_size, *partial
          * contents* may be returned. (Though the read is still done using one syscall.) Returns 0 on
-         * partial success, 1 if untruncated contents were read. */
+         * partial success, 1 if untruncated contents were read.
+         *
+         * Rule: for kernfs files using "seq_file" → use regular read_full_file_at()
+         *       for kernfs files using "raw" → use read_virtual_file_at()
+         */
 
-        assert(fd >= 0);
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
         assert(max_size <= READ_VIRTUAL_BYTES_MAX || max_size == SIZE_MAX);
 
+        _cleanup_close_ int fd = -EBADF;
+        if (isempty(filename))
+                fd = fd_reopen(ASSERT_FD(dir_fd), O_RDONLY | O_NOCTTY | O_CLOEXEC);
+        else
+                fd = RET_NERRNO(openat(dir_fd, filename, O_RDONLY | O_NOCTTY | O_CLOEXEC));
+        if (fd < 0)
+                return fd;
+
         /* Limit the number of attempts to read the number of bytes returned by fstat(). */
         n_retries = 3;
 
@@ -623,31 +635,6 @@ int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *r
         return !truncated;
 }
 
-int read_virtual_file_at(
-                int dir_fd,
-                const char *filename,
-                size_t max_size,
-                char **ret_contents,
-                size_t *ret_size) {
-
-        _cleanup_close_ int fd = -EBADF;
-
-        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
-
-        if (!filename) {
-                if (dir_fd == AT_FDCWD)
-                        return -EBADF;
-
-                return read_virtual_file_fd(dir_fd, max_size, ret_contents, ret_size);
-        }
-
-        fd = openat(dir_fd, filename, O_RDONLY | O_NOCTTY | O_CLOEXEC);
-        if (fd < 0)
-                return -errno;
-
-        return read_virtual_file_fd(fd, max_size, ret_contents, ret_size);
-}
-
 int read_full_stream_full(
                 FILE *f,
                 const char *filename,
@@ -727,7 +714,7 @@ int read_full_stream_full(
                 size_t k;
 
                 /* If we shall fail when reading overly large data, then read exactly one byte more than the
-                 * specified size at max, since that'll tell us if there's anymore data beyond the limit*/
+                 * specified size at max, since that'll tell us if there's anymore data beyond the limit. */
                 if (FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) && n_next > size)
                         n_next = size + 1;
 
@@ -907,74 +894,46 @@ int script_get_shebang_interpreter(const char *path, char **ret) {
         return 0;
 }
 
-/**
- * Retrieve one field from a file like /proc/self/status.  pattern
- * should not include whitespace or the delimiter (':'). pattern matches only
- * the beginning of a line. Whitespace before ':' is skipped. Whitespace and
- * zeros after the ':' will be skipped. field must be freed afterwards.
- * terminator specifies the terminating characters of the field value (not
- * included in the value).
- */
-int get_proc_field(const char *filename, const char *pattern, const char *terminator, char **field) {
-        _cleanup_free_ char *status = NULL;
-        char *t, *f;
+int get_proc_field(const char *path, const char *key, char **ret) {
+        _cleanup_fclose_ FILE *f = NULL;
         int r;
 
-        assert(terminator);
-        assert(filename);
-        assert(pattern);
-        assert(field);
+        /* Retrieve one field from a file like /proc/self/status. "key" matches the beginning of the line
+         * and should not include whitespace or the delimiter (':').
+         * Whitespaces after the ':' will be skipped. Only the first element is returned
+         * (i.e. for /proc/meminfo line "MemTotal: 1024 kB" -> return "1024"). */
+
+        assert(path);
+        assert(key);
 
-        r = read_full_virtual_file(filename, &status, NULL);
+        r = fopen_unlocked(path, "re", &f);
+        if (r == -ENOENT && proc_mounted() == 0)
+                return -ENOSYS;
         if (r < 0)
                 return r;
 
-        t = status;
-
-        do {
-                bool pattern_ok;
-
-                do {
-                        t = strstr(t, pattern);
-                        if (!t)
-                                return -ENOENT;
-
-                        /* Check that pattern occurs in beginning of line. */
-                        pattern_ok = (t == status || t[-1] == '\n');
-
-                        t += strlen(pattern);
-
-                } while (!pattern_ok);
-
-                t += strspn(t, " \t");
-                if (!*t)
-                        return -ENOENT;
-
-        } while (*t != ':');
-
-        t++;
-
-        if (*t) {
-                t += strspn(t, " \t");
-
-                /* Also skip zeros, because when this is used for
-                 * capabilities, we don't want the zeros. This way the
-                 * same capability set always maps to the same string,
-                 * irrespective of the total capability set size. For
-                 * other numbers it shouldn't matter. */
-                t += strspn(t, "0");
-                /* Back off one char if there's nothing but whitespace
-                   and zeros */
-                if (!*t || isspace(*t))
-                        t--;
+        for (;;) {
+                 _cleanup_free_ char *line = NULL;
+
+                 r = read_line(f, LONG_LINE_MAX, &line);
+                 if (r < 0)
+                         return r;
+                 if (r == 0)
+                         return -ENODATA;
+
+                 char *l = startswith(line, key);
+                 if (l && *l == ':') {
+                         if (ret) {
+                                 char *s = strdupcspn(skip_leading_chars(l + 1, " \t"), WHITESPACE);
+                                 if (!s)
+                                         return -ENOMEM;
+
+                                 *ret = s;
+                         }
+
+                         return 0;
+                 }
         }
-
-        f = strdupcspn(t, terminator);
-        if (!f)
-                return -ENOMEM;
-
-        *field = f;
-        return 0;
 }
 
 DIR* xopendirat(int dir_fd, const char *name, int flags) {
diff --git a/src/libnm-systemd-shared/src/basic/fileio.h b/src/libnm-systemd-shared/src/basic/fileio.h
index bd053050..eff98802 100644
--- a/src/libnm-systemd-shared/src/basic/fileio.h
+++ b/src/libnm-systemd-shared/src/basic/fileio.h
@@ -56,6 +56,9 @@ int write_string_file_full(int dir_fd, const char *fn, const char *line, WriteSt
 static inline int write_string_file_at(int dir_fd, const char *fn, const char *line, WriteStringFileFlags flags) {
         return write_string_file_full(dir_fd, fn, line, flags, NULL, NULL);
 }
+static inline int write_string_file_fd(int dir_fd, const char *line, WriteStringFileFlags flags) {
+        return write_string_file_at(dir_fd, NULL, line, flags);
+}
 static inline int write_string_file(const char *fn, const char *line, WriteStringFileFlags flags) {
         return write_string_file_at(AT_FDCWD, fn, line, flags);
 }
@@ -75,8 +78,10 @@ static inline int read_full_file(const char *filename, char **ret_contents, size
         return read_full_file_full(AT_FDCWD, filename, UINT64_MAX, SIZE_MAX, 0, NULL, ret_contents, ret_size);
 }
 
-int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *ret_size);
 int read_virtual_file_at(int dir_fd, const char *filename, size_t max_size, char **ret_contents, size_t *ret_size);
+static inline int read_virtual_file_fd(int fd, size_t max_size, char **ret_contents, size_t *ret_size) {
+        return read_virtual_file_at(fd, NULL, max_size, ret_contents, ret_size);
+}
 static inline int read_virtual_file(const char *filename, size_t max_size, char **ret_contents, size_t *ret_size) {
         return read_virtual_file_at(AT_FDCWD, filename, max_size, ret_contents, ret_size);
 }
@@ -90,13 +95,10 @@ static inline int read_full_stream(FILE *f, char **ret_contents, size_t *ret_siz
 }
 
 int verify_file_at(int dir_fd, const char *fn, const char *blob, bool accept_extra_nl);
-static inline int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
-        return verify_file_at(AT_FDCWD, fn, blob, accept_extra_nl);
-}
 
 int script_get_shebang_interpreter(const char *path, char **ret);
 
-int get_proc_field(const char *filename, const char *pattern, const char *terminator, char **field);
+int get_proc_field(const char *path, const char *key, char **ret);
 
 DIR* xopendirat(int dir_fd, const char *name, int flags);
 
diff --git a/src/libnm-systemd-shared/src/basic/format-ifname.c b/src/libnm-systemd-shared/src/basic/format-ifname.c
index 81592998..57f39c30 100644
--- a/src/libnm-systemd-shared/src/basic/format-ifname.c
+++ b/src/libnm-systemd-shared/src/basic/format-ifname.c
@@ -3,6 +3,8 @@
 #include "nm-sd-adapt-shared.h"
 
 #include "format-ifname.h"
+#include "log.h"
+#include "stdio-util.h"
 #include "string-util.h"
 
 assert_cc(STRLEN("%") + DECIMAL_STR_MAX(int) <= IF_NAMESIZE);
diff --git a/src/libnm-systemd-shared/src/basic/format-util.c b/src/libnm-systemd-shared/src/basic/format-util.c
index b2a5d2d0..6b767ef2 100644
--- a/src/libnm-systemd-shared/src/basic/format-util.c
+++ b/src/libnm-systemd-shared/src/basic/format-util.c
@@ -64,5 +64,4 @@ char* format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag) {
 finish:
         buf[l-1] = 0;
         return buf;
-
 }
diff --git a/src/libnm-systemd-shared/src/basic/fs-util.c b/src/libnm-systemd-shared/src/basic/fs-util.c
index 0202933d..bdc341f6 100644
--- a/src/libnm-systemd-shared/src/basic/fs-util.c
+++ b/src/libnm-systemd-shared/src/basic/fs-util.c
@@ -3,11 +3,11 @@
 #include "nm-sd-adapt-shared.h"
 
 #include <errno.h>
+#include <linux/falloc.h>
+#include <linux/magic.h>
 #include <stddef.h>
 #include <stdlib.h>
 #include <sys/file.h>
-#include <linux/falloc.h>
-#include <linux/magic.h>
 #include <unistd.h>
 
 #include "alloc-util.h"
@@ -80,6 +80,11 @@ int rmdir_parents(const char *path, const char *stop) {
 int rename_noreplace(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) {
         int r;
 
+        assert(olddirfd >= 0 || olddirfd == AT_FDCWD);
+        assert(oldpath);
+        assert(newdirfd >= 0 || newdirfd == AT_FDCWD);
+        assert(newpath);
+
         /* Try the ideal approach first */
         if (renameat2(olddirfd, oldpath, newdirfd, newpath, RENAME_NOREPLACE) >= 0)
                 return 0;
@@ -792,7 +797,7 @@ int unlinkat_deallocate(int fd, const char *name, UnlinkDeallocateFlags flags) {
                 }
         }
 
-        /* Don't dallocate if there's nothing to deallocate or if the file is linked elsewhere */
+        /* Don't deallocate if there's nothing to deallocate or if the file is linked elsewhere */
         if (st.st_blocks == 0 || st.st_nlink > 0)
                 return 0;
 
@@ -1041,7 +1046,7 @@ int open_mkdir_at_full(int dirfd, const char *path, int flags, XOpenFlags xopen_
 
         if (flags & ~(O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_EXCL|O_NOATIME|O_NOFOLLOW|O_PATH))
                 return -EINVAL;
-        if ((flags & O_ACCMODE) != O_RDONLY)
+        if ((flags & O_ACCMODE_STRICT) != O_RDONLY)
                 return -EINVAL;
 
         /* Note that O_DIRECTORY|O_NOFOLLOW is implied, but we allow specifying it anyway. The following
@@ -1264,7 +1269,7 @@ int xopenat_full(int dir_fd, const char *path, int open_flags, XOpenFlags xopen_
         }
 
         if (FLAGS_SET(xopen_flags, XO_NOCOW)) {
-                r = chattr_fd(fd, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
+                r = chattr_fd(fd, FS_NOCOW_FL, FS_NOCOW_FL);
                 if (r < 0 && !ERRNO_IS_NOT_SUPPORTED(r))
                         goto error;
         }
diff --git a/src/libnm-systemd-shared/src/basic/fs-util.h b/src/libnm-systemd-shared/src/basic/fs-util.h
index eb031a0c..b2c01079 100644
--- a/src/libnm-systemd-shared/src/basic/fs-util.h
+++ b/src/libnm-systemd-shared/src/basic/fs-util.h
@@ -172,3 +172,12 @@ static inline int at_flags_normalize_nofollow(int flags) {
                 flags |= AT_SYMLINK_NOFOLLOW;
         return flags;
 }
+
+static inline int at_flags_normalize_follow(int flags) {
+        if (FLAGS_SET(flags, AT_SYMLINK_NOFOLLOW)) {
+                assert(!FLAGS_SET(flags, AT_SYMLINK_FOLLOW));
+                flags &= ~AT_SYMLINK_NOFOLLOW;
+        } else
+                flags |= AT_SYMLINK_FOLLOW;
+        return flags;
+}
diff --git a/src/libnm-systemd-shared/src/basic/glyph-util.c b/src/libnm-systemd-shared/src/basic/glyph-util.c
index d38698b6..aedd47c2 100644
--- a/src/libnm-systemd-shared/src/basic/glyph-util.c
+++ b/src/libnm-systemd-shared/src/basic/glyph-util.c
@@ -25,7 +25,7 @@ bool emoji_enabled(void) {
         return cached_emoji_enabled;
 }
 
-const char* special_glyph_full(SpecialGlyph code, bool force_utf) {
+const char* glyph_full(Glyph code, bool force_utf) {
 
         /* A list of a number of interesting unicode glyphs we can use to decorate our output. It's probably wise to be
          * conservative here, and primarily stick to the glyphs defined in the eurlatgr font, so that display still
@@ -34,133 +34,139 @@ const char* special_glyph_full(SpecialGlyph code, bool force_utf) {
          * http://git.altlinux.org/people/legion/packages/kbd.git?p=kbd.git;a=blob;f=data/consolefonts/README.eurlatgr
          */
 
-        static const char* const draw_table[2][_SPECIAL_GLYPH_MAX] = {
+        static const char* const draw_table[2][_GLYPH_MAX] = {
                 /* ASCII fallback */
                 [false] = {
-                        [SPECIAL_GLYPH_TREE_VERTICAL]           = "| ",
-                        [SPECIAL_GLYPH_TREE_BRANCH]             = "|-",
-                        [SPECIAL_GLYPH_TREE_RIGHT]              = "`-",
-                        [SPECIAL_GLYPH_TREE_SPACE]              = "  ",
-                        [SPECIAL_GLYPH_TREE_TOP]                = ",-",
-                        [SPECIAL_GLYPH_VERTICAL_DOTTED]         = ":",
-                        [SPECIAL_GLYPH_HORIZONTAL_DOTTED]       = "-",
-                        [SPECIAL_GLYPH_HORIZONTAL_FAT]          = "=",
-                        [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = ">",
-                        [SPECIAL_GLYPH_BLACK_CIRCLE]            = "*",
-                        [SPECIAL_GLYPH_WHITE_CIRCLE]            = "*",
-                        [SPECIAL_GLYPH_MULTIPLICATION_SIGN]     = "x",
-                        [SPECIAL_GLYPH_CIRCLE_ARROW]            = "*",
-                        [SPECIAL_GLYPH_BULLET]                  = "*",
-                        [SPECIAL_GLYPH_MU]                      = "u",
-                        [SPECIAL_GLYPH_CHECK_MARK]              = "+",
-                        [SPECIAL_GLYPH_CROSS_MARK]              = "-",
-                        [SPECIAL_GLYPH_LIGHT_SHADE]             = "-",
-                        [SPECIAL_GLYPH_DARK_SHADE]              = "X",
-                        [SPECIAL_GLYPH_FULL_BLOCK]              = "#",
-                        [SPECIAL_GLYPH_SIGMA]                   = "S",
-                        [SPECIAL_GLYPH_ARROW_UP]                = "^",
-                        [SPECIAL_GLYPH_ARROW_DOWN]              = "v",
-                        [SPECIAL_GLYPH_ARROW_LEFT]              = "<-",
-                        [SPECIAL_GLYPH_ARROW_RIGHT]             = "->",
-                        [SPECIAL_GLYPH_ELLIPSIS]                = "...",
-                        [SPECIAL_GLYPH_EXTERNAL_LINK]           = "[LNK]",
-                        [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = ":-]",
-                        [SPECIAL_GLYPH_HAPPY_SMILEY]            = ":-}",
-                        [SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY]   = ":-)",
-                        [SPECIAL_GLYPH_NEUTRAL_SMILEY]          = ":-|",
-                        [SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
-                        [SPECIAL_GLYPH_UNHAPPY_SMILEY]          = ":-{",
-                        [SPECIAL_GLYPH_DEPRESSED_SMILEY]        = ":-[",
-                        [SPECIAL_GLYPH_LOCK_AND_KEY]            = "o-,",
-                        [SPECIAL_GLYPH_TOUCH]                   = "O=",    /* Yeah, not very convincing, can you do it better? */
-                        [SPECIAL_GLYPH_RECYCLING]               = "~",
-                        [SPECIAL_GLYPH_DOWNLOAD]                = "\\",
-                        [SPECIAL_GLYPH_SPARKLES]                = "*",
-                        [SPECIAL_GLYPH_LOW_BATTERY]             = "!",
-                        [SPECIAL_GLYPH_WARNING_SIGN]            = "!",
-                        [SPECIAL_GLYPH_RED_CIRCLE]              = "o",
-                        [SPECIAL_GLYPH_YELLOW_CIRCLE]           = "o",
-                        [SPECIAL_GLYPH_BLUE_CIRCLE]             = "o",
-                        [SPECIAL_GLYPH_GREEN_CIRCLE]            = "o",
-                        [SPECIAL_GLYPH_SUPERHERO]               = "S",
-                        [SPECIAL_GLYPH_IDCARD]                  = "@",
+                        [GLYPH_SPACE]                   = " ",
+                        [GLYPH_TREE_VERTICAL]           = "| ",
+                        [GLYPH_TREE_BRANCH]             = "|-",
+                        [GLYPH_TREE_RIGHT]              = "`-",
+                        [GLYPH_TREE_SPACE]              = "  ",
+                        [GLYPH_TREE_TOP]                = ",-",
+                        [GLYPH_VERTICAL_DOTTED]         = ":",
+                        [GLYPH_HORIZONTAL_DOTTED]       = "-",
+                        [GLYPH_HORIZONTAL_FAT]          = "=",
+                        [GLYPH_TRIANGULAR_BULLET]       = ">",
+                        [GLYPH_BLACK_CIRCLE]            = "*",
+                        [GLYPH_WHITE_CIRCLE]            = "*",
+                        [GLYPH_MULTIPLICATION_SIGN]     = "x",
+                        [GLYPH_CIRCLE_ARROW]            = "*",
+                        [GLYPH_BULLET]                  = "*",
+                        [GLYPH_MU]                      = "u",
+                        [GLYPH_CHECK_MARK]              = "+",
+                        [GLYPH_CROSS_MARK]              = "-",
+                        [GLYPH_LIGHT_SHADE]             = "-",
+                        [GLYPH_DARK_SHADE]              = "X",
+                        [GLYPH_FULL_BLOCK]              = "#",
+                        [GLYPH_SIGMA]                   = "S",
+                        [GLYPH_ARROW_UP]                = "^",
+                        [GLYPH_ARROW_DOWN]              = "v",
+                        [GLYPH_ARROW_LEFT]              = "<-",
+                        [GLYPH_ARROW_RIGHT]             = "->",
+                        [GLYPH_ELLIPSIS]                = "...",
+                        [GLYPH_EXTERNAL_LINK]           = "[LNK]",
+                        [GLYPH_ECSTATIC_SMILEY]         = ":-]",
+                        [GLYPH_HAPPY_SMILEY]            = ":-}",
+                        [GLYPH_SLIGHTLY_HAPPY_SMILEY]   = ":-)",
+                        [GLYPH_NEUTRAL_SMILEY]          = ":-|",
+                        [GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
+                        [GLYPH_UNHAPPY_SMILEY]          = ":-{",
+                        [GLYPH_DEPRESSED_SMILEY]        = ":-[",
+                        [GLYPH_LOCK_AND_KEY]            = "o-,",
+                        [GLYPH_TOUCH]                   = "O=",    /* Yeah, not very convincing, can you do it better? */
+                        [GLYPH_RECYCLING]               = "~",
+                        [GLYPH_DOWNLOAD]                = "\\",
+                        [GLYPH_SPARKLES]                = "*",
+                        [GLYPH_LOW_BATTERY]             = "!",
+                        [GLYPH_WARNING_SIGN]            = "!",
+                        [GLYPH_RED_CIRCLE]              = "o",
+                        [GLYPH_YELLOW_CIRCLE]           = "o",
+                        [GLYPH_BLUE_CIRCLE]             = "o",
+                        [GLYPH_GREEN_CIRCLE]            = "o",
+                        [GLYPH_SUPERHERO]               = "S",
+                        [GLYPH_IDCARD]                  = "@",
+                        [GLYPH_HOME]                    = "^",
                 },
 
                 /* UTF-8 */
                 [true] = {
+                        /* This exists to allow more consistent handling of optional whitespace */
+                        [GLYPH_SPACE]                   = " ",
+
                         /* The following are multiple glyphs in both ASCII and in UNICODE */
-                        [SPECIAL_GLYPH_TREE_VERTICAL]           = u8"│ ",
-                        [SPECIAL_GLYPH_TREE_BRANCH]             = u8"├─",
-                        [SPECIAL_GLYPH_TREE_RIGHT]              = u8"└─",
-                        [SPECIAL_GLYPH_TREE_SPACE]              = u8"  ",
-                        [SPECIAL_GLYPH_TREE_TOP]                = u8"┌─",
+                        [GLYPH_TREE_VERTICAL]           = UTF8("│ "),
+                        [GLYPH_TREE_BRANCH]             = UTF8("├─"),
+                        [GLYPH_TREE_RIGHT]              = UTF8("└─"),
+                        [GLYPH_TREE_SPACE]              = UTF8("  "),
+                        [GLYPH_TREE_TOP]                = UTF8("┌─"),
 
                         /* Single glyphs in both cases */
-                        [SPECIAL_GLYPH_VERTICAL_DOTTED]         = u8"┆",
-                        [SPECIAL_GLYPH_HORIZONTAL_DOTTED]       = u8"┄",
-                        [SPECIAL_GLYPH_HORIZONTAL_FAT]          = u8"━",
-                        [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = u8"‣",
-                        [SPECIAL_GLYPH_BLACK_CIRCLE]            = u8"●",
-                        [SPECIAL_GLYPH_WHITE_CIRCLE]            = u8"○",
-                        [SPECIAL_GLYPH_MULTIPLICATION_SIGN]     = u8"×",
-                        [SPECIAL_GLYPH_CIRCLE_ARROW]            = u8"↻",
-                        [SPECIAL_GLYPH_BULLET]                  = u8"•",
-                        [SPECIAL_GLYPH_MU]                      = u8"μ",       /* actually called: GREEK SMALL LETTER MU */
-                        [SPECIAL_GLYPH_CHECK_MARK]              = u8"✓",
-                        [SPECIAL_GLYPH_CROSS_MARK]              = u8"✗",        /* actually called: BALLOT X */
-                        [SPECIAL_GLYPH_LIGHT_SHADE]             = u8"░",
-                        [SPECIAL_GLYPH_DARK_SHADE]              = u8"▒",
-                        [SPECIAL_GLYPH_FULL_BLOCK]              = u8"█",
-                        [SPECIAL_GLYPH_SIGMA]                   = u8"Σ",
-                        [SPECIAL_GLYPH_ARROW_UP]                = u8"↑",       /* actually called: UPWARDS ARROW */
-                        [SPECIAL_GLYPH_ARROW_DOWN]              = u8"↓",       /* actually called: DOWNWARDS ARROW */
+                        [GLYPH_VERTICAL_DOTTED]         = UTF8("┆"),
+                        [GLYPH_HORIZONTAL_DOTTED]       = UTF8("┄"),
+                        [GLYPH_HORIZONTAL_FAT]          = UTF8("━"),
+                        [GLYPH_TRIANGULAR_BULLET]       = UTF8("‣"),
+                        [GLYPH_BLACK_CIRCLE]            = UTF8("●"),
+                        [GLYPH_WHITE_CIRCLE]            = UTF8("○"),
+                        [GLYPH_MULTIPLICATION_SIGN]     = UTF8("×"),
+                        [GLYPH_CIRCLE_ARROW]            = UTF8("↻"),
+                        [GLYPH_BULLET]                  = UTF8("•"),
+                        [GLYPH_MU]                      = UTF8("μ"),       /* actually called: GREEK SMALL LETTER MU */
+                        [GLYPH_CHECK_MARK]              = UTF8("✓"),
+                        [GLYPH_CROSS_MARK]              = UTF8("✗"),        /* actually called: BALLOT X */
+                        [GLYPH_LIGHT_SHADE]             = UTF8("░"),
+                        [GLYPH_DARK_SHADE]              = UTF8("▒"),
+                        [GLYPH_FULL_BLOCK]              = UTF8("█"),
+                        [GLYPH_SIGMA]                   = UTF8("Σ"),
+                        [GLYPH_ARROW_UP]                = UTF8("↑"),       /* actually called: UPWARDS ARROW */
+                        [GLYPH_ARROW_DOWN]              = UTF8("↓"),       /* actually called: DOWNWARDS ARROW */
 
                         /* Single glyph in Unicode, two in ASCII */
-                        [SPECIAL_GLYPH_ARROW_LEFT]              = u8"←",       /* actually called: LEFTWARDS ARROW */
-                        [SPECIAL_GLYPH_ARROW_RIGHT]             = u8"→",       /* actually called: RIGHTWARDS ARROW */
+                        [GLYPH_ARROW_LEFT]              = UTF8("←"),       /* actually called: LEFTWARDS ARROW */
+                        [GLYPH_ARROW_RIGHT]             = UTF8("→"),       /* actually called: RIGHTWARDS ARROW */
 
                         /* Single glyph in Unicode, three in ASCII */
-                        [SPECIAL_GLYPH_ELLIPSIS]                = u8"…",       /* actually called: HORIZONTAL ELLIPSIS */
+                        [GLYPH_ELLIPSIS]                = UTF8("…"),       /* actually called: HORIZONTAL ELLIPSIS */
 
                         /* Three glyphs in Unicode, five in ASCII */
-                        [SPECIAL_GLYPH_EXTERNAL_LINK]           = u8"[🡕]",      /* actually called: NORTH EAST SANS-SERIF ARROW, enclosed in [] */
+                        [GLYPH_EXTERNAL_LINK]           = UTF8("[🡕]"),      /* actually called: NORTH EAST SANS-SERIF ARROW, enclosed in [] */
 
                         /* These smileys are a single glyph in Unicode, and three in ASCII */
-                        [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = u8"😇",       /* actually called: SMILING FACE WITH HALO */
-                        [SPECIAL_GLYPH_HAPPY_SMILEY]            = u8"😀",       /* actually called: GRINNING FACE */
-                        [SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY]   = u8"🙂",       /* actually called: SLIGHTLY SMILING FACE */
-                        [SPECIAL_GLYPH_NEUTRAL_SMILEY]          = u8"😐",       /* actually called: NEUTRAL FACE */
-                        [SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = u8"🙁",       /* actually called: SLIGHTLY FROWNING FACE */
-                        [SPECIAL_GLYPH_UNHAPPY_SMILEY]          = u8"😨",       /* actually called: FEARFUL FACE */
-                        [SPECIAL_GLYPH_DEPRESSED_SMILEY]        = u8"🤢",       /* actually called: NAUSEATED FACE */
+                        [GLYPH_ECSTATIC_SMILEY]         = UTF8("😇"),       /* actually called: SMILING FACE WITH HALO */
+                        [GLYPH_HAPPY_SMILEY]            = UTF8("😀"),       /* actually called: GRINNING FACE */
+                        [GLYPH_SLIGHTLY_HAPPY_SMILEY]   = UTF8("🙂"),       /* actually called: SLIGHTLY SMILING FACE */
+                        [GLYPH_NEUTRAL_SMILEY]          = UTF8("😐"),       /* actually called: NEUTRAL FACE */
+                        [GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = UTF8("🙁"),       /* actually called: SLIGHTLY FROWNING FACE */
+                        [GLYPH_UNHAPPY_SMILEY]          = UTF8("😨"),       /* actually called: FEARFUL FACE */
+                        [GLYPH_DEPRESSED_SMILEY]        = UTF8("🤢"),       /* actually called: NAUSEATED FACE */
 
                         /* This emoji is a single character cell glyph in Unicode, and three in ASCII */
-                        [SPECIAL_GLYPH_LOCK_AND_KEY]            = u8"🔐",       /* actually called: CLOSED LOCK WITH KEY */
+                        [GLYPH_LOCK_AND_KEY]            = UTF8("🔐"),       /* actually called: CLOSED LOCK WITH KEY */
 
                         /* This emoji is a single character cell glyph in Unicode, and two in ASCII */
-                        [SPECIAL_GLYPH_TOUCH]                   = u8"👆",       /* actually called: BACKHAND INDEX POINTING UP */
+                        [GLYPH_TOUCH]                   = UTF8("👆"),       /* actually called: BACKHAND INDEX POINTING UP */
 
                         /* These four emojis are single character cell glyphs in Unicode and also in ASCII. */
-                        [SPECIAL_GLYPH_RECYCLING]               = u8"♻️",        /* actually called: UNIVERSAL RECYCLNG SYMBOL */
-                        [SPECIAL_GLYPH_DOWNLOAD]                = u8"⤵️",        /* actually called: RIGHT ARROW CURVING DOWN */
-                        [SPECIAL_GLYPH_SPARKLES]                = u8"✨",
-                        [SPECIAL_GLYPH_LOW_BATTERY]             = u8"🪫",
-                        [SPECIAL_GLYPH_WARNING_SIGN]            = u8"⚠️",
-                        [SPECIAL_GLYPH_COMPUTER_DISK]           = u8"💽",
-                        [SPECIAL_GLYPH_WORLD]                   = u8"🌍",
-
-                        [SPECIAL_GLYPH_RED_CIRCLE]              = u8"🔴",
-                        [SPECIAL_GLYPH_YELLOW_CIRCLE]           = u8"🟡",
-                        [SPECIAL_GLYPH_BLUE_CIRCLE]             = u8"🔵",
-                        [SPECIAL_GLYPH_GREEN_CIRCLE]            = u8"🟢",
-                        [SPECIAL_GLYPH_SUPERHERO]               = u8"🦸",
-                        [SPECIAL_GLYPH_IDCARD]                  = u8"🪪",
+                        [GLYPH_RECYCLING]               = UTF8("♻️"),        /* actually called: UNIVERSAL RECYCLNG SYMBOL */
+                        [GLYPH_DOWNLOAD]                = UTF8("⤵️"),        /* actually called: RIGHT ARROW CURVING DOWN */
+                        [GLYPH_SPARKLES]                = UTF8("✨"),
+                        [GLYPH_LOW_BATTERY]             = UTF8("🪫"),
+                        [GLYPH_WARNING_SIGN]            = UTF8("⚠️"),
+                        [GLYPH_COMPUTER_DISK]           = UTF8("💽"),
+                        [GLYPH_WORLD]                   = UTF8("🌍"),
+
+                        [GLYPH_RED_CIRCLE]              = UTF8("🔴"),
+                        [GLYPH_YELLOW_CIRCLE]           = UTF8("🟡"),
+                        [GLYPH_BLUE_CIRCLE]             = UTF8("🔵"),
+                        [GLYPH_GREEN_CIRCLE]            = UTF8("🟢"),
+                        [GLYPH_SUPERHERO]               = UTF8("🦸"),
+                        [GLYPH_IDCARD]                  = UTF8("🪪"),
+                        [GLYPH_HOME]                    = UTF8("🏠"),
                 },
         };
 
         if (code < 0)
                 return NULL;
 
-        assert(code < _SPECIAL_GLYPH_MAX);
-        return draw_table[force_utf || (code >= _SPECIAL_GLYPH_FIRST_EMOJI ? emoji_enabled() : is_locale_utf8())][code];
+        assert(code < _GLYPH_MAX);
+        return draw_table[force_utf || (code >= _GLYPH_FIRST_EMOJI ? emoji_enabled() : is_locale_utf8())][code];
 }
diff --git a/src/libnm-systemd-shared/src/basic/glyph-util.h b/src/libnm-systemd-shared/src/basic/glyph-util.h
index ca4d4eda..730f2695 100644
--- a/src/libnm-systemd-shared/src/basic/glyph-util.h
+++ b/src/libnm-systemd-shared/src/basic/glyph-util.h
@@ -6,73 +6,79 @@
 
 #include "macro.h"
 
-typedef enum SpecialGlyph {
-        SPECIAL_GLYPH_TREE_VERTICAL,
-        SPECIAL_GLYPH_TREE_BRANCH,
-        SPECIAL_GLYPH_TREE_RIGHT,
-        SPECIAL_GLYPH_TREE_SPACE,
-        SPECIAL_GLYPH_TREE_TOP,
-        SPECIAL_GLYPH_VERTICAL_DOTTED,
-        SPECIAL_GLYPH_HORIZONTAL_DOTTED,
-        SPECIAL_GLYPH_HORIZONTAL_FAT,
-        SPECIAL_GLYPH_TRIANGULAR_BULLET,
-        SPECIAL_GLYPH_BLACK_CIRCLE,
-        SPECIAL_GLYPH_WHITE_CIRCLE,
-        SPECIAL_GLYPH_MULTIPLICATION_SIGN,
-        SPECIAL_GLYPH_CIRCLE_ARROW,
-        SPECIAL_GLYPH_BULLET,
-        SPECIAL_GLYPH_MU,
-        SPECIAL_GLYPH_CHECK_MARK,
-        SPECIAL_GLYPH_CROSS_MARK,
-        SPECIAL_GLYPH_LIGHT_SHADE,
-        SPECIAL_GLYPH_DARK_SHADE,
-        SPECIAL_GLYPH_FULL_BLOCK,
-        SPECIAL_GLYPH_SIGMA,
-        SPECIAL_GLYPH_ARROW_UP,
-        SPECIAL_GLYPH_ARROW_DOWN,
-        SPECIAL_GLYPH_ARROW_LEFT,
-        SPECIAL_GLYPH_ARROW_RIGHT,
-        SPECIAL_GLYPH_ELLIPSIS,
-        SPECIAL_GLYPH_EXTERNAL_LINK,
-        _SPECIAL_GLYPH_FIRST_EMOJI,
-        SPECIAL_GLYPH_ECSTATIC_SMILEY = _SPECIAL_GLYPH_FIRST_EMOJI,
-        SPECIAL_GLYPH_HAPPY_SMILEY,
-        SPECIAL_GLYPH_SLIGHTLY_HAPPY_SMILEY,
-        SPECIAL_GLYPH_NEUTRAL_SMILEY,
-        SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY,
-        SPECIAL_GLYPH_UNHAPPY_SMILEY,
-        SPECIAL_GLYPH_DEPRESSED_SMILEY,
-        SPECIAL_GLYPH_LOCK_AND_KEY,
-        SPECIAL_GLYPH_TOUCH,
-        SPECIAL_GLYPH_RECYCLING,
-        SPECIAL_GLYPH_DOWNLOAD,
-        SPECIAL_GLYPH_SPARKLES,
-        SPECIAL_GLYPH_LOW_BATTERY,
-        SPECIAL_GLYPH_WARNING_SIGN,
-        SPECIAL_GLYPH_COMPUTER_DISK,
-        SPECIAL_GLYPH_WORLD,
-        SPECIAL_GLYPH_RED_CIRCLE,
-        SPECIAL_GLYPH_YELLOW_CIRCLE,
-        SPECIAL_GLYPH_BLUE_CIRCLE,
-        SPECIAL_GLYPH_GREEN_CIRCLE,
-        SPECIAL_GLYPH_SUPERHERO,
-        SPECIAL_GLYPH_IDCARD,
-        _SPECIAL_GLYPH_MAX,
-        _SPECIAL_GLYPH_INVALID = -EINVAL,
-} SpecialGlyph;
+typedef enum Glyph {
+        GLYPH_SPACE,
+        GLYPH_TREE_VERTICAL,
+        GLYPH_TREE_BRANCH,
+        GLYPH_TREE_RIGHT,
+        GLYPH_TREE_SPACE,
+        GLYPH_TREE_TOP,
+        GLYPH_VERTICAL_DOTTED,
+        GLYPH_HORIZONTAL_DOTTED,
+        GLYPH_HORIZONTAL_FAT,
+        GLYPH_TRIANGULAR_BULLET,
+        GLYPH_BLACK_CIRCLE,
+        GLYPH_WHITE_CIRCLE,
+        GLYPH_MULTIPLICATION_SIGN,
+        GLYPH_CIRCLE_ARROW,
+        GLYPH_BULLET,
+        GLYPH_MU,
+        GLYPH_CHECK_MARK,
+        GLYPH_CROSS_MARK,
+        GLYPH_LIGHT_SHADE,
+        GLYPH_DARK_SHADE,
+        GLYPH_FULL_BLOCK,
+        GLYPH_SIGMA,
+        GLYPH_ARROW_UP,
+        GLYPH_ARROW_DOWN,
+        GLYPH_ARROW_LEFT,
+        GLYPH_ARROW_RIGHT,
+        GLYPH_ELLIPSIS,
+        GLYPH_EXTERNAL_LINK,
+        _GLYPH_FIRST_EMOJI,
+        GLYPH_ECSTATIC_SMILEY = _GLYPH_FIRST_EMOJI,
+        GLYPH_HAPPY_SMILEY,
+        GLYPH_SLIGHTLY_HAPPY_SMILEY,
+        GLYPH_NEUTRAL_SMILEY,
+        GLYPH_SLIGHTLY_UNHAPPY_SMILEY,
+        GLYPH_UNHAPPY_SMILEY,
+        GLYPH_DEPRESSED_SMILEY,
+        GLYPH_LOCK_AND_KEY,
+        GLYPH_TOUCH,
+        GLYPH_RECYCLING,
+        GLYPH_DOWNLOAD,
+        GLYPH_SPARKLES,
+        GLYPH_LOW_BATTERY,
+        GLYPH_WARNING_SIGN,
+        GLYPH_COMPUTER_DISK,
+        GLYPH_WORLD,
+        GLYPH_RED_CIRCLE,
+        GLYPH_YELLOW_CIRCLE,
+        GLYPH_BLUE_CIRCLE,
+        GLYPH_GREEN_CIRCLE,
+        GLYPH_SUPERHERO,
+        GLYPH_IDCARD,
+        GLYPH_HOME,
+        _GLYPH_MAX,
+        _GLYPH_INVALID = -EINVAL,
+} Glyph;
 
 bool emoji_enabled(void);
 
-const char* special_glyph_full(SpecialGlyph code, bool force_utf) _const_;
+const char* glyph_full(Glyph code, bool force_utf) _const_;
 
-static inline const char* special_glyph(SpecialGlyph code) {
-        return special_glyph_full(code, false);
+static inline const char* glyph(Glyph code) {
+        return glyph_full(code, false);
 }
 
-static inline const char* special_glyph_check_mark(bool b) {
-        return b ? special_glyph(SPECIAL_GLYPH_CHECK_MARK) : special_glyph(SPECIAL_GLYPH_CROSS_MARK);
+static inline const char* optional_glyph(Glyph code) {
+        return emoji_enabled() ? glyph(code) : "";
 }
 
-static inline const char* special_glyph_check_mark_space(bool b) {
-        return b ? special_glyph(SPECIAL_GLYPH_CHECK_MARK) : " ";
+static inline const char* glyph_check_mark(bool b) {
+        return b ? glyph(GLYPH_CHECK_MARK) : glyph(GLYPH_CROSS_MARK);
+}
+
+static inline const char* glyph_check_mark_space(bool b) {
+        return b ? glyph(GLYPH_CHECK_MARK) : " ";
 }
diff --git a/src/libnm-systemd-shared/src/basic/hash-funcs.c b/src/libnm-systemd-shared/src/basic/hash-funcs.c
index d20ca3c3..b1975cfe 100644
--- a/src/libnm-systemd-shared/src/basic/hash-funcs.c
+++ b/src/libnm-systemd-shared/src/basic/hash-funcs.c
@@ -12,15 +12,23 @@ void string_hash_func(const char *p, struct siphash *state) {
         siphash24_compress(p, strlen(p) + 1, state);
 }
 
-DEFINE_HASH_OPS(string_hash_ops, char, string_hash_func, string_compare_func);
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(string_hash_ops_free,
-                                    char, string_hash_func, string_compare_func, free);
-DEFINE_HASH_OPS_FULL(string_hash_ops_free_free,
-                     char, string_hash_func, string_compare_func, free,
-                     void, free);
-DEFINE_HASH_OPS_FULL(string_hash_ops_free_strv_free,
-                     char, string_hash_func, string_compare_func, free,
-                     char*, strv_free);
+DEFINE_HASH_OPS(string_hash_ops,
+                char, string_hash_func, string_compare_func);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+                string_hash_ops_free,
+                char, string_hash_func, string_compare_func, free);
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+                string_hash_ops_value_free,
+                char, string_hash_func, string_compare_func,
+                void, free);
+DEFINE_HASH_OPS_FULL(
+                string_hash_ops_free_free,
+                char, string_hash_func, string_compare_func, free,
+                void, free);
+DEFINE_HASH_OPS_FULL(
+                string_hash_ops_free_strv_free,
+                char, string_hash_func, string_compare_func, free,
+                char*, strv_free);
 
 void path_hash_func(const char *q, struct siphash *state) {
         bool add_slash = false;
@@ -61,12 +69,15 @@ void path_hash_func(const char *q, struct siphash *state) {
         }
 }
 
-DEFINE_HASH_OPS(path_hash_ops, char, path_hash_func, path_compare);
-DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(path_hash_ops_free,
-                                    char, path_hash_func, path_compare, free);
-DEFINE_HASH_OPS_FULL(path_hash_ops_free_free,
-                     char, path_hash_func, path_compare, free,
-                     void, free);
+DEFINE_HASH_OPS(path_hash_ops,
+                char, path_hash_func, path_compare);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+                path_hash_ops_free,
+                char, path_hash_func, path_compare, free);
+DEFINE_HASH_OPS_FULL(
+                path_hash_ops_free_free,
+                char, path_hash_func, path_compare, free,
+                void, free);
 
 void trivial_hash_func(const void *p, struct siphash *state) {
         siphash24_compress_typesafe(p, state);
@@ -76,23 +87,19 @@ int trivial_compare_func(const void *a, const void *b) {
         return CMP(a, b);
 }
 
-const struct hash_ops trivial_hash_ops = {
-        .hash = trivial_hash_func,
-        .compare = trivial_compare_func,
-};
-
-const struct hash_ops trivial_hash_ops_free = {
-        .hash = trivial_hash_func,
-        .compare = trivial_compare_func,
-        .free_key = free,
-};
-
-const struct hash_ops trivial_hash_ops_free_free = {
-        .hash = trivial_hash_func,
-        .compare = trivial_compare_func,
-        .free_key = free,
-        .free_value = free,
-};
+DEFINE_HASH_OPS(trivial_hash_ops,
+                void, trivial_hash_func, trivial_compare_func);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(
+                trivial_hash_ops_free,
+                void, trivial_hash_func, trivial_compare_func, free);
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+                trivial_hash_ops_value_free,
+                void, trivial_hash_func, trivial_compare_func,
+                void, free);
+DEFINE_HASH_OPS_FULL(
+                trivial_hash_ops_free_free,
+                void, trivial_hash_func, trivial_compare_func, free,
+                void, free);
 
 void uint64_hash_func(const uint64_t *p, struct siphash *state) {
         siphash24_compress_typesafe(*p, state);
@@ -102,7 +109,12 @@ int uint64_compare_func(const uint64_t *a, const uint64_t *b) {
         return CMP(*a, *b);
 }
 
-DEFINE_HASH_OPS(uint64_hash_ops, uint64_t, uint64_hash_func, uint64_compare_func);
+DEFINE_HASH_OPS(uint64_hash_ops,
+                uint64_t, uint64_hash_func, uint64_compare_func);
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
+                uint64_hash_ops_value_free,
+                uint64_t, uint64_hash_func, uint64_compare_func,
+                void, free);
 
 #if 0 /* NM_IGNORED */
 #if SIZEOF_DEV_T != 8
diff --git a/src/libnm-systemd-shared/src/basic/hash-funcs.h b/src/libnm-systemd-shared/src/basic/hash-funcs.h
index 3804e94d..d0736807 100644
--- a/src/libnm-systemd-shared/src/basic/hash-funcs.h
+++ b/src/libnm-systemd-shared/src/basic/hash-funcs.h
@@ -77,6 +77,7 @@ void string_hash_func(const char *p, struct siphash *state);
 #define string_compare_func strcmp
 extern const struct hash_ops string_hash_ops;
 extern const struct hash_ops string_hash_ops_free;
+extern const struct hash_ops string_hash_ops_value_free;
 extern const struct hash_ops string_hash_ops_free_free;
 extern const struct hash_ops string_hash_ops_free_strv_free;
 
@@ -91,6 +92,7 @@ void trivial_hash_func(const void *p, struct siphash *state);
 int trivial_compare_func(const void *a, const void *b) _const_;
 extern const struct hash_ops trivial_hash_ops;
 extern const struct hash_ops trivial_hash_ops_free;
+extern const struct hash_ops trivial_hash_ops_value_free;
 extern const struct hash_ops trivial_hash_ops_free_free;
 
 /* 32-bit values we can always just embed in the pointer itself, but in order to support 32-bit archs we need store 64-bit
@@ -98,6 +100,7 @@ extern const struct hash_ops trivial_hash_ops_free_free;
 void uint64_hash_func(const uint64_t *p, struct siphash *state);
 int uint64_compare_func(const uint64_t *a, const uint64_t *b) _pure_;
 extern const struct hash_ops uint64_hash_ops;
+extern const struct hash_ops uint64_hash_ops_value_free;
 
 /* On some archs dev_t is 32-bit, and on others 64-bit. And sometimes it's 64-bit on 32-bit archs, and sometimes 32-bit on
  * 64-bit archs. Yuck! */
diff --git a/src/libnm-systemd-shared/src/basic/hashmap.c b/src/libnm-systemd-shared/src/basic/hashmap.c
index 6b0247c3..e58375c9 100644
--- a/src/libnm-systemd-shared/src/basic/hashmap.c
+++ b/src/libnm-systemd-shared/src/basic/hashmap.c
@@ -14,6 +14,7 @@
 #include "alloc-util.h"
 #include "fileio.h"
 #include "hashmap.h"
+#include "log.h"
 #include "logarithm.h"
 #include "macro.h"
 #include "memory-util.h"
@@ -916,24 +917,20 @@ static void hashmap_free_no_clear(HashmapBase *h) {
                 free(h);
 }
 
-HashmapBase* _hashmap_free(HashmapBase *h, free_func_t default_free_key, free_func_t default_free_value) {
+HashmapBase* _hashmap_free(HashmapBase *h) {
         if (h) {
-                _hashmap_clear(h, default_free_key, default_free_value);
+                _hashmap_clear(h);
                 hashmap_free_no_clear(h);
         }
 
         return NULL;
 }
 
-void _hashmap_clear(HashmapBase *h, free_func_t default_free_key, free_func_t default_free_value) {
-        free_func_t free_key, free_value;
+void _hashmap_clear(HashmapBase *h) {
         if (!h)
                 return;
 
-        free_key = h->hash_ops->free_key ?: default_free_key;
-        free_value = h->hash_ops->free_value ?: default_free_value;
-
-        if (free_key || free_value) {
+        if (h->hash_ops->free_key || h->hash_ops->free_value) {
 
                 /* If destructor calls are defined, let's destroy things defensively: let's take the item out of the
                  * hash table, and only then call the destructor functions. If these destructors then try to unregister
@@ -945,11 +942,11 @@ void _hashmap_clear(HashmapBase *h, free_func_t default_free_key, free_func_t de
 
                         v = _hashmap_first_key_and_value(h, true, &k);
 
-                        if (free_key)
-                                free_key(k);
+                        if (h->hash_ops->free_key)
+                                h->hash_ops->free_key(k);
 
-                        if (free_value)
-                                free_value(v);
+                        if (h->hash_ops->free_value)
+                                h->hash_ops->free_value(v);
                 }
         }
 
@@ -1784,7 +1781,7 @@ HashmapBase* _hashmap_copy(HashmapBase *h  HASHMAP_DEBUG_PARAMS) {
         }
 
         if (r < 0)
-                return _hashmap_free(copy, NULL, NULL);
+                return _hashmap_free(copy);
 
         return copy;
 }
@@ -1809,6 +1806,23 @@ char** _hashmap_get_strv(HashmapBase *h) {
         return sv;
 }
 
+char** set_to_strv(Set **s) {
+        assert(s);
+
+        /* This is similar to set_get_strv(), but invalidates the set on success. */
+
+        char **v = new(char*, set_size(*s) + 1);
+        if (!v)
+                return NULL;
+
+        for (char **p = v; (*p = set_steal_first(*s)); p++)
+                ;
+
+        assert(set_isempty(*s));
+        *s = set_free(*s);
+        return v;
+}
+
 void* ordered_hashmap_next(OrderedHashmap *h, const void *key) {
         struct ordered_hashmap_entry *e;
         unsigned hash, idx;
diff --git a/src/libnm-systemd-shared/src/basic/hashmap.h b/src/libnm-systemd-shared/src/basic/hashmap.h
index 01a4fb32..8ced7e6a 100644
--- a/src/libnm-systemd-shared/src/basic/hashmap.h
+++ b/src/libnm-systemd-shared/src/basic/hashmap.h
@@ -88,36 +88,17 @@ OrderedHashmap* _ordered_hashmap_new(const struct hash_ops *hash_ops  HASHMAP_DE
 #define hashmap_new(ops) _hashmap_new(ops  HASHMAP_DEBUG_SRC_ARGS)
 #define ordered_hashmap_new(ops) _ordered_hashmap_new(ops  HASHMAP_DEBUG_SRC_ARGS)
 
-#define hashmap_free_and_replace(a, b)          \
+#define hashmap_free_and_replace(a, b)                          \
         free_and_replace_full(a, b, hashmap_free)
+#define ordered_hashmap_free_and_replace(a, b)                  \
+        free_and_replace_full(a, b, ordered_hashmap_free)
 
-HashmapBase* _hashmap_free(HashmapBase *h, free_func_t default_free_key, free_func_t default_free_value);
+HashmapBase* _hashmap_free(HashmapBase *h);
 static inline Hashmap* hashmap_free(Hashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), NULL, NULL);
+        return (void*) _hashmap_free(HASHMAP_BASE(h));
 }
 static inline OrderedHashmap* ordered_hashmap_free(OrderedHashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), NULL, NULL);
-}
-
-static inline Hashmap* hashmap_free_free(Hashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), NULL, free);
-}
-static inline OrderedHashmap* ordered_hashmap_free_free(OrderedHashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), NULL, free);
-}
-
-static inline Hashmap* hashmap_free_free_key(Hashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), free, NULL);
-}
-static inline OrderedHashmap* ordered_hashmap_free_free_key(OrderedHashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), free, NULL);
-}
-
-static inline Hashmap* hashmap_free_free_free(Hashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), free, free);
-}
-static inline OrderedHashmap* ordered_hashmap_free_free_free(OrderedHashmap *h) {
-        return (void*) _hashmap_free(HASHMAP_BASE(h), free, free);
+        return (void*) _hashmap_free(HASHMAP_BASE(h));
 }
 
 IteratedCache* iterated_cache_free(IteratedCache *cache);
@@ -285,33 +266,12 @@ static inline bool ordered_hashmap_iterate(OrderedHashmap *h, Iterator *i, void
         return _hashmap_iterate(HASHMAP_BASE(h), i, value, key);
 }
 
-void _hashmap_clear(HashmapBase *h, free_func_t default_free_key, free_func_t default_free_value);
+void _hashmap_clear(HashmapBase *h);
 static inline void hashmap_clear(Hashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), NULL, NULL);
+        _hashmap_clear(HASHMAP_BASE(h));
 }
 static inline void ordered_hashmap_clear(OrderedHashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), NULL, NULL);
-}
-
-static inline void hashmap_clear_free(Hashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), NULL, free);
-}
-static inline void ordered_hashmap_clear_free(OrderedHashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), NULL, free);
-}
-
-static inline void hashmap_clear_free_key(Hashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), free, NULL);
-}
-static inline void ordered_hashmap_clear_free_key(OrderedHashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), free, NULL);
-}
-
-static inline void hashmap_clear_free_free(Hashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), free, free);
-}
-static inline void ordered_hashmap_clear_free_free(OrderedHashmap *h) {
-        _hashmap_clear(HASHMAP_BASE(h), free, free);
+        _hashmap_clear(HASHMAP_BASE(h));
 }
 
 /*
@@ -371,27 +331,6 @@ static inline void *ordered_hashmap_first_key(OrderedHashmap *h) {
         return _hashmap_first_key(HASHMAP_BASE(h), false);
 }
 
-#define hashmap_clear_with_destructor(h, f)                     \
-        ({                                                      \
-                Hashmap *_h = (h);                              \
-                void *_item;                                    \
-                while ((_item = hashmap_steal_first(_h)))       \
-                        f(_item);                               \
-                _h;                                             \
-        })
-#define hashmap_free_with_destructor(h, f)                      \
-        hashmap_free(hashmap_clear_with_destructor(h, f))
-#define ordered_hashmap_clear_with_destructor(h, f)                     \
-        ({                                                              \
-                OrderedHashmap *_h = (h);                               \
-                void *_item;                                            \
-                while ((_item = ordered_hashmap_steal_first(_h)))       \
-                        f(_item);                                       \
-                _h;                                                     \
-        })
-#define ordered_hashmap_free_with_destructor(h, f)                      \
-        ordered_hashmap_free(ordered_hashmap_clear_with_destructor(h, f))
-
 /* no hashmap_next */
 void* ordered_hashmap_next(OrderedHashmap *h, const void *key);
 
@@ -459,20 +398,10 @@ static inline int ordered_hashmap_dump_keys_sorted(OrderedHashmap *h, void ***re
         _ORDERED_HASHMAP_FOREACH_KEY(e, k, h, UNIQ_T(i, UNIQ))
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free_key);
-DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free_free);
 DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedHashmap*, ordered_hashmap_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedHashmap*, ordered_hashmap_free_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedHashmap*, ordered_hashmap_free_free_key);
-DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedHashmap*, ordered_hashmap_free_free_free);
 
 #define _cleanup_hashmap_free_ _cleanup_(hashmap_freep)
-#define _cleanup_hashmap_free_free_ _cleanup_(hashmap_free_freep)
-#define _cleanup_hashmap_free_free_free_ _cleanup_(hashmap_free_free_freep)
 #define _cleanup_ordered_hashmap_free_ _cleanup_(ordered_hashmap_freep)
-#define _cleanup_ordered_hashmap_free_free_ _cleanup_(ordered_hashmap_free_freep)
-#define _cleanup_ordered_hashmap_free_free_free_ _cleanup_(ordered_hashmap_free_free_freep)
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(IteratedCache*, iterated_cache_free);
 
diff --git a/src/libnm-systemd-shared/src/basic/hexdecoct.h b/src/libnm-systemd-shared/src/basic/hexdecoct.h
index d160ca28..b456200e 100644
--- a/src/libnm-systemd-shared/src/basic/hexdecoct.h
+++ b/src/libnm-systemd-shared/src/basic/hexdecoct.h
@@ -17,8 +17,8 @@ int undecchar(char c) _const_;
 char hexchar(int x) _const_;
 int unhexchar(char c) _const_;
 
-char* hexmem(const void *p, size_t l);
-int unhexmem_full(const char *p, size_t l, bool secure, void **ret_data, size_t *ret_size);
+char* hexmem(const void *p, size_t l) _nonnull_if_nonzero_(1, 2);
+int unhexmem_full(const char *p, size_t l, bool secure, void **ret_data, size_t *ret_size) _nonnull_if_nonzero_(1, 2);
 static inline int unhexmem(const char *p, void **ret_data, size_t *ret_size) {
         return unhexmem_full(p, SIZE_MAX, false, ret_data, ret_size);
 }
@@ -30,10 +30,10 @@ char base64char(int x) _const_;
 char urlsafe_base64char(int x) _const_;
 int unbase64char(char c) _const_;
 
-char* base32hexmem(const void *p, size_t l, bool padding);
-int unbase32hexmem(const char *p, size_t l, bool padding, void **mem, size_t *len);
+char* base32hexmem(const void *p, size_t l, bool padding) _nonnull_if_nonzero_(1, 2);
+int unbase32hexmem(const char *p, size_t l, bool padding, void **mem, size_t *len) _nonnull_if_nonzero_(1, 2);
 
-ssize_t base64mem_full(const void *p, size_t l, size_t line_break, char **ret);
+ssize_t base64mem_full(const void *p, size_t l, size_t line_break, char **ret) _nonnull_if_nonzero_(1, 2);
 static inline ssize_t base64mem(const void *p, size_t l, char **ret) {
         return base64mem_full(p, l, SIZE_MAX, ret);
 }
@@ -45,9 +45,9 @@ ssize_t base64_append(
                 size_t l,
                 size_t margin,
                 size_t width);
-int unbase64mem_full(const char *p, size_t l, bool secure, void **ret_data, size_t *ret_size);
+int unbase64mem_full(const char *p, size_t l, bool secure, void **ret_data, size_t *ret_size) _nonnull_if_nonzero_(1, 2);
 static inline int unbase64mem(const char *p, void **ret_data, size_t *ret_size) {
         return unbase64mem_full(p, SIZE_MAX, false, ret_data, ret_size);
 }
 
-void hexdump(FILE *f, const void *p, size_t s);
+void hexdump(FILE *f, const void *p, size_t s) _nonnull_if_nonzero_(2, 3);
diff --git a/src/libnm-systemd-shared/src/basic/hostname-util.c b/src/libnm-systemd-shared/src/basic/hostname-util.c
index 26e196f3..eed3bf0a 100644
--- a/src/libnm-systemd-shared/src/basic/hostname-util.c
+++ b/src/libnm-systemd-shared/src/basic/hostname-util.c
@@ -12,18 +12,22 @@
 #include "alloc-util.h"
 #include "env-file.h"
 #include "hostname-util.h"
+#include "log.h"
 #include "os-util.h"
 #include "string-util.h"
 #include "strv.h"
 
 #if 0 /* NM_IGNORED */
-char* get_default_hostname(void) {
+char* get_default_hostname_raw(void) {
         int r;
 
+        /* Returns the default hostname, and leaves any ??? in place. */
+
         const char *e = secure_getenv("SYSTEMD_DEFAULT_HOSTNAME");
         if (e) {
-                if (hostname_is_valid(e, 0))
+                if (hostname_is_valid(e, VALID_HOSTNAME_QUESTION_MARK))
                         return strdup(e);
+
                 log_debug("Invalid hostname in $SYSTEMD_DEFAULT_HOSTNAME, ignoring: %s", e);
         }
 
@@ -32,48 +36,14 @@ char* get_default_hostname(void) {
         if (r < 0)
                 log_debug_errno(r, "Failed to parse os-release, ignoring: %m");
         else if (f) {
-                if (hostname_is_valid(f, 0))
+                if (hostname_is_valid(f, VALID_HOSTNAME_QUESTION_MARK))
                         return TAKE_PTR(f);
+
                 log_debug("Invalid hostname in os-release, ignoring: %s", f);
         }
 
         return strdup(FALLBACK_HOSTNAME);
 }
-
-int gethostname_full(GetHostnameFlags flags, char **ret) {
-        _cleanup_free_ char *buf = NULL, *fallback = NULL;
-        struct utsname u;
-        const char *s;
-
-        assert(ret);
-
-        assert_se(uname(&u) >= 0);
-
-        s = u.nodename;
-        if (isempty(s) || streq(s, "(none)") ||
-            (!FLAGS_SET(flags, GET_HOSTNAME_ALLOW_LOCALHOST) && is_localhost(s)) ||
-            (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')) {
-                if (!FLAGS_SET(flags, GET_HOSTNAME_FALLBACK_DEFAULT))
-                        return -ENXIO;
-
-                s = fallback = get_default_hostname();
-                if (!s)
-                        return -ENOMEM;
-
-                if (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')
-                        return -ENXIO;
-        }
-
-        if (FLAGS_SET(flags, GET_HOSTNAME_SHORT))
-                buf = strdupcspn(s, ".");
-        else
-                buf = strdup(s);
-        if (!buf)
-                return -ENOMEM;
-
-        *ret = TAKE_PTR(buf);
-        return 0;
-}
 #endif /* NM_IGNORED */
 
 bool valid_ldh_char(char c) {
@@ -120,7 +90,7 @@ bool hostname_is_valid(const char *s, ValidHostnameFlags flags) {
                         hyphen = true;
 
                 } else {
-                        if (!valid_ldh_char(*p))
+                        if (!valid_ldh_char(*p) && (*p != '?' || !FLAGS_SET(flags, VALID_HOSTNAME_QUESTION_MARK)))
                                 return false;
 
                         dot = false;
@@ -163,7 +133,7 @@ char* hostname_cleanup(char *s) {
                         dot = false;
                         hyphen = true;
 
-                } else if (valid_ldh_char(*p)) {
+                } else if (valid_ldh_char(*p) || *p == '?') {
                         *(d++) = *p;
                         dot = false;
                         hyphen = false;
diff --git a/src/libnm-systemd-shared/src/basic/hostname-util.h b/src/libnm-systemd-shared/src/basic/hostname-util.h
index bcac3d9f..4c5abe76 100644
--- a/src/libnm-systemd-shared/src/basic/hostname-util.h
+++ b/src/libnm-systemd-shared/src/basic/hostname-util.h
@@ -7,42 +7,14 @@
 #include "macro.h"
 #include "strv.h"
 
-typedef enum GetHostnameFlags {
-        GET_HOSTNAME_ALLOW_LOCALHOST  = 1 << 0, /* accepts "localhost" or friends. */
-        GET_HOSTNAME_FALLBACK_DEFAULT = 1 << 1, /* use default hostname if no hostname is set. */
-        GET_HOSTNAME_SHORT            = 1 << 2, /* kills the FQDN part if present. */
-} GetHostnameFlags;
-
-int gethostname_full(GetHostnameFlags flags, char **ret);
-static inline int gethostname_strict(char **ret) {
-        return gethostname_full(0, ret);
-}
-
-static inline char* gethostname_malloc(void) {
-        char *s;
-
-        if (gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST | GET_HOSTNAME_FALLBACK_DEFAULT, &s) < 0)
-                return NULL;
-
-        return s;
-}
-
-static inline char* gethostname_short_malloc(void) {
-        char *s;
-
-        if (gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST | GET_HOSTNAME_FALLBACK_DEFAULT | GET_HOSTNAME_SHORT, &s) < 0)
-                return NULL;
-
-        return s;
-}
-
-char* get_default_hostname(void);
+char* get_default_hostname_raw(void);
 
 bool valid_ldh_char(char c) _const_;
 
 typedef enum ValidHostnameFlags {
-        VALID_HOSTNAME_TRAILING_DOT = 1 << 0,   /* Accept trailing dot on multi-label names */
-        VALID_HOSTNAME_DOT_HOST     = 1 << 1,   /* Accept ".host" as valid hostname */
+        VALID_HOSTNAME_TRAILING_DOT  = 1 << 0,   /* Accept trailing dot on multi-label names */
+        VALID_HOSTNAME_DOT_HOST      = 1 << 1,   /* Accept ".host" as valid hostname */
+        VALID_HOSTNAME_QUESTION_MARK = 1 << 2,   /* Accept "?" as place holder for hashed machine ID value */
 } ValidHostnameFlags;
 
 bool hostname_is_valid(const char *s, ValidHostnameFlags flags) _pure_;
diff --git a/src/libnm-systemd-shared/src/basic/in-addr-util.c b/src/libnm-systemd-shared/src/basic/in-addr-util.c
index 44445f1e..b7a64b18 100644
--- a/src/libnm-systemd-shared/src/basic/in-addr-util.c
+++ b/src/libnm-systemd-shared/src/basic/in-addr-util.c
@@ -15,6 +15,7 @@
 #include "in-addr-util.h"
 #include "logarithm.h"
 #include "macro.h"
+#include "memory-util.h"
 #include "parse-util.h"
 #include "random-util.h"
 #include "stdio-util.h"
@@ -30,7 +31,7 @@ bool in4_addr_is_null(const struct in_addr *a) {
 bool in6_addr_is_null(const struct in6_addr *a) {
         assert(a);
 
-        return IN6_IS_ADDR_UNSPECIFIED(a);
+        return eqzero(a->s6_addr32);
 }
 
 int in_addr_is_null(int family, const union in_addr_union *u) {
@@ -68,7 +69,7 @@ bool in4_addr_is_link_local_dynamic(const struct in_addr *a) {
 bool in6_addr_is_link_local(const struct in6_addr *a) {
         assert(a);
 
-        return IN6_IS_ADDR_LINKLOCAL(a);
+        return (a->s6_addr32[0] & htobe32(0xffc00000)) == htobe32(0xfe800000);
 }
 
 int in_addr_is_link_local(int family, const union in_addr_union *u) {
@@ -102,7 +103,7 @@ bool in4_addr_is_multicast(const struct in_addr *a) {
 bool in6_addr_is_multicast(const struct in6_addr *a) {
         assert(a);
 
-        return IN6_IS_ADDR_MULTICAST(a);
+        return a->s6_addr[0] == 0xff;
 }
 
 int in_addr_is_multicast(int family, const union in_addr_union *u) {
@@ -138,6 +139,10 @@ bool in4_addr_is_non_local(const struct in_addr *a) {
                !in4_addr_is_localhost(a);
 }
 
+static bool in6_addr_is_loopback(const struct in6_addr *a) {
+        return memcmp(a, &(struct in6_addr) IN6ADDR_LOOPBACK_INIT, sizeof(struct in6_addr)) == 0;
+}
+
 int in_addr_is_localhost(int family, const union in_addr_union *u) {
         assert(u);
 
@@ -145,7 +150,7 @@ int in_addr_is_localhost(int family, const union in_addr_union *u) {
                 return in4_addr_is_localhost(&u->in);
 
         if (family == AF_INET6)
-                return IN6_IS_ADDR_LOOPBACK(&u->in6);
+                return in6_addr_is_loopback(&u->in6);
 
         return -EAFNOSUPPORT;
 }
@@ -158,7 +163,7 @@ int in_addr_is_localhost_one(int family, const union in_addr_union *u) {
                 return be32toh(u->in.s_addr) == UINT32_C(0x7F000001);
 
         if (family == AF_INET6)
-                return IN6_IS_ADDR_LOOPBACK(&u->in6);
+                return in6_addr_is_loopback(&u->in6);
 
         return -EAFNOSUPPORT;
 }
@@ -180,7 +185,7 @@ bool in6_addr_equal(const struct in6_addr *a, const struct in6_addr *b) {
         assert(a);
         assert(b);
 
-        return IN6_ARE_ADDR_EQUAL(a, b);
+        return memcmp(a, b, sizeof(struct in6_addr)) == 0;
 }
 
 int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b) {
@@ -951,7 +956,6 @@ int in_addr_prefix_from_string_auto_full(
                 *ret_prefixlen = k;
 
         return 0;
-
 }
 
 void in_addr_hash_func(const union in_addr_union *u, int family, struct siphash *state) {
diff --git a/src/libnm-systemd-shared/src/basic/include/net/if.h b/src/libnm-systemd-shared/src/basic/include/net/if.h
new file mode 100644
index 00000000..7d5b61ba
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/include/net/if.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <linux/if.h>
+
+#define IF_NAMESIZE       16
+
+extern unsigned int if_nametoindex(const char *__ifname) __THROW;
+extern char *if_indextoname(unsigned int __ifindex, char __ifname[IF_NAMESIZE]) __THROW;
diff --git a/src/libnm-systemd-shared/src/basic/include/netinet/in.h b/src/libnm-systemd-shared/src/basic/include/netinet/in.h
new file mode 100644
index 00000000..97475ac8
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/include/netinet/in.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <linux/in.h>
+#include <linux/in6.h>
+#include <linux/ipv6.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <sys/socket.h>
+
+#define INET_ADDRSTRLEN 16
+#define INET6_ADDRSTRLEN 46
+
+extern const struct in6_addr in6addr_any;        /* :: */
+extern const struct in6_addr in6addr_loopback;   /* ::1 */
+#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+typedef uint32_t in_addr_t;
diff --git a/src/libnm-systemd-shared/src/basic/io-util.c b/src/libnm-systemd-shared/src/basic/io-util.c
index abe61ed5..706535a1 100644
--- a/src/libnm-systemd-shared/src/basic/io-util.c
+++ b/src/libnm-systemd-shared/src/basic/io-util.c
@@ -90,6 +90,7 @@ ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) {
                         return n;
 
                 assert((size_t) k <= nbytes);
+                assert(k <= SSIZE_MAX - n);
 
                 p += k;
                 nbytes -= k;
@@ -194,7 +195,7 @@ int pipe_eof(int fd) {
 }
 #endif /* NM_IGNORED */
 
-int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout) {
+int ppoll_usec_full(struct pollfd *fds, size_t nfds, usec_t timeout, const sigset_t *ss) {
         int r;
 
         assert(fds || nfds == 0);
@@ -214,10 +215,10 @@ int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout) {
          *  to handle signals, such as signalfd() or signal handlers. ⚠️ ⚠️ ⚠️
          */
 
-        if (nfds == 0)
+        if (nfds == 0 && timeout == 0)
                 return 0;
 
-        r = ppoll(fds, nfds, timeout == USEC_INFINITY ? NULL : TIMESPEC_STORE(timeout), NULL);
+        r = ppoll(fds, nfds, timeout == USEC_INFINITY ? NULL : TIMESPEC_STORE(timeout), ss);
         if (r < 0)
                 return -errno;
         if (r == 0)
diff --git a/src/libnm-systemd-shared/src/basic/io-util.h b/src/libnm-systemd-shared/src/basic/io-util.h
index e027c1a8..208e1683 100644
--- a/src/libnm-systemd-shared/src/basic/io-util.h
+++ b/src/libnm-systemd-shared/src/basic/io-util.h
@@ -15,14 +15,18 @@ int flush_fd(int fd);
 ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll);
 int loop_read_exact(int fd, void *buf, size_t nbytes, bool do_poll);
 
-int loop_write_full(int fd, const void *buf, size_t nbytes, usec_t timeout);
+int loop_write_full(int fd, const void *buf, size_t nbytes, usec_t timeout) _nonnull_if_nonzero_(2, 3);
 static inline int loop_write(int fd, const void *buf, size_t nbytes) {
         return loop_write_full(fd, buf, nbytes, 0);
 }
 
 int pipe_eof(int fd);
 
-int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout);
+int ppoll_usec_full(struct pollfd *fds, size_t nfds, usec_t timeout, const sigset_t *ss) _nonnull_if_nonzero_(1, 2);
+_nonnull_if_nonzero_(1, 2) static inline int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout) {
+        return ppoll_usec_full(fds, nfds, timeout, NULL);
+}
+
 int fd_wait_for_event(int fd, int event, usec_t timeout);
 
 ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length);
@@ -42,5 +46,4 @@ static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) {
                 return true;
 
         return FILE_SIZE_VALID(l);
-
 }
diff --git a/src/libnm-systemd-shared/src/basic/iovec-util.h b/src/libnm-systemd-shared/src/basic/iovec-util.h
index 86845404..ace20098 100644
--- a/src/libnm-systemd-shared/src/basic/iovec-util.h
+++ b/src/libnm-systemd-shared/src/basic/iovec-util.h
@@ -12,9 +12,9 @@
 extern const struct iovec iovec_nul_byte; /* Points to a single NUL byte */
 extern const struct iovec iovec_empty;    /* Points to an empty, but valid (i.e. non-NULL) pointer */
 
-size_t iovec_total_size(const struct iovec *iovec, size_t n);
+size_t iovec_total_size(const struct iovec *iovec, size_t n) _nonnull_if_nonzero_(1, 2);
 
-bool iovec_increment(struct iovec *iovec, size_t n, size_t k);
+bool iovec_increment(struct iovec *iovec, size_t n, size_t k) _nonnull_if_nonzero_(1, 2);
 
 static inline struct iovec* iovec_make_string(struct iovec *iovec, const char *s) {
         assert(iovec);
@@ -42,7 +42,7 @@ static inline void iovec_done_erase(struct iovec *iovec) {
 char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value);
 char* set_iovec_string_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value);
 
-void iovec_array_free(struct iovec *iovec, size_t n_iovec);
+void iovec_array_free(struct iovec *iovec, size_t n_iovec) _nonnull_if_nonzero_(1, 2);
 
 static inline int iovec_memcmp(const struct iovec *a, const struct iovec *b) {
 
@@ -55,7 +55,7 @@ static inline int iovec_memcmp(const struct iovec *a, const struct iovec *b) {
                          b ? b->iov_len : 0);
 }
 
-static inline struct iovec *iovec_memdup(const struct iovec *source, struct iovec *ret) {
+static inline struct iovec* iovec_memdup(const struct iovec *source, struct iovec *ret) {
         assert(ret);
 
         if (!iovec_is_set(source))
diff --git a/src/libnm-systemd-shared/src/basic/list.h b/src/libnm-systemd-shared/src/basic/list.h
index 10e69541..090bdc7b 100644
--- a/src/libnm-systemd-shared/src/basic/list.h
+++ b/src/libnm-systemd-shared/src/basic/list.h
@@ -1,6 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "macro.h"
+
 /* The head of the linked list. Use this in the structure that shall
  * contain the head of the linked list */
 #define LIST_HEAD(t,name)                                               \
@@ -203,7 +205,3 @@
                         free_func(elem);                \
                 head;                                   \
         })
-
-/* Now include "macro.h", because we want our definition of assert() which the macros above use. We include
- * it down here instead of up top, since macro.h pulls in log.h which in turn needs our own definitions. */
-#include "macro.h"
diff --git a/src/libnm-systemd-shared/src/basic/locale-util.c b/src/libnm-systemd-shared/src/basic/locale-util.c
index 0654fde8..d491d81f 100644
--- a/src/libnm-systemd-shared/src/basic/locale-util.c
+++ b/src/libnm-systemd-shared/src/basic/locale-util.c
@@ -19,8 +19,9 @@
 #include "fileio.h"
 #include "hashmap.h"
 #include "locale-util.h"
-#include "missing_syscall.h"
+#include "log.h"
 #include "path-util.h"
+#include "process-util.h"
 #include "set.h"
 #include "string-table.h"
 #include "string-util.h"
@@ -28,7 +29,7 @@
 #include "utf8.h"
 
 #if 0 /* NM_IGNORED */
-static char *normalize_locale(const char *name) {
+static char* normalize_locale(const char *name) {
         const char *e;
 
         /* Locale names are weird: glibc has some magic rules when looking for the charset name on disk: it
@@ -96,18 +97,15 @@ static int add_locales_from_archive(Set *locales) {
                 uint32_t locrec_offset;
         };
 
-        const struct locarhead *h;
-        const struct namehashent *e;
-        const void *p = MAP_FAILED;
-        _cleanup_close_ int fd = -EBADF;
-        size_t sz = 0;
-        struct stat st;
         int r;
 
-        fd = open("/usr/lib/locale/locale-archive", O_RDONLY|O_NOCTTY|O_CLOEXEC);
+        assert(locales);
+
+        _cleanup_close_ int fd = open("/usr/lib/locale/locale-archive", O_RDONLY|O_NOCTTY|O_CLOEXEC);
         if (fd < 0)
                 return errno == ENOENT ? 0 : -errno;
 
+        struct stat st;
         if (fstat(fd, &st) < 0)
                 return -errno;
 
@@ -120,11 +118,12 @@ static int add_locales_from_archive(Set *locales) {
         if (file_offset_beyond_memory_size(st.st_size))
                 return -EFBIG;
 
-        p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+        void *p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
         if (p == MAP_FAILED)
                 return -errno;
 
-        h = (const struct locarhead *) p;
+        const struct namehashent *e;
+        const struct locarhead *h = p;
         if (h->magic != 0xde020109 ||
             h->namehash_offset + h->namehash_size > st.st_size ||
             h->string_offset + h->string_size > st.st_size ||
@@ -157,9 +156,9 @@ static int add_locales_from_archive(Set *locales) {
 
         r = 0;
 
- finish:
+finish:
         if (p != MAP_FAILED)
-                munmap((void*) p, sz);
+                munmap((void*) p, st.st_size);
 
         return r;
 }
@@ -168,6 +167,8 @@ static int add_locales_from_libdir(Set *locales) {
         _cleanup_closedir_ DIR *dir = NULL;
         int r;
 
+        assert(locales);
+
         dir = opendir("/usr/lib/locale");
         if (!dir)
                 return errno == ENOENT ? 0 : -errno;
@@ -183,7 +184,7 @@ static int add_locales_from_libdir(Set *locales) {
                         return -ENOMEM;
 
                 r = set_consume(locales, z);
-                if (r < 0 && r != -EEXIST)
+                if (r < 0)
                         return r;
         }
 
@@ -191,11 +192,10 @@ static int add_locales_from_libdir(Set *locales) {
 }
 
 int get_locales(char ***ret) {
-        _cleanup_set_free_free_ Set *locales = NULL;
-        _cleanup_strv_free_ char **l = NULL;
+        _cleanup_set_free_ Set *locales = NULL;
         int r;
 
-        locales = set_new(&string_hash_ops);
+        locales = set_new(&string_hash_ops_free);
         if (!locales)
                 return -ENOMEM;
 
@@ -216,31 +216,25 @@ int get_locales(char ***ret) {
                         free(set_remove(locales, locale));
         }
 
-        l = set_get_strv(locales);
+        _cleanup_strv_free_ char **l = set_to_strv(&locales);
         if (!l)
                 return -ENOMEM;
 
-        /* Now, all elements are owned by strv 'l'. Hence, do not call set_free_free(). */
-        locales = set_free(locales);
-
         r = getenv_bool("SYSTEMD_LIST_NON_UTF8_LOCALES");
-        if (IN_SET(r, -ENXIO, 0)) {
-                char **a, **b;
+        if (r <= 0) {
+                if (!IN_SET(r, -ENXIO, 0))
+                        log_debug_errno(r, "Failed to parse $SYSTEMD_LIST_NON_UTF8_LOCALES as boolean, ignoring: %m");
 
                 /* Filter out non-UTF-8 locales, because it's 2019, by default */
-                for (a = b = l; *a; a++) {
-
-                        if (endswith(*a, "UTF-8") ||
-                            strstr(*a, ".UTF-8@"))
+                char **b = l;
+                STRV_FOREACH(a, l)
+                        if (endswith(*a, "UTF-8") || strstr(*a, ".UTF-8@"))
                                 *(b++) = *a;
                         else
                                 free(*a);
-                }
 
                 *b = NULL;
-
-        } else if (r < 0)
-                log_debug_errno(r, "Failed to parse $SYSTEMD_LIST_NON_UTF8_LOCALES as boolean");
+        }
 
         strv_sort(l);
 
@@ -287,64 +281,48 @@ int locale_is_installed(const char *name) {
 }
 #endif /* NM_IGNORED */
 
-bool is_locale_utf8(void) {
-        static int cached_answer = -1;
+static bool is_locale_utf8_impl(void) {
         const char *set;
         int r;
 
-        /* Note that we default to 'true' here, since today UTF8 is
-         * pretty much supported everywhere. */
-
-        if (cached_answer >= 0)
-                goto out;
+        /* Note that we default to 'true' here, since today UTF8 is pretty much supported everywhere. */
 
         r = secure_getenv_bool("SYSTEMD_UTF8");
-        if (r >= 0) {
-                cached_answer = r;
-                goto out;
-        } else if (r != -ENXIO)
+        if (r >= 0)
+                return r;
+        if (r != -ENXIO)
                 log_debug_errno(r, "Failed to parse $SYSTEMD_UTF8, ignoring: %m");
 
         /* This function may be called from libsystemd, and setlocale() is not thread safe. Assuming yes. */
-        if (gettid() != raw_getpid()) {
-                cached_answer = true;
-                goto out;
-        }
+        if (!is_main_thread())
+                return true;
 
-        if (!setlocale(LC_ALL, "")) {
-                cached_answer = true;
-                goto out;
-        }
+        if (!setlocale(LC_ALL, ""))
+                return true;
 
         set = nl_langinfo(CODESET);
-        if (!set) {
-                cached_answer = true;
-                goto out;
-        }
-
-        if (streq(set, "UTF-8")) {
-                cached_answer = true;
-                goto out;
-        }
+        if (!set || streq(set, "UTF-8"))
+                return true;
 
-        /* For LC_CTYPE=="C" return true, because CTYPE is effectively
-         * unset and everything can do to UTF-8 nowadays. */
         set = setlocale(LC_CTYPE, NULL);
-        if (!set) {
-                cached_answer = true;
-                goto out;
-        }
+        if (!set)
+                return true;
 
-        /* Check result, but ignore the result if C was set
-         * explicitly. */
-        cached_answer =
-                STR_IN_SET(set, "C", "POSIX") &&
+        /* Unless LC_CTYPE is explicitly overridden, return true. Because here CTYPE is effectively unset
+         * and everything can do to UTF-8 nowadays. */
+        return STR_IN_SET(set, "C", "POSIX") &&
                 !getenv("LC_ALL") &&
                 !getenv("LC_CTYPE") &&
                 !getenv("LANG");
+}
+
+bool is_locale_utf8(void) {
+        static int cached = -1;
+
+        if (cached < 0)
+                cached = is_locale_utf8_impl();
 
-out:
-        return (bool) cached_answer;
+        return cached;
 }
 
 #if 0 /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/lock-util.h b/src/libnm-systemd-shared/src/basic/lock-util.h
index a67d8b2c..b327b8e5 100644
--- a/src/libnm-systemd-shared/src/basic/lock-util.h
+++ b/src/libnm-systemd-shared/src/basic/lock-util.h
@@ -5,6 +5,8 @@
 /* Include here so consumers have LOCK_{EX,SH,NB} available. */
 #include <sys/file.h>
 
+#include "time-util.h"
+
 typedef struct LockFile {
         int dir_fd;
         char *path;
diff --git a/src/libnm-systemd-shared/src/basic/log.h b/src/libnm-systemd-shared/src/basic/log.h
index 6477bff4..4741f580 100644
--- a/src/libnm-systemd-shared/src/basic/log.h
+++ b/src/libnm-systemd-shared/src/basic/log.h
@@ -7,10 +7,7 @@
 #include <string.h>
 #include <syslog.h>
 
-#include "list.h"
 #include "macro.h"
-#include "ratelimit.h"
-#include "stdio-util.h"
 
 /* Some structures we reference but don't want to pull in headers for */
 struct iovec;
@@ -90,13 +87,6 @@ int log_show_tid_from_string(const char *e);
  * environment should not be called from library code — this is always a job
  * for the application itself. */
 
-#if 0 /* NM_IGNORED */
-assert_cc(STRLEN(__FILE__) > STRLEN(RELATIVE_SOURCE_PATH) + 1);
-#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
-#else /* NM_IGNORED */
-#define PROJECT_FILE __FILE__
-#endif /* NM_IGNORED */
-
 bool stderr_is_journal(void);
 int log_open(void);
 void log_close(void);
@@ -224,7 +214,7 @@ int log_struct_internal(
                 const char *file,
                 int line,
                 const char *func,
-                const char *format, ...) _printf_(6,0) _sentinel_;
+                const char *format, ...) _sentinel_;
 #endif /* NM_IGNORED */
 
 #if 0 /* NM_IGNORED */
@@ -294,53 +284,6 @@ _noreturn_ void log_assert_failed(
 #endif /* NM_IGNORED */
 
 #if 0 /* NM_IGNORED */
-_noreturn_ void log_assert_failed_unreachable(
-                const char *file,
-                int line,
-                const char *func);
-#else /* NM_IGNORED */
-#define log_assert_failed_unreachable(file, line, func)                               \
-    G_STMT_START                                                                      \
-    {                                                                                 \
-        log_internal(LOG_CRIT,                                                        \
-                     0,                                                               \
-                     file,                                                            \
-                     line,                                                            \
-                     func,                                                            \
-                     "Code should not be reached at %s:%u, function %s(). Aborting.", \
-                     file,                                                            \
-                     line,                                                            \
-                     func);                                                           \
-        g_assert_not_reached();                                                       \
-    }                                                                                 \
-    G_STMT_END
-#endif /* NM_IGNORED */
-
-#if 0 /* NM_IGNORED */
-void log_assert_failed_return(
-                const char *text,
-                const char *file,
-                int line,
-                const char *func);
-#else /* NM_IGNORED */
-#define log_assert_failed_return(text, file, line, func)                         \
-    ({                                                                           \
-        log_internal(LOG_DEBUG,                                                  \
-                     0,                                                          \
-                     file,                                                       \
-                     line,                                                       \
-                     func,                                                       \
-                     "Assertion '%s' failed at %s:%u, function %s(). Ignoring.", \
-                     text,                                                       \
-                     file,                                                       \
-                     line,                                                       \
-                     func);                                                      \
-        g_return_if_fail_warning(G_LOG_DOMAIN, G_STRFUNC, text);                 \
-        (void) 0;                                                                \
-    })
-#endif /* NM_IGNORED */
-
-#if 0 /* NM_IGNORED */
 #define log_dispatch(level, error, buffer)                              \
         log_dispatch_internal(level, error, PROJECT_FILE, __LINE__, __func__, NULL, NULL, NULL, NULL, buffer)
 #endif /* NM_IGNORED */
@@ -450,11 +393,15 @@ bool log_on_console(void) _pure_;
 /* Do a fake formatting of the message string to let the scanner verify the arguments against the format
  * message. The variable will never be set to true, but we don't tell the compiler that :) */
 extern bool _log_message_dummy;
-#  define LOG_MESSAGE(fmt, ...) "MESSAGE=%.0d" fmt, (_log_message_dummy && printf(fmt, ##__VA_ARGS__)), ##__VA_ARGS__
+#  define LOG_ITEM(fmt, ...) "%.0d" fmt, (_log_message_dummy && printf(fmt, ##__VA_ARGS__)), ##__VA_ARGS__
+#  define LOG_MESSAGE(fmt, ...) LOG_ITEM("MESSAGE=" fmt, ##__VA_ARGS__)
 #else
+#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
 #  define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
 #endif
 
+#define LOG_MESSAGE_ID(id) LOG_ITEM("MESSAGE_ID=" id)
+
 void log_received_signal(int level, const struct signalfd_siginfo *si);
 
 /* If turned on, any requests for a log target involving "syslog" will be implicitly upgraded to the equivalent journal target */
@@ -471,9 +418,6 @@ void log_set_open_when_needed(bool b);
  * stderr, the console or kmsg */
 void log_set_prohibit_ipc(bool b);
 
-void log_set_assert_return_is_critical(bool b);
-bool log_get_assert_return_is_critical(void) _pure_;
-
 int log_dup_console(void);
 
 #if 0 /* NM_IGNORED */
@@ -540,58 +484,6 @@ int log_syntax_parse_error_internal(
 
 void log_setup(void);
 
-typedef struct LogRateLimit {
-        int error;
-        int level;
-        RateLimit ratelimit;
-} LogRateLimit;
-
-#define log_ratelimit_internal(_level, _error, _ratelimit, _file, _line, _func, _format, ...)        \
-({                                                                              \
-        int _log_ratelimit_error = (_error);                                    \
-        int _log_ratelimit_level = (_level);                                    \
-        static LogRateLimit _log_ratelimit = {                                  \
-                .ratelimit = (_ratelimit),                                      \
-        };                                                                      \
-        unsigned _num_dropped_errors = ratelimit_num_dropped(&_log_ratelimit.ratelimit); \
-        if (_log_ratelimit_error != _log_ratelimit.error || _log_ratelimit_level != _log_ratelimit.level) { \
-                ratelimit_reset(&_log_ratelimit.ratelimit);                     \
-                _log_ratelimit.error = _log_ratelimit_error;                    \
-                _log_ratelimit.level = _log_ratelimit_level;                    \
-        }                                                                       \
-        if (log_get_max_level() == LOG_DEBUG || ratelimit_below(&_log_ratelimit.ratelimit)) \
-                _log_ratelimit_error = _num_dropped_errors > 0                  \
-                ? log_internal(_log_ratelimit_level, _log_ratelimit_error, _file, _line, _func, _format " (Dropped %u similar message(s))", ##__VA_ARGS__, _num_dropped_errors) \
-                : log_internal(_log_ratelimit_level, _log_ratelimit_error, _file, _line, _func, _format, ##__VA_ARGS__); \
-        _log_ratelimit_error;                                                   \
-})
-
-#define log_ratelimit_full_errno(level, error, _ratelimit, format, ...)             \
-        ({                                                              \
-                int _level = (level), _e = (error);                     \
-                _e = (log_get_max_level() >= LOG_PRI(_level))           \
-                        ? log_ratelimit_internal(_level, _e, _ratelimit, PROJECT_FILE, __LINE__, __func__, format, ##__VA_ARGS__) \
-                        : -ERRNO_VALUE(_e);                             \
-                _e < 0 ? _e : -ESTRPIPE;                                \
-        })
-
-#define log_ratelimit_full(level, _ratelimit, format, ...)                          \
-        log_ratelimit_full_errno(level, 0, _ratelimit, format, ##__VA_ARGS__)
-
-/* Normal logging */
-#define log_ratelimit_info(...)      log_ratelimit_full(LOG_INFO,    __VA_ARGS__)
-#define log_ratelimit_notice(...)    log_ratelimit_full(LOG_NOTICE,  __VA_ARGS__)
-#define log_ratelimit_warning(...)   log_ratelimit_full(LOG_WARNING, __VA_ARGS__)
-#define log_ratelimit_error(...)     log_ratelimit_full(LOG_ERR,     __VA_ARGS__)
-#define log_ratelimit_emergency(...) log_ratelimit_full(log_emergency_level(), __VA_ARGS__)
-
-/* Logging triggered by an errno-like error */
-#define log_ratelimit_info_errno(error, ...)      log_ratelimit_full_errno(LOG_INFO,    error, __VA_ARGS__)
-#define log_ratelimit_notice_errno(error, ...)    log_ratelimit_full_errno(LOG_NOTICE,  error, __VA_ARGS__)
-#define log_ratelimit_warning_errno(error, ...)   log_ratelimit_full_errno(LOG_WARNING, error, __VA_ARGS__)
-#define log_ratelimit_error_errno(error, ...)     log_ratelimit_full_errno(LOG_ERR,     error, __VA_ARGS__)
-#define log_ratelimit_emergency_errno(error, ...) log_ratelimit_full_errno(log_emergency_level(), error, __VA_ARGS__)
-
 const char* _log_set_prefix(const char *prefix, bool force);
 static inline const char* _log_unset_prefixp(const char **p) {
         assert(p);
@@ -601,112 +493,3 @@ static inline const char* _log_unset_prefixp(const char **p) {
 
 #define LOG_SET_PREFIX(prefix) \
         _cleanup_(_log_unset_prefixp) _unused_ const char *CONCATENATE(_cleanup_log_unset_prefix_, UNIQ) = _log_set_prefix(prefix, false);
-
-/*
- * The log context allows attaching extra metadata to log messages written to the journal via log.h. We keep
- * track of a thread local log context onto which we can push extra metadata fields that should be logged.
- *
- * LOG_CONTEXT_PUSH() will add the provided field to the log context and will remove it again when the
- * current block ends. LOG_CONTEXT_PUSH_STRV() will do the same but for all fields in the given strv.
- * LOG_CONTEXT_PUSHF() is like LOG_CONTEXT_PUSH() but takes a format string and arguments.
- *
- * Using the macros is as simple as putting them anywhere inside a block to add a field to all following log
- * messages logged from inside that block.
- *
- * void myfunction(...) {
- *         ...
- *
- *         LOG_CONTEXT_PUSHF("MYMETADATA=%s", "abc");
- *
- *         // Every journal message logged will now have the MYMETADATA=abc
- *         // field included.
- * }
- *
- * One special case to note is async code, where we use callbacks that are invoked to continue processing
- * when some event occurs. For async code, there's usually an associated "userdata" struct containing all the
- * information associated with the async operation. In this "userdata" struct, we can store a log context
- * allocated with log_context_new() and freed with log_context_free(). We can then add and remove fields to
- * the `fields` member of the log context object and all those fields will be logged along with each log
- * message.
- */
-
-typedef struct LogContext LogContext;
-
-bool log_context_enabled(void);
-
-LogContext* log_context_new(const char *key, const char *value);
-LogContext* log_context_new_strv(char **fields, bool owned);
-LogContext* log_context_new_iov(struct iovec *input_iovec, size_t n_input_iovec, bool owned);
-
-/* Same as log_context_new(), but frees the given fields strv/iovec on failure. */
-LogContext* log_context_new_strv_consume(char **fields);
-LogContext* log_context_new_iov_consume(struct iovec *input_iovec, size_t n_input_iovec);
-
-LogContext *log_context_ref(LogContext *c);
-LogContext *log_context_unref(LogContext *c);
-
-DEFINE_TRIVIAL_CLEANUP_FUNC(LogContext*, log_context_unref);
-
-/* Returns the number of attached log context objects. */
-size_t log_context_num_contexts(void);
-/* Returns the number of fields in all attached log contexts. */
-size_t log_context_num_fields(void);
-
-static inline void _reset_log_level(int *saved_log_level) {
-        assert(saved_log_level);
-
-        log_set_max_level(*saved_log_level);
-}
-
-#define LOG_CONTEXT_SET_LOG_LEVEL(level) \
-        _cleanup_(_reset_log_level) _unused_ int _saved_log_level_ = log_set_max_level(level);
-
-#define LOG_CONTEXT_PUSH(...) \
-        LOG_CONTEXT_PUSH_STRV(STRV_MAKE(__VA_ARGS__))
-
-#define LOG_CONTEXT_PUSHF(...) \
-        LOG_CONTEXT_PUSH(snprintf_ok((char[LINE_MAX]) {}, LINE_MAX, __VA_ARGS__))
-
-#define _LOG_CONTEXT_PUSH_KEY_VALUE(key, value, c) \
-        _unused_ _cleanup_(log_context_unrefp) LogContext *c = log_context_new(key, value);
-
-#define LOG_CONTEXT_PUSH_KEY_VALUE(key, value) \
-        _LOG_CONTEXT_PUSH_KEY_VALUE(key, value, UNIQ_T(c, UNIQ))
-
-#define _LOG_CONTEXT_PUSH_STRV(strv, c) \
-        _unused_ _cleanup_(log_context_unrefp) LogContext *c = log_context_new_strv(strv, /*owned=*/ false);
-
-#define LOG_CONTEXT_PUSH_STRV(strv) \
-        _LOG_CONTEXT_PUSH_STRV(strv, UNIQ_T(c, UNIQ))
-
-#define _LOG_CONTEXT_PUSH_IOV(input_iovec, n_input_iovec, c) \
-        _unused_ _cleanup_(log_context_unrefp) LogContext *c = log_context_new_iov(input_iovec, n_input_iovec, /*owned=*/ false);
-
-#define LOG_CONTEXT_PUSH_IOV(input_iovec, n_input_iovec) \
-        _LOG_CONTEXT_PUSH_IOV(input_iovec, n_input_iovec, UNIQ_T(c, UNIQ))
-
-/* LOG_CONTEXT_CONSUME_STR()/LOG_CONTEXT_CONSUME_STRV()/LOG_CONTEXT_CONSUME_IOV() are identical to
- * LOG_CONTEXT_PUSH_STR()/LOG_CONTEXT_PUSH_STRV()/LOG_CONTEXT_PUSH_IOV() except they take ownership of the
- * given str/strv argument.
- */
-
-#define _LOG_CONTEXT_CONSUME_STR(s, c, strv) \
-        _unused_ _cleanup_strv_free_ strv = strv_new(s);                                                \
-        if (!strv)                                                                                      \
-                free(s);                                                                                \
-        _unused_ _cleanup_(log_context_unrefp) LogContext *c = log_context_new_strv_consume(TAKE_PTR(strv))
-
-#define LOG_CONTEXT_CONSUME_STR(s) \
-        _LOG_CONTEXT_CONSUME_STR(s, UNIQ_T(c, UNIQ), UNIQ_T(sv, UNIQ))
-
-#define _LOG_CONTEXT_CONSUME_STRV(strv, c) \
-        _unused_ _cleanup_(log_context_unrefp) LogContext *c = log_context_new_strv_consume(strv);
-
-#define LOG_CONTEXT_CONSUME_STRV(strv) \
-        _LOG_CONTEXT_CONSUME_STRV(strv, UNIQ_T(c, UNIQ))
-
-#define _LOG_CONTEXT_CONSUME_IOV(input_iovec, n_input_iovec, c) \
-        _unused_ _cleanup_(log_context_unrefp) LogContext *c = log_context_new_iov_consume(input_iovec, n_input_iovec);
-
-#define LOG_CONTEXT_CONSUME_IOV(input_iovec, n_input_iovec) \
-        _LOG_CONTEXT_CONSUME_IOV(input_iovec, n_input_iovec, UNIQ_T(c, UNIQ))
diff --git a/src/libnm-systemd-shared/src/basic/macro.h b/src/libnm-systemd-shared/src/basic/macro.h
index 026ec136..4ee1ad4d 100644
--- a/src/libnm-systemd-shared/src/basic/macro.h
+++ b/src/libnm-systemd-shared/src/basic/macro.h
@@ -103,76 +103,6 @@ static inline size_t GREEDY_ALLOC_ROUND_UP(size_t l) {
                 (type*)( (char *)UNIQ_T(A, uniq) - offsetof(type, member) ); \
         })
 
-#ifdef __COVERITY__
-
-/* Use special definitions of assertion macros in order to prevent
- * false positives of ASSERT_SIDE_EFFECT on Coverity static analyzer
- * for uses of assert_se() and assert_return().
- *
- * These definitions make expression go through a (trivial) function
- * call to ensure they are not discarded. Also use ! or !! to ensure
- * the boolean expressions are seen as such.
- *
- * This technique has been described and recommended in:
- * https://community.synopsys.com/s/question/0D534000046Yuzb/suppressing-assertsideeffect-for-functions-that-allow-for-sideeffects
- */
-
-extern void __coverity_panic__(void);
-
-static inline void __coverity_check__(int condition) {
-        if (!condition)
-                __coverity_panic__();
-}
-
-static inline int __coverity_check_and_return__(int condition) {
-        return condition;
-}
-
-#define assert_message_se(expr, message) __coverity_check__(!!(expr))
-
-#define assert_log(expr, message) __coverity_check_and_return__(!!(expr))
-
-#else  /* ! __COVERITY__ */
-
-#define assert_message_se(expr, message)                                \
-        do {                                                            \
-                if (_unlikely_(!(expr)))                                \
-                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
-        } while (false)
-
-#define assert_log(expr, message) ((_likely_(expr))                     \
-        ? (true)                                                        \
-        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
-
-#endif  /* __COVERITY__ */
-
-#define assert_se(expr) assert_message_se(expr, #expr)
-
-/* We override the glibc assert() here. */
-#undef assert
-#ifdef NDEBUG
-#define assert(expr) ({ if (!(expr)) __builtin_unreachable(); })
-#else
-#define assert(expr) assert_message_se(expr, #expr)
-#endif
-
-#define assert_not_reached()                                            \
-        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
-
-#define assert_return(expr, r)                                          \
-        do {                                                            \
-                if (!assert_log(expr, #expr))                           \
-                        return (r);                                     \
-        } while (false)
-
-#define assert_return_errno(expr, r, err)                               \
-        do {                                                            \
-                if (!assert_log(expr, #expr)) {                         \
-                        errno = err;                                    \
-                        return (r);                                     \
-                }                                                       \
-        } while (false)
-
 #define return_with_errno(r, err)                     \
         do {                                          \
                 errno = abs(err);                     \
@@ -251,59 +181,6 @@ static inline int __coverity_check_and_return__(int condition) {
 /* Pointers range from NULL to POINTER_MAX */
 #define POINTER_MAX ((void*) UINTPTR_MAX)
 
-#define _DEFINE_TRIVIAL_REF_FUNC(type, name, scope)             \
-        scope type *name##_ref(type *p) {                       \
-                if (!p)                                         \
-                        return NULL;                            \
-                                                                \
-                /* For type check. */                           \
-                unsigned *q = &p->n_ref;                        \
-                assert(*q > 0);                                 \
-                assert_se(*q < UINT_MAX);                       \
-                                                                \
-                (*q)++;                                         \
-                return p;                                       \
-        }
-
-#define _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func, scope) \
-        scope type *name##_unref(type *p) {                      \
-                if (!p)                                          \
-                        return NULL;                             \
-                                                                 \
-                assert(p->n_ref > 0);                            \
-                p->n_ref--;                                      \
-                if (p->n_ref > 0)                                \
-                        return NULL;                             \
-                                                                 \
-                return free_func(p);                             \
-        }
-
-#define DEFINE_TRIVIAL_REF_FUNC(type, name)     \
-        _DEFINE_TRIVIAL_REF_FUNC(type, name,)
-#define DEFINE_PRIVATE_TRIVIAL_REF_FUNC(type, name)     \
-        _DEFINE_TRIVIAL_REF_FUNC(type, name, static)
-#define DEFINE_PUBLIC_TRIVIAL_REF_FUNC(type, name)      \
-        _DEFINE_TRIVIAL_REF_FUNC(type, name, _public_)
-
-#define DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func)        \
-        _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func,)
-#define DEFINE_PRIVATE_TRIVIAL_UNREF_FUNC(type, name, free_func)        \
-        _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func, static)
-#define DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC(type, name, free_func)         \
-        _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func, _public_)
-
-#define DEFINE_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
-        DEFINE_TRIVIAL_REF_FUNC(type, name);                    \
-        DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func);
-
-#define DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
-        DEFINE_PRIVATE_TRIVIAL_REF_FUNC(type, name);                    \
-        DEFINE_PRIVATE_TRIVIAL_UNREF_FUNC(type, name, free_func);
-
-#define DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
-        DEFINE_PUBLIC_TRIVIAL_REF_FUNC(type, name);                    \
-        DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC(type, name, free_func);
-
 /* A macro to force copying of a variable from memory. This is useful whenever we want to read something from
  * memory and want to make sure the compiler won't optimize away the destination variable for us. It's not
  * supposed to be a full CPU memory barrier, i.e. CPU is still allowed to reorder the reads, but it is not
@@ -328,12 +205,6 @@ static inline size_t size_add(size_t x, size_t y) {
         return saturate_add(x, y, SIZE_MAX);
 }
 
-typedef struct {
-        int _empty[0];
-} dummy_t;
-
-assert_cc(sizeof(dummy_t) == 0);
-
 /* A little helper for subtracting 1 off a pointer in a safe UB-free way. This is intended to be used for
  * loops that count down from a high pointer until some base. A naive loop would implement this like this:
  *
@@ -358,5 +229,3 @@ assert_cc(sizeof(dummy_t) == 0);
         for (typeof(entry) _va_sentinel_[1] = {}, _entries_[] = { __VA_ARGS__ __VA_OPT__(,) _va_sentinel_[0] }, *_current_ = _entries_; \
              ((long)(_current_ - _entries_) < (long)(ELEMENTSOF(_entries_) - 1)) && ({ entry = *_current_; true; }); \
              _current_++)
-
-#include "log.h"
diff --git a/src/libnm-systemd-shared/src/basic/memory-util.c b/src/libnm-systemd-shared/src/basic/memory-util.c
index 789e96a9..3e9a3683 100644
--- a/src/libnm-systemd-shared/src/basic/memory-util.c
+++ b/src/libnm-systemd-shared/src/basic/memory-util.c
@@ -2,10 +2,11 @@
 
 #include "nm-sd-adapt-shared.h"
 
+#include <threads.h>
 #include <unistd.h>
 
+#include "alloc-util.h"
 #include "memory-util.h"
-#include "missing_threads.h"
 
 size_t page_size(void) {
         static thread_local size_t pgsz = 0;
@@ -42,7 +43,7 @@ bool memeqbyte(uint8_t byte, const void *data, size_t length) {
         return memcmp(data, p + 16, length) == 0;
 }
 
-void *memdup_reverse(const void *mem, size_t size) {
+void* memdup_reverse(const void *mem, size_t size) {
         assert(mem);
         assert(size != 0);
 
@@ -57,3 +58,14 @@ void *memdup_reverse(const void *mem, size_t size) {
 
         return p;
 }
+
+void* erase_and_free(void *p) {
+        size_t l;
+
+        if (!p)
+                return NULL;
+
+        l = MALLOC_SIZEOF_SAFE(p);
+        explicit_bzero_safe(p, l);
+        return mfree(p);
+}
diff --git a/src/libnm-systemd-shared/src/basic/memory-util.h b/src/libnm-systemd-shared/src/basic/memory-util.h
index 1f604cc4..443fc3a8 100644
--- a/src/libnm-systemd-shared/src/basic/memory-util.h
+++ b/src/libnm-systemd-shared/src/basic/memory-util.h
@@ -7,7 +7,6 @@
 #include <string.h>
 #include <sys/types.h>
 
-#include "alloc-util.h"
 #include "macro.h"
 #include "memory-util-fundamental.h"
 
@@ -35,13 +34,16 @@ static inline void* mempcpy_safe(void *dst, const void *src, size_t n) {
         return mempcpy(dst, src, n);
 }
 
-#define mempcpy_typesafe(dst, src, n)                                   \
+#define _mempcpy_typesafe(dst, src, n, sz)                              \
         ({                                                              \
-                size_t _sz_;                                            \
-                assert_se(MUL_SAFE(&_sz_, sizeof((dst)[0]), n));        \
-                (typeof((dst)[0])*) mempcpy_safe(dst, src, _sz_);       \
+                size_t sz;                                              \
+                assert_se(MUL_SAFE(&sz, sizeof((dst)[0]), n));          \
+                (typeof((dst)[0])*) mempcpy_safe(dst, src, sz);         \
         })
 
+#define mempcpy_typesafe(dst, src, n)                                   \
+        _mempcpy_typesafe(dst, src, n, UNIQ_T(sz, UNIQ))
+
 /* Normal memcmp() requires s1 and s2 to be nonnull. We do nothing if n is 0. */
 static inline int memcmp_safe(const void *s1, const void *s2, size_t n) {
         if (n == 0)
@@ -59,19 +61,19 @@ static inline int memcmp_nn(const void *s1, size_t n1, const void *s2, size_t n2
 
 #define zero(x) (memzero(&(x), sizeof(x)))
 
-bool memeqbyte(uint8_t byte, const void *data, size_t length);
+bool memeqbyte(uint8_t byte, const void *data, size_t length) _nonnull_if_nonzero_(2, 3);
 
 #define memeqzero(data, length) memeqbyte(0x00, data, length)
 
 #define eqzero(x) memeqzero(x, sizeof(x))
 
-static inline void *mempset(void *s, int c, size_t n) {
+static inline void* mempset(void *s, int c, size_t n) {
         memset(s, c, n);
-        return (uint8_t*)s + n;
+        return (uint8_t*) s + n;
 }
 
 /* Normal memmem() requires haystack to be nonnull, which is annoying for zero-length buffers */
-static inline void *memmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
+static inline void* memmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
 
         if (needlelen <= 0)
                 return (void*) haystack;
@@ -85,7 +87,7 @@ static inline void *memmem_safe(const void *haystack, size_t haystacklen, const
         return memmem(haystack, haystacklen, needle, needlelen);
 }
 
-static inline void *mempmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
+static inline void* mempmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
         const uint8_t *p;
 
         p = memmem_safe(haystack, haystacklen, needle, needlelen);
@@ -95,16 +97,7 @@ static inline void *mempmem_safe(const void *haystack, size_t haystacklen, const
         return (uint8_t*) p + needlelen;
 }
 
-static inline void* erase_and_free(void *p) {
-        size_t l;
-
-        if (!p)
-                return NULL;
-
-        l = MALLOC_SIZEOF_SAFE(p);
-        explicit_bzero_safe(p, l);
-        return mfree(p);
-}
+void* erase_and_free(void *p);
 
 static inline void erase_and_freep(void *p) {
         erase_and_free(*(void**) p);
@@ -116,4 +109,57 @@ static inline void erase_char(char *p) {
 }
 
 /* Makes a copy of the buffer with reversed order of bytes */
-void *memdup_reverse(const void *mem, size_t size);
+void* memdup_reverse(const void *mem, size_t size);
+
+#define _DEFINE_TRIVIAL_REF_FUNC(type, name, scope)             \
+        scope type *name##_ref(type *p) {                       \
+                if (!p)                                         \
+                        return NULL;                            \
+                                                                \
+                /* For type check. */                           \
+                unsigned *q = &p->n_ref;                        \
+                assert(*q > 0);                                 \
+                assert_se(*q < UINT_MAX);                       \
+                                                                \
+                (*q)++;                                         \
+                return p;                                       \
+        }
+
+#define _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func, scope) \
+        scope type *name##_unref(type *p) {                      \
+                if (!p)                                          \
+                        return NULL;                             \
+                                                                 \
+                assert(p->n_ref > 0);                            \
+                p->n_ref--;                                      \
+                if (p->n_ref > 0)                                \
+                        return NULL;                             \
+                                                                 \
+                return free_func(p);                             \
+        }
+
+#define DEFINE_TRIVIAL_REF_FUNC(type, name)     \
+        _DEFINE_TRIVIAL_REF_FUNC(type, name,)
+#define DEFINE_PRIVATE_TRIVIAL_REF_FUNC(type, name)     \
+        _DEFINE_TRIVIAL_REF_FUNC(type, name, static)
+#define DEFINE_PUBLIC_TRIVIAL_REF_FUNC(type, name)      \
+        _DEFINE_TRIVIAL_REF_FUNC(type, name, _public_)
+
+#define DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func)        \
+        _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func,)
+#define DEFINE_PRIVATE_TRIVIAL_UNREF_FUNC(type, name, free_func)        \
+        _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func, static)
+#define DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC(type, name, free_func)         \
+        _DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func, _public_)
+
+#define DEFINE_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
+        DEFINE_TRIVIAL_REF_FUNC(type, name);                    \
+        DEFINE_TRIVIAL_UNREF_FUNC(type, name, free_func);
+
+#define DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
+        DEFINE_PRIVATE_TRIVIAL_REF_FUNC(type, name);                    \
+        DEFINE_PRIVATE_TRIVIAL_UNREF_FUNC(type, name, free_func);
+
+#define DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(type, name, free_func)    \
+        DEFINE_PUBLIC_TRIVIAL_REF_FUNC(type, name);                    \
+        DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC(type, name, free_func);
diff --git a/src/libnm-systemd-shared/src/basic/mempool.c b/src/libnm-systemd-shared/src/basic/mempool.c
index e467d706..60a89a6b 100644
--- a/src/libnm-systemd-shared/src/basic/mempool.c
+++ b/src/libnm-systemd-shared/src/basic/mempool.c
@@ -6,6 +6,7 @@
 #include <stdlib.h>
 
 #include "format-util.h"
+#include "log.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "mempool.h"
diff --git a/src/libnm-systemd-shared/src/basic/missing_fcntl.h b/src/libnm-systemd-shared/src/basic/missing_fcntl.h
index a6188879..280e233b 100644
--- a/src/libnm-systemd-shared/src/basic/missing_fcntl.h
+++ b/src/libnm-systemd-shared/src/basic/missing_fcntl.h
@@ -3,74 +3,16 @@
 
 #include <fcntl.h>
 
-#ifndef F_LINUX_SPECIFIC_BASE
-#define F_LINUX_SPECIFIC_BASE 1024
-#endif
-
+/* This is defined since glibc-2.41. */
 #ifndef F_DUPFD_QUERY
-#define F_DUPFD_QUERY (F_LINUX_SPECIFIC_BASE + 3)
-#endif
-
-#ifndef F_SETPIPE_SZ
-#define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
-#endif
-
-#ifndef F_GETPIPE_SZ
-#define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
-#endif
-
-#ifndef F_ADD_SEALS
-#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9)
-#define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10)
-
-#define F_SEAL_SEAL     0x0001  /* prevent further seals from being set */
-#define F_SEAL_SHRINK   0x0002  /* prevent file from shrinking */
-#define F_SEAL_GROW     0x0004  /* prevent file from growing */
-#define F_SEAL_WRITE    0x0008  /* prevent writes */
-#endif
-
-#ifndef F_SEAL_FUTURE_WRITE
-#define F_SEAL_FUTURE_WRITE 0x0010 /* prevent future writes while mapped */
+#define F_DUPFD_QUERY 1027
 #endif
 
+/* This is defined since glibc-2.39. */
 #ifndef F_SEAL_EXEC
 #define F_SEAL_EXEC     0x0020  /* prevent chmod modifying exec bits */
 #endif
 
-#ifndef F_OFD_GETLK
-#define F_OFD_GETLK     36
-#define F_OFD_SETLK     37
-#define F_OFD_SETLKW    38
-#endif
-
-#ifndef MAX_HANDLE_SZ
-#define MAX_HANDLE_SZ 128
-#endif
-
-/* The precise definition of __O_TMPFILE is arch specific; use the
- * values defined by the kernel (note: some are hexa, some are octal,
- * duplicated as-is from the kernel definitions):
- * - alpha, parisc, sparc: each has a specific value;
- * - others: they use the "generic" value.
- */
-
-#ifndef __O_TMPFILE
-#if defined(__alpha__)
-#define __O_TMPFILE     0100000000
-#elif defined(__parisc__) || defined(__hppa__)
-#define __O_TMPFILE     0400000000
-#elif defined(__sparc__) || defined(__sparc64__)
-#define __O_TMPFILE     0x2000000
-#else
-#define __O_TMPFILE     020000000
-#endif
-#endif
-
-/* a horrid kludge trying to make sure that this will fail on old kernels */
-#ifndef O_TMPFILE
-#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
-#endif
-
 /* So O_LARGEFILE is generally implied by glibc, and defined to zero hence, because we only build in LFS
  * mode. However, when invoking fcntl(F_GETFL) the flag is ORed into the result anyway — glibc does not mask
  * it away. Which sucks. Let's define the actual value here, so that we can mask it ourselves.
@@ -79,6 +21,7 @@
  * are hexa and others are octal; duplicated as-is from the kernel definitions):
  * - alpha, arm, arm64, m68k, mips, parisc, powerpc, sparc: each has a specific value;
  * - others: they use the "generic" value (defined in include/uapi/asm-generic/fcntl.h) */
+#if 0  /* NM_IGNORED */
 #if O_LARGEFILE != 0
 #define RAW_O_LARGEFILE O_LARGEFILE
 #else
@@ -96,7 +39,15 @@
 #define RAW_O_LARGEFILE 00100000
 #endif
 #endif
+#endif  /* NM_IGNORED */
 
+/* This is defined since glibc-2.39. */
 #ifndef AT_HANDLE_FID
 #define AT_HANDLE_FID AT_REMOVEDIR
 #endif
+
+/* On musl, O_ACCMODE is defined as (03|O_SEARCH), unlike glibc which defines it as
+ * (O_RDONLY|O_WRONLY|O_RDWR). Additionally, O_SEARCH is simply defined as O_PATH. This changes the behaviour
+ * of O_ACCMODE in certain situations, which we don't want. This definition is copied from glibc and works
+ * around the problems with musl's definition. */
+#define O_ACCMODE_STRICT (O_RDONLY|O_WRONLY|O_RDWR)
diff --git a/src/libnm-systemd-shared/src/basic/missing_fs.h b/src/libnm-systemd-shared/src/basic/missing_fs.h
new file mode 100644
index 00000000..1e2f07e5
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/missing_fs.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <linux/fs.h>
+
+/* Not exposed yet. Defined at fs/ext4/ext4.h */
+#ifndef EXT4_IOC_RESIZE_FS
+#define EXT4_IOC_RESIZE_FS _IOW('f', 16, __u64)
+#endif
+
+/* linux/exportfs.h (33c5ac9175195c36a0b7005aaf503a2e81f117a1, 5.5) */
+#ifndef FILEID_KERNFS
+#define FILEID_KERNFS 0xfe
+#endif
diff --git a/src/libnm-systemd-shared/src/basic/missing_random.h b/src/libnm-systemd-shared/src/basic/missing_random.h
index 5f40c4e5..69002196 100644
--- a/src/libnm-systemd-shared/src/basic/missing_random.h
+++ b/src/libnm-systemd-shared/src/basic/missing_random.h
@@ -1,26 +1,11 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include "macro.h"
-
-#if HAVE_GETRANDOM
-#  include <sys/random.h>
-#else
-#  include <linux/random.h>
-#endif
-
-#ifndef GRND_NONBLOCK
-#  define GRND_NONBLOCK 0x0001
-#else
-assert_cc(GRND_NONBLOCK == 0x0001);
-#endif
+#include <sys/random.h>
 
-#ifndef GRND_RANDOM
-#  define GRND_RANDOM 0x0002
-#else
-assert_cc(GRND_RANDOM == 0x0002);
-#endif
+#include "macro.h"
 
+/* Defined since glibc-2.32. */
 #ifndef GRND_INSECURE
 #  define GRND_INSECURE 0x0004
 #else
diff --git a/src/libnm-systemd-shared/src/basic/missing_socket.h b/src/libnm-systemd-shared/src/basic/missing_socket.h
index 8460ce13..874e93f3 100644
--- a/src/libnm-systemd-shared/src/basic/missing_socket.h
+++ b/src/libnm-systemd-shared/src/basic/missing_socket.h
@@ -3,75 +3,36 @@
 
 #include <sys/socket.h>
 
-#ifndef AF_VSOCK
-#define AF_VSOCK 40
-#endif
-
-#ifndef SO_REUSEPORT
-#define SO_REUSEPORT 15
-#endif
-
-#ifndef SO_PEERGROUPS
-#define SO_PEERGROUPS 59
-#endif
-
+/* Supported since kernel v6.5 (5e2ff6704a275be009be8979af17c52361b79b89) */
 #ifndef SO_PASSPIDFD
 #define SO_PASSPIDFD 76
 #endif
 
+/* Supported since kernel v6.5 (7b26952a91cf65ff1cc867a2382a8964d8c0ee7d) */
 #ifndef SO_PEERPIDFD
 #define SO_PEERPIDFD 77
 #endif
 
-#ifndef SO_BINDTOIFINDEX
-#define SO_BINDTOIFINDEX 62
-#endif
-
-#ifndef SOL_NETLINK
-#define SOL_NETLINK 270
-#endif
-
-#ifndef SOL_ALG
-#define SOL_ALG 279
-#endif
-
 /* Not exposed yet. Defined in include/linux/socket.h. */
 #ifndef SOL_SCTP
 #define SOL_SCTP 132
 #endif
 
+/* Supported since kernel v2.6.17 (2c7946a7bf45ae86736ab3b43d0085e43947945c).
+ * Defined since glibc-2.39 */
 #ifndef SCM_SECURITY
 #define SCM_SECURITY 0x03
 #endif
 
+/* Supported since kernel v6.5 (5e2ff6704a275be009be8979af17c52361b79b89).
+ * Defined since glibc-2.39 */
 #ifndef SCM_PIDFD
 #define SCM_PIDFD 0x04
 #endif
 
-/* netinet/in.h */
-#ifndef IP_FREEBIND
-#define IP_FREEBIND 15
-#endif
-
-#ifndef IP_TRANSPARENT
-#define IP_TRANSPARENT 19
-#endif
-
-#ifndef IPV6_FREEBIND
-#define IPV6_FREEBIND 78
-#endif
-
-#ifndef IP_RECVFRAGSIZE
-#define IP_RECVFRAGSIZE 25
-#endif
-
-#ifndef IPV6_RECVFRAGSIZE
-#define IPV6_RECVFRAGSIZE 77
-#endif
-
-/* The maximum number of fds that SCM_RIGHTS accepts. This is an internal kernel constant, but very much
- * useful for userspace too. It's documented in unix(7) these days, hence should be fairly reliable to define
- * here. */
+/* The maximum number of fds that SCM_RIGHTS accepts. This is an internal kernel constant defined in
+ * include/net/scm.h, but very much useful for userspace too. It's documented in unix(7) these days, hence
+ * should be fairly reliable to define here. */
 #ifndef SCM_MAX_FD
 #define SCM_MAX_FD 253U
 #endif
diff --git a/src/libnm-systemd-shared/src/basic/missing_stat.h b/src/libnm-systemd-shared/src/basic/missing_stat.h
deleted file mode 100644
index 18a15ab0..00000000
--- a/src/libnm-systemd-shared/src/basic/missing_stat.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <linux/types.h>
-#include <sys/stat.h>
-
-#if 0 /* NM_IGNORED */
-#if WANT_LINUX_STAT_H
-#include <linux/stat.h>
-#endif
-
-/* The newest definition we are aware of (fa2fcf4f1df1559a0a4ee0f46915b496cc2ebf60; 5.8) */
-#define STATX_DEFINITION {                      \
-        __u32 stx_mask;                         \
-        __u32 stx_blksize;                      \
-        __u64 stx_attributes;                   \
-        __u32 stx_nlink;                        \
-        __u32 stx_uid;                          \
-        __u32 stx_gid;                          \
-        __u16 stx_mode;                         \
-        __u16 __spare0[1];                      \
-        __u64 stx_ino;                          \
-        __u64 stx_size;                         \
-        __u64 stx_blocks;                       \
-        __u64 stx_attributes_mask;              \
-        struct statx_timestamp stx_atime;       \
-        struct statx_timestamp stx_btime;       \
-        struct statx_timestamp stx_ctime;       \
-        struct statx_timestamp stx_mtime;       \
-        __u32 stx_rdev_major;                   \
-        __u32 stx_rdev_minor;                   \
-        __u32 stx_dev_major;                    \
-        __u32 stx_dev_minor;                    \
-        __u64 stx_mnt_id;                       \
-        __u64 __spare2;                         \
-        __u64 __spare3[12];                     \
-}
-
-#if !HAVE_STRUCT_STATX
-struct statx_timestamp {
-        __s64 tv_sec;
-        __u32 tv_nsec;
-        __s32 __reserved;
-};
-
-struct statx STATX_DEFINITION;
-#endif
-
-/* Always define the newest version we are aware of as a distinct type, so that we can use it even if glibc
- * defines an older definition */
-struct new_statx STATX_DEFINITION;
-#else /* NM_IGNORED */
-struct new_statx;
-#endif /* NM_IGNORED */
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef AT_STATX_SYNC_AS_STAT
-#define AT_STATX_SYNC_AS_STAT 0x0000
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef AT_STATX_FORCE_SYNC
-#define AT_STATX_FORCE_SYNC 0x2000
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef AT_STATX_DONT_SYNC
-#define AT_STATX_DONT_SYNC 0x4000
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_TYPE
-#define STATX_TYPE 0x00000001U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_MODE
-#define STATX_MODE 0x00000002U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_NLINK
-#define STATX_NLINK 0x00000004U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_UID
-#define STATX_UID 0x00000008U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_GID
-#define STATX_GID 0x00000010U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_ATIME
-#define STATX_ATIME 0x00000020U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_MTIME
-#define STATX_MTIME 0x00000040U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_CTIME
-#define STATX_CTIME 0x00000080U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_INO
-#define STATX_INO 0x00000100U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_SIZE
-#define STATX_SIZE 0x00000200U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_BLOCKS
-#define STATX_BLOCKS 0x00000400U
-#endif
-
-/* a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (4.11) */
-#ifndef STATX_BTIME
-#define STATX_BTIME 0x00000800U
-#endif
-
-/* fa2fcf4f1df1559a0a4ee0f46915b496cc2ebf60 (5.8) */
-#ifndef STATX_MNT_ID
-#define STATX_MNT_ID 0x00001000U
-#endif
-
-/* 80340fe3605c0e78cfe496c3b3878be828cfdbfe (5.8) */
-#ifndef STATX_ATTR_MOUNT_ROOT
-#define STATX_ATTR_MOUNT_ROOT 0x00002000 /* Root of a mount */
-#endif
diff --git a/src/libnm-systemd-shared/src/basic/missing_syscall.h b/src/libnm-systemd-shared/src/basic/missing_syscall.h
index da6f9827..55475f7e 100644
--- a/src/libnm-systemd-shared/src/basic/missing_syscall.h
+++ b/src/libnm-systemd-shared/src/basic/missing_syscall.h
@@ -4,12 +4,7 @@
 /* Missing glibc definitions to access certain kernel APIs */
 
 #include <errno.h>
-#include <fcntl.h>
-#if HAVE_LINUX_TIME_TYPES_H
-/* This header defines __kernel_timespec for us, but is only available since Linux 5.1, hence conditionally
- * include this. */
 #include <linux/time_types.h>
-#endif
 #include <signal.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
@@ -23,26 +18,15 @@
 #include "macro.h"
 #include "missing_keyctl.h"
 #include "missing_sched.h"
-#include "missing_stat.h"
 #include "missing_syscall_def.h"
 
 #if 0 /* NM_IGNORED */
-
-/* linux/kcmp.h */
-#ifndef KCMP_FILE /* 3f4994cfc15f38a3159c6e3a4b3ab2e1481a6b02 (3.19) */
-#define KCMP_FILE 0
-#endif
-
 /* ======================================================================= */
 
 #if !HAVE_FCHMODAT2
+/* since kernel v6.6 (78252deb023cf0879256fcfbafe37022c390762b) */
 static inline int missing_fchmodat2(int dirfd, const char *path, mode_t mode, int flags) {
-#  ifdef __NR_fchmodat2
         return syscall(__NR_fchmodat2, dirfd, path, mode, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
 }
 
 #  define fchmodat2 missing_fchmodat2
@@ -80,95 +64,6 @@ static inline int missing_ioprio_set(int which, int who, int ioprio) {
 
 /* ======================================================================= */
 
-#if !HAVE_MEMFD_CREATE
-static inline int missing_memfd_create(const char *name, unsigned int flags) {
-        return syscall(__NR_memfd_create, name, flags);
-}
-
-#  define memfd_create missing_memfd_create
-#endif
-#endif /* NM_IGNORED */
-
-/* ======================================================================= */
-
-#if !HAVE_GETRANDOM
-/* glibc says getrandom() returns ssize_t */
-static inline ssize_t missing_getrandom(void *buffer, size_t count, unsigned flags) {
-        return syscall(__NR_getrandom, buffer, count, flags);
-}
-
-#  define getrandom missing_getrandom
-#endif
-
-/* ======================================================================= */
-
-#if 0 /* NM_IGNORED */
-/* The syscall has been defined since forever, but the glibc wrapper was missing. */
-#if !HAVE_GETTID
-static inline pid_t missing_gettid(void) {
-#  if defined __NR_gettid && __NR_gettid >= 0
-        return (pid_t) syscall(__NR_gettid);
-#  else
-#    error "__NR_gettid not defined"
-#  endif
-}
-
-#  define gettid missing_gettid
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_NAME_TO_HANDLE_AT
-struct file_handle {
-        unsigned int handle_bytes;
-        int handle_type;
-        unsigned char f_handle[0];
-};
-
-static inline int missing_name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
-#  ifdef __NR_name_to_handle_at
-        return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define name_to_handle_at missing_name_to_handle_at
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_SETNS
-static inline int missing_setns(int fd, int nstype) {
-        return syscall(__NR_setns, fd, nstype);
-}
-
-#  define setns missing_setns
-#endif
-
-/* ======================================================================= */
-
-static inline pid_t raw_getpid(void) {
-#if defined(__alpha__)
-        return (pid_t) syscall(__NR_getxpid);
-#else
-        return (pid_t) syscall(__NR_getpid);
-#endif
-}
-
-/* ======================================================================= */
-
-#if !HAVE_RENAMEAT2
-static inline int missing_renameat2(int oldfd, const char *oldname, int newfd, const char *newname, unsigned flags) {
-        return syscall(__NR_renameat2, oldfd, oldname, newfd, newname, flags);
-}
-
-#  define renameat2 missing_renameat2
-#endif
-
-/* ======================================================================= */
-
 #if !HAVE_KCMP
 static inline int missing_kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2) {
         return syscall(__NR_kcmp, pid1, pid2, type, idx1, idx2);
@@ -186,12 +81,16 @@ static inline long missing_keyctl(int cmd, unsigned long arg2, unsigned long arg
 #  define keyctl missing_keyctl
 }
 
+/* ======================================================================= */
+
 static inline key_serial_t missing_add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t ringid) {
         return syscall(__NR_add_key, type, description, payload, plen, ringid);
 
 #  define add_key missing_add_key
 }
 
+/* ======================================================================= */
+
 static inline key_serial_t missing_request_key(const char *type, const char *description, const char * callout_info, key_serial_t destringid) {
         return syscall(__NR_request_key, type, description, callout_info, destringid);
 
@@ -201,34 +100,11 @@ static inline key_serial_t missing_request_key(const char *type, const char *des
 
 /* ======================================================================= */
 
-#if !HAVE_COPY_FILE_RANGE
-static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in,
-                                              int fd_out, loff_t *off_out,
-                                              size_t len,
-                                              unsigned int flags) {
-#  ifdef __NR_copy_file_range
-        return syscall(__NR_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define copy_file_range missing_copy_file_range
-#endif
-
-/* ======================================================================= */
-
 #if !HAVE_BPF
 union bpf_attr;
 
 static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
-#ifdef __NR_bpf
         return (int) syscall(__NR_bpf, cmd, attr, size);
-#else
-        errno = ENOSYS;
-        return -1;
-#endif
 }
 
 #  define bpf missing_bpf
@@ -236,28 +112,6 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
 
 /* ======================================================================= */
 
-#if !HAVE_STATX
-struct statx;
-
-static inline ssize_t missing_statx(int dfd, const char *filename, unsigned flags, unsigned int mask, struct statx *buffer) {
-#  ifdef __NR_statx
-        return syscall(__NR_statx, dfd, filename, flags, mask, buffer);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-#endif
-
-/* This typedef is supposed to be always defined. */
-typedef struct statx struct_statx;
-
-#if !HAVE_STATX
-#  define statx(dfd, filename, flags, mask, buffer) missing_statx(dfd, filename, flags, mask, buffer)
-#endif
-
-/* ======================================================================= */
-
 #if !HAVE_SET_MEMPOLICY
 enum {
         MPOL_DEFAULT,
@@ -269,14 +123,7 @@ enum {
 
 static inline long missing_set_mempolicy(int mode, const unsigned long *nodemask,
                            unsigned long maxnode) {
-        long i;
-#  if defined __NR_set_mempolicy && __NR_set_mempolicy >= 0
-        i = syscall(__NR_set_mempolicy, mode, nodemask, maxnode);
-#  else
-        errno = ENOSYS;
-        i = -1;
-#  endif
-        return i;
+        return syscall(__NR_set_mempolicy, mode, nodemask, maxnode);
 }
 
 #  define set_mempolicy missing_set_mempolicy
@@ -286,14 +133,7 @@ static inline long missing_set_mempolicy(int mode, const unsigned long *nodemask
 static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
                            unsigned long maxnode, void *addr,
                            unsigned long flags) {
-        long i;
-#  if defined __NR_get_mempolicy && __NR_get_mempolicy >= 0
-        i = syscall(__NR_get_mempolicy, mode, nodemask, maxnode, addr, flags);
-#  else
-        errno = ENOSYS;
-        i = -1;
-#  endif
-        return i;
+        return syscall(__NR_get_mempolicy, mode, nodemask, maxnode, addr, flags);
 }
 
 #  define get_mempolicy missing_get_mempolicy
@@ -304,6 +144,7 @@ static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
 /* ======================================================================= */
 
 #if !HAVE_PIDFD_SEND_SIGNAL
+/* since kernel v5.1 (3eb39f47934f9d5a3027fe00d906a45fe3a15fad) */
 static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned flags) {
         return syscall(__NR_pidfd_send_signal, fd, sig, info, flags);
 }
@@ -311,7 +152,10 @@ static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, un
 #  define pidfd_send_signal missing_pidfd_send_signal
 #endif
 
+/* ======================================================================= */
+
 #if !HAVE_PIDFD_OPEN
+/* since kernel v5.3 (7615d9e1780e26e0178c93c55b73309a5dc093d7) */
 static inline int missing_pidfd_open(pid_t pid, unsigned flags) {
         return syscall(__NR_pidfd_open, pid, flags);
 }
@@ -321,28 +165,10 @@ static inline int missing_pidfd_open(pid_t pid, unsigned flags) {
 
 /* ======================================================================= */
 
-#if !HAVE_RT_SIGQUEUEINFO
-static inline int missing_rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *info) {
-#  if defined __NR_rt_sigqueueinfo && __NR_rt_sigqueueinfo >= 0
-        return syscall(__NR_rt_sigqueueinfo, tgid, sig, info);
-#  else
-#    error "__NR_rt_sigqueueinfo not defined"
-#  endif
-}
-
-#  define rt_sigqueueinfo missing_rt_sigqueueinfo
-#endif
-
-/* ======================================================================= */
-
 #if 0 /* NM_IGNORED */
 #if !HAVE_RT_TGSIGQUEUEINFO
 static inline int missing_rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *info) {
-#  if defined __NR_rt_tgsigqueueinfo && __NR_rt_tgsigqueueinfo >= 0
         return syscall(__NR_rt_tgsigqueueinfo, tgid, tid, sig, info);
-#  else
-#    error "__NR_rt_tgsigqueueinfo not defined"
-#  endif
 }
 
 #  define rt_tgsigqueueinfo missing_rt_tgsigqueueinfo
@@ -351,27 +177,21 @@ static inline int missing_rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, sigi
 /* ======================================================================= */
 
 #if !HAVE_EXECVEAT
+/* since kernel v3.19 (51f39a1f0cea1cacf8c787f652f26dfee9611874) */
 static inline int missing_execveat(int dirfd, const char *pathname,
                                    char *const argv[], char *const envp[],
                                    int flags) {
-#  if defined __NR_execveat && __NR_execveat >= 0
         return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
 }
 
-#  undef AT_EMPTY_PATH
-#  define AT_EMPTY_PATH 0x1000
 #  define execveat missing_execveat
 #endif
 
 /* ======================================================================= */
 
 #if !HAVE_CLOSE_RANGE
+/* since kernel v5.9 (9b4feb630e8e9801603f3cab3a36369e3c1cf88d) */
 static inline int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) {
-#  ifdef __NR_close_range
         /* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while
          * userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we
          * do so here too, even if we end up passing signed fds to it most of the time. */
@@ -379,10 +199,6 @@ static inline int missing_close_range(unsigned first_fd, unsigned end_fd, unsign
                        first_fd,
                        end_fd,
                        flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
 }
 
 #  define close_range missing_close_range
@@ -390,243 +206,8 @@ static inline int missing_close_range(unsigned first_fd, unsigned end_fd, unsign
 
 /* ======================================================================= */
 
-#if !HAVE_MOUNT_SETATTR
-
-#if !HAVE_STRUCT_MOUNT_ATTR
-struct mount_attr {
-        uint64_t attr_set;
-        uint64_t attr_clr;
-        uint64_t propagation;
-        uint64_t userns_fd;
-};
-#else
-struct mount_attr;
-#endif
-
-#ifndef MOUNT_ATTR_RDONLY
-#define MOUNT_ATTR_RDONLY       0x00000001 /* Mount read-only */
-#endif
-
-#ifndef MOUNT_ATTR_NOSUID
-#define MOUNT_ATTR_NOSUID       0x00000002 /* Ignore suid and sgid bits */
-#endif
-
-#ifndef MOUNT_ATTR_NODEV
-#define MOUNT_ATTR_NODEV        0x00000004 /* Disallow access to device special files */
-#endif
-
-#ifndef MOUNT_ATTR_NOEXEC
-#define MOUNT_ATTR_NOEXEC       0x00000008 /* Disallow program execution */
-#endif
-
-#ifndef MOUNT_ATTR__ATIME
-#define MOUNT_ATTR__ATIME       0x00000070 /* Setting on how atime should be updated */
-#endif
-
-#ifndef MOUNT_ATTR_RELATIME
-#define MOUNT_ATTR_RELATIME     0x00000000 /* - Update atime relative to mtime/ctime. */
-#endif
-
-#ifndef MOUNT_ATTR_NOATIME
-#define MOUNT_ATTR_NOATIME      0x00000010 /* - Do not update access times. */
-#endif
-
-#ifndef MOUNT_ATTR_STRICTATIME
-#define MOUNT_ATTR_STRICTATIME  0x00000020 /* - Always perform atime updates */
-#endif
-
-#ifndef MOUNT_ATTR_NODIRATIME
-#define MOUNT_ATTR_NODIRATIME   0x00000080 /* Do not update directory access times */
-#endif
-
-#ifndef MOUNT_ATTR_IDMAP
-#define MOUNT_ATTR_IDMAP        0x00100000 /* Idmap mount to @userns_fd in struct mount_attr. */
-#endif
-
-#ifndef MOUNT_ATTR_NOSYMFOLLOW
-#define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks */
-#endif
-
-#ifndef MOUNT_ATTR_SIZE_VER0
-#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
-#endif
-
-#ifndef AT_RECURSIVE
-#define AT_RECURSIVE 0x8000
-#endif
-
-static inline int missing_mount_setattr(
-                int dfd,
-                const char *path,
-                unsigned flags,
-                struct mount_attr *attr,
-                size_t size) {
-
-#  if defined __NR_mount_setattr && __NR_mount_setattr >= 0
-        return syscall(__NR_mount_setattr, dfd, path, flags, attr, size);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define mount_setattr missing_mount_setattr
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_OPEN_TREE
-
-#ifndef OPEN_TREE_CLONE
-#define OPEN_TREE_CLONE 1
-#endif
-
-#ifndef OPEN_TREE_CLOEXEC
-#define OPEN_TREE_CLOEXEC O_CLOEXEC
-#endif
-
-static inline int missing_open_tree(
-                int dfd,
-                const char *filename,
-                unsigned flags) {
-
-#  if defined __NR_open_tree && __NR_open_tree >= 0
-        return syscall(__NR_open_tree, dfd, filename, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define open_tree missing_open_tree
-#endif
-
-/* ======================================================================= */
-
-#ifndef MOVE_MOUNT_BENEATH
-#define MOVE_MOUNT_BENEATH 0x00000200
-#endif
-
-#if !HAVE_MOVE_MOUNT
-
-#ifndef MOVE_MOUNT_F_EMPTY_PATH
-#define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */
-#endif
-
-#ifndef MOVE_MOUNT_T_EMPTY_PATH
-#define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */
-#endif
-
-static inline int missing_move_mount(
-                int from_dfd,
-                const char *from_pathname,
-                int to_dfd,
-                const char *to_pathname,
-                unsigned flags) {
-
-#  if defined __NR_move_mount && __NR_move_mount >= 0
-        return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define move_mount missing_move_mount
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_FSOPEN
-
-#ifndef FSOPEN_CLOEXEC
-#define FSOPEN_CLOEXEC 0x00000001
-#endif
-
-static inline int missing_fsopen(const char *fsname, unsigned flags) {
-#  if defined __NR_fsopen && __NR_fsopen >= 0
-        return syscall(__NR_fsopen, fsname, flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define fsopen missing_fsopen
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_FSCONFIG
-
-#ifndef FSCONFIG_SET_FLAG
-#define FSCONFIG_SET_FLAG 0 /* Set parameter, supplying no value */
-#endif
-
-#ifndef FSCONFIG_SET_STRING
-#define FSCONFIG_SET_STRING 1 /* Set parameter, supplying a string value */
-#endif
-
-#ifndef FSCONFIG_SET_FD
-#define FSCONFIG_SET_FD 5 /* Set parameter, supplying an object by fd */
-#endif
-
-#ifndef FSCONFIG_CMD_CREATE
-#define FSCONFIG_CMD_CREATE 6 /* Invoke superblock creation */
-#endif
-
-static inline int missing_fsconfig(int fd, unsigned cmd, const char *key, const void *value, int aux) {
-#  if defined __NR_fsconfig && __NR_fsconfig >= 0
-        return syscall(__NR_fsconfig, fd, cmd, key, value, aux);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define fsconfig missing_fsconfig
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_FSMOUNT
-
-#ifndef FSMOUNT_CLOEXEC
-#define FSMOUNT_CLOEXEC 0x00000001
-#endif
-
-static inline int missing_fsmount(int fd, unsigned flags, unsigned ms_flags) {
-#  if defined __NR_fsmount && __NR_fsmount >= 0
-        return syscall(__NR_fsmount, fd, flags, ms_flags);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define fsmount missing_fsmount
-#endif
-
-/* ======================================================================= */
-
-#if !HAVE_GETDENTS64
-
-static inline ssize_t missing_getdents64(int fd, void *buffer, size_t length) {
-#  if defined __NR_getdents64 && __NR_getdents64 >= 0
-        return syscall(__NR_getdents64, fd, buffer, length);
-#  else
-        errno = ENOSYS;
-        return -1;
-#  endif
-}
-
-#  define getdents64 missing_getdents64
-#endif
-
-/* ======================================================================= */
-
 #if !HAVE_SCHED_SETATTR
-
+/* since kernel 3.14 (e6cfc0295c7d51b008999a8b13a44fb43f8685ea) */
 static inline ssize_t missing_sched_setattr(pid_t pid, struct sched_attr *attr, unsigned int flags) {
         return syscall(__NR_sched_setattr, pid, attr, flags);
 }
@@ -653,16 +234,39 @@ int __clone2(int (*fn)(void *), void *stack_base, size_t stack_size, int flags,
 
 #if 0 /* NM_IGNORED */
 #if !HAVE_QUOTACTL_FD
-
+/* since kernel v5.14 (64c2c2c62f92339b176ea24403d8db16db36f9e6) */
 static inline int missing_quotactl_fd(int fd, int cmd, int id, void *addr) {
-#if defined __NR_quotactl_fd
         return syscall(__NR_quotactl_fd, fd, cmd, id, addr);
-#else
-        errno = ENOSYS;
-        return -1;
-#endif
 }
 
 #  define quotactl_fd missing_quotactl_fd
 #endif
+
+/* ======================================================================= */
+
+#if !HAVE_SETXATTRAT
+/* since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394) */
+struct xattr_args {
+        _align_(8) uint64_t value;
+        uint32_t size;
+        uint32_t flags;
+};
+
+static inline int missing_setxattrat(int fd, const char *path, int at_flags, const char *name, const struct xattr_args *args, size_t size) {
+        return syscall(__NR_setxattrat, fd, path, at_flags, name, args, size);
+}
+
+#  define setxattrat missing_setxattrat
+#endif
+
+/* ======================================================================= */
+
+#if !HAVE_REMOVEXATTRAT
+/* since kernel v6.13 (6140be90ec70c39fa844741ca3cc807dd0866394) */
+static inline int missing_removexattrat(int fd, const char *path, int at_flags, const char *name) {
+        return syscall(__NR_removexattrat, fd, path, at_flags, name);
+}
+
+#  define removexattrat missing_removexattrat
+#endif
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/missing_threads.h b/src/libnm-systemd-shared/src/basic/missing_threads.h
deleted file mode 100644
index c7da1dbd..00000000
--- a/src/libnm-systemd-shared/src/basic/missing_threads.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-/* If threads.h doesn't exist, then define our own thread_local to match C11's thread_local. */
-#if HAVE_THREADS_H
-#  include <threads.h>
-#elif !(defined(thread_local))
-#  ifndef __STDC_NO_THREADS__
-#    define thread_local _Thread_local
-#  else
-#    define thread_local __thread
-#  endif
-#endif
diff --git a/src/libnm-systemd-shared/src/basic/missing_type.h b/src/libnm-systemd-shared/src/basic/missing_type.h
deleted file mode 100644
index 1d17705c..00000000
--- a/src/libnm-systemd-shared/src/basic/missing_type.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include <uchar.h>
-
-#if !HAVE_CHAR32_T
-#  define char32_t uint32_t
-#endif
-
-#if !HAVE_CHAR16_T
-#  define char16_t uint16_t
-#endif
diff --git a/src/libnm-systemd-shared/src/basic/missing_wait.h b/src/libnm-systemd-shared/src/basic/missing_wait.h
index 3965b5bd..05648779 100644
--- a/src/libnm-systemd-shared/src/basic/missing_wait.h
+++ b/src/libnm-systemd-shared/src/basic/missing_wait.h
@@ -5,6 +5,7 @@
 
 #include "macro.h"
 
+/* since glibc-2.36 */
 #ifndef P_PIDFD
 #  define P_PIDFD 3
 #else
diff --git a/src/libnm-systemd-shared/src/basic/mountpoint-util.c b/src/libnm-systemd-shared/src/basic/mountpoint-util.c
new file mode 100644
index 00000000..7d7ef5eb
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/mountpoint-util.c
@@ -0,0 +1,823 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "nm-sd-adapt-shared.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/mount.h>
+
+#include "alloc-util.h"
+#include "chase.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "filesystems.h"
+#include "fs-util.h"
+#include "log.h"
+#include "missing_fcntl.h"
+#include "missing_fs.h"
+#include "missing_syscall.h"
+#include "mkdir.h"
+#include "mountpoint-util.h"
+#include "nulstr-util.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "stat-util.h"
+#include "stdio-util.h"
+#include "strv.h"
+#include "user-util.h"
+
+/* This is the original MAX_HANDLE_SZ definition from the kernel, when the API was introduced. We use that in place of
+ * any more currently defined value to future-proof things: if the size is increased in the API headers, and our code
+ * is recompiled then it would cease working on old kernels, as those refuse any sizes larger than this value with
+ * EINVAL right-away. Hence, let's disconnect ourselves from any such API changes, and stick to the original definition
+ * from when it was introduced. We use it as a start value only anyway (see below), and hence should be able to deal
+ * with large file handles anyway. */
+#define ORIGINAL_MAX_HANDLE_SZ 128
+
+bool is_name_to_handle_at_fatal_error(int err) {
+        /* name_to_handle_at() can return "acceptable" errors that are due to the context. For example
+         * the file system does not support name_to_handle_at() (EOPNOTSUPP), or the syscall was blocked
+         * (EACCES/EPERM; maybe through seccomp, because we are running inside of a container), or
+         * the mount point is not triggered yet (EOVERFLOW, think autofs+nfs4), or some general name_to_handle_at()
+         * flakiness (EINVAL). However other errors are not supposed to happen and therefore are considered
+         * fatal ones. */
+
+        assert(err < 0);
+
+        if (ERRNO_IS_NEG_NOT_SUPPORTED(err))
+                return false;
+        if (ERRNO_IS_NEG_PRIVILEGE(err))
+                return false;
+
+        return !IN_SET(err, -EOVERFLOW, -EINVAL);
+}
+
+#if 0  /* NM_IGNORED */
+int name_to_handle_at_loop(
+                int fd,
+                const char *path,
+                struct file_handle **ret_handle,
+                int *ret_mnt_id,
+                int flags) {
+
+        size_t n = ORIGINAL_MAX_HANDLE_SZ;
+
+        assert(fd >= 0 || fd == AT_FDCWD);
+        assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH|AT_HANDLE_FID)) == 0);
+
+        /* We need to invoke name_to_handle_at() in a loop, given that it might return EOVERFLOW when the specified
+         * buffer is too small. Note that in contrast to what the docs might suggest, MAX_HANDLE_SZ is only good as a
+         * start value, it is not an upper bound on the buffer size required.
+         *
+         * This improves on raw name_to_handle_at() also in one other regard: ret_handle and ret_mnt_id can be passed
+         * as NULL if there's no interest in either. */
+
+        for (;;) {
+                _cleanup_free_ struct file_handle *h = NULL;
+                int mnt_id = -1;
+
+                h = malloc0(offsetof(struct file_handle, f_handle) + n);
+                if (!h)
+                        return -ENOMEM;
+
+                h->handle_bytes = n;
+
+                if (name_to_handle_at(fd, strempty(path), h, &mnt_id, flags) >= 0) {
+
+                        if (ret_handle)
+                                *ret_handle = TAKE_PTR(h);
+
+                        if (ret_mnt_id)
+                                *ret_mnt_id = mnt_id;
+
+                        return 0;
+                }
+                if (errno != EOVERFLOW)
+                        return -errno;
+
+                if (!ret_handle && ret_mnt_id && mnt_id >= 0) {
+
+                        /* As it appears, name_to_handle_at() fills in mnt_id even when it returns EOVERFLOW when the
+                         * buffer is too small, but that's undocumented. Hence, let's make use of this if it appears to
+                         * be filled in, and the caller was interested in only the mount ID an nothing else. */
+
+                        *ret_mnt_id = mnt_id;
+                        return 0;
+                }
+
+                /* If name_to_handle_at() didn't increase the byte size, then this EOVERFLOW is caused by
+                 * something else (apparently EOVERFLOW is returned for untriggered nfs4 autofs mounts
+                 * sometimes), not by the too small buffer. In that case propagate EOVERFLOW */
+                if (h->handle_bytes <= n)
+                        return -EOVERFLOW;
+
+                /* The buffer was too small. Size the new buffer by what name_to_handle_at() returned. */
+                n = h->handle_bytes;
+
+                /* paranoia: check for overflow (note that .handle_bytes is unsigned only) */
+                if (n > UINT_MAX - offsetof(struct file_handle, f_handle))
+                        return -EOVERFLOW;
+        }
+}
+
+int name_to_handle_at_try_fid(
+                int fd,
+                const char *path,
+                struct file_handle **ret_handle,
+                int *ret_mnt_id,
+                int flags) {
+
+        int r;
+
+        assert(fd >= 0 || fd == AT_FDCWD);
+
+        /* First issues name_to_handle_at() with AT_HANDLE_FID. If this fails and this is not a fatal error
+         * we'll try without the flag, in order to support older kernels that didn't have AT_HANDLE_FID
+         * (i.e. older than Linux 6.5). */
+
+        r = name_to_handle_at_loop(fd, path, ret_handle, ret_mnt_id, flags | AT_HANDLE_FID);
+        if (r >= 0 || is_name_to_handle_at_fatal_error(r))
+                return r;
+
+        return name_to_handle_at_loop(fd, path, ret_handle, ret_mnt_id, flags & ~AT_HANDLE_FID);
+}
+
+static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *ret_mnt_id) {
+        char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)];
+        _cleanup_close_ int subfd = -EBADF;
+        int r;
+
+        assert((flags & ~(AT_SYMLINK_FOLLOW|AT_EMPTY_PATH)) == 0);
+        assert(ret_mnt_id);
+
+        if ((flags & AT_EMPTY_PATH) && isempty(filename))
+                xsprintf(path, "/proc/self/fdinfo/%i", fd);
+        else {
+                subfd = openat(fd, filename, O_CLOEXEC|O_PATH|(flags & AT_SYMLINK_FOLLOW ? 0 : O_NOFOLLOW));
+                if (subfd < 0)
+                        return -errno;
+
+                xsprintf(path, "/proc/self/fdinfo/%i", subfd);
+        }
+
+        _cleanup_free_ char *p = NULL;
+        r = get_proc_field(path, "mnt_id", &p);
+        if (r == -ENOENT)
+                return -EBADF;
+        if (r < 0)
+                return r;
+
+        return safe_atoi(p, ret_mnt_id);
+}
+
+static bool filename_possibly_with_slash_suffix(const char *s) {
+        const char *slash, *copied;
+
+        /* Checks whether the specified string is either file name, or a filename with a suffix of
+         * slashes. But nothing else.
+         *
+         * this is OK: foo, bar, foo/, bar/, foo//, bar///
+         * this is not OK: "", "/", "/foo", "foo/bar", ".", ".." … */
+
+        slash = strchr(s, '/');
+        if (!slash)
+                return filename_is_valid(s);
+
+        if (slash - s > PATH_MAX) /* We want to allocate on the stack below, hence do a size check first */
+                return false;
+
+        if (slash[strspn(slash, "/")] != 0) /* Check that the suffix consist only of one or more slashes */
+                return false;
+
+        copied = strndupa_safe(s, slash - s);
+        return filename_is_valid(copied);
+}
+
+bool file_handle_equal(const struct file_handle *a, const struct file_handle *b) {
+        if (a == b)
+                return true;
+        if (!a != !b)
+                return false;
+        if (a->handle_type != b->handle_type)
+                return false;
+
+        return memcmp_nn(a->f_handle, a->handle_bytes, b->f_handle, b->handle_bytes) == 0;
+}
+
+int is_mount_point_at(int fd, const char *filename, int flags) {
+        bool fd_is_self;
+        int r;
+
+        assert(fd >= 0 || fd == AT_FDCWD);
+        assert((flags & ~AT_SYMLINK_FOLLOW) == 0);
+
+        if (isempty(filename)) {
+                if (fd == AT_FDCWD)
+                        filename = ".";
+                else {
+                        /* If the file name is empty we'll see if the specified 'fd' is a mount point.
+                         * That's only supported by statx(), or if the inode specified via 'fd' refers to a
+                         * directory. Otherwise, we'll have to fail (ENOTDIR), because we have no kernel API
+                         * to query the information we need. */
+                        flags |= AT_EMPTY_PATH;
+                        filename = "";
+                }
+
+                fd_is_self = true;
+        } else if (STR_IN_SET(filename, ".", "./"))
+                fd_is_self = true;
+        else {
+                /* Insist that the specified filename is actually a filename, and not a path, i.e. some inode
+                 * further up or down the tree then immediately below the specified directory fd. */
+                if (!filename_possibly_with_slash_suffix(filename))
+                        return -EINVAL;
+
+                fd_is_self = false;
+        }
+
+        /* First we will try statx()' STATX_ATTR_MOUNT_ROOT attribute, which is our ideal API, available
+         * since kernel 5.8.
+         *
+         * If that fails, our second try is the name_to_handle_at() syscall, which tells us the mount id and
+         * an opaque file "handle". It is not supported everywhere though (kernel compile-time option, not
+         * all file systems are hooked up). If it works the mount id is usually good enough to tell us
+         * whether something is a mount point.
+         *
+         * If that didn't work we will try to read the mount id from /proc/self/fdinfo/<fd>. This is almost
+         * as good as name_to_handle_at(), however, does not return the opaque file handle. The opaque file
+         * handle is pretty useful to detect the root directory, which we should always consider a mount
+         * point. Hence we use this only as fallback.
+         *
+         * Note that traditionally the check is done via fstat()-based st_dev comparisons. However, various
+         * file systems don't guarantee same st_dev across single fs anymore, e.g. unionfs exposes file systems
+         * with a variety of st_dev reported. Also, btrfs subvolumes have different st_dev, even though
+         * they aren't real mounts of their own. */
+
+        struct statx sx = {}; /* explicitly initialize the struct to make msan silent. */
+        if (statx(fd, filename,
+                  at_flags_normalize_nofollow(flags) |
+                  AT_NO_AUTOMOUNT |            /* don't trigger automounts – mounts are a local concept, hence no need to trigger automounts to determine STATX_ATTR_MOUNT_ROOT */
+                  AT_STATX_DONT_SYNC,          /* don't go to the network for this – for similar reasons */
+                  STATX_TYPE,
+                  &sx) < 0)
+                return -errno;
+
+        if (FLAGS_SET(sx.stx_attributes_mask, STATX_ATTR_MOUNT_ROOT)) /* yay! */
+                return FLAGS_SET(sx.stx_attributes, STATX_ATTR_MOUNT_ROOT);
+
+        _cleanup_free_ struct file_handle *h = NULL, *h_parent = NULL;
+        int mount_id = -1, mount_id_parent = -1;
+        bool nosupp = false;
+
+        r = name_to_handle_at_try_fid(fd, filename, &h, &mount_id, flags);
+        if (r < 0) {
+                if (is_name_to_handle_at_fatal_error(r))
+                        return r;
+                if (!ERRNO_IS_NOT_SUPPORTED(r))
+                        goto fallback_fdinfo;
+
+                /* This file system does not support name_to_handle_at(), hence let's see if the upper fs
+                 * supports it (in which case it is a mount point), otherwise fall back to the fdinfo logic. */
+                nosupp = true;
+        }
+
+        if (fd_is_self)
+                r = name_to_handle_at_try_fid(fd, "..", &h_parent, &mount_id_parent, 0); /* can't work for non-directories 😢 */
+        else
+                r = name_to_handle_at_try_fid(fd, "", &h_parent, &mount_id_parent, AT_EMPTY_PATH);
+        if (r < 0) {
+                if (is_name_to_handle_at_fatal_error(r))
+                        return r;
+                if (!ERRNO_IS_NOT_SUPPORTED(r))
+                        goto fallback_fdinfo;
+                if (nosupp)
+                        /* Both the parent and the directory can't do name_to_handle_at() */
+                        goto fallback_fdinfo;
+
+                /* The parent can't do name_to_handle_at() but the directory we are
+                 * interested in can?  If so, it must be a mount point. */
+                return 1;
+        }
+
+        /* The parent can do name_to_handle_at() but the directory we are interested in can't? If
+         * so, it must be a mount point. */
+        if (nosupp)
+                return 1;
+
+        /* If the file handle for the directory we are interested in and its parent are identical,
+         * we assume this is the root directory, which is a mount point. */
+        if (file_handle_equal(h_parent, h))
+                return 1;
+
+        return mount_id != mount_id_parent;
+
+fallback_fdinfo:
+        r = fd_fdinfo_mnt_id(fd, filename, flags, &mount_id);
+        if (r < 0)
+                return r;
+
+        if (fd_is_self)
+                r = fd_fdinfo_mnt_id(fd, "..", 0, &mount_id_parent); /* can't work for non-directories 😢 */
+        else
+                r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id_parent);
+        if (r < 0)
+                return r;
+
+        if (mount_id != mount_id_parent)
+                return 1;
+
+        /* Hmm, so, the mount ids are the same. This leaves one special case though for the root file
+         * system. For that, let's see if the parent directory has the same inode as we are interested
+         * in. */
+
+        struct stat a, b;
+
+        /* yay for fstatat() taking a different set of flags than the other _at() above */
+        if (fstatat(fd, filename, &a, at_flags_normalize_nofollow(flags)) < 0)
+                return -errno;
+
+        if (fd_is_self)
+                r = fstatat(fd, "..", &b, 0);
+        else
+                r = fstatat(fd, "", &b, AT_EMPTY_PATH);
+        if (r < 0)
+                return -errno;
+
+        /* A directory with same device and inode as its parent must be the root directory. Otherwise
+         * not a mount point.
+         *
+         * NB: we avoid inode_same_at() here because it internally attempts name_to_handle_at_try_fid() first,
+         * which is redundant. */
+        return stat_inode_same(&a, &b);
+}
+
+/* flags can be AT_SYMLINK_FOLLOW or 0 */
+int path_is_mount_point_full(const char *path, const char *root, int flags) {
+        _cleanup_close_ int dfd = -EBADF;
+        _cleanup_free_ char *fn = NULL;
+
+        assert(path);
+        assert((flags & ~AT_SYMLINK_FOLLOW) == 0);
+
+        if (path_equal(path, "/"))
+                return 1;
+
+        /* we need to resolve symlinks manually, we can't just rely on is_mount_point_at() to do that for us;
+         * if we have a structure like /bin -> /usr/bin/ and /usr is a mount point, then the parent that we
+         * look at needs to be /usr, not /. */
+        dfd = chase_and_open_parent(path, root,
+                                    CHASE_TRAIL_SLASH|(FLAGS_SET(flags, AT_SYMLINK_FOLLOW) ? 0 : CHASE_NOFOLLOW),
+                                    &fn);
+        if (dfd < 0)
+                return dfd;
+
+        return is_mount_point_at(dfd, fn, flags);
+}
+
+int path_get_mnt_id_at_fallback(int dir_fd, const char *path, int *ret) {
+        int r;
+
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+        assert(ret);
+
+        r = name_to_handle_at_loop(dir_fd, path, NULL, ret, isempty(path) ? AT_EMPTY_PATH : 0);
+        if (r >= 0 || is_name_to_handle_at_fatal_error(r))
+                return r;
+
+        return fd_fdinfo_mnt_id(dir_fd, path, isempty(path) ? AT_EMPTY_PATH : 0, ret);
+}
+
+int path_get_mnt_id_at(int dir_fd, const char *path, int *ret) {
+        struct statx sx;
+
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+        assert(ret);
+
+        if (statx(dir_fd,
+                  strempty(path),
+                  (isempty(path) ? AT_EMPTY_PATH : AT_SYMLINK_NOFOLLOW) |
+                  AT_NO_AUTOMOUNT |    /* don't trigger automounts, mnt_id is a local concept */
+                  AT_STATX_DONT_SYNC,  /* don't go to the network, mnt_id is a local concept */
+                  STATX_MNT_ID,
+                  &sx) < 0)
+                return -errno;
+
+        if (FLAGS_SET(sx.stx_mask, STATX_MNT_ID)) {
+                *ret = sx.stx_mnt_id;
+                return 0;
+        }
+
+        return path_get_mnt_id_at_fallback(dir_fd, path, ret);
+}
+
+bool fstype_is_network(const char *fstype) {
+        const char *x;
+
+        x = startswith(fstype, "fuse.");
+        if (x)
+                fstype = x;
+
+        if (nulstr_contains(filesystem_sets[FILESYSTEM_SET_NETWORK].value, fstype))
+                return true;
+
+        /* Filesystems not present in the internal database */
+        return STR_IN_SET(fstype,
+                          "davfs",
+                          "glusterfs",
+                          "lustre",
+                          "sshfs");
+}
+
+bool fstype_needs_quota(const char *fstype) {
+       /* 1. quotacheck needs to be run for some filesystems after they are mounted
+        *    if the filesystem was not unmounted cleanly.
+        * 2. You may need to run quotaon to enable quota usage tracking and/or
+        *    enforcement.
+        * ext2     - needs 1) and 2)
+        * ext3     - needs 2) if configured using usrjquota/grpjquota mount options
+        * ext4     - needs 1) if created without journal, needs 2) if created without QUOTA
+        *            filesystem feature
+        * reiserfs - needs 2).
+        * jfs      - needs 2)
+        * f2fs     - needs 2) if configured using usrjquota/grpjquota/prjjquota mount options
+        * xfs      - nothing needed
+        * gfs2     - nothing needed
+        * ocfs2    - nothing needed
+        * btrfs    - nothing needed
+        * for reference see filesystem and quota manpages */
+        return STR_IN_SET(fstype,
+                          "ext2",
+                          "ext3",
+                          "ext4",
+                          "reiserfs",
+                          "jfs",
+                          "f2fs");
+}
+
+bool fstype_is_api_vfs(const char *fstype) {
+        assert(fstype);
+
+        const FilesystemSet *fs;
+        FOREACH_ARGUMENT(fs,
+                         filesystem_sets + FILESYSTEM_SET_BASIC_API,
+                         filesystem_sets + FILESYSTEM_SET_AUXILIARY_API,
+                         filesystem_sets + FILESYSTEM_SET_PRIVILEGED_API,
+                         filesystem_sets + FILESYSTEM_SET_TEMPORARY)
+                if (nulstr_contains(fs->value, fstype))
+                    return true;
+
+        /* Filesystems not present in the internal database */
+        return STR_IN_SET(fstype,
+                          "autofs",
+                          "cpuset",
+                          "devtmpfs");
+}
+
+bool fstype_is_blockdev_backed(const char *fstype) {
+        const char *x;
+
+        x = startswith(fstype, "fuse.");
+        if (x)
+                fstype = x;
+
+        return !streq(fstype, "9p") && !fstype_is_network(fstype) && !fstype_is_api_vfs(fstype);
+}
+
+bool fstype_is_ro(const char *fstype) {
+        /* All Linux file systems that are necessarily read-only */
+        return STR_IN_SET(fstype,
+                          "DM_verity_hash",
+                          "cramfs",
+                          "erofs",
+                          "iso9660",
+                          "squashfs");
+}
+
+bool fstype_can_discard(const char *fstype) {
+        assert(fstype);
+
+        /* Use a curated list as first check, to avoid calling fsopen() which might load kmods, which might
+         * not be allowed in our MAC context. */
+        if (STR_IN_SET(fstype, "btrfs", "f2fs", "ext4", "vfat", "xfs"))
+                return true;
+
+        /* On new kernels we can just ask the kernel */
+        return mount_option_supported(fstype, "discard", NULL) > 0;
+}
+
+const char* fstype_norecovery_option(const char *fstype) {
+        int r;
+
+        assert(fstype);
+
+        /* Use a curated list as first check, to avoid calling fsopen() which might load kmods, which might
+         * not be allowed in our MAC context. */
+        if (STR_IN_SET(fstype, "ext3", "ext4", "xfs"))
+                return "norecovery";
+
+        /* btrfs dropped support for the "norecovery" option in 6.8
+         * (https://github.com/torvalds/linux/commit/a1912f712188291f9d7d434fba155461f1ebef66) and replaced
+         * it with rescue=nologreplay, so we check for the new name first and fall back to checking for the
+         * old name if the new name doesn't work. */
+        if (streq(fstype, "btrfs")) {
+                r = mount_option_supported(fstype, "rescue=nologreplay", NULL);
+                if (r == -EAGAIN) {
+                        log_debug_errno(r, "Failed to check for btrfs 'rescue=nologreplay' option, assuming old kernel with 'norecovery': %m");
+                        return "norecovery";
+                }
+                if (r < 0)
+                        log_debug_errno(r, "Failed to check for btrfs 'rescue=nologreplay' option, assuming it is not supported: %m");
+                if (r > 0)
+                        return "rescue=nologreplay";
+        }
+
+        /* On new kernels we can just ask the kernel */
+        return mount_option_supported(fstype, "norecovery", NULL) > 0 ? "norecovery" : NULL;
+}
+
+bool fstype_can_fmask_dmask(const char *fstype) {
+        assert(fstype);
+
+        /* Use a curated list as first check, to avoid calling fsopen() which might load kmods, which might
+         * not be allowed in our MAC context. If we don't know ourselves, on new kernels we can just ask the
+         * kernel. */
+        return streq(fstype, "vfat") || (mount_option_supported(fstype, "fmask", "0177") > 0 && mount_option_supported(fstype, "dmask", "0077") > 0);
+}
+
+bool fstype_can_uid_gid(const char *fstype) {
+        /* All file systems that have a uid=/gid= mount option that fixates the owners of all files and
+         * directories, current and future. Note that this does *not* ask the kernel via
+         * mount_option_supported() here because the uid=/gid= setting of various file systems mean different
+         * things: some apply it only to the root dir inode, others to all inodes in the file system. Thus we
+         * maintain the curated list below. 😢 */
+
+        return STR_IN_SET(fstype,
+                          "adfs",
+                          "exfat",
+                          "fat",
+                          "hfs",
+                          "hpfs",
+                          "iso9660",
+                          "msdos",
+                          "ntfs",
+                          "vfat");
+}
+
+int dev_is_devtmpfs(void) {
+        _cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
+        int mount_id, r;
+        char *e;
+
+        r = path_get_mnt_id("/dev", &mount_id);
+        if (r < 0)
+                return r;
+
+        r = fopen_unlocked("/proc/self/mountinfo", "re", &proc_self_mountinfo);
+        if (r == -ENOENT)
+                return proc_mounted() > 0 ? -ENOENT : -ENOSYS;
+        if (r < 0)
+                return r;
+
+        for (;;) {
+                _cleanup_free_ char *line = NULL;
+                int mid;
+
+                r = read_line(proc_self_mountinfo, LONG_LINE_MAX, &line);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
+
+                if (sscanf(line, "%i", &mid) != 1)
+                        continue;
+
+                if (mid != mount_id)
+                        continue;
+
+                e = strstrafter(line, " - ");
+                if (!e)
+                        continue;
+
+                /* accept any name that starts with the currently expected type */
+                if (startswith(e, "devtmpfs"))
+                        return true;
+        }
+
+        return false;
+}
+
+static int mount_fd(
+                const char *source,
+                int target_fd,
+                const char *filesystemtype,
+                unsigned long mountflags,
+                const void *data) {
+
+        assert(target_fd >= 0);
+
+        if (mount(source, FORMAT_PROC_FD_PATH(target_fd), filesystemtype, mountflags, data) < 0) {
+                if (errno != ENOENT)
+                        return -errno;
+
+                /* ENOENT can mean two things: either that the source is missing, or that /proc/ isn't
+                 * mounted. Check for the latter to generate better error messages. */
+                if (proc_mounted() == 0)
+                        return -ENOSYS;
+
+                return -ENOENT;
+        }
+
+        return 0;
+}
+
+int mount_nofollow(
+                const char *source,
+                const char *target,
+                const char *filesystemtype,
+                unsigned long mountflags,
+                const void *data) {
+
+        _cleanup_close_ int fd = -EBADF;
+
+        assert(target);
+
+        /* In almost all cases we want to manipulate the mount table without following symlinks, hence
+         * mount_nofollow() is usually the way to go. The only exceptions are environments where /proc/ is
+         * not available yet, since we need /proc/self/fd/ for this logic to work. i.e. during the early
+         * initialization of namespacing/container stuff where /proc is not yet mounted (and maybe even the
+         * fs to mount) we can only use traditional mount() directly.
+         *
+         * Note that this disables following only for the final component of the target, i.e symlinks within
+         * the path of the target are honoured, as are symlinks in the source path everywhere. */
+
+        fd = open(target, O_PATH|O_CLOEXEC|O_NOFOLLOW);
+        if (fd < 0)
+                return -errno;
+
+        return mount_fd(source, fd, filesystemtype, mountflags, data);
+}
+
+const char* mount_propagation_flag_to_string(unsigned long flags) {
+
+        switch (flags & (MS_SHARED|MS_SLAVE|MS_PRIVATE)) {
+        case 0:
+                return "";
+        case MS_SHARED:
+                return "shared";
+        case MS_SLAVE:
+                return "slave";
+        case MS_PRIVATE:
+                return "private";
+        }
+
+        return NULL;
+}
+
+int mount_propagation_flag_from_string(const char *name, unsigned long *ret) {
+
+        if (isempty(name))
+                *ret = 0;
+        else if (streq(name, "shared"))
+                *ret = MS_SHARED;
+        else if (streq(name, "slave"))
+                *ret = MS_SLAVE;
+        else if (streq(name, "private"))
+                *ret = MS_PRIVATE;
+        else
+                return -EINVAL;
+        return 0;
+}
+
+bool mount_propagation_flag_is_valid(unsigned long flag) {
+        return IN_SET(flag, 0, MS_SHARED, MS_PRIVATE, MS_SLAVE);
+}
+
+bool mount_new_api_supported(void) {
+        static int cache = -1;
+        int r;
+
+        if (cache >= 0)
+                return cache;
+
+        /* This is the newer API among the ones we use, so use it as boundary */
+        r = RET_NERRNO(mount_setattr(-EBADF, NULL, 0, NULL, 0));
+        if (r == 0 || ERRNO_IS_NOT_SUPPORTED(r)) /* This should return an error if it is working properly */
+                return (cache = false);
+
+        return (cache = true);
+}
+
+unsigned long ms_nosymfollow_supported(void) {
+        _cleanup_close_ int fsfd = -EBADF, mntfd = -EBADF;
+        static int cache = -1;
+
+        /* Returns MS_NOSYMFOLLOW if it is supported, zero otherwise. */
+
+        if (cache >= 0)
+                return cache ? MS_NOSYMFOLLOW : 0;
+
+        if (!mount_new_api_supported())
+                goto not_supported;
+
+        /* Checks if MS_NOSYMFOLLOW is supported (which was added in 5.10). We use the new mount API's
+         * mount_setattr() call for that, which was added in 5.12, which is close enough. */
+
+        fsfd = fsopen("tmpfs", FSOPEN_CLOEXEC);
+        if (fsfd < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(errno))
+                        goto not_supported;
+
+                log_debug_errno(errno, "Failed to open superblock context for tmpfs: %m");
+                return 0;
+        }
+
+        if (fsconfig(fsfd, FSCONFIG_CMD_CREATE, NULL, NULL, 0) < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(errno))
+                        goto not_supported;
+
+                log_debug_errno(errno, "Failed to create tmpfs superblock: %m");
+                return 0;
+        }
+
+        mntfd = fsmount(fsfd, FSMOUNT_CLOEXEC, 0);
+        if (mntfd < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(errno))
+                        goto not_supported;
+
+                log_debug_errno(errno, "Failed to turn superblock fd into mount fd: %m");
+                return 0;
+        }
+
+        if (mount_setattr(mntfd, "", AT_EMPTY_PATH|AT_RECURSIVE,
+                          &(struct mount_attr) {
+                                  .attr_set = MOUNT_ATTR_NOSYMFOLLOW,
+                          }, sizeof(struct mount_attr)) < 0) {
+                if (ERRNO_IS_NOT_SUPPORTED(errno))
+                        goto not_supported;
+
+                log_debug_errno(errno, "Failed to set MOUNT_ATTR_NOSYMFOLLOW mount attribute: %m");
+                return 0;
+        }
+
+        cache = true;
+        return MS_NOSYMFOLLOW;
+
+not_supported:
+        cache = false;
+        return 0;
+}
+
+int mount_option_supported(const char *fstype, const char *key, const char *value) {
+        _cleanup_close_ int fd = -EBADF;
+        int r;
+
+        /* Checks if the specified file system supports a mount option. Returns > 0 if it supports it, == 0 if
+         * it does not. Return -EAGAIN if we can't determine it. And any other error otherwise. */
+
+        assert(fstype);
+        assert(key);
+
+        fd = fsopen(fstype, FSOPEN_CLOEXEC);
+        if (fd < 0)
+                return log_debug_errno(errno, "Failed to open superblock context for '%s': %m", fstype);
+
+        /* Various file systems support fs context only in recent kernels (e.g. btrfs). For older kernels
+         * fsconfig() with FSCONFIG_SET_STRING/FSCONFIG_SET_FLAG never fail. Which sucks, because we want to
+         * use it for testing support, after all. Let's hence do a check if the file system got converted yet
+         * first. */
+        if (fsconfig(fd, FSCONFIG_SET_FD, "adefinitelynotexistingmountoption", NULL, fd) < 0) {
+                /* If FSCONFIG_SET_FD is not supported for the fs, then the file system was not converted to
+                 * the new mount API yet. If it returns EINVAL the mount option doesn't exist, but the fstype
+                 * is converted. */
+                if (errno == EOPNOTSUPP)
+                        return -EAGAIN; /* fs not converted to new mount API → don't know */
+                if (errno != EINVAL)
+                        return log_debug_errno(errno, "Failed to check if file system '%s' has been converted to new mount API: %m", fstype);
+
+                /* So FSCONFIG_SET_FD worked, but the option didn't exist (we got EINVAL), this means the fs
+                 * is converted. Let's now ask the actual question we wonder about. */
+        } else
+                return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), "FSCONFIG_SET_FD worked unexpectedly for '%s', whoa!", fstype);
+
+        if (value)
+                r = fsconfig(fd, FSCONFIG_SET_STRING, key, value, 0);
+        else
+                r = fsconfig(fd, FSCONFIG_SET_FLAG, key, NULL, 0);
+        if (r < 0) {
+                if (errno == EINVAL)
+                        return false; /* EINVAL means option not supported. */
+
+                return log_debug_errno(errno, "Failed to set '%s%s%s' on '%s' superblock context: %m",
+                                       key, value ? "=" : "", strempty(value), fstype);
+        }
+
+        return true; /* works! */
+}
+
+bool path_below_api_vfs(const char *p) {
+        assert(p);
+
+        /* API VFS are either directly mounted on any of these three paths, or below it. */
+        return PATH_STARTSWITH_SET(p, "/dev", "/sys", "/proc");
+}
+#endif  /* NM_IGNORED */
\ No newline at end of file
diff --git a/src/libnm-systemd-shared/src/basic/mountpoint-util.h b/src/libnm-systemd-shared/src/basic/mountpoint-util.h
new file mode 100644
index 00000000..43e47581
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/mountpoint-util.h
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <sys/types.h>
+
+/* The limit used for /dev itself. 4MB should be enough since device nodes and symlinks don't
+ * consume any space and udev isn't supposed to create regular file either. There's no limit on the
+ * max number of inodes since such limit is hard to guess especially on large storage array
+ * systems. */
+#define TMPFS_LIMITS_DEV             ",size=4m"
+
+/* The limit used for /dev in private namespaces. 4MB for contents of regular files. The number of
+ * inodes should be relatively low in private namespaces but for now use a 64k limit. */
+#define TMPFS_LIMITS_PRIVATE_DEV     ",size=4m,nr_inodes=64k"
+
+/* Very little, if any use expected */
+#define TMPFS_LIMITS_EMPTY_OR_ALMOST ",size=4m,nr_inodes=1k"
+#define TMPFS_LIMITS_SYS             TMPFS_LIMITS_EMPTY_OR_ALMOST
+#define TMPFS_LIMITS_SYS_FS_CGROUP   TMPFS_LIMITS_EMPTY_OR_ALMOST
+
+/* On an extremely small device with only 256MB of RAM, 20% of RAM should be enough for the re-execution of
+ * PID1 because 16MB of free space is required. */
+#define TMPFS_LIMITS_RUN             ",size=20%,nr_inodes=800k"
+
+/* The limit used for various nested tmpfs mounts, in particular for guests started by systemd-nspawn.
+ * 10% of RAM (using 16GB of RAM as a baseline) translates to 400k inodes (assuming 4k each) and 25%
+ * translates to 1M inodes.
+ * (On the host, /tmp is configured through a .mount unit file.) */
+#define NESTED_TMPFS_LIMITS          ",size=10%,nr_inodes=400k"
+
+/* More space for volatile root and /var */
+#define TMPFS_LIMITS_VAR             ",size=25%,nr_inodes=1m"
+#define TMPFS_LIMITS_ROOTFS          TMPFS_LIMITS_VAR
+#define TMPFS_LIMITS_VOLATILE_STATE  TMPFS_LIMITS_VAR
+
+bool is_name_to_handle_at_fatal_error(int err);
+
+int name_to_handle_at_loop(int fd, const char *path, struct file_handle **ret_handle, int *ret_mnt_id, int flags);
+int name_to_handle_at_try_fid(int fd, const char *path, struct file_handle **ret_handle, int *ret_mnt_id, int flags);
+
+bool file_handle_equal(const struct file_handle *a, const struct file_handle *b);
+
+int path_get_mnt_id_at_fallback(int dir_fd, const char *path, int *ret);
+int path_get_mnt_id_at(int dir_fd, const char *path, int *ret);
+static inline int path_get_mnt_id(const char *path, int *ret) {
+        return path_get_mnt_id_at(AT_FDCWD, path, ret);
+}
+
+int is_mount_point_at(int fd, const char *filename, int flags);
+int path_is_mount_point_full(const char *path, const char *root, int flags);
+static inline int path_is_mount_point(const char *path) {
+        return path_is_mount_point_full(path, NULL, 0);
+}
+
+bool fstype_is_network(const char *fstype);
+bool fstype_needs_quota(const char *fstype);
+bool fstype_is_api_vfs(const char *fstype);
+bool fstype_is_blockdev_backed(const char *fstype);
+bool fstype_is_ro(const char *fsype);
+bool fstype_can_discard(const char *fstype);
+bool fstype_can_uid_gid(const char *fstype);
+bool fstype_can_fmask_dmask(const char *fstype);
+
+const char* fstype_norecovery_option(const char *fstype);
+
+int dev_is_devtmpfs(void);
+
+int mount_nofollow(
+                const char *source,
+                const char *target,
+                const char *filesystemtype,
+                unsigned long mountflags,
+                const void *data);
+
+const char* mount_propagation_flag_to_string(unsigned long flags);
+int mount_propagation_flag_from_string(const char *name, unsigned long *ret);
+bool mount_propagation_flag_is_valid(unsigned long flag);
+
+bool mount_new_api_supported(void);
+unsigned long ms_nosymfollow_supported(void);
+
+int mount_option_supported(const char *fstype, const char *key, const char *value);
+
+bool path_below_api_vfs(const char *p);
diff --git a/src/libnm-systemd-shared/src/basic/namespace-util.h b/src/libnm-systemd-shared/src/basic/namespace-util.h
index 3d40a515..d7ac8156 100644
--- a/src/libnm-systemd-shared/src/basic/namespace-util.h
+++ b/src/libnm-systemd-shared/src/basic/namespace-util.h
@@ -28,6 +28,8 @@ extern const struct namespace_info {
 
 NamespaceType clone_flag_to_namespace_type(unsigned long clone_flag);
 
+bool namespace_type_supported(NamespaceType type);
+
 int pidref_namespace_open_by_type(const PidRef *pidref, NamespaceType type);
 int namespace_open_by_type(NamespaceType type);
 
@@ -86,7 +88,8 @@ static inline bool userns_shift_range_valid(uid_t shift, uid_t range) {
 int parse_userns_uid_range(const char *s, uid_t *ret_uid_shift, uid_t *ret_uid_range);
 
 int userns_acquire_empty(void);
-int userns_acquire(const char *uid_map, const char *gid_map);
+int userns_acquire(const char *uid_map, const char *gid_map, bool setgroups_deny);
+int userns_acquire_self_root(void);
 int userns_enter_and_pin(int userns_fd, pid_t *ret_pid);
 
 int userns_get_base_uid(int userns_fd, uid_t *ret_uid, gid_t *ret_gid);
diff --git a/src/libnm-systemd-shared/src/basic/ordered-set.h b/src/libnm-systemd-shared/src/basic/ordered-set.h
index e73da205..b7113ad9 100644
--- a/src/libnm-systemd-shared/src/basic/ordered-set.h
+++ b/src/libnm-systemd-shared/src/basic/ordered-set.h
@@ -22,18 +22,10 @@ static inline void ordered_set_clear(OrderedSet *s) {
         return ordered_hashmap_clear((OrderedHashmap*) s);
 }
 
-static inline void ordered_set_clear_free(OrderedSet *s) {
-        return ordered_hashmap_clear_free((OrderedHashmap*) s);
-}
-
 static inline OrderedSet* ordered_set_free(OrderedSet *s) {
         return (OrderedSet*) ordered_hashmap_free((OrderedHashmap*) s);
 }
 
-static inline OrderedSet* ordered_set_free_free(OrderedSet *s) {
-        return (OrderedSet*) ordered_hashmap_free_free((OrderedHashmap*) s);
-}
-
 static inline int ordered_set_contains(OrderedSet *s, const void *p) {
         return ordered_hashmap_contains((OrderedHashmap*) s, p);
 }
@@ -91,19 +83,6 @@ void ordered_set_print(FILE *f, const char *field, OrderedSet *s);
 #define ORDERED_SET_FOREACH(e, s) \
         _ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
 
-#define ordered_set_clear_with_destructor(s, f)                 \
-        ({                                                      \
-                OrderedSet *_s = (s);                           \
-                void *_item;                                    \
-                while ((_item = ordered_set_steal_first(_s)))   \
-                        f(_item);                               \
-                _s;                                             \
-        })
-#define ordered_set_free_with_destructor(s, f)                  \
-        ordered_set_free(ordered_set_clear_with_destructor(s, f))
-
 DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free_free);
 
 #define _cleanup_ordered_set_free_ _cleanup_(ordered_set_freep)
-#define _cleanup_ordered_set_free_free_ _cleanup_(ordered_set_free_freep)
diff --git a/src/libnm-systemd-shared/src/basic/parse-util.c b/src/libnm-systemd-shared/src/basic/parse-util.c
index bff09b74..e524d9d5 100644
--- a/src/libnm-systemd-shared/src/basic/parse-util.c
+++ b/src/libnm-systemd-shared/src/basic/parse-util.c
@@ -5,6 +5,7 @@
 #include <errno.h>
 #include <inttypes.h>
 #include <linux/ipv6.h>
+#include <linux/netfilter/nf_tables.h>
 #include <net/if.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -14,6 +15,7 @@
 #include "errno-list.h"
 #include "extract-word.h"
 #include "locale-util.h"
+#include "log.h"
 #include "macro.h"
 #include "missing_network.h"
 #include "parse-util.h"
@@ -533,7 +535,7 @@ int safe_atollu_full(const char *s, unsigned base, unsigned long long *ret_llu)
         return 0;
 }
 
-int safe_atolli(const char *s, long long int *ret_lli) {
+int safe_atolli(const char *s, long long *ret_lli) {
         unsigned base = 0;
         char *x = NULL;
         long long l;
@@ -784,19 +786,15 @@ int parse_loadavg_fixed_point(const char *s, loadavg_t *ret) {
 /* Limitations are described in https://www.netfilter.org/projects/nftables/manpage.html and
  * https://bugzilla.netfilter.org/show_bug.cgi?id=1175 */
 bool nft_identifier_valid(const char *id) {
-        if (!id)
+        if (isempty(id))
                 return false;
 
-        size_t len = strlen(id);
-        if (len == 0 || len > 31)
+        if (strlen(id) >= NFT_NAME_MAXLEN)
                 return false;
 
         if (!ascii_isalpha(id[0]))
                 return false;
 
-        for (size_t i = 1; i < len; i++)
-                if (!ascii_isalpha(id[i]) && !ascii_isdigit(id[i]) && !IN_SET(id[i], '/', '\\', '_', '.'))
-                        return false;
-        return true;
+        return in_charset(id + 1, ALPHANUMERICAL "/\\_.");
 }
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/parse-util.h b/src/libnm-systemd-shared/src/basic/parse-util.h
index a47c8c79..0af407b3 100644
--- a/src/libnm-systemd-shared/src/basic/parse-util.h
+++ b/src/libnm-systemd-shared/src/basic/parse-util.h
@@ -41,7 +41,7 @@ static inline int safe_atou(const char *s, unsigned *ret_u) {
 int safe_atou_bounded(const char *s, unsigned min, unsigned max, unsigned *ret);
 
 int safe_atoi(const char *s, int *ret_i);
-int safe_atolli(const char *s, long long int *ret_i);
+int safe_atolli(const char *s, long long *ret_i);
 
 int safe_atou8_full(const char *s, unsigned base, uint8_t *ret);
 
@@ -87,8 +87,8 @@ static inline int safe_atou64(const char *s, uint64_t *ret_u) {
 }
 
 static inline int safe_atoi64(const char *s, int64_t *ret_i) {
-        assert_cc(sizeof(int64_t) == sizeof(long long int));
-        return safe_atolli(s, (long long int*) ret_i);
+        assert_cc(sizeof(int64_t) == sizeof(long long));
+        return safe_atolli(s, (long long*) ret_i);
 }
 
 static inline int safe_atoux64(const char *s, uint64_t *ret) {
@@ -101,8 +101,8 @@ static inline int safe_atolu_full(const char *s, unsigned base, unsigned long *r
         assert_cc(sizeof(unsigned long) == sizeof(unsigned));
         return safe_atou_full(s, base, (unsigned*) ret_u);
 }
-static inline int safe_atoli(const char *s, long int *ret_u) {
-        assert_cc(sizeof(long int) == sizeof(int));
+static inline int safe_atoli(const char *s, long *ret_u) {
+        assert_cc(sizeof(long) == sizeof(int));
         return safe_atoi(s, (int*) ret_u);
 }
 #else
@@ -110,9 +110,9 @@ static inline int safe_atolu_full(const char *s, unsigned base, unsigned long *r
         assert_cc(sizeof(unsigned long) == sizeof(unsigned long long));
         return safe_atollu_full(s, base, (unsigned long long*) ret_u);
 }
-static inline int safe_atoli(const char *s, long int *ret_u) {
-        assert_cc(sizeof(long int) == sizeof(long long int));
-        return safe_atolli(s, (long long int*) ret_u);
+static inline int safe_atoli(const char *s, long *ret_u) {
+        assert_cc(sizeof(long) == sizeof(long long));
+        return safe_atolli(s, (long long*) ret_u);
 }
 #endif
 
diff --git a/src/libnm-systemd-shared/src/basic/path-util.c b/src/libnm-systemd-shared/src/basic/path-util.c
index 1de055d5..74f256a6 100644
--- a/src/libnm-systemd-shared/src/basic/path-util.c
+++ b/src/libnm-systemd-shared/src/basic/path-util.c
@@ -624,37 +624,9 @@ char* path_extend_internal(char **x, ...) {
 }
 
 #if 0 /* NM_IGNORED */
-static int check_x_access(const char *path, int *ret_fd) {
+int open_and_check_executable(const char *name, const char *root, char **ret_path, int *ret_fd) {
         _cleanup_close_ int fd = -EBADF;
-        int r;
-
-        /* We need to use O_PATH because there may be executables for which we have only exec
-         * permissions, but not read (usually suid executables). */
-        fd = open(path, O_PATH|O_CLOEXEC);
-        if (fd < 0)
-                return -errno;
-
-        r = fd_verify_regular(fd);
-        if (r < 0)
-                return r;
-
-        r = access_fd(fd, X_OK);
-        if (r == -ENOSYS) {
-                /* /proc is not mounted. Fallback to access(). */
-                if (access(path, X_OK) < 0)
-                        return -errno;
-        } else if (r < 0)
-                return r;
-
-        if (ret_fd)
-                *ret_fd = TAKE_FD(fd);
-
-        return 0;
-}
-
-static int find_executable_impl(const char *name, const char *root, char **ret_filename, int *ret_fd) {
-        _cleanup_close_ int fd = -EBADF;
-        _cleanup_free_ char *path_name = NULL;
+        _cleanup_free_ char *resolved = NULL;
         int r;
 
         assert(name);
@@ -665,23 +637,40 @@ static int find_executable_impl(const char *name, const char *root, char **ret_f
          * needed to avoid unforeseen regression or other complicated changes. */
         if (root) {
                 /* prefix root to name in case full paths are not specified */
-                r = chase(name, root, CHASE_PREFIX_ROOT, &path_name, /* ret_fd= */ NULL);
+                r = chase(name, root, CHASE_PREFIX_ROOT, &resolved, &fd);
                 if (r < 0)
                         return r;
 
-                name = path_name;
+                name = resolved;
+        } else {
+                /* We need to use O_PATH because there may be executables for which we have only exec permissions,
+                 * but not read (usually suid executables). */
+                fd = open(name, O_PATH|O_CLOEXEC);
+                if (fd < 0)
+                        return -errno;
         }
 
-        r = check_x_access(name, ret_fd ? &fd : NULL);
+        r = fd_verify_regular(fd);
         if (r < 0)
                 return r;
 
-        if (ret_filename) {
-                r = path_make_absolute_cwd(name, ret_filename);
-                if (r < 0)
-                        return r;
+        r = access_fd(fd, X_OK);
+        if (r == -ENOSYS)
+                /* /proc/ is not mounted. Fall back to access(). */
+                r = RET_NERRNO(access(name, X_OK));
+        if (r < 0)
+                return r;
 
-                path_simplify(*ret_filename);
+        if (ret_path) {
+                if (resolved)
+                        *ret_path = TAKE_PTR(resolved);
+                else {
+                        r = path_make_absolute_cwd(name, ret_path);
+                        if (r < 0)
+                                return r;
+
+                        path_simplify(*ret_path);
+                }
         }
 
         if (ret_fd)
@@ -703,7 +692,7 @@ int find_executable_full(
         assert(name);
 
         if (is_path(name))
-                return find_executable_impl(name, root, ret_filename, ret_fd);
+                return open_and_check_executable(name, root, ret_filename, ret_fd);
 
         if (exec_search_path) {
                 STRV_FOREACH(element, exec_search_path) {
@@ -718,7 +707,7 @@ int find_executable_full(
                         if (!full_path)
                                 return -ENOMEM;
 
-                        r = find_executable_impl(full_path, root, ret_filename, ret_fd);
+                        r = open_and_check_executable(full_path, root, ret_filename, ret_fd);
                         if (r >= 0)
                                 return 0;
                         if (r != -EACCES)
@@ -754,7 +743,7 @@ int find_executable_full(
                 if (!path_extend(&element, name))
                         return -ENOMEM;
 
-                r = find_executable_impl(element, root, ret_filename, ret_fd);
+                r = open_and_check_executable(element, root, ret_filename, ret_fd);
                 if (r >= 0) /* Found it! */
                         return 0;
                 /* PATH entries which we don't have access to are ignored, as per tradition. */
diff --git a/src/libnm-systemd-shared/src/basic/path-util.h b/src/libnm-systemd-shared/src/basic/path-util.h
index 9b13d958..5bfa8fc7 100644
--- a/src/libnm-systemd-shared/src/basic/path-util.h
+++ b/src/libnm-systemd-shared/src/basic/path-util.h
@@ -117,6 +117,7 @@ int path_strv_make_absolute_cwd(char **l);
 char** path_strv_resolve(char **l, const char *root);
 char** path_strv_resolve_uniq(char **l, const char *root);
 
+int open_and_check_executable(const char *name, const char *root, char **ret_path, int *ret_fd);
 int find_executable_full(
                 const char *name,
                 const char *root,
diff --git a/src/libnm-systemd-shared/src/basic/pidfd-util.c b/src/libnm-systemd-shared/src/basic/pidfd-util.c
index d6bd5517..91638c77 100644
--- a/src/libnm-systemd-shared/src/basic/pidfd-util.c
+++ b/src/libnm-systemd-shared/src/basic/pidfd-util.c
@@ -3,15 +3,18 @@
 #include "nm-sd-adapt-shared.h"
 
 #include <sys/ioctl.h>
+#include <threads.h>
 #include <unistd.h>
 
 #include "errno-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "log.h"
 #include "macro.h"
 #include "memory-util.h"
+#include "missing_fs.h"
 #include "missing_magic.h"
-#include "missing_threads.h"
+#include "mountpoint-util.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pidfd-util.h"
@@ -89,26 +92,21 @@ static int pidfd_get_info(int fd, struct pidfd_info *info) {
 
 static int pidfd_get_pid_fdinfo(int fd, pid_t *ret) {
         char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)];
-        _cleanup_free_ char *fdinfo = NULL;
+        _cleanup_free_ char *p = NULL;
         int r;
 
         assert(fd >= 0);
 
         xsprintf(path, "/proc/self/fdinfo/%i", fd);
 
-        r = read_full_virtual_file(path, &fdinfo, NULL);
+        r = get_proc_field(path, "Pid", &p);
         if (r == -ENOENT)
-                return proc_fd_enoent_errno();
+                return -EBADF;
+        if (r == -ENODATA) /* not a pidfd? */
+                return -ENOTTY;
         if (r < 0)
                 return r;
 
-        char *p = find_line_startswith(fdinfo, "Pid:");
-        if (!p)
-                return -ENOTTY; /* not a pidfd? */
-
-        p = skip_leading_chars(p, /* bad = */ NULL);
-        p[strcspn(p, WHITESPACE)] = 0;
-
         if (streq(p, "0"))
                 return -EREMOTE; /* PID is in foreign PID namespace? */
         if (streq(p, "-1"))
@@ -230,6 +228,7 @@ int pidfd_get_cgroupid(int fd, uint64_t *ret) {
 #endif /* NM_IGNORED */
 
 int pidfd_get_inode_id(int fd, uint64_t *ret) {
+        static bool file_handle_supported = true;
         int r;
 
         assert(fd >= 0);
@@ -240,6 +239,30 @@ int pidfd_get_inode_id(int fd, uint64_t *ret) {
         if (r == 0)
                 return -EOPNOTSUPP;
 
+        if (file_handle_supported) {
+                union {
+                        struct file_handle file_handle;
+                        uint8_t space[offsetof(struct file_handle, f_handle) + sizeof(uint64_t)];
+                } fh = {
+                        .file_handle.handle_bytes = sizeof(uint64_t),
+                        .file_handle.handle_type = FILEID_KERNFS,
+                };
+                int mnt_id;
+
+                r = RET_NERRNO(name_to_handle_at(fd, "", &fh.file_handle, &mnt_id, AT_EMPTY_PATH));
+                if (r >= 0) {
+                        if (ret)
+                                *ret = *CAST_ALIGN_PTR(uint64_t, fh.file_handle.f_handle);
+                        return 0;
+                }
+                assert(r != -EOVERFLOW);
+                if (is_name_to_handle_at_fatal_error(r))
+                        return r;
+
+                file_handle_supported = false;
+        }
+
+#if SIZEOF_INO_T == 8
         struct stat st;
         if (fstat(fd, &st) < 0)
                 return -errno;
@@ -247,6 +270,16 @@ int pidfd_get_inode_id(int fd, uint64_t *ret) {
         if (ret)
                 *ret = (uint64_t) st.st_ino;
         return 0;
+
+#elif SIZEOF_INO_T == 4
+        /* On 32-bit systems (where sizeof(ino_t) == 4), the inode id returned by fstat() cannot be used to
+         * reliably identify the process, nor can we communicate the origin of the id with the clients.
+         * Hence let's just refuse to acquire pidfdid through fstat() here. All clients shall also insist on
+         * the 64-bit id from name_to_handle_at(). */
+        return -EOPNOTSUPP;
+#else
+#  error Unsupported ino_t size
+#endif
 }
 
 int pidfd_get_inode_id_self_cached(uint64_t *ret) {
diff --git a/src/libnm-systemd-shared/src/basic/pidref.h b/src/libnm-systemd-shared/src/basic/pidref.h
index 9e8a39ec..064b9d85 100644
--- a/src/libnm-systemd-shared/src/basic/pidref.h
+++ b/src/libnm-systemd-shared/src/basic/pidref.h
@@ -1,10 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-typedef struct PidRef PidRef;
-
 #include "macro.h"
-#include "process-util.h"
+#include "memory-util.h"
 
 /* An embeddable structure carrying a reference to a process. Supposed to be used when tracking processes
  * continuously. This combines a PID, a modern Linux pidfd and the 64bit inode number of the pidfd into one
@@ -29,22 +27,22 @@ typedef struct PidRef PidRef;
  *    process. Moreover, most operations will fail with -EREMOTE. Only PidRef structures that are not marked
  *    *unset* can be marked *remote*.
  */
-struct PidRef {
-        pid_t pid;      /* > 0 if the PidRef is set, otherwise set to PID_AUTOMATIC if automatic mode is
-                         * desired, or 0 otherwise. */
+typedef struct PidRef {
+        pid_t pid;      /* > 0 if the PidRef is set, otherwise set to INT_MIN (PID_AUTOMATIC) if automatic
+                         * mode is desired, or 0 otherwise. */
         int fd;         /* only valid if pidfd are available in the kernel, and we manage to get an fd. If we
                          * know that the PID is not from the local machine we set this to -EREMOTE, otherwise
                          * we use -EBADF as indicator the fd is invalid. */
         uint64_t fd_id; /* the inode number of pidfd. only useful in kernel 6.9+ where pidfds live in
                            their own pidfs and each process comes with a unique inode number */
-};
+} PidRef;
 
 #define PIDREF_NULL (PidRef) { .fd = -EBADF }
 
 /* A special pidref value that we are using when a PID shall be automatically acquired from some surrounding
  * context, for example connection peer. Much like PIDREF_NULL it will be considered unset by
- * pidref_is_set().*/
-#define PIDREF_AUTOMATIC (const PidRef) { .pid = PID_AUTOMATIC, .fd = -EBADF }
+ * pidref_is_set(). */
+#define PIDREF_AUTOMATIC (const PidRef) { .pid = (pid_t) INT_MIN, .fd = -EBADF }
 
 /* Turns a pid_t into a PidRef structure on-the-fly *without* acquiring a pidfd for it. (As opposed to
  * pidref_set_pid() which does so *with* acquiring one, see below) */
@@ -70,7 +68,7 @@ bool pidref_equal(PidRef *a, PidRef *b);
 int pidref_set_pid(PidRef *pidref, pid_t pid);
 int pidref_set_pidstr(PidRef *pidref, const char *pid);
 int pidref_set_pidfd(PidRef *pidref, int fd);
-int pidref_set_pidfd_take(PidRef *pidref, int fd); /* takes ownership of the passed pidfd on success*/
+int pidref_set_pidfd_take(PidRef *pidref, int fd); /* takes ownership of the passed pidfd on success */
 int pidref_set_pidfd_consume(PidRef *pidref, int fd); /* takes ownership of the passed pidfd in both success and failure */
 int pidref_set_parent(PidRef *ret);
 static inline int pidref_set_self(PidRef *pidref) {
@@ -108,5 +106,9 @@ int pidref_verify(const PidRef *pidref);
 
 #define TAKE_PIDREF(p) TAKE_GENERIC((p), PidRef, PIDREF_NULL)
 
+struct siphash;
+void pidref_hash_func(const PidRef *pidref, struct siphash *state);
+int pidref_compare_func(const PidRef *a, const PidRef *b);
+
 extern const struct hash_ops pidref_hash_ops;
 extern const struct hash_ops pidref_hash_ops_free; /* Has destructor call for pidref_free(), i.e. expects heap allocated PidRef as keys */
diff --git a/src/libnm-systemd-shared/src/basic/prioq.c b/src/libnm-systemd-shared/src/basic/prioq.c
index c36d0ddd..0a007a29 100644
--- a/src/libnm-systemd-shared/src/basic/prioq.c
+++ b/src/libnm-systemd-shared/src/basic/prioq.c
@@ -48,6 +48,11 @@ Prioq* prioq_free(Prioq *q) {
         if (!q)
                 return NULL;
 
+        /* Invalidate the index fields of any remaining objects */
+        FOREACH_ARRAY(item, q->items, q->n_items)
+                if (item->idx)
+                        *(item->idx) = PRIOQ_IDX_NULL;
+
         free(q->items);
         return mfree(q);
 }
@@ -180,6 +185,11 @@ static void remove_item(Prioq *q, struct prioq_item *i) {
         assert(q);
         assert(i);
 
+        /* Let's invalidate the index pointer stored in the user's object to indicate the item is now removed
+         * from the priority queue */
+        if (i->idx)
+                *(i->idx) = PRIOQ_IDX_NULL;
+
         l = q->items + q->n_items - 1;
 
         if (i == l)
@@ -191,6 +201,7 @@ static void remove_item(Prioq *q, struct prioq_item *i) {
                 /* Not last entry, let's replace the last entry with
                  * this one, and reshuffle */
 
+                assert(i >= q->items);
                 k = i - q->items;
 
                 i->data = l->data;
@@ -254,6 +265,7 @@ void prioq_reshuffle(Prioq *q, void *data, unsigned *idx) {
         if (!i)
                 return;
 
+        assert(i >= q->items);
         k = i - q->items;
         k = shuffle_down(q, k);
         shuffle_up(q, k);
diff --git a/src/libnm-systemd-shared/src/basic/process-util.c b/src/libnm-systemd-shared/src/basic/process-util.c
index 85187562..517990b5 100644
--- a/src/libnm-systemd-shared/src/basic/process-util.c
+++ b/src/libnm-systemd-shared/src/basic/process-util.c
@@ -17,6 +17,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <syslog.h>
+#include <threads.h>
 #include <unistd.h>
 #if 0 /* NM_IGNORED */
 #if HAVE_VALGRIND_VALGRIND_H
@@ -38,13 +39,13 @@
 #include "fs-util.h"
 #include "hostname-util.h"
 #include "io-util.h"
+#include "iovec-util.h"
 #include "locale-util.h"
 #include "log.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "missing_sched.h"
 #include "missing_syscall.h"
-#include "missing_threads.h"
 #include "mountpoint-util.h"
 #include "namespace-util.h"
 #include "nulstr-util.h"
@@ -55,6 +56,7 @@
 #include "raw-clone.h"
 #include "rlimit-util.h"
 #include "signal-util.h"
+#include "socket-util.h"
 #include "stat-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
@@ -509,56 +511,25 @@ int get_process_exe(pid_t pid, char **ret) {
         return 0;
 }
 
-static int get_process_id(pid_t pid, const char *field, uid_t *ret) {
-        _cleanup_fclose_ FILE *f = NULL;
-        const char *p;
+int pid_get_uid(pid_t pid, uid_t *ret) {
         int r;
 
-        assert(field);
+        assert(pid >= 0);
         assert(ret);
 
-        if (pid < 0)
-                return -EINVAL;
+        if (pid == 0 || pid == getpid_cached()) {
+                *ret = getuid();
+                return 0;
+        }
 
-        p = procfs_file_alloca(pid, "status");
-        r = fopen_unlocked(p, "re", &f);
+        _cleanup_free_ char *v = NULL;
+        r = procfs_file_get_field(pid, "status", "Uid", &v);
         if (r == -ENOENT)
                 return -ESRCH;
         if (r < 0)
                 return r;
 
-        for (;;) {
-                _cleanup_free_ char *line = NULL;
-                char *l;
-
-                r = read_stripped_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        break;
-
-                l = startswith(line, field);
-                if (l) {
-                        l += strspn(l, WHITESPACE);
-
-                        l[strcspn(l, WHITESPACE)] = 0;
-
-                        return parse_uid(l, ret);
-                }
-        }
-
-        return -EIO;
-}
-
-int pid_get_uid(pid_t pid, uid_t *ret) {
-        assert(ret);
-
-        if (pid == 0 || pid == getpid_cached()) {
-                *ret = getuid();
-                return 0;
-        }
-
-        return get_process_id(pid, "Uid:", ret);
+        return parse_uid(v, ret);
 }
 
 int pidref_get_uid(const PidRef *pid, uid_t *ret) {
@@ -591,14 +562,24 @@ int pidref_get_uid(const PidRef *pid, uid_t *ret) {
 }
 
 int get_process_gid(pid_t pid, gid_t *ret) {
+        int r;
+
+        assert(pid >= 0);
+        assert(ret);
 
         if (pid == 0 || pid == getpid_cached()) {
                 *ret = getgid();
                 return 0;
         }
 
-        assert_cc(sizeof(uid_t) == sizeof(gid_t));
-        return get_process_id(pid, "Gid:", ret);
+        _cleanup_free_ char *v = NULL;
+        r = procfs_file_get_field(pid, "status", "Gid", &v);
+        if (r == -ENOENT)
+                return -ESRCH;
+        if (r < 0)
+                return r;
+
+        return parse_gid(v, ret);
 }
 
 int get_process_cwd(pid_t pid, char **ret) {
@@ -864,15 +845,12 @@ int pidref_get_start_time(const PidRef *pid, usec_t *ret) {
 
 int get_process_umask(pid_t pid, mode_t *ret) {
         _cleanup_free_ char *m = NULL;
-        const char *p;
         int r;
 
         assert(pid >= 0);
         assert(ret);
 
-        p = procfs_file_alloca(pid, "status");
-
-        r = get_proc_field(p, "Umask", WHITESPACE, &m);
+        r = procfs_file_get_field(pid, "status", "Umask", &m);
         if (r == -ENOENT)
                 return -ESRCH;
         if (r < 0)
@@ -881,27 +859,8 @@ int get_process_umask(pid_t pid, mode_t *ret) {
         return parse_mode(m, ret);
 }
 
-int wait_for_terminate(pid_t pid, siginfo_t *status) {
-        siginfo_t dummy;
-
-        assert(pid >= 1);
-
-        if (!status)
-                status = &dummy;
-
-        for (;;) {
-                zero(*status);
-
-                if (waitid(P_PID, pid, status, WEXITED) < 0) {
-
-                        if (errno == EINTR)
-                                continue;
-
-                        return negative_errno();
-                }
-
-                return 0;
-        }
+int wait_for_terminate(pid_t pid, siginfo_t *ret) {
+        return pidref_wait_for_terminate(&PIDREF_MAKE_FROM_PID(pid), ret);
 }
 
 /*
@@ -918,24 +877,29 @@ int wait_for_terminate(pid_t pid, siginfo_t *status) {
  * A warning is emitted if the process terminates abnormally,
  * and also if it returns non-zero unless check_exit_code is true.
  */
-int wait_for_terminate_and_check(const char *name, pid_t pid, WaitFlags flags) {
-        _cleanup_free_ char *buffer = NULL;
-        siginfo_t status;
-        int r, prio;
+int pidref_wait_for_terminate_and_check(const char *name, PidRef *pidref, WaitFlags flags) {
+        int r;
 
-        assert(pid > 1);
+        if (!pidref_is_set(pidref))
+                return -ESRCH;
+        if (pidref_is_remote(pidref))
+                return -EREMOTE;
+        if (pidref->pid == 1 || pidref_is_self(pidref))
+                return -ECHILD;
 
+        _cleanup_free_ char *buffer = NULL;
         if (!name) {
-                r = pid_get_comm(pid, &buffer);
+                r = pidref_get_comm(pidref, &buffer);
                 if (r < 0)
-                        log_debug_errno(r, "Failed to acquire process name of " PID_FMT ", ignoring: %m", pid);
+                        log_debug_errno(r, "Failed to acquire process name of " PID_FMT ", ignoring: %m", pidref->pid);
                 else
                         name = buffer;
         }
 
-        prio = flags & WAIT_LOG_ABNORMAL ? LOG_ERR : LOG_DEBUG;
+        int prio = flags & WAIT_LOG_ABNORMAL ? LOG_ERR : LOG_DEBUG;
 
-        r = wait_for_terminate(pid, &status);
+        siginfo_t status;
+        r = pidref_wait_for_terminate(pidref, &status);
         if (r < 0)
                 return log_full_errno(prio, r, "Failed to wait for %s: %m", strna(name));
 
@@ -958,6 +922,10 @@ int wait_for_terminate_and_check(const char *name, pid_t pid, WaitFlags flags) {
         return -EPROTO;
 }
 
+int wait_for_terminate_and_check(const char *name, pid_t pid, WaitFlags flags) {
+        return pidref_wait_for_terminate_and_check(name, &PIDREF_MAKE_FROM_PID(pid), flags);
+}
+
 /*
  * Return values:
  *
@@ -1385,8 +1353,8 @@ void valgrind_summary_hack(void) {
                 if (pid < 0)
                         log_struct_errno(
                                 LOG_EMERG, errno,
-                                "MESSAGE_ID=" SD_MESSAGE_VALGRIND_HELPER_FORK_STR,
-                                LOG_MESSAGE( "Failed to fork off valgrind helper: %m"));
+                                LOG_MESSAGE_ID(SD_MESSAGE_VALGRIND_HELPER_FORK_STR),
+                                LOG_MESSAGE("Failed to fork off valgrind helper: %m"));
                 else if (pid == 0)
                         exit(EXIT_SUCCESS);
                 else {
@@ -1446,7 +1414,7 @@ pid_t getpid_cached(void) {
         case CACHED_PID_UNSET: { /* Not initialized yet, then do so now */
                 pid_t new_pid;
 
-                new_pid = raw_getpid();
+                new_pid = getpid();
 
                 if (!installed) {
                         /* __register_atfork() either returns 0 or -ENOMEM, in its glibc implementation. Since it's
@@ -1467,7 +1435,7 @@ pid_t getpid_cached(void) {
         }
 
         case CACHED_PID_BUSY: /* Somebody else is currently initializing */
-                return raw_getpid();
+                return getpid();
 
         default: /* Properly initialized */
                 return current_value;
@@ -1533,25 +1501,28 @@ static int fork_flags_to_signal(ForkFlags flags) {
                                                  SIGKILL;
 }
 
-int safe_fork_full(
+int pidref_safe_fork_full(
                 const char *name,
                 const int stdio_fds[3],
                 int except_fds[],
                 size_t n_except_fds,
                 ForkFlags flags,
-                pid_t *ret_pid) {
+                PidRef *ret_pid) {
 
         pid_t original_pid, pid;
         sigset_t saved_ss, ss;
         _unused_ _cleanup_(restore_sigsetp) sigset_t *saved_ssp = NULL;
         bool block_signals = false, block_all = false, intermediary = false;
+        _cleanup_close_pair_ int pidref_transport_fds[2] = EBADF_PAIR;
         int prio, r;
 
+        assert(!FLAGS_SET(flags, FORK_WAIT|FORK_FREEZE));
         assert(!FLAGS_SET(flags, FORK_DETACH) ||
-               (!ret_pid && (flags & (FORK_WAIT|FORK_DEATHSIG_SIGTERM|FORK_DEATHSIG_SIGINT|FORK_DEATHSIG_SIGKILL)) == 0));
+               (flags & (FORK_WAIT|FORK_DEATHSIG_SIGTERM|FORK_DEATHSIG_SIGINT|FORK_DEATHSIG_SIGKILL)) == 0);
 
-        /* A wrapper around fork(), that does a couple of important initializations in addition to mere forking. Always
-         * returns the child's PID in *ret_pid. Returns == 0 in the child, and > 0 in the parent. */
+        /* A wrapper around fork(), that does a couple of important initializations in addition to mere
+         * forking. If provided, ret_pid is initialized in both the parent and the child process, both times
+         * referencing the child process. Returns == 0 in the child and > 0 in the parent. */
 
         prio = flags & FORK_LOG ? LOG_ERR : LOG_DEBUG;
 
@@ -1594,14 +1565,43 @@ int safe_fork_full(
                 if (!r) {
                         /* Not a reaper process, hence do a double fork() so we are reparented to one */
 
+                        if (ret_pid && socketpair(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0, pidref_transport_fds) < 0)
+                                return log_full_errno(prio, errno, "Failed to allocate pidref socket: %m");
+
                         pid = fork();
                         if (pid < 0)
                                 return log_full_errno(prio, errno, "Failed to fork off '%s': %m", strna(name));
                         if (pid > 0) {
                                 log_debug("Successfully forked off intermediary '%s' as PID " PID_FMT ".", strna(name), pid);
+
+                                pidref_transport_fds[1] = safe_close(pidref_transport_fds[1]);
+
+                                if (pidref_transport_fds[0] >= 0) {
+                                        /* Wait for the intermediary child to exit so the caller can be certain the actual child
+                                         * process has been reparented by the time this function returns. */
+                                        r = wait_for_terminate_and_check(name, pid, FLAGS_SET(flags, FORK_LOG) ? WAIT_LOG : 0);
+                                        if (r < 0)
+                                                return log_full_errno(prio, r, "Failed to wait for intermediary process: %m");
+                                        if (r != EXIT_SUCCESS) /* exit status > 0 should be treated as failure, too */
+                                                return -EPROTO;
+
+                                        int pidfd;
+                                        ssize_t n = receive_one_fd_iov(
+                                                        pidref_transport_fds[0],
+                                                        &IOVEC_MAKE(&pid, sizeof(pid)),
+                                                        /* iovlen= */ 1,
+                                                        /* flags= */ 0,
+                                                        &pidfd);
+                                        if (n < 0)
+                                                return log_full_errno(prio, n, "Failed to receive child pidref: %m");
+
+                                        *ret_pid = (PidRef) { .pid = pid, .fd = pidfd };
+                                }
+
                                 return 1; /* return in the parent */
                         }
 
+                        pidref_transport_fds[0] = safe_close(pidref_transport_fds[0]);
                         intermediary = true;
                 }
         }
@@ -1619,8 +1619,30 @@ int safe_fork_full(
         if (pid > 0) {
 
                 /* If we are in the intermediary process, exit now */
-                if (intermediary)
+                if (intermediary) {
+                        if (pidref_transport_fds[1] >= 0) {
+                                _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
+
+                                r = pidref_set_pid(&pidref, pid);
+                                if (r < 0) {
+                                        log_full_errno(prio, r, "Failed to open reference to PID "PID_FMT": %m", pid);
+                                        _exit(EXIT_FAILURE);
+                                }
+
+                                r = send_one_fd_iov(
+                                                pidref_transport_fds[1],
+                                                pidref.fd,
+                                                &IOVEC_MAKE(&pidref.pid, sizeof(pidref.pid)),
+                                                /* iovlen= */ 1,
+                                                /* flags= */ 0);
+                                if (r < 0) {
+                                        log_full_errno(prio, r, "Failed to send child pidref: %m");
+                                        _exit(EXIT_FAILURE);
+                                }
+                        }
+
                         _exit(EXIT_SUCCESS);
+                }
 
                 /* We are in the parent process */
                 log_debug("Successfully forked off '%s' as PID " PID_FMT ".", strna(name), pid);
@@ -1638,16 +1660,31 @@ int safe_fork_full(
                                 return r;
                         if (r != EXIT_SUCCESS) /* exit status > 0 should be treated as failure, too */
                                 return -EPROTO;
+
+                        /* If we are in the parent and successfully waited, then the process doesn't exist anymore. */
+                        if (ret_pid)
+                                *ret_pid = PIDREF_NULL;
+
+                        return 1;
                 }
 
-                if (ret_pid)
-                        *ret_pid = pid;
+                if (ret_pid) {
+                        if (FLAGS_SET(flags, FORK_PID_ONLY))
+                                *ret_pid = PIDREF_MAKE_FROM_PID(pid);
+                        else {
+                                r = pidref_set_pid(ret_pid, pid);
+                                if (r < 0) /* Let's not fail for this, no matter what, the process exists after all, and that's key */
+                                        *ret_pid = PIDREF_MAKE_FROM_PID(pid);
+                        }
+                }
 
                 return 1;
         }
 
         /* We are in the child process */
 
+        pidref_transport_fds[1] = safe_close(pidref_transport_fds[1]);
+
         /* Restore signal mask manually */
         saved_ssp = NULL;
 
@@ -1809,36 +1846,41 @@ int safe_fork_full(
         if (FLAGS_SET(flags, FORK_FREEZE))
                 freeze();
 
-        if (ret_pid)
-                *ret_pid = getpid_cached();
+        if (ret_pid) {
+                if (FLAGS_SET(flags, FORK_PID_ONLY))
+                        *ret_pid = PIDREF_MAKE_FROM_PID(getpid_cached());
+                else {
+                        r = pidref_set_self(ret_pid);
+                        if (r < 0) {
+                                log_full_errno(prio, r, "Failed to acquire PID reference on ourselves: %m");
+                                _exit(EXIT_FAILURE);
+                        }
+                }
+        }
 
         return 0;
 }
 
-int pidref_safe_fork_full(
+int safe_fork_full(
                 const char *name,
                 const int stdio_fds[3],
                 int except_fds[],
                 size_t n_except_fds,
                 ForkFlags flags,
-                PidRef *ret_pid) {
+                pid_t *ret_pid) {
 
-        pid_t pid;
-        int r, q;
+        _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
+        int r;
 
-        r = safe_fork_full(name, stdio_fds, except_fds, n_except_fds, flags, &pid);
-        if (r < 0 || !ret_pid)
-                return r;
+        /* Getting the detached child process pid without pidfd is racy, so don't allow it if not returning
+         * a pidref to the caller. */
+        assert(!FLAGS_SET(flags, FORK_DETACH) || !ret_pid);
 
-        if (r > 0 && FLAGS_SET(flags, FORK_WAIT)) {
-                /* If we are in the parent and successfully waited, then the process doesn't exist anymore */
-                *ret_pid = PIDREF_NULL;
+        r = pidref_safe_fork_full(name, stdio_fds, except_fds, n_except_fds, flags|FORK_PID_ONLY, ret_pid ? &pidref : NULL);
+        if (r < 0 || !ret_pid)
                 return r;
-        }
 
-        q = pidref_set_pid(ret_pid, pid);
-        if (q < 0) /* Let's not fail for this, no matter what, the process exists after all, and that's key */
-                *ret_pid = PIDREF_MAKE_FROM_PID(pid);
+        *ret_pid = pidref.pid;
 
         return r;
 }
@@ -2013,17 +2055,14 @@ _noreturn_ void freeze(void) {
 
 int get_process_threads(pid_t pid) {
         _cleanup_free_ char *t = NULL;
-        const char *p;
         int n, r;
 
         if (pid < 0)
                 return -EINVAL;
 
-        p = procfs_file_alloca(pid, "status");
-
-        r = get_proc_field(p, "Threads", WHITESPACE, &t);
+        r = procfs_file_get_field(pid, "status", "Threads", &t);
         if (r == -ENOENT)
-                return proc_mounted() == 0 ? -ENOSYS : -ESRCH;
+                return -ESRCH;
         if (r < 0)
                 return r;
 
diff --git a/src/libnm-systemd-shared/src/basic/process-util.h b/src/libnm-systemd-shared/src/basic/process-util.h
index 19ac55dd..395df64a 100644
--- a/src/libnm-systemd-shared/src/basic/process-util.h
+++ b/src/libnm-systemd-shared/src/basic/process-util.h
@@ -12,6 +12,8 @@
 #include <sys/types.h>
 
 #include "alloc-util.h"
+#include "assert-util.h"
+#include "fileio.h"
 #include "format-util.h"
 #include "macro.h"
 #include "pidref.h"
@@ -22,16 +24,20 @@
                 pid_t _pid_ = (pid);                                    \
                 const char *_field_ = (field);                          \
                 char *_r_;                                              \
-                if (_pid_ == 0) {                                       \
-                        _r_ = newa(char, STRLEN("/proc/self/") + strlen(_field_) + 1); \
-                        strcpy(stpcpy(_r_, "/proc/self/"), _field_);    \
-                } else {                                                \
+                if (_pid_ == 0)                                         \
+                        _r_ = strjoina("/proc/self/", _field_);         \
+                else {                                                  \
+                        assert(_pid_ > 0);                              \
                         _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + strlen(_field_) + 1); \
                         sprintf(_r_, "/proc/" PID_FMT "/%s", _pid_, _field_); \
                 }                                                       \
                 (const char*) _r_;                                      \
         })
 
+static inline int procfs_file_get_field(pid_t pid, const char *name, const char *key, char **ret) {
+        return get_proc_field(procfs_file_alloca(pid, name), key, ret);
+}
+
 typedef enum ProcessCmdlineFlags {
         PROCESS_CMDLINE_COMM_FALLBACK = 1 << 0,
         PROCESS_CMDLINE_USE_LOCALE    = 1 << 1,
@@ -61,7 +67,11 @@ int get_process_umask(pid_t pid, mode_t *ret);
 
 int container_get_leader(const char *machine, pid_t *pid);
 
-int wait_for_terminate(pid_t pid, siginfo_t *status);
+static inline bool SIGINFO_CODE_IS_DEAD(int code) {
+        return IN_SET(code, CLD_EXITED, CLD_KILLED, CLD_DUMPED);
+}
+
+int wait_for_terminate(pid_t pid, siginfo_t *ret);
 
 typedef enum WaitFlags {
         WAIT_LOG_ABNORMAL             = 1 << 0,
@@ -71,7 +81,9 @@ typedef enum WaitFlags {
         WAIT_LOG = WAIT_LOG_ABNORMAL|WAIT_LOG_NON_ZERO_EXIT_STATUS,
 } WaitFlags;
 
+int pidref_wait_for_terminate_and_check(const char *name, PidRef *pidref, WaitFlags flags);
 int wait_for_terminate_and_check(const char *name, pid_t pid, WaitFlags flags);
+
 int wait_for_terminate_with_timeout(pid_t pid, usec_t timeout);
 
 void sigkill_wait(pid_t pid);
@@ -195,30 +207,31 @@ typedef enum ForkFlags {
         FORK_NEW_NETNS          = 1 << 20, /* Run child in its own network namespace                             💣 DO NOT USE IN THREADED PROGRAMS! 💣 */
         FORK_NEW_PIDNS          = 1 << 21, /* Run child in its own PID namespace                                 💣 DO NOT USE IN THREADED PROGRAMS! 💣 */
         FORK_FREEZE             = 1 << 22, /* Don't return in child, just call freeze() instead */
+        FORK_PID_ONLY           = 1 << 23, /* Don't open a pidfd referencing the child process */
 } ForkFlags;
 
-int safe_fork_full(
+int pidref_safe_fork_full(
                 const char *name,
                 const int stdio_fds[3],
                 int except_fds[],
                 size_t n_except_fds,
                 ForkFlags flags,
-                pid_t *ret_pid);
+                PidRef *ret_pid);
 
-static inline int safe_fork(const char *name, ForkFlags flags, pid_t *ret_pid) {
-        return safe_fork_full(name, NULL, NULL, 0, flags, ret_pid);
+static inline int pidref_safe_fork(const char *name, ForkFlags flags, PidRef *ret_pid) {
+        return pidref_safe_fork_full(name, NULL, NULL, 0, flags, ret_pid);
 }
 
-int pidref_safe_fork_full(
+int safe_fork_full(
                 const char *name,
                 const int stdio_fds[3],
                 int except_fds[],
                 size_t n_except_fds,
                 ForkFlags flags,
-                PidRef *ret_pid);
+                pid_t *ret_pid);
 
-static inline int pidref_safe_fork(const char *name, ForkFlags flags, PidRef *ret_pid) {
-        return pidref_safe_fork_full(name, NULL, NULL, 0, flags, ret_pid);
+static inline int safe_fork(const char *name, ForkFlags flags, pid_t *ret_pid) {
+        return safe_fork_full(name, NULL, NULL, 0, flags, ret_pid);
 }
 
 int namespace_fork(
diff --git a/src/libnm-systemd-shared/src/basic/random-util.c b/src/libnm-systemd-shared/src/basic/random-util.c
index 1e1a24bd..dab4334a 100644
--- a/src/libnm-systemd-shared/src/basic/random-util.c
+++ b/src/libnm-systemd-shared/src/basic/random-util.c
@@ -13,6 +13,7 @@
 #include <sys/auxv.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
+#include <threads.h>
 
 #include "alloc-util.h"
 #include "env-util.h"
@@ -21,9 +22,9 @@
 #include "fileio.h"
 #include "io-util.h"
 #include "iovec-util.h"
+#include "log.h"
 #include "missing_random.h"
 #include "missing_syscall.h"
-#include "missing_threads.h"
 #include "parse-util.h"
 #include "pidfd-util.h"
 #include "process-util.h"
diff --git a/src/libnm-systemd-shared/src/basic/random-util.h b/src/libnm-systemd-shared/src/basic/random-util.h
index 0b5ba771..587ca1c2 100644
--- a/src/libnm-systemd-shared/src/basic/random-util.h
+++ b/src/libnm-systemd-shared/src/basic/random-util.h
@@ -6,8 +6,10 @@
 #include <stdint.h>
 #include <sys/uio.h>
 
-void random_bytes(void *p, size_t n); /* Returns random bytes suitable for most uses, but may be insecure sometimes. */
-int crypto_random_bytes(void *p, size_t n); /* Returns secure random bytes after waiting for the RNG to initialize. */
+#include "macro.h"
+
+void random_bytes(void *p, size_t n) _nonnull_if_nonzero_(1, 2); /* Returns random bytes suitable for most uses, but may be insecure sometimes. */
+int crypto_random_bytes(void *p, size_t n) _nonnull_if_nonzero_(1, 2); /* Returns secure random bytes after waiting for the RNG to initialize. */
 int crypto_random_bytes_allocate_iovec(size_t n, struct iovec *ret);
 
 static inline uint64_t random_u64(void) {
@@ -29,6 +31,6 @@ static inline uint32_t random_u32(void) {
 
 size_t random_pool_size(void);
 
-int random_write_entropy(int fd, const void *seed, size_t size, bool credit);
+int random_write_entropy(int fd, const void *seed, size_t size, bool credit) _nonnull_if_nonzero_(2, 3);
 
 uint64_t random_u64_range(uint64_t max);
diff --git a/src/libnm-systemd-shared/src/basic/ratelimit.h b/src/libnm-systemd-shared/src/basic/ratelimit.h
index 7801ef42..fd834263 100644
--- a/src/libnm-systemd-shared/src/basic/ratelimit.h
+++ b/src/libnm-systemd-shared/src/basic/ratelimit.h
@@ -28,3 +28,55 @@ unsigned ratelimit_num_dropped(const RateLimit *rl);
 
 usec_t ratelimit_end(const RateLimit *rl);
 usec_t ratelimit_left(const RateLimit *rl);
+
+typedef struct LogRateLimit {
+        int error;
+        int level;
+        RateLimit ratelimit;
+} LogRateLimit;
+
+#define log_ratelimit_internal(_level, _error, _ratelimit, _file, _line, _func, _format, ...)        \
+({                                                                              \
+        int _log_ratelimit_error = (_error);                                    \
+        int _log_ratelimit_level = (_level);                                    \
+        static LogRateLimit _log_ratelimit = {                                  \
+                .ratelimit = (_ratelimit),                                      \
+        };                                                                      \
+        unsigned _num_dropped_errors = ratelimit_num_dropped(&_log_ratelimit.ratelimit); \
+        if (_log_ratelimit_error != _log_ratelimit.error || _log_ratelimit_level != _log_ratelimit.level) { \
+                ratelimit_reset(&_log_ratelimit.ratelimit);                     \
+                _log_ratelimit.error = _log_ratelimit_error;                    \
+                _log_ratelimit.level = _log_ratelimit_level;                    \
+        }                                                                       \
+        if (log_get_max_level() == LOG_DEBUG || ratelimit_below(&_log_ratelimit.ratelimit)) \
+                _log_ratelimit_error = _num_dropped_errors > 0                  \
+                ? log_internal(_log_ratelimit_level, _log_ratelimit_error, _file, _line, _func, _format " (Dropped %u similar message(s))", ##__VA_ARGS__, _num_dropped_errors) \
+                : log_internal(_log_ratelimit_level, _log_ratelimit_error, _file, _line, _func, _format, ##__VA_ARGS__); \
+        _log_ratelimit_error;                                                   \
+})
+
+#define log_ratelimit_full_errno(level, error, _ratelimit, format, ...)             \
+        ({                                                              \
+                int _level = (level), _e = (error);                     \
+                _e = (log_get_max_level() >= LOG_PRI(_level))           \
+                        ? log_ratelimit_internal(_level, _e, _ratelimit, PROJECT_FILE, __LINE__, __func__, format, ##__VA_ARGS__) \
+                        : -ERRNO_VALUE(_e);                             \
+                _e < 0 ? _e : -ESTRPIPE;                                \
+        })
+
+#define log_ratelimit_full(level, _ratelimit, format, ...)                          \
+        log_ratelimit_full_errno(level, 0, _ratelimit, format, ##__VA_ARGS__)
+
+/* Normal logging */
+#define log_ratelimit_info(...)      log_ratelimit_full(LOG_INFO,    __VA_ARGS__)
+#define log_ratelimit_notice(...)    log_ratelimit_full(LOG_NOTICE,  __VA_ARGS__)
+#define log_ratelimit_warning(...)   log_ratelimit_full(LOG_WARNING, __VA_ARGS__)
+#define log_ratelimit_error(...)     log_ratelimit_full(LOG_ERR,     __VA_ARGS__)
+#define log_ratelimit_emergency(...) log_ratelimit_full(log_emergency_level(), __VA_ARGS__)
+
+/* Logging triggered by an errno-like error */
+#define log_ratelimit_info_errno(error, ...)      log_ratelimit_full_errno(LOG_INFO,    error, __VA_ARGS__)
+#define log_ratelimit_notice_errno(error, ...)    log_ratelimit_full_errno(LOG_NOTICE,  error, __VA_ARGS__)
+#define log_ratelimit_warning_errno(error, ...)   log_ratelimit_full_errno(LOG_WARNING, error, __VA_ARGS__)
+#define log_ratelimit_error_errno(error, ...)     log_ratelimit_full_errno(LOG_ERR,     error, __VA_ARGS__)
+#define log_ratelimit_emergency_errno(error, ...) log_ratelimit_full_errno(log_emergency_level(), error, __VA_ARGS__)
diff --git a/src/libnm-systemd-shared/src/basic/set.h b/src/libnm-systemd-shared/src/basic/set.h
index 618e7297..c7b84e0a 100644
--- a/src/libnm-systemd-shared/src/basic/set.h
+++ b/src/libnm-systemd-shared/src/basic/set.h
@@ -12,15 +12,9 @@ Set* _set_new(const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
 #define set_new(ops) _set_new(ops HASHMAP_DEBUG_SRC_ARGS)
 
 static inline Set* set_free(Set *s) {
-        return (Set*) _hashmap_free(HASHMAP_BASE(s), NULL, NULL);
+        return (Set*) _hashmap_free(HASHMAP_BASE(s));
 }
 
-static inline Set* set_free_free(Set *s) {
-        return (Set*) _hashmap_free(HASHMAP_BASE(s), free, NULL);
-}
-
-/* no set_free_free_free */
-
 #define set_copy(s) ((Set*) _hashmap_copy(HASHMAP_BASE(s)  HASHMAP_DEBUG_SRC_ARGS))
 
 int _set_ensure_allocated(Set **s, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
@@ -77,30 +71,13 @@ static inline bool set_iterate(const Set *s, Iterator *i, void **value) {
 }
 
 static inline void set_clear(Set *s) {
-        _hashmap_clear(HASHMAP_BASE(s), NULL, NULL);
-}
-
-static inline void set_clear_free(Set *s) {
-        _hashmap_clear(HASHMAP_BASE(s), free, NULL);
+        _hashmap_clear(HASHMAP_BASE(s));
 }
 
-/* no set_clear_free_free */
-
 static inline void *set_steal_first(Set *s) {
         return _hashmap_first_key_and_value(HASHMAP_BASE(s), true, NULL);
 }
 
-#define set_clear_with_destructor(s, f)                 \
-        ({                                              \
-                Set *_s = (s);                          \
-                void *_item;                            \
-                while ((_item = set_steal_first(_s)))   \
-                        f(_item);                       \
-                _s;                                     \
-        })
-#define set_free_with_destructor(s, f)                  \
-        set_free(set_clear_with_destructor(s, f))
-
 /* no set_steal_first_key */
 /* no set_first_key */
 
@@ -114,6 +91,8 @@ static inline char **set_get_strv(Set *s) {
         return _hashmap_get_strv(HASHMAP_BASE(s));
 }
 
+char** set_to_strv(Set **s);
+
 int _set_ensure_put(Set **s, const struct hash_ops *hash_ops, const void *key  HASHMAP_DEBUG_PARAMS);
 #define set_ensure_put(s, hash_ops, key) _set_ensure_put(s, hash_ops, key  HASHMAP_DEBUG_SRC_ARGS)
 
@@ -143,10 +122,8 @@ int set_put_strsplit(Set *s, const char *v, const char *separators, ExtractFlags
         for (; ({ e = set_first(s); assert_se(!e || set_move_one(d, s, e) >= 0); e; }); )
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free_free);
 
 #define _cleanup_set_free_ _cleanup_(set_freep)
-#define _cleanup_set_free_free_ _cleanup_(set_free_freep)
 
 int set_strjoin(Set *s, const char *separator, bool wrap_with_separator, char **ret);
 
diff --git a/src/libnm-systemd-shared/src/basic/signal-util.c b/src/libnm-systemd-shared/src/basic/signal-util.c
index 05b2b50d..6722e4bc 100644
--- a/src/libnm-systemd-shared/src/basic/signal-util.c
+++ b/src/libnm-systemd-shared/src/basic/signal-util.c
@@ -4,11 +4,11 @@
 
 #include <errno.h>
 #include <stdarg.h>
+#include <threads.h>
 
 #include "errno-util.h"
 #include "macro.h"
 #include "missing_syscall.h"
-#include "missing_threads.h"
 #include "parse-util.h"
 #include "signal-util.h"
 #include "stdio-util.h"
@@ -283,13 +283,13 @@ void propagate_signal(int sig, siginfo_t *siginfo) {
 
         /* To be called from a signal handler. Will raise the same signal again, in our process + in our threads.
          *
-         * Note that we use raw_getpid() instead of getpid_cached(). We might have forked with raw_clone()
+         * Note that we use getpid() instead of getpid_cached(). We might have forked with raw_clone()
          * earlier (see PID 1), and hence let's go to the raw syscall here. In particular as this is not
          * performance sensitive code.
          *
          * Note that we use kill() rather than raise() as fallback, for similar reasons. */
 
-        p = raw_getpid();
+        p = getpid();
 
         if (rt_tgsigqueueinfo(p, gettid(), sig, siginfo) < 0)
                 assert_se(kill(p, sig) >= 0);
diff --git a/src/libnm-systemd-shared/src/basic/signal-util.h b/src/libnm-systemd-shared/src/basic/signal-util.h
index dc2b9de1..d64d5031 100644
--- a/src/libnm-systemd-shared/src/basic/signal-util.h
+++ b/src/libnm-systemd-shared/src/basic/signal-util.h
@@ -3,6 +3,7 @@
 
 #include <signal.h>
 
+#include "assert-util.h"
 #include "macro.h"
 
 int reset_all_signal_handlers(void);
diff --git a/src/libnm-systemd-shared/src/basic/socket-util.c b/src/libnm-systemd-shared/src/basic/socket-util.c
index 9cb0d7f4..7c83551c 100644
--- a/src/libnm-systemd-shared/src/basic/socket-util.c
+++ b/src/libnm-systemd-shared/src/basic/socket-util.c
@@ -2,11 +2,12 @@
 
 #include "nm-sd-adapt-shared.h"
 
-/* Make sure the net/if.h header is included before any linux/ one */
-#include <net/if.h>
 #include <arpa/inet.h>
 #include <errno.h>
 #include <limits.h>
+#include <net/if.h>
+#include <linux/if.h>
+#include <linux/if_arp.h>
 #include <netdb.h>
 #include <netinet/ip.h>
 #include <poll.h>
@@ -16,9 +17,6 @@
 #include <stdlib.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
-#if 0 /* NM_IGNORED */
-#include <linux/if.h>
-#endif /* NM_IGNORED */
 
 #include "alloc-util.h"
 #include "errno-util.h"
@@ -32,6 +30,7 @@
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "random-util.h"
 #include "socket-util.h"
 #include "string-table.h"
 #include "string-util.h"
@@ -1361,6 +1360,53 @@ void* cmsg_find_and_copy_data(struct msghdr *mh, int level, int type, void *buf,
 }
 
 #if 0 /* NM_IGNORED */
+size_t sockaddr_ll_len(const struct sockaddr_ll *sa) {
+        /* Certain hardware address types (e.g Infiniband) do not fit into sll_addr
+         * (8 bytes) and run over the structure. This function returns the correct size that
+         * must be passed to kernel. */
+
+        assert(sa->sll_family == AF_PACKET);
+
+        size_t mac_len = sizeof(sa->sll_addr);
+
+        if (be16toh(sa->sll_hatype) == ARPHRD_ETHER)
+                mac_len = MAX(mac_len, (size_t) ETH_ALEN);
+        if (be16toh(sa->sll_hatype) == ARPHRD_INFINIBAND)
+                mac_len = MAX(mac_len, (size_t) INFINIBAND_ALEN);
+
+        return offsetof(struct sockaddr_ll, sll_addr) + mac_len;
+}
+
+size_t sockaddr_un_len(const struct sockaddr_un *sa) {
+        /* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */
+
+        assert(sa->sun_family == AF_UNIX);
+
+        return offsetof(struct sockaddr_un, sun_path) +
+                (sa->sun_path[0] == 0 ?
+                        1 + strnlen(sa->sun_path+1, sizeof(sa->sun_path)-1) :
+                        strnlen(sa->sun_path, sizeof(sa->sun_path))+1);
+}
+
+size_t sockaddr_len(const union sockaddr_union *sa) {
+        switch (sa->sa.sa_family) {
+        case AF_INET:
+                return sizeof(struct sockaddr_in);
+        case AF_INET6:
+                return sizeof(struct sockaddr_in6);
+        case AF_UNIX:
+                return sockaddr_un_len(&sa->un);
+        case AF_PACKET:
+                return sockaddr_ll_len(&sa->ll);
+        case AF_NETLINK:
+                return sizeof(struct sockaddr_nl);
+        case AF_VSOCK:
+                return sizeof(struct sockaddr_vm);
+        default:
+                assert_not_reached();
+        }
+}
+
 int socket_ioctl_fd(void) {
         int fd;
 
@@ -1457,25 +1503,43 @@ int socket_bind_to_ifname(int fd, const char *ifname) {
 }
 
 int socket_bind_to_ifindex(int fd, int ifindex) {
-        char ifname[IF_NAMESIZE];
-        int r;
-
         assert(fd >= 0);
 
         if (ifindex <= 0)
                 /* Drop binding */
                 return RET_NERRNO(setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, NULL, 0));
 
-        r = setsockopt_int(fd, SOL_SOCKET, SO_BINDTOIFINDEX, ifindex);
-        if (r != -ENOPROTOOPT)
-                return r;
+        return setsockopt_int(fd, SOL_SOCKET, SO_BINDTOIFINDEX, ifindex);
+}
+
+int socket_autobind(int fd, char **ret_name) {
+        _cleanup_free_ char *name = NULL;
+        uint64_t random;
+        int r;
+
+        /* Generate a random abstract socket name and bind fd to it. This is modeled after the kernel
+         * "autobind" feature, but uses 64-bit random number internally. */
 
-        /* Fall back to SO_BINDTODEVICE on kernels < 5.0 which didn't have SO_BINDTOIFINDEX */
-        r = format_ifname(ifindex, ifname);
+        assert(fd >= 0);
+        assert(ret_name);
+
+        random = random_u64();
+
+        if (asprintf(&name, "@%" PRIu64, random) < 0)
+                return -ENOMEM;
+
+        union sockaddr_union sa;
+        assert_cc(DECIMAL_STR_MAX(uint64_t) < sizeof(sa.un.sun_path));
+
+        r = sockaddr_un_set_path(&sa.un, name);
         if (r < 0)
                 return r;
 
-        return socket_bind_to_ifname(fd, ifname);
+        if (bind(fd, &sa.sa, r) < 0)
+                return -errno;
+
+        *ret_name = TAKE_PTR(name);
+        return 0;
 }
 
 ssize_t recvmsg_safe(int sockfd, struct msghdr *msg, int flags) {
@@ -1815,8 +1879,6 @@ int netlink_socket_get_multicast_groups(int fd, size_t *ret_len, uint32_t **ret_
 
         assert(fd >= 0);
 
-        /* This returns ENOPROTOOPT if the kernel is older than 4.2. */
-
         if (getsockopt(fd, SOL_NETLINK, NETLINK_LIST_MEMBERSHIPS, NULL, &len) < 0)
                 return -errno;
 
diff --git a/src/libnm-systemd-shared/src/basic/socket-util.h b/src/libnm-systemd-shared/src/basic/socket-util.h
index b6c38725..e5eda855 100644
--- a/src/libnm-systemd-shared/src/basic/socket-util.h
+++ b/src/libnm-systemd-shared/src/basic/socket-util.h
@@ -6,12 +6,12 @@
 #include <linux/if_infiniband.h>
 #include <linux/if_packet.h>
 #include <linux/netlink.h>
-#include <sys/socket.h> /* linux/vms_sockets.h requires 'struct sockaddr' */
 #include <linux/vm_sockets.h>
 #include <netinet/in.h>
 #include <stdbool.h>
 #include <stddef.h>
 #include <string.h>
+#include <sys/socket.h>
 #include <sys/types.h>
 #include <sys/un.h>
 
@@ -240,62 +240,11 @@ void* cmsg_find_and_copy_data(struct msghdr *mh, int level, int type, void *buf,
                                     (size) == CMSG_ALIGN(size) ? 1 : -1]; \
         }
 
-/*
- * Certain hardware address types (e.g Infiniband) do not fit into sll_addr
- * (8 bytes) and run over the structure. This macro returns the correct size that
- * must be passed to kernel.
- */
-#define SOCKADDR_LL_LEN(sa)                                             \
-        ({                                                              \
-                const struct sockaddr_ll *_sa = &(sa);                  \
-                size_t _mac_len = sizeof(_sa->sll_addr);                \
-                assert(_sa->sll_family == AF_PACKET);                   \
-                if (be16toh(_sa->sll_hatype) == ARPHRD_ETHER)           \
-                        _mac_len = MAX(_mac_len, (size_t) ETH_ALEN);    \
-                if (be16toh(_sa->sll_hatype) == ARPHRD_INFINIBAND)      \
-                        _mac_len = MAX(_mac_len, (size_t) INFINIBAND_ALEN); \
-                offsetof(struct sockaddr_ll, sll_addr) + _mac_len;      \
-        })
+size_t sockaddr_ll_len(const struct sockaddr_ll *sa);
 
-/* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */
-#define SOCKADDR_UN_LEN(sa)                                             \
-        ({                                                              \
-                const struct sockaddr_un *_sa = &(sa);                  \
-                assert(_sa->sun_family == AF_UNIX);                     \
-                offsetof(struct sockaddr_un, sun_path) +                \
-                        (_sa->sun_path[0] == 0 ?                        \
-                         1 + strnlen(_sa->sun_path+1, sizeof(_sa->sun_path)-1) : \
-                         strnlen(_sa->sun_path, sizeof(_sa->sun_path))+1); \
-        })
+size_t sockaddr_un_len(const struct sockaddr_un *sa);
 
-#define SOCKADDR_LEN(saddr)                                             \
-        ({                                                              \
-                const union sockaddr_union *__sa = &(saddr);            \
-                size_t _len;                                            \
-                switch (__sa->sa.sa_family) {                           \
-                case AF_INET:                                           \
-                        _len = sizeof(struct sockaddr_in);              \
-                        break;                                          \
-                case AF_INET6:                                          \
-                        _len = sizeof(struct sockaddr_in6);             \
-                        break;                                          \
-                case AF_UNIX:                                           \
-                        _len = SOCKADDR_UN_LEN(__sa->un);               \
-                        break;                                          \
-                case AF_PACKET:                                         \
-                        _len = SOCKADDR_LL_LEN(__sa->ll);               \
-                        break;                                          \
-                case AF_NETLINK:                                        \
-                        _len = sizeof(struct sockaddr_nl);              \
-                        break;                                          \
-                case AF_VSOCK:                                          \
-                        _len = sizeof(struct sockaddr_vm);              \
-                        break;                                          \
-                default:                                                \
-                        assert_not_reached();                           \
-                }                                                       \
-                _len;                                                   \
-        })
+size_t sockaddr_len(const union sockaddr_union *sa);
 
 int socket_ioctl_fd(void);
 
@@ -324,6 +273,8 @@ static inline int getsockopt_int(int fd, int level, int optname, int *ret) {
 int socket_bind_to_ifname(int fd, const char *ifname);
 int socket_bind_to_ifindex(int fd, int ifindex);
 
+int socket_autobind(int fd, char **ret_name);
+
 /* Define a 64-bit version of timeval/timespec in any case, even on 32-bit userspace. */
 struct timeval_large {
         uint64_t tvl_sec, tvl_usec;
diff --git a/src/libnm-systemd-shared/src/basic/stat-util.c b/src/libnm-systemd-shared/src/basic/stat-util.c
index ef813e19..1b352290 100644
--- a/src/libnm-systemd-shared/src/basic/stat-util.c
+++ b/src/libnm-systemd-shared/src/basic/stat-util.c
@@ -18,10 +18,10 @@
 #include "filesystems.h"
 #include "fs-util.h"
 #include "hash-funcs.h"
+#include "log.h"
 #include "macro.h"
 #include "missing_fs.h"
 #include "missing_magic.h"
-#include "missing_syscall.h"
 #include "mountpoint-util.h"
 #include "nulstr-util.h"
 #include "parse-util.h"
@@ -175,7 +175,7 @@ int dir_is_empty_at(int dir_fd, const char *path, bool ignore_hidden_or_backup)
                 struct dirent *de;
                 ssize_t n;
 
-                n = getdents64(fd, buf, m);
+                n = posix_getdents(fd, buf, m, /* flags = */ 0);
                 if (n < 0)
                         return -errno;
                 if (n == 0)
@@ -301,7 +301,7 @@ int inode_same_at(int fda, const char *filea, int fdb, const char *fileb, int fl
                         flags |= AT_EMPTY_PATH;
                 }
 
-                int ntha_flags = (flags & AT_EMPTY_PATH) | (FLAGS_SET(flags, AT_SYMLINK_NOFOLLOW) ? 0 : AT_SYMLINK_FOLLOW);
+                int ntha_flags = at_flags_normalize_follow(flags) & (AT_EMPTY_PATH|AT_SYMLINK_FOLLOW);
                 _cleanup_free_ struct file_handle *ha = NULL, *hb = NULL;
                 int mntida = -1, mntidb = -1;
 
@@ -478,8 +478,8 @@ bool statx_inode_same(const struct statx *a, const struct statx *b) {
                 a->stx_ino == b->stx_ino;
 }
 
-bool statx_mount_same(const struct new_statx *a, const struct new_statx *b) {
-        if (!new_statx_is_set(a) || !new_statx_is_set(b))
+bool statx_mount_same(const struct statx *a, const struct statx *b) {
+        if (!statx_is_set(a) || !statx_is_set(b))
                 return false;
 
         /* if we have the mount ID, that's all we need */
@@ -490,76 +490,6 @@ bool statx_mount_same(const struct new_statx *a, const struct new_statx *b) {
         return a->stx_dev_major == b->stx_dev_major &&
                 a->stx_dev_minor == b->stx_dev_minor;
 }
-
-static bool is_statx_fatal_error(int err, int flags) {
-        assert(err < 0);
-
-        /* If statx() is not supported or if we see EPERM (which might indicate seccomp filtering or so),
-         * let's do a fallback. Note that on EACCES we'll not fall back, since that is likely an indication of
-         * fs access issues, which we should propagate. */
-        if (ERRNO_IS_NOT_SUPPORTED(err) || err == -EPERM)
-                return false;
-
-        /* When unsupported flags are specified, glibc's fallback function returns -EINVAL.
-         * See statx_generic() in glibc. */
-        if (err != -EINVAL)
-                return true;
-
-        if ((flags & ~(AT_EMPTY_PATH | AT_NO_AUTOMOUNT | AT_SYMLINK_NOFOLLOW | AT_STATX_SYNC_AS_STAT)) != 0)
-                return false; /* Unsupported flags are specified. Let's try to use our implementation. */
-
-        return true;
-}
-
-int statx_fallback(int dfd, const char *path, int flags, unsigned mask, struct statx *sx) {
-        static bool avoid_statx = false;
-        struct stat st;
-        int r;
-
-        if (!avoid_statx) {
-                r = RET_NERRNO(statx(dfd, path, flags, mask, sx));
-                if (r >= 0 || is_statx_fatal_error(r, flags))
-                        return r;
-
-                avoid_statx = true;
-        }
-
-        /* Only do fallback if fstatat() supports the flag too, or if it's one of the sync flags, which are
-         * OK to ignore */
-        if ((flags & ~(AT_EMPTY_PATH|AT_NO_AUTOMOUNT|AT_SYMLINK_NOFOLLOW|
-                      AT_STATX_SYNC_AS_STAT|AT_STATX_FORCE_SYNC|AT_STATX_DONT_SYNC)) != 0)
-                return -EOPNOTSUPP;
-
-        if (fstatat(dfd, path, &st, flags & (AT_EMPTY_PATH|AT_NO_AUTOMOUNT|AT_SYMLINK_NOFOLLOW)) < 0)
-                return -errno;
-
-        *sx = (struct statx) {
-                .stx_mask = STATX_TYPE|STATX_MODE|
-                STATX_NLINK|STATX_UID|STATX_GID|
-                STATX_ATIME|STATX_MTIME|STATX_CTIME|
-                STATX_INO|STATX_SIZE|STATX_BLOCKS,
-                .stx_blksize = st.st_blksize,
-                .stx_nlink = st.st_nlink,
-                .stx_uid = st.st_uid,
-                .stx_gid = st.st_gid,
-                .stx_mode = st.st_mode,
-                .stx_ino = st.st_ino,
-                .stx_size = st.st_size,
-                .stx_blocks = st.st_blocks,
-                .stx_rdev_major = major(st.st_rdev),
-                .stx_rdev_minor = minor(st.st_rdev),
-                .stx_dev_major = major(st.st_dev),
-                .stx_dev_minor = minor(st.st_dev),
-                .stx_atime.tv_sec = st.st_atim.tv_sec,
-                .stx_atime.tv_nsec = st.st_atim.tv_nsec,
-                .stx_mtime.tv_sec = st.st_mtim.tv_sec,
-                .stx_mtime.tv_nsec = st.st_mtim.tv_nsec,
-                .stx_ctime.tv_sec = st.st_ctim.tv_sec,
-                .stx_ctime.tv_nsec = st.st_ctim.tv_nsec,
-        };
-
-        return 0;
-}
 #endif /* NM_IGNORED */
 
 int xstatfsat(int dir_fd, const char *path, struct statfs *ret) {
@@ -568,11 +498,14 @@ int xstatfsat(int dir_fd, const char *path, struct statfs *ret) {
         assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
         assert(ret);
 
-        fd = xopenat(dir_fd, path, O_PATH|O_CLOEXEC|O_NOCTTY);
-        if (fd < 0)
-                return fd;
+        if (!isempty(path)) {
+                fd = xopenat(dir_fd, path, O_PATH|O_CLOEXEC|O_NOCTTY);
+                if (fd < 0)
+                        return fd;
+                dir_fd = fd;
+        }
 
-        return RET_NERRNO(fstatfs(fd, ret));
+        return RET_NERRNO(fstatfs(dir_fd, ret));
 }
 
 #if 0 /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/stat-util.h b/src/libnm-systemd-shared/src/basic/stat-util.h
index 17fb520f..fcde7784 100644
--- a/src/libnm-systemd-shared/src/basic/stat-util.h
+++ b/src/libnm-systemd-shared/src/basic/stat-util.h
@@ -11,7 +11,6 @@
 
 #include "fs-util.h"
 #include "macro.h"
-#include "missing_stat.h"
 #include "siphash24.h"
 #include "time-util.h"
 
@@ -52,10 +51,11 @@ int inode_same_at(int fda, const char *filea, int fdb, const char *fileb, int fl
 static inline int inode_same(const char *filea, const char *fileb, int flags) {
         return inode_same_at(AT_FDCWD, filea, AT_FDCWD, fileb, flags);
 }
+#if 0  /* NM_IGNORED */
 static inline int fd_inode_same(int fda, int fdb) {
         return inode_same_at(fda, NULL, fdb, NULL, AT_EMPTY_PATH);
 }
-
+#endif  /* NM_IGNORED */
 /* The .f_type field of struct statfs is really weird defined on
  * different archs. Let's give its type a name. */
 typedef typeof(((struct statfs*)NULL)->f_type) statfs_f_type_t;
@@ -90,31 +90,10 @@ bool stat_inode_same(const struct stat *a, const struct stat *b);
 bool stat_inode_unmodified(const struct stat *a, const struct stat *b);
 
 bool statx_inode_same(const struct statx *a, const struct statx *b);
-bool statx_mount_same(const struct new_statx *a, const struct new_statx *b);
-
-int statx_fallback(int dfd, const char *path, int flags, unsigned mask, struct statx *sx);
+bool statx_mount_same(const struct statx *a, const struct statx *b);
 
 int xstatfsat(int dir_fd, const char *path, struct statfs *ret);
 
-#if HAS_FEATURE_MEMORY_SANITIZER
-#  warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
-#  define STRUCT_STATX_DEFINE(var)              \
-        struct statx var = {}
-#  define STRUCT_NEW_STATX_DEFINE(var)          \
-        union {                                 \
-                struct statx sx;                \
-                struct new_statx nsx;           \
-        } var = {}
-#else
-#  define STRUCT_STATX_DEFINE(var)              \
-        struct statx var
-#  define STRUCT_NEW_STATX_DEFINE(var)          \
-        union {                                 \
-                struct statx sx;                \
-                struct new_statx nsx;           \
-        } var
-#endif
-
 #if 0 /* NM_IGNORED */
 static inline usec_t statx_timestamp_load(const struct statx_timestamp *ts) {
         return timespec_load(&(const struct timespec) { .tv_sec = ts->tv_sec, .tv_nsec = ts->tv_nsec });
@@ -143,7 +122,4 @@ static inline bool stat_is_set(const struct stat *st) {
 static inline bool statx_is_set(const struct statx *sx) {
         return sx && sx->stx_mask != 0;
 }
-static inline bool new_statx_is_set(const struct new_statx *sx) {
-        return sx && sx->stx_mask != 0;
-}
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/stdio-util.h b/src/libnm-systemd-shared/src/basic/stdio-util.h
index c35e6655..6914d998 100644
--- a/src/libnm-systemd-shared/src/basic/stdio-util.h
+++ b/src/libnm-systemd-shared/src/basic/stdio-util.h
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <sys/types.h>
 
+#include "assert-util.h"
 #include "macro.h"
 
 _printf_(3, 4)
diff --git a/src/libnm-systemd-shared/src/basic/string-util.c b/src/libnm-systemd-shared/src/basic/string-util.c
index 6a06594a..5efd11ea 100644
--- a/src/libnm-systemd-shared/src/basic/string-util.c
+++ b/src/libnm-systemd-shared/src/basic/string-util.c
@@ -16,6 +16,7 @@
 #include "glyph-util.h"
 #include "gunicode.h"
 #include "locale-util.h"
+#include "log.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "memstream-util.h"
@@ -48,35 +49,42 @@ char* first_word(const char *s, const char *word) {
         return (char*) nw;
 }
 
-char* strnappend(const char *s, const char *suffix, size_t b) {
-        size_t a;
-        char *r;
+char* strprepend(char **x, const char *s) {
+        assert(x);
 
-        if (!s && !suffix)
-                return strdup("");
+        if (isempty(s) && *x)
+                return *x;
 
-        if (!s)
-                return strndup(suffix, b);
+        char *p = strjoin(strempty(s), *x);
+        if (!p)
+                return NULL;
 
-        if (!suffix)
-                return strdup(s);
+        free_and_replace(*x, p);
+        return *x;
+}
 
-        assert(s);
-        assert(suffix);
+char* strextendn(char **x, const char *s, size_t l) {
+        assert(x);
+        assert(s || l == 0);
 
-        a = strlen(s);
-        if (b > SIZE_MAX - a)
-                return NULL;
+        if (l > 0)
+                l = strnlen(s, l); /* ignore trailing noise */
 
-        r = new(char, a+b+1);
-        if (!r)
-                return NULL;
+        if (l > 0 || !*x) {
+                size_t q;
+                char *m;
+
+                q = strlen_ptr(*x);
+                m = realloc(*x, q + l + 1);
+                if (!m)
+                        return NULL;
 
-        memcpy(r, s, a);
-        memcpy(r+a, suffix, b);
-        r[a+b] = 0;
+                *mempcpy_typesafe(m + q, s, l) = 0;
 
-        return r;
+                *x = m;
+        }
+
+        return *x;
 }
 
 #if 0 /* NM_IGNORED */
@@ -245,7 +253,7 @@ bool string_has_cc(const char *p, const char *ok) {
 
 #if 0 /* NM_IGNORED */
 static int write_ellipsis(char *buf, bool unicode) {
-        const char *s = special_glyph_full(SPECIAL_GLYPH_ELLIPSIS, unicode);
+        const char *s = glyph_full(GLYPH_ELLIPSIS, unicode);
         assert(strlen(s) == 3);
         memcpy(buf, s, 3);
         return 3;
@@ -333,10 +341,6 @@ static char *ascii_ellipsize_mem(const char *s, size_t old_length, size_t new_le
         case 2:
                 if (!is_locale_utf8())
                         return strdup("..");
-
-                break;
-
-        default:
                 break;
         }
 
@@ -983,33 +987,6 @@ oom:
         return -ENOMEM;
 }
 
-char* strextendn(char **x, const char *s, size_t l) {
-        assert(x);
-        assert(s || l == 0);
-
-        if (l == SIZE_MAX)
-                l = strlen_ptr(s);
-        else if (l > 0)
-                l = strnlen(s, l); /* ignore trailing noise */
-
-        if (l > 0 || !*x) {
-                size_t q;
-                char *m;
-
-                q = strlen_ptr(*x);
-                m = realloc(*x, q + l + 1);
-                if (!m)
-                        return NULL;
-
-                memcpy_safe(m + q, s, l);
-                m[q + l] = 0;
-
-                *x = m;
-        }
-
-        return *x;
-}
-
 char* strrep(const char *s, unsigned n) {
         char *r, *p;
         size_t l;
@@ -1074,6 +1051,15 @@ int free_and_strdup(char **p, const char *s) {
         return 1;
 }
 
+int free_and_strdup_warn(char **p, const char *s) {
+        int r;
+
+        r = free_and_strdup(p, s);
+        if (r < 0)
+                return log_oom();
+        return r;
+}
+
 int free_and_strndup(char **p, const char *s, size_t l) {
         char *t;
 
@@ -1502,3 +1488,19 @@ char* strrstr(const char *haystack, const char *needle) {
         }
         return NULL;
 }
+
+size_t str_common_prefix(const char *a, const char *b) {
+        assert(a);
+        assert(b);
+
+        /* Returns the length of the common prefix of the two specified strings, or SIZE_MAX in case the
+         * strings are fully identical. */
+
+        for (size_t n = 0;; n++) {
+                char c = a[n];
+                if (c != b[n])
+                        return n;
+                if (c == 0)
+                        return SIZE_MAX;
+        }
+}
diff --git a/src/libnm-systemd-shared/src/basic/string-util.h b/src/libnm-systemd-shared/src/basic/string-util.h
index 1bcb1c40..91e63c9b 100644
--- a/src/libnm-systemd-shared/src/basic/string-util.h
+++ b/src/libnm-systemd-shared/src/basic/string-util.h
@@ -106,7 +106,8 @@ static inline const char* empty_or_dash_to_null(const char *p) {
 
 char* first_word(const char *s, const char *word) _pure_;
 
-char* strnappend(const char *s, const char *suffix, size_t length);
+char* strprepend(char **x, const char *s);
+char* strextendn(char **x, const char *s, size_t l) _nonnull_if_nonzero_(2, 3);
 
 #define strjoin(a, ...) strextend_with_separator_internal(NULL, NULL, a, __VA_ARGS__, NULL)
 
@@ -193,8 +194,6 @@ char* strextend_with_separator_internal(char **x, const char *separator, ...) _s
 #define strextend_with_separator(x, separator, ...) strextend_with_separator_internal(x, separator, __VA_ARGS__, NULL)
 #define strextend(x, ...) strextend_with_separator_internal(x, NULL, __VA_ARGS__, NULL)
 
-char* strextendn(char **x, const char *s, size_t l);
-
 int strextendf_with_separator(char **x, const char *separator, const char *format, ...) _printf_(3,4);
 #define strextendf(x, ...) strextendf_with_separator(x, NULL, __VA_ARGS__)
 
@@ -216,15 +215,8 @@ char* strrep(const char *s, unsigned n);
 int split_pair(const char *s, const char *sep, char **ret_first, char **ret_second);
 
 int free_and_strdup(char **p, const char *s);
-static inline int free_and_strdup_warn(char **p, const char *s) {
-        int r;
-
-        r = free_and_strdup(p, s);
-        if (r < 0)
-                return log_oom();
-        return r;
-}
-int free_and_strndup(char **p, const char *s, size_t l);
+int free_and_strdup_warn(char **p, const char *s);
+int free_and_strndup(char **p, const char *s, size_t l) _nonnull_if_nonzero_(2, 3);
 
 int strdup_to_full(char **ret, const char *src);
 static inline int strdup_to(char **ret, const char *src) {
@@ -309,3 +301,5 @@ bool version_is_valid_versionspec(const char *s);
 ssize_t strlevenshtein(const char *x, const char *y);
 
 char* strrstr(const char *haystack, const char *needle);
+
+size_t str_common_prefix(const char *a, const char *b);
diff --git a/src/libnm-systemd-shared/src/basic/strv.c b/src/libnm-systemd-shared/src/basic/strv.c
index 38466696..f433afc7 100644
--- a/src/libnm-systemd-shared/src/basic/strv.c
+++ b/src/libnm-systemd-shared/src/basic/strv.c
@@ -14,6 +14,7 @@
 #include "extract-word.h"
 #include "fileio.h"
 #include "gunicode.h"
+#include "log.h"
 #include "memory-util.h"
 #include "nulstr-util.h"
 #include "sort-util.h"
@@ -637,7 +638,7 @@ int strv_insert(char ***l, size_t position, char *value) {
         n = strv_length(*l);
         position = MIN(position, n);
 
-        /* check for overflow and increase*/
+        /* check for overflow and increase */
         if (n > SIZE_MAX - 2)
                 return -ENOMEM;
         m = n + 2;
@@ -868,11 +869,11 @@ int strv_compare(char * const *a, char * const *b) {
         return 0;
 }
 
-bool strv_equal_ignore_order(char **a, char **b) {
+bool strv_equal_ignore_order(char * const *a, char * const *b) {
 
         /* Just like strv_equal(), but doesn't care about the order of elements or about redundant entries
          * (i.e. it's even ok if the number of entries in the array differ, as long as the difference just
-         * consists of repititions) */
+         * consists of repetitions). */
 
         if (a == b)
                 return true;
@@ -892,6 +893,7 @@ void strv_print_full(char * const *l, const char *prefix) {
         STRV_FOREACH(s, l)
                 printf("%s%s\n", strempty(prefix), *s);
 }
+#endif /* NM_IGNORED */
 
 int strv_extendf(char ***l, const char *format, ...) {
         va_list ap;
@@ -907,7 +909,7 @@ int strv_extendf(char ***l, const char *format, ...) {
 
         return strv_consume(l, x);
 }
-#endif /* NM_IGNORED */
+
 
 char* startswith_strv(const char *s, char * const *l) {
         STRV_FOREACH(i, l) {
@@ -986,14 +988,16 @@ bool strv_fnmatch_full(
 }
 
 char** strv_skip(char **l, size_t n) {
-
         while (n > 0) {
                 if (strv_isempty(l))
-                        return l;
+                        return NULL;
 
                 l++, n--;
         }
 
+        /* To simplify callers, always return NULL instead of a zero-item array. */
+        if (strv_isempty(l))
+                return NULL;
         return l;
 }
 
@@ -1074,7 +1078,22 @@ int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) {
 }
 
 #if 0 /* NM_IGNORED */
-DEFINE_PRIVATE_HASH_OPS_FULL(string_strv_hash_ops, char, string_hash_func, string_compare_func, free, char*, strv_free);
+void string_strv_hashmap_remove(Hashmap *h, const char *key, const char *value) {
+        assert(key);
+
+        if (value) {
+                char **l = hashmap_get(h, key);
+                if (!l)
+                        return;
+
+                strv_remove(l, value);
+                if (!strv_isempty(l))
+                        return;
+        }
+
+        _unused_ _cleanup_free_ char *key_free = NULL;
+        strv_free(hashmap_remove2(h, key, (void**) &key_free));
+}
 
 static int string_strv_hashmap_put_internal(Hashmap *h, const char *key, const char *value) {
         char **l;
@@ -1126,7 +1145,7 @@ int _string_strv_hashmap_put(Hashmap **h, const char *key, const char *value  HA
         assert(key);
         assert(value);
 
-        r = _hashmap_ensure_allocated(h, &string_strv_hash_ops  HASHMAP_DEBUG_PASS_ARGS);
+        r = _hashmap_ensure_allocated(h, &string_hash_ops_free_strv_free  HASHMAP_DEBUG_PASS_ARGS);
         if (r < 0)
                 return r;
 
@@ -1140,7 +1159,7 @@ int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const
         assert(key);
         assert(value);
 
-        r = _ordered_hashmap_ensure_allocated(h, &string_strv_hash_ops  HASHMAP_DEBUG_PASS_ARGS);
+        r = _ordered_hashmap_ensure_allocated(h, &string_hash_ops_free_strv_free  HASHMAP_DEBUG_PASS_ARGS);
         if (r < 0)
                 return r;
 
@@ -1234,4 +1253,25 @@ int strv_rebreak_lines(char **l, size_t width, char ***ret) {
         *ret = TAKE_PTR(broken);
         return 0;
 }
+
+char** strv_filter_prefix(char * const *l, const char *prefix) {
+
+        /* Allocates a copy of 'l', but only copies over entries starting with 'prefix' */
+
+        if (isempty(prefix))
+                return strv_copy(l);
+
+        _cleanup_strv_free_ char **f = NULL;
+        size_t sz = 0;
+
+        STRV_FOREACH(i, l) {
+                if (!startswith(*i, prefix))
+                        continue;
+
+                if (strv_extend_with_size(&f, &sz, *i) < 0)
+                        return NULL;
+        }
+
+        return TAKE_PTR(f);
+}
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/strv.h b/src/libnm-systemd-shared/src/basic/strv.h
index 86ba06f8..0ca90087 100644
--- a/src/libnm-systemd-shared/src/basic/strv.h
+++ b/src/libnm-systemd-shared/src/basic/strv.h
@@ -33,7 +33,7 @@ char** strv_free_erase(char **l);
 DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free_erase);
 #define _cleanup_strv_free_erase_ _cleanup_(strv_free_erasep)
 
-void strv_free_many(char ***strvs, size_t n);
+void strv_free_many(char ***strvs, size_t n) _nonnull_if_nonzero_(1, 2);
 
 char** strv_copy_n(char * const *l, size_t n);
 static inline char** strv_copy(char * const *l) {
@@ -96,7 +96,7 @@ static inline bool strv_equal(char * const *a, char * const *b) {
         return strv_compare(a, b) == 0;
 }
 
-bool strv_equal_ignore_order(char **a, char **b);
+bool strv_equal_ignore_order(char * const *a, char * const *b);
 
 char** strv_new_internal(const char *x, ...) _sentinel_;
 char** strv_new_ap(const char *x, va_list ap);
@@ -258,9 +258,15 @@ int fputstrv(FILE *f, char * const *l, const char *separator, bool *space);
 #define strv_free_and_replace(a, b)             \
         free_and_replace_full(a, b, strv_free)
 
+void string_strv_hashmap_remove(Hashmap *h, const char *key, const char *value);
+static inline void string_strv_ordered_hashmap_remove(OrderedHashmap *h, const char *key, const char *value) {
+        string_strv_hashmap_remove(PLAIN_HASHMAP(h), key, value);
+}
 int _string_strv_hashmap_put(Hashmap **h, const char *key, const char *value  HASHMAP_DEBUG_PARAMS);
 int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const char *value  HASHMAP_DEBUG_PARAMS);
 #define string_strv_hashmap_put(h, k, v) _string_strv_hashmap_put(h, k, v  HASHMAP_DEBUG_SRC_ARGS)
 #define string_strv_ordered_hashmap_put(h, k, v) _string_strv_ordered_hashmap_put(h, k, v  HASHMAP_DEBUG_SRC_ARGS)
 
 int strv_rebreak_lines(char **l, size_t width, char ***ret);
+
+char** strv_filter_prefix(char * const *l, const char *prefix);
diff --git a/src/libnm-systemd-shared/src/basic/time-util.c b/src/libnm-systemd-shared/src/basic/time-util.c
index 594d5315..06e27cfb 100644
--- a/src/libnm-systemd-shared/src/basic/time-util.c
+++ b/src/libnm-systemd-shared/src/basic/time-util.c
@@ -10,6 +10,7 @@
 #include <sys/time.h>
 #include <sys/timerfd.h>
 #include <sys/types.h>
+#include <threads.h>
 #include <unistd.h>
 
 #include "alloc-util.h"
@@ -19,8 +20,6 @@
 #include "io-util.h"
 #include "log.h"
 #include "macro.h"
-#include "missing_threads.h"
-#include "missing_timerfd.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
@@ -1643,7 +1642,7 @@ int mktime_or_timegm_usec(
 
         assert(tm);
 
-        if (tm->tm_year < 69) /* early check for negative (i.e. before 1970) time_t (Note that in some timezones the epoch is in the year 1969!)*/
+        if (tm->tm_year < 69) /* early check for negative (i.e. before 1970) time_t (Note that in some timezones the epoch is in the year 1969!) */
                 return -ERANGE;
         if ((usec_t) tm->tm_year > CONST_MIN(USEC_INFINITY / USEC_PER_YEAR, (usec_t) TIME_T_MAX / (365U * 24U * 60U * 60U)) - 1900) /* early check for possible overrun of usec_t or time_t */
                 return -ERANGE;
diff --git a/src/libnm-systemd-shared/src/basic/time-util.h b/src/libnm-systemd-shared/src/basic/time-util.h
index 14d660ee..3f6e3c9f 100644
--- a/src/libnm-systemd-shared/src/basic/time-util.h
+++ b/src/libnm-systemd-shared/src/basic/time-util.h
@@ -222,8 +222,8 @@ static inline int usleep_safe(usec_t usec) {
         if (usec == 0)
                 return 0;
 
-        // FIXME: use RET_NERRNO() macro here. Currently, this header cannot include errno-util.h.
-        return clock_nanosleep(CLOCK_MONOTONIC, 0, TIMESPEC_STORE(usec), NULL) < 0 ? -errno : 0;
+        /* `clock_nanosleep()` does not use `errno`, but returns positive error codes. */
+        return -clock_nanosleep(CLOCK_MONOTONIC, 0, TIMESPEC_STORE(usec), NULL);
 }
 
 /* The last second we can format is 31. Dec 9999, 1s before midnight, because otherwise we'd enter 5 digit
diff --git a/src/libnm-systemd-shared/src/basic/tmpfile-util.c b/src/libnm-systemd-shared/src/basic/tmpfile-util.c
index 3d1b8d04..4e1fe711 100644
--- a/src/libnm-systemd-shared/src/basic/tmpfile-util.c
+++ b/src/libnm-systemd-shared/src/basic/tmpfile-util.c
@@ -9,6 +9,7 @@
 #include "fileio.h"
 #include "fs-util.h"
 #include "hexdecoct.h"
+#include "log.h"
 #include "macro.h"
 #include "memfd-util.h"
 #include "missing_fcntl.h"
diff --git a/src/libnm-systemd-shared/src/basic/user-util.c b/src/libnm-systemd-shared/src/basic/user-util.c
new file mode 100644
index 00000000..9b80750a
--- /dev/null
+++ b/src/libnm-systemd-shared/src/basic/user-util.c
@@ -0,0 +1,1243 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "nm-sd-adapt-shared.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <utmpx.h>
+
+#include "sd-messages.h"
+
+#include "alloc-util.h"
+#include "chase.h"
+#include "errno-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "format-util.h"
+#include "lock-util.h"
+#include "log.h"
+#include "macro.h"
+#include "mkdir.h"
+#include "parse-util.h"
+#include "path-util.h"
+#include "random-util.h"
+#include "string-util.h"
+#include "strv.h"
+#include "terminal-util.h"
+#include "user-util.h"
+#include "utf8.h"
+
+bool uid_is_valid(uid_t uid) {
+
+        /* Also see POSIX IEEE Std 1003.1-2008, 2016 Edition, 3.436. */
+
+        /* Some libc APIs use UID_INVALID as special placeholder */
+        if (uid == (uid_t) UINT32_C(0xFFFFFFFF))
+                return false;
+
+        /* A long time ago UIDs where 16 bit, hence explicitly avoid the 16-bit -1 too */
+        if (uid == (uid_t) UINT32_C(0xFFFF))
+                return false;
+
+        return true;
+}
+
+int parse_uid(const char *s, uid_t *ret) {
+        uint32_t uid = 0;
+        int r;
+
+        assert(s);
+
+        assert_cc(sizeof(uid_t) == sizeof(uint32_t));
+
+        /* We are very strict when parsing UIDs, and prohibit +/- as prefix, leading zero as prefix, and
+         * whitespace. We do this, since this call is often used in a context where we parse things as UID
+         * first, and if that doesn't work we fall back to NSS. Thus we really want to make sure that UIDs
+         * are parsed as UIDs only if they really really look like UIDs. */
+        r = safe_atou32_full(s, 10
+                             | SAFE_ATO_REFUSE_PLUS_MINUS
+                             | SAFE_ATO_REFUSE_LEADING_ZERO
+                             | SAFE_ATO_REFUSE_LEADING_WHITESPACE, &uid);
+        if (r < 0)
+                return r;
+
+        if (!uid_is_valid(uid))
+                return -ENXIO; /* we return ENXIO instead of EINVAL
+                                * here, to make it easy to distinguish
+                                * invalid numeric uids from invalid
+                                * strings. */
+
+        if (ret)
+                *ret = uid;
+
+        return 0;
+}
+
+#if 0  /* NM_IGNORED */
+int parse_uid_range(const char *s, uid_t *ret_lower, uid_t *ret_upper) {
+        _cleanup_free_ char *word = NULL;
+        uid_t l, u;
+        int r;
+
+        assert(s);
+        assert(ret_lower);
+        assert(ret_upper);
+
+        r = extract_first_word(&s, &word, "-", EXTRACT_DONT_COALESCE_SEPARATORS);
+        if (r < 0)
+                return r;
+        if (r == 0)
+                return -EINVAL;
+
+        r = parse_uid(word, &l);
+        if (r < 0)
+                return r;
+
+        /* Check for the upper bound and extract it if needed */
+        if (!s)
+                /* Single number with no dash. */
+                u = l;
+        else if (!*s)
+                /* Trailing dash is an error. */
+                return -EINVAL;
+        else {
+                r = parse_uid(s, &u);
+                if (r < 0)
+                        return r;
+
+                if (l > u)
+                        return -EINVAL;
+        }
+
+        *ret_lower = l;
+        *ret_upper = u;
+        return 0;
+}
+
+char* getlogname_malloc(void) {
+        uid_t uid;
+        struct stat st;
+
+        if (isatty_safe(STDIN_FILENO) && fstat(STDIN_FILENO, &st) >= 0)
+                uid = st.st_uid;
+        else
+                uid = getuid();
+
+        return uid_to_name(uid);
+}
+
+char* getusername_malloc(void) {
+        const char *e;
+
+        e = secure_getenv("USER");
+        if (e)
+                return strdup(e);
+
+        return uid_to_name(getuid());
+}
+
+bool is_nologin_shell(const char *shell) {
+        return PATH_IN_SET(shell,
+                           /* 'nologin' is the friendliest way to disable logins for a user account. It prints a nice
+                            * message and exits. Different distributions place the binary at different places though,
+                            * hence let's list them all. */
+                           "/bin/nologin",
+                           "/sbin/nologin",
+                           "/usr/bin/nologin",
+                           "/usr/sbin/nologin",
+                           /* 'true' and 'false' work too for the same purpose, but are less friendly as they don't do
+                            * any message printing. Different distributions place the binary at various places but at
+                            * least not in the 'sbin' directory. */
+                           "/bin/false",
+                           "/usr/bin/false",
+                           "/bin/true",
+                           "/usr/bin/true");
+}
+
+const char* default_root_shell_at(int rfd) {
+        /* We want to use the preferred shell, i.e. DEFAULT_USER_SHELL, which usually
+         * will be /bin/bash. Fall back to /bin/sh if DEFAULT_USER_SHELL is not found,
+         * or any access errors. */
+
+        assert(rfd >= 0 || rfd == AT_FDCWD);
+
+        int r = chaseat(rfd, DEFAULT_USER_SHELL, CHASE_AT_RESOLVE_IN_ROOT, NULL, NULL);
+        if (r < 0 && r != -ENOENT)
+                log_debug_errno(r, "Failed to look up shell '%s': %m", DEFAULT_USER_SHELL);
+        if (r > 0)
+                return DEFAULT_USER_SHELL;
+
+        return "/bin/sh";
+}
+
+const char* default_root_shell(const char *root) {
+        _cleanup_close_ int rfd = -EBADF;
+
+        rfd = open(empty_to_root(root), O_CLOEXEC | O_DIRECTORY | O_PATH);
+        if (rfd < 0)
+                return "/bin/sh";
+
+        return default_root_shell_at(rfd);
+}
+
+static int synthesize_user_creds(
+                const char **username,
+                uid_t *ret_uid, gid_t *ret_gid,
+                const char **ret_home,
+                const char **ret_shell,
+                UserCredsFlags flags) {
+
+        assert(username);
+        assert(*username);
+
+        /* We enforce some special rules for uid=0 and uid=65534: in order to avoid NSS lookups for root we hardcode
+         * their user record data. */
+
+        if (STR_IN_SET(*username, "root", "0")) {
+                *username = "root";
+
+                if (ret_uid)
+                        *ret_uid = 0;
+                if (ret_gid)
+                        *ret_gid = 0;
+                if (ret_home)
+                        *ret_home = "/root";
+                if (ret_shell)
+                        *ret_shell = default_root_shell(NULL);
+
+                return 0;
+        }
+
+        if (STR_IN_SET(*username, NOBODY_USER_NAME, "65534") &&
+            synthesize_nobody()) {
+                *username = NOBODY_USER_NAME;
+
+                if (ret_uid)
+                        *ret_uid = UID_NOBODY;
+                if (ret_gid)
+                        *ret_gid = GID_NOBODY;
+                if (ret_home)
+                        *ret_home = FLAGS_SET(flags, USER_CREDS_SUPPRESS_PLACEHOLDER) ? NULL : "/";
+                if (ret_shell)
+                        *ret_shell = FLAGS_SET(flags, USER_CREDS_SUPPRESS_PLACEHOLDER) ? NULL : NOLOGIN;
+
+                return 0;
+        }
+
+        return -ENOMEDIUM;
+}
+
+int get_user_creds(
+                const char **username,
+                uid_t *ret_uid, gid_t *ret_gid,
+                const char **ret_home,
+                const char **ret_shell,
+                UserCredsFlags flags) {
+
+        bool patch_username = false;
+        uid_t u = UID_INVALID;
+        struct passwd *p;
+        int r;
+
+        assert(username);
+        assert(*username);
+        assert((ret_home || ret_shell) || !(flags & (USER_CREDS_SUPPRESS_PLACEHOLDER|USER_CREDS_CLEAN)));
+
+        if (!FLAGS_SET(flags, USER_CREDS_PREFER_NSS) ||
+            (!ret_home && !ret_shell)) {
+
+                /* So here's the deal: normally, we'll try to synthesize all records we can synthesize, and override
+                 * the user database with that. However, if the user specifies USER_CREDS_PREFER_NSS then the
+                 * user database will override the synthetic records instead — except if the user is only interested in
+                 * the UID and/or GID (but not the home directory, or the shell), in which case we'll always override
+                 * the user database (i.e. the USER_CREDS_PREFER_NSS flag has no effect in this case). Why?
+                 * Simply because there are valid usecase where the user might change the home directory or the shell
+                 * of the relevant users, but changing the UID/GID mappings for them is something we explicitly don't
+                 * support. */
+
+                r = synthesize_user_creds(username, ret_uid, ret_gid, ret_home, ret_shell, flags);
+                if (r >= 0)
+                        return 0;
+                if (r != -ENOMEDIUM) /* not a username we can synthesize */
+                        return r;
+        }
+
+        if (parse_uid(*username, &u) >= 0) {
+                errno = 0;
+                p = getpwuid(u);
+
+                /* If there are multiple users with the same id, make sure to leave $USER to the configured value
+                 * instead of the first occurrence in the database. However if the uid was configured by a numeric uid,
+                 * then let's pick the real username from /etc/passwd. */
+                if (p)
+                        patch_username = true;
+                else if (FLAGS_SET(flags, USER_CREDS_ALLOW_MISSING) && !ret_gid && !ret_home && !ret_shell) {
+
+                        /* If the specified user is a numeric UID and it isn't in the user database, and the caller
+                         * passed USER_CREDS_ALLOW_MISSING and was only interested in the UID, then just return that
+                         * and don't complain. */
+
+                        if (ret_uid)
+                                *ret_uid = u;
+
+                        return 0;
+                }
+        } else {
+                errno = 0;
+                p = getpwnam(*username);
+        }
+        if (!p) {
+                /* getpwnam() may fail with ENOENT if /etc/passwd is missing.
+                 * For us that is equivalent to the name not being defined. */
+                r = IN_SET(errno, 0, ENOENT) ? -ESRCH : -errno;
+
+                /* If the user requested that we only synthesize as fallback, do so now */
+                if (FLAGS_SET(flags, USER_CREDS_PREFER_NSS))
+                        if (synthesize_user_creds(username, ret_uid, ret_gid, ret_home, ret_shell, flags) >= 0)
+                                return 0;
+
+                return r;
+        }
+
+        if (ret_uid && !uid_is_valid(p->pw_uid))
+                return -EBADMSG;
+
+        if (ret_gid && !gid_is_valid(p->pw_gid))
+                return -EBADMSG;
+
+        if (ret_uid)
+                *ret_uid = p->pw_uid;
+
+        if (ret_gid)
+                *ret_gid = p->pw_gid;
+
+        if (ret_home)
+                /* Note: we don't insist on normalized paths, since there are setups that have /./ in the path */
+                *ret_home = (FLAGS_SET(flags, USER_CREDS_SUPPRESS_PLACEHOLDER) && empty_or_root(p->pw_dir)) ||
+                            (FLAGS_SET(flags, USER_CREDS_CLEAN) && (!path_is_valid(p->pw_dir) || !path_is_absolute(p->pw_dir)))
+                            ? NULL : p->pw_dir;
+
+        if (ret_shell)
+                *ret_shell = (FLAGS_SET(flags, USER_CREDS_SUPPRESS_PLACEHOLDER) && shell_is_placeholder(p->pw_shell)) ||
+                             (FLAGS_SET(flags, USER_CREDS_CLEAN) && (!path_is_valid(p->pw_shell) || !path_is_absolute(p->pw_shell)))
+                             ? NULL : p->pw_shell;
+
+        if (patch_username)
+                *username = p->pw_name;
+
+        return 0;
+}
+
+static int synthesize_group_creds(
+                const char **groupname,
+                gid_t *ret_gid) {
+
+        assert(groupname);
+        assert(*groupname);
+
+        if (STR_IN_SET(*groupname, "root", "0")) {
+                *groupname = "root";
+
+                if (ret_gid)
+                        *ret_gid = 0;
+
+                return 0;
+        }
+
+        if (STR_IN_SET(*groupname, NOBODY_GROUP_NAME, "65534") &&
+            synthesize_nobody()) {
+                *groupname = NOBODY_GROUP_NAME;
+
+                if (ret_gid)
+                        *ret_gid = GID_NOBODY;
+
+                return 0;
+        }
+
+        return -ENOMEDIUM;
+}
+
+int get_group_creds(const char **groupname, gid_t *ret_gid, UserCredsFlags flags) {
+        bool patch_groupname = false;
+        struct group *g;
+        gid_t id;
+        int r;
+
+        assert(groupname);
+        assert(*groupname);
+
+        if (!FLAGS_SET(flags, USER_CREDS_PREFER_NSS)) {
+                r = synthesize_group_creds(groupname, ret_gid);
+                if (r >= 0)
+                        return 0;
+                if (r != -ENOMEDIUM) /* not a groupname we can synthesize */
+                        return r;
+        }
+
+        if (parse_gid(*groupname, &id) >= 0) {
+                errno = 0;
+                g = getgrgid(id);
+
+                if (g)
+                        patch_groupname = true;
+                else if (FLAGS_SET(flags, USER_CREDS_ALLOW_MISSING)) {
+                        if (ret_gid)
+                                *ret_gid = id;
+
+                        return 0;
+                }
+        } else {
+                errno = 0;
+                g = getgrnam(*groupname);
+        }
+
+        if (!g) {
+                /* getgrnam() may fail with ENOENT if /etc/group is missing.
+                 * For us that is equivalent to the name not being defined. */
+                r = IN_SET(errno, 0, ENOENT) ? -ESRCH : -errno;
+
+                if (FLAGS_SET(flags, USER_CREDS_PREFER_NSS))
+                        if (synthesize_group_creds(groupname, ret_gid) >= 0)
+                                return 0;
+
+                return r;
+        }
+
+        if (ret_gid) {
+                if (!gid_is_valid(g->gr_gid))
+                        return -EBADMSG;
+
+                *ret_gid = g->gr_gid;
+        }
+
+        if (patch_groupname)
+                *groupname = g->gr_name;
+
+        return 0;
+}
+
+char* uid_to_name(uid_t uid) {
+        char *ret;
+        int r;
+
+        /* Shortcut things to avoid NSS lookups */
+        if (uid == 0)
+                return strdup("root");
+        if (uid == UID_NOBODY && synthesize_nobody())
+                return strdup(NOBODY_USER_NAME);
+
+        if (uid_is_valid(uid)) {
+                _cleanup_free_ struct passwd *pw = NULL;
+
+                r = getpwuid_malloc(uid, &pw);
+                if (r >= 0)
+                        return strdup(pw->pw_name);
+        }
+
+        if (asprintf(&ret, UID_FMT, uid) < 0)
+                return NULL;
+
+        return ret;
+}
+
+char* gid_to_name(gid_t gid) {
+        char *ret;
+        int r;
+
+        if (gid == 0)
+                return strdup("root");
+        if (gid == GID_NOBODY && synthesize_nobody())
+                return strdup(NOBODY_GROUP_NAME);
+
+        if (gid_is_valid(gid)) {
+                _cleanup_free_ struct group *gr = NULL;
+
+                r = getgrgid_malloc(gid, &gr);
+                if (r >= 0)
+                        return strdup(gr->gr_name);
+        }
+
+        if (asprintf(&ret, GID_FMT, gid) < 0)
+                return NULL;
+
+        return ret;
+}
+
+static bool gid_list_has(const gid_t *list, size_t size, gid_t val) {
+        assert(list || size == 0);
+
+        FOREACH_ARRAY(i, list, size)
+                if (*i == val)
+                        return true;
+
+        return false;
+}
+
+int in_gid(gid_t gid) {
+        _cleanup_free_ gid_t *gids = NULL;
+        int ngroups;
+
+        if (getgid() == gid)
+                return 1;
+
+        if (getegid() == gid)
+                return 1;
+
+        if (!gid_is_valid(gid))
+                return -EINVAL;
+
+        ngroups = getgroups_alloc(&gids);
+        if (ngroups < 0)
+                return ngroups;
+
+        return gid_list_has(gids, ngroups, gid);
+}
+
+int in_group(const char *name) {
+        int r;
+        gid_t gid;
+
+        r = get_group_creds(&name, &gid, 0);
+        if (r < 0)
+                return r;
+
+        return in_gid(gid);
+}
+
+int merge_gid_lists(const gid_t *list1, size_t size1, const gid_t *list2, size_t size2, gid_t **ret) {
+        size_t nresult = 0;
+        assert(ret);
+
+        if (size2 > INT_MAX - size1)
+                return -ENOBUFS;
+
+        gid_t *buf = new(gid_t, size1 + size2);
+        if (!buf)
+                return -ENOMEM;
+
+        /* Duplicates need to be skipped on merging, otherwise they'll be passed on and stored in the kernel. */
+        for (size_t i = 0; i < size1; i++)
+                if (!gid_list_has(buf, nresult, list1[i]))
+                        buf[nresult++] = list1[i];
+        for (size_t i = 0; i < size2; i++)
+                if (!gid_list_has(buf, nresult, list2[i]))
+                        buf[nresult++] = list2[i];
+        *ret = buf;
+        return (int)nresult;
+}
+
+int getgroups_alloc(gid_t **ret) {
+        int ngroups = 8;
+
+        assert(ret);
+
+        for (unsigned attempt = 0;;) {
+                _cleanup_free_ gid_t *p = NULL;
+
+                p = new(gid_t, ngroups);
+                if (!p)
+                        return -ENOMEM;
+
+                ngroups = getgroups(ngroups, p);
+                if (ngroups > 0) {
+                        *ret = TAKE_PTR(p);
+                        return ngroups;
+                }
+                if (ngroups == 0)
+                        break;
+                if (errno != EINVAL)
+                        return -errno;
+
+                /* Give up eventually */
+                if (attempt++ > 10)
+                        return -EINVAL;
+
+                /* Get actual size needed, and size the array explicitly. Note that this is potentially racy
+                 * to use (in multi-threaded programs), hence let's call this in a loop. */
+                ngroups = getgroups(0, NULL);
+                if (ngroups < 0)
+                        return -errno;
+                if (ngroups == 0)
+                        break;
+        }
+
+        *ret = NULL;
+        return 0;
+}
+
+int get_home_dir(char **ret) {
+        _cleanup_free_ struct passwd *p = NULL;
+        const char *e;
+        uid_t u;
+        int r;
+
+        assert(ret);
+
+        /* Take the user specified one */
+        e = secure_getenv("HOME");
+        if (e && path_is_valid(e) && path_is_absolute(e))
+                goto found;
+
+        /* Hardcode home directory for root and nobody to avoid NSS */
+        u = getuid();
+        if (u == 0) {
+                e = "/root";
+                goto found;
+        }
+        if (u == UID_NOBODY && synthesize_nobody()) {
+                e = "/";
+                goto found;
+        }
+
+        /* Check the database... */
+        r = getpwuid_malloc(u, &p);
+        if (r < 0)
+                return r;
+
+        e = p->pw_dir;
+        if (!path_is_valid(e) || !path_is_absolute(e))
+                return -EINVAL;
+
+ found:
+        return path_simplify_alloc(e, ret);
+}
+
+int get_shell(char **ret) {
+        _cleanup_free_ struct passwd *p = NULL;
+        const char *e;
+        uid_t u;
+        int r;
+
+        assert(ret);
+
+        /* Take the user specified one */
+        e = secure_getenv("SHELL");
+        if (e && path_is_valid(e) && path_is_absolute(e))
+                goto found;
+
+        /* Hardcode shell for root and nobody to avoid NSS */
+        u = getuid();
+        if (u == 0) {
+                e = default_root_shell(NULL);
+                goto found;
+        }
+        if (u == UID_NOBODY && synthesize_nobody()) {
+                e = NOLOGIN;
+                goto found;
+        }
+
+        /* Check the database... */
+        r = getpwuid_malloc(u, &p);
+        if (r < 0)
+                return r;
+
+        e = p->pw_shell;
+        if (!path_is_valid(e) || !path_is_absolute(e))
+                return -EINVAL;
+
+ found:
+        return path_simplify_alloc(e, ret);
+}
+
+int fully_set_uid_gid(uid_t uid, gid_t gid, const gid_t supplementary_gids[], size_t n_supplementary_gids) {
+        int r;
+
+        assert(supplementary_gids || n_supplementary_gids == 0);
+
+        /* Sets all UIDs and all GIDs to the specified ones. Drops all auxiliary GIDs */
+
+        r = maybe_setgroups(n_supplementary_gids, supplementary_gids);
+        if (r < 0)
+                return r;
+
+        if (gid_is_valid(gid))
+                if (setresgid(gid, gid, gid) < 0)
+                        return -errno;
+
+        if (uid_is_valid(uid))
+                if (setresuid(uid, uid, uid) < 0)
+                        return -errno;
+
+        return 0;
+}
+
+int take_etc_passwd_lock(const char *root) {
+        int r;
+
+        /* This is roughly the same as lckpwdf(), but not as awful. We don't want to use alarm() and signals,
+         * hence we implement our own trivial version of this.
+         *
+         * Note that shadow-utils also takes per-database locks in addition to lckpwdf(). However, we don't,
+         * given that they are redundant: they invoke lckpwdf() first and keep it during everything they do.
+         * The per-database locks are awfully racy, and thus we just won't do them. */
+
+        _cleanup_free_ char *path = path_join(root, ETC_PASSWD_LOCK_PATH);
+        if (!path)
+                return log_oom_debug();
+
+        (void) mkdir_parents(path, 0755);
+
+        _cleanup_close_ int fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
+        if (fd < 0)
+                return log_debug_errno(errno, "Cannot open %s: %m", path);
+
+        r = unposix_lock(fd, LOCK_EX);
+        if (r < 0)
+                return log_debug_errno(r, "Locking %s failed: %m", path);
+
+        return TAKE_FD(fd);
+}
+
+bool valid_user_group_name(const char *u, ValidUserFlags flags) {
+        const char *i;
+
+        /* Checks if the specified name is a valid user/group name. There are two flavours of this call:
+         * strict mode is the default which is POSIX plus some extra rules; and relaxed mode where we accept
+         * pretty much everything except the really worst offending names.
+         *
+         * Whenever we synthesize users ourselves we should use the strict mode. But when we process users
+         * created by other stuff, let's be more liberal. */
+
+        if (isempty(u)) /* An empty user name is never valid */
+                return false;
+
+        if (parse_uid(u, NULL) >= 0) /* Something that parses as numeric UID string is valid exactly when the
+                                      * flag for it is set */
+                return FLAGS_SET(flags, VALID_USER_ALLOW_NUMERIC);
+
+        if (FLAGS_SET(flags, VALID_USER_RELAX)) {
+
+                /* In relaxed mode we just check very superficially. Apparently SSSD and other stuff is
+                 * extremely liberal (way too liberal if you ask me, even inserting "@" in user names, which
+                 * is bound to cause problems for example when used with an MTA), hence only filter the most
+                 * obvious cases, or where things would result in an invalid entry if such a user name would
+                 * show up in /etc/passwd (or equivalent getent output).
+                 *
+                 * Note that we stepped far out of POSIX territory here. It's not our fault though, but
+                 * SSSD's, Samba's and everybody else who ignored POSIX on this. (I mean, I am happy to step
+                 * outside of POSIX' bounds any day, but I must say in this case I probably wouldn't
+                 * have...) */
+
+                if (startswith(u, " ") || endswith(u, " ")) /* At least expect whitespace padding is removed
+                                                             * at front and back (accept in the middle, since
+                                                             * that's apparently a thing on Windows). Note
+                                                             * that this also blocks usernames consisting of
+                                                             * whitespace only. */
+                        return false;
+
+                if (!utf8_is_valid(u)) /* We want to synthesize JSON from this, hence insist on UTF-8 */
+                        return false;
+
+                if (string_has_cc(u, NULL)) /* CC characters are just dangerous (and \n in particular is the
+                                             * record separator in /etc/passwd), so we can't allow that. */
+                        return false;
+
+                if (strpbrk(u, ":/")) /* Colons are the field separator in /etc/passwd, we can't allow
+                                       * that. Slashes are special to file systems paths and user names
+                                       * typically show up in the file system as home directories, hence
+                                       * don't allow slashes. */
+                        return false;
+
+                if (in_charset(u, "0123456789")) /* Don't allow fully numeric strings, they might be confused
+                                                  * with UIDs (note that this test is more broad than
+                                                  * the parse_uid() test above, as it will cover more than
+                                                  * the 32-bit range, and it will detect 65535 (which is in
+                                                  * invalid UID, even though in the unsigned 32 bit range) */
+                        return false;
+
+                if (u[0] == '-' && in_charset(u + 1, "0123456789")) /* Don't allow negative fully numeric
+                                                                     * strings either. After all some people
+                                                                     * write 65535 as -1 (even though that's
+                                                                     * not even true on 32-bit uid_t
+                                                                     * anyway) */
+                        return false;
+
+                if (dot_or_dot_dot(u)) /* User names typically become home directory names, and these two are
+                                        * special in that context, don't allow that. */
+                        return false;
+
+                /* Compare with strict result and warn if result doesn't match */
+                if (FLAGS_SET(flags, VALID_USER_WARN) && !valid_user_group_name(u, 0))
+                        log_struct(LOG_NOTICE,
+                                   LOG_MESSAGE("Accepting user/group name '%s', which does not match strict user/group name rules.", u),
+                                   LOG_ITEM("USER_GROUP_NAME=%s", u),
+                                   LOG_MESSAGE_ID(SD_MESSAGE_UNSAFE_USER_NAME_STR));
+
+                /* Note that we make no restrictions on the length in relaxed mode! */
+        } else {
+                long sz;
+                size_t l;
+
+                /* Also see POSIX IEEE Std 1003.1-2008, 2016 Edition, 3.437. We are a bit stricter here
+                 * however. Specifically we deviate from POSIX rules:
+                 *
+                 * - We don't allow empty user names (see above)
+                 * - We require that names fit into the appropriate utmp field
+                 * - We don't allow any dots (this conflicts with chown syntax which permits dots as user/group name separator)
+                 * - We don't allow dashes or digit as the first character
+                 *
+                 * Note that other systems are even more restrictive, and don't permit underscores or uppercase characters.
+                 */
+
+                if (!ascii_isalpha(u[0]) &&
+                    u[0] != '_')
+                        return false;
+
+                for (i = u+1; *i; i++)
+                        if (!ascii_isalpha(*i) &&
+                            !ascii_isdigit(*i) &&
+                            !IN_SET(*i, '_', '-'))
+                                return false;
+
+                l = i - u;
+
+                sz = sysconf(_SC_LOGIN_NAME_MAX);
+                assert_se(sz > 0);
+
+                if (l > (size_t) sz) /* glibc: 256 */
+                        return false;
+                if (l > NAME_MAX) /* must fit in a filename: 255 */
+                        return false;
+                if (l > sizeof_field(struct utmpx, ut_user) - 1) /* must fit in utmp: 31 */
+                        return false;
+        }
+
+        return true;
+}
+
+bool valid_gecos(const char *d) {
+
+        if (!d)
+                return false;
+
+        if (!utf8_is_valid(d))
+                return false;
+
+        if (string_has_cc(d, NULL))
+                return false;
+
+        /* Colons are used as field separators, and hence not OK */
+        if (strchr(d, ':'))
+                return false;
+
+        return true;
+}
+
+char* mangle_gecos(const char *d) {
+        char *mangled;
+
+        /* Makes sure the provided string becomes valid as a GEGOS field, by dropping bad chars. glibc's
+         * putwent() only changes \n and : to spaces. We do more: replace all CC too, and remove invalid
+         * UTF-8 */
+
+        mangled = strdup(d);
+        if (!mangled)
+                return NULL;
+
+        for (char *i = mangled; *i; i++) {
+                int len;
+
+                if ((uint8_t) *i < (uint8_t) ' ' || *i == ':') {
+                        *i = ' ';
+                        continue;
+                }
+
+                len = utf8_encoded_valid_unichar(i, SIZE_MAX);
+                if (len < 0) {
+                        *i = ' ';
+                        continue;
+                }
+
+                i += len - 1;
+        }
+
+        return mangled;
+}
+
+bool valid_home(const char *p) {
+        /* Note that this function is also called by valid_shell(), any
+         * changes must account for that. */
+
+        if (isempty(p))
+                return false;
+
+        if (!utf8_is_valid(p))
+                return false;
+
+        if (string_has_cc(p, NULL))
+                return false;
+
+        if (!path_is_absolute(p))
+                return false;
+
+        if (!path_is_normalized(p))
+                return false;
+
+        /* Colons are used as field separators, and hence not OK */
+        if (strchr(p, ':'))
+                return false;
+
+        return true;
+}
+
+bool valid_shell(const char *p) {
+        /* We have the same requirements, so just piggy-back on the home check.
+         *
+         * Let's ignore /etc/shells because this is only applicable to real and not system users. It is also
+         * incompatible with the idea of empty /etc/. */
+        if (!valid_home(p))
+                return false;
+
+        return !endswith(p, "/"); /* one additional restriction: shells may not be dirs */
+}
+
+int maybe_setgroups(size_t size, const gid_t *list) {
+        int r;
+
+        /* Check if setgroups is allowed before we try to drop all the auxiliary groups */
+        if (size == 0) { /* Dropping all aux groups? */
+                _cleanup_free_ char *setgroups_content = NULL;
+                bool can_setgroups;
+
+                r = read_one_line_file("/proc/self/setgroups", &setgroups_content);
+                if (r == -ENOENT)
+                        /* Old kernels don't have /proc/self/setgroups, so assume we can use setgroups */
+                        can_setgroups = true;
+                else if (r < 0)
+                        return r;
+                else
+                        can_setgroups = streq(setgroups_content, "allow");
+
+                if (!can_setgroups) {
+                        log_debug("Skipping setgroups(), /proc/self/setgroups is set to 'deny'");
+                        return 0;
+                }
+        }
+
+        return RET_NERRNO(setgroups(size, list));
+}
+
+bool synthesize_nobody(void) {
+        /* Returns true when we shall synthesize the "nobody" user (which we do by default). This can be turned off by
+         * touching /etc/systemd/dont-synthesize-nobody in order to provide upgrade compatibility with legacy systems
+         * that used the "nobody" user name and group name for other UIDs/GIDs than 65534.
+         *
+         * Note that we do not employ any kind of synchronization on the following caching variable. If the variable is
+         * accessed in multi-threaded programs in the worst case it might happen that we initialize twice, but that
+         * shouldn't matter as each initialization should come to the same result. */
+        static int cache = -1;
+
+        if (cache < 0)
+                cache = access("/etc/systemd/dont-synthesize-nobody", F_OK) < 0;
+
+        return cache;
+}
+
+int putpwent_sane(const struct passwd *pw, FILE *stream) {
+        assert(pw);
+        assert(stream);
+
+        errno = 0;
+        if (putpwent(pw, stream) != 0)
+                return errno_or_else(EIO);
+
+        return 0;
+}
+
+int putspent_sane(const struct spwd *sp, FILE *stream) {
+        assert(sp);
+        assert(stream);
+
+        errno = 0;
+        if (putspent(sp, stream) != 0)
+                return errno_or_else(EIO);
+
+        return 0;
+}
+
+int putgrent_sane(const struct group *gr, FILE *stream) {
+        assert(gr);
+        assert(stream);
+
+        errno = 0;
+        if (putgrent(gr, stream) != 0)
+                return errno_or_else(EIO);
+
+        return 0;
+}
+
+#if ENABLE_GSHADOW
+int putsgent_sane(const struct sgrp *sg, FILE *stream) {
+        assert(sg);
+        assert(stream);
+
+        errno = 0;
+        if (putsgent(sg, stream) != 0)
+                return errno_or_else(EIO);
+
+        return 0;
+}
+#endif
+
+int fgetpwent_sane(FILE *stream, struct passwd **pw) {
+        assert(stream);
+        assert(pw);
+
+        errno = 0;
+        struct passwd *p = fgetpwent(stream);
+        if (!p && !IN_SET(errno, 0, ENOENT))
+                return -errno;
+
+        *pw = p;
+        return !!p;
+}
+
+int fgetspent_sane(FILE *stream, struct spwd **sp) {
+        assert(stream);
+        assert(sp);
+
+        errno = 0;
+        struct spwd *s = fgetspent(stream);
+        if (!s && !IN_SET(errno, 0, ENOENT))
+                return -errno;
+
+        *sp = s;
+        return !!s;
+}
+
+int fgetgrent_sane(FILE *stream, struct group **gr) {
+        assert(stream);
+        assert(gr);
+
+        errno = 0;
+        struct group *g = fgetgrent(stream);
+        if (!g && !IN_SET(errno, 0, ENOENT))
+                return -errno;
+
+        *gr = g;
+        return !!g;
+}
+
+#if ENABLE_GSHADOW
+int fgetsgent_sane(FILE *stream, struct sgrp **sg) {
+        assert(stream);
+        assert(sg);
+
+        errno = 0;
+        struct sgrp *s = fgetsgent(stream);
+        if (!s && !IN_SET(errno, 0, ENOENT))
+                return -errno;
+
+        *sg = s;
+        return !!s;
+}
+#endif
+
+int is_this_me(const char *username) {
+        uid_t uid;
+        int r;
+
+        /* Checks if the specified username is our current one. Passed string might be a UID or a user name. */
+
+        r = get_user_creds(&username, &uid, NULL, NULL, NULL, USER_CREDS_ALLOW_MISSING);
+        if (r < 0)
+                return r;
+
+        return uid == getuid();
+}
+
+const char* get_home_root(void) {
+        const char *e;
+
+        /* For debug purposes allow overriding where we look for home dirs */
+        e = secure_getenv("SYSTEMD_HOME_ROOT");
+        if (e && path_is_absolute(e) && path_is_normalized(e))
+                return e;
+
+        return "/home";
+}
+
+static size_t getpw_buffer_size(void) {
+        long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+        return bufsize <= 0 ? 4096U : (size_t) bufsize;
+}
+
+static bool errno_is_user_doesnt_exist(int error) {
+        /* See getpwnam(3) and getgrnam(3): those codes and others can be returned if the user or group are
+         * not found. */
+        return IN_SET(abs(error), ENOENT, ESRCH, EBADF, EPERM);
+}
+
+int getpwnam_malloc(const char *name, struct passwd **ret) {
+        size_t bufsize = getpw_buffer_size();
+        int r;
+
+        /* A wrapper around getpwnam_r() that allocates the necessary buffer on the heap. The caller must
+         * free() the returned structures! */
+
+        if (isempty(name))
+                return -EINVAL;
+
+        for (;;) {
+                _cleanup_free_ void *buf = NULL;
+
+                buf = malloc(ALIGN(sizeof(struct passwd)) + bufsize);
+                if (!buf)
+                        return -ENOMEM;
+
+                struct passwd *pw = NULL;
+                r = getpwnam_r(name, buf, (char*) buf + ALIGN(sizeof(struct passwd)), (size_t) bufsize, &pw);
+                if (r == 0) {
+                        if (pw) {
+                                if (ret)
+                                        *ret = TAKE_PTR(buf);
+                                return 0;
+                        }
+
+                        return -ESRCH;
+                }
+
+                assert(r > 0);
+
+                /* getpwnam() may fail with ENOENT if /etc/passwd is missing.  For us that is equivalent to
+                 * the name not being defined. */
+                if (errno_is_user_doesnt_exist(r))
+                        return -ESRCH;
+                if (r != ERANGE)
+                        return -r;
+
+                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct passwd)))
+                        return -ENOMEM;
+                bufsize *= 2;
+        }
+}
+
+int getpwuid_malloc(uid_t uid, struct passwd **ret) {
+        size_t bufsize = getpw_buffer_size();
+        int r;
+
+        if (!uid_is_valid(uid))
+                return -EINVAL;
+
+        for (;;) {
+                _cleanup_free_ void *buf = NULL;
+
+                buf = malloc(ALIGN(sizeof(struct passwd)) + bufsize);
+                if (!buf)
+                        return -ENOMEM;
+
+                struct passwd *pw = NULL;
+                r = getpwuid_r(uid, buf, (char*) buf + ALIGN(sizeof(struct passwd)), (size_t) bufsize, &pw);
+                if (r == 0) {
+                        if (pw) {
+                                if (ret)
+                                        *ret = TAKE_PTR(buf);
+                                return 0;
+                        }
+
+                        return -ESRCH;
+                }
+
+                assert(r > 0);
+
+                if (errno_is_user_doesnt_exist(r))
+                        return -ESRCH;
+                if (r != ERANGE)
+                        return -r;
+
+                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct passwd)))
+                        return -ENOMEM;
+                bufsize *= 2;
+        }
+}
+
+static size_t getgr_buffer_size(void) {
+        long bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
+        return bufsize <= 0 ? 4096U : (size_t) bufsize;
+}
+
+int getgrnam_malloc(const char *name, struct group **ret) {
+        size_t bufsize = getgr_buffer_size();
+        int r;
+
+        if (isempty(name))
+                return -EINVAL;
+
+        for (;;) {
+                _cleanup_free_ void *buf = NULL;
+
+                buf = malloc(ALIGN(sizeof(struct group)) + bufsize);
+                if (!buf)
+                        return -ENOMEM;
+
+                struct group *gr = NULL;
+                r = getgrnam_r(name, buf, (char*) buf + ALIGN(sizeof(struct group)), (size_t) bufsize, &gr);
+                if (r == 0) {
+                        if (gr) {
+                                if (ret)
+                                        *ret = TAKE_PTR(buf);
+                                return 0;
+                        }
+
+                        return -ESRCH;
+                }
+
+                assert(r > 0);
+
+                if (errno_is_user_doesnt_exist(r))
+                        return -ESRCH;
+                if (r != ERANGE)
+                        return -r;
+
+                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct group)))
+                        return -ENOMEM;
+                bufsize *= 2;
+        }
+}
+
+int getgrgid_malloc(gid_t gid, struct group **ret) {
+        size_t bufsize = getgr_buffer_size();
+        int r;
+
+        if (!gid_is_valid(gid))
+                return -EINVAL;
+
+        for (;;) {
+                _cleanup_free_ void *buf = NULL;
+
+                buf = malloc(ALIGN(sizeof(struct group)) + bufsize);
+                if (!buf)
+                        return -ENOMEM;
+
+                struct group *gr = NULL;
+                r = getgrgid_r(gid, buf, (char*) buf + ALIGN(sizeof(struct group)), (size_t) bufsize, &gr);
+                if (r == 0) {
+                        if (gr) {
+                                if (ret)
+                                        *ret = TAKE_PTR(buf);
+                                return 0;
+                        }
+
+                        return -ESRCH;
+                }
+
+                assert(r > 0);
+
+                if (errno_is_user_doesnt_exist(r))
+                        return -ESRCH;
+                if (r != ERANGE)
+                        return -r;
+
+                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct group)))
+                        return -ENOMEM;
+                bufsize *= 2;
+        }
+}
+#endif  /* NM_IGNORED */
\ No newline at end of file
diff --git a/src/libnm-systemd-shared/src/basic/utf8.c b/src/libnm-systemd-shared/src/basic/utf8.c
index 33fdd96e..74d60f56 100644
--- a/src/libnm-systemd-shared/src/basic/utf8.c
+++ b/src/libnm-systemd-shared/src/basic/utf8.c
@@ -616,4 +616,29 @@ size_t utf8_console_width(const char *str) {
 
         return n;
 }
+
+size_t utf8_last_length(const char *s, size_t n) {
+        int r;
+
+        assert(s);
+
+        if (n == SIZE_MAX)
+                n = strlen(s);
+
+        /* Determines length in bytes of last UTF-8 codepoint in string. If the string is empty, returns
+         * zero. Treats invalid UTF-8 codepoints as 1 sized ones. */
+
+        for (size_t last = 0;;) {
+                if (n == 0)
+                        return last;
+
+                r = utf8_encoded_valid_unichar(s, n);
+                if (r <= 0)
+                        r = 1; /* treat invalid UTF-8 as byte-wide */
+
+                s += r;
+                n -= r;
+                last = r;
+        }
+}
 #endif /* NM_IGNORED */
diff --git a/src/libnm-systemd-shared/src/basic/utf8.h b/src/libnm-systemd-shared/src/basic/utf8.h
index 221bc46a..3b1a468c 100644
--- a/src/libnm-systemd-shared/src/basic/utf8.h
+++ b/src/libnm-systemd-shared/src/basic/utf8.h
@@ -7,7 +7,6 @@
 #include <uchar.h>
 
 #include "macro.h"
-#include "missing_type.h"
 
 #define UTF8_REPLACEMENT_CHARACTER "\xef\xbf\xbd"
 #define UTF8_BYTE_ORDER_MARK "\xef\xbb\xbf"
@@ -62,3 +61,5 @@ static inline char32_t utf16_surrogate_pair_to_unichar(char16_t lead, char16_t t
 size_t utf8_n_codepoints(const char *str);
 int utf8_char_console_width(const char *str);
 size_t utf8_console_width(const char *str);
+
+size_t utf8_last_length(const char *s, size_t n);
diff --git a/src/libnm-systemd-shared/src/fundamental/assert-fundamental.h b/src/libnm-systemd-shared/src/fundamental/assert-fundamental.h
new file mode 100644
index 00000000..e207958b
--- /dev/null
+++ b/src/libnm-systemd-shared/src/fundamental/assert-fundamental.h
@@ -0,0 +1,141 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#if !SD_BOOT
+#  include <assert.h>
+#endif
+
+#include "macro-fundamental.h"
+#include "log.h"
+
+#if SD_BOOT
+        _noreturn_ void efi_assert(const char *expr, const char *file, unsigned line, const char *function);
+
+        #ifdef NDEBUG
+                #define assert(expr) ({ if (!(expr)) __builtin_unreachable(); })
+                #define assert_not_reached() __builtin_unreachable()
+        #else
+                #define assert(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __func__); })
+                #define assert_not_reached() efi_assert("Code should not be reached", __FILE__, __LINE__, __func__)
+        #endif
+        #define assert_se(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __func__); })
+#else
+
+#if 0 /* NM_IGNORED */
+_noreturn_ void log_assert_failed(const char *text, const char *file, int line, const char *func);
+#else /* NM_IGNORED */
+#define log_assert_failed(text, file, line, func)                                \
+    G_STMT_START                                                                 \
+    {                                                                            \
+        log_internal(LOG_CRIT,                                                   \
+                     0,                                                          \
+                     file,                                                       \
+                     line,                                                       \
+                     func,                                                       \
+                     "Assertion '%s' failed at %s:%u, function %s(). Aborting.", \
+                     text,                                                       \
+                     file,                                                       \
+                     line,                                                       \
+                     func);                                                      \
+        g_assert_not_reached();                                                  \
+    }                                                                            \
+    G_STMT_END
+#endif /* NM_IGNORED */
+
+#if 0 /* NM_IGNORED */
+_noreturn_ void log_assert_failed_unreachable(const char *file, int line, const char *func);
+#else /* NM_IGNORED */
+#define log_assert_failed_unreachable(file, line, func)                               \
+    G_STMT_START                                                                      \
+    {                                                                                 \
+        log_internal(LOG_CRIT,                                                        \
+                     0,                                                               \
+                     file,                                                            \
+                     line,                                                            \
+                     func,                                                            \
+                     "Code should not be reached at %s:%u, function %s(). Aborting.", \
+                     file,                                                            \
+                     line,                                                            \
+                     func);                                                           \
+        g_assert_not_reached();                                                       \
+    }                                                                                 \
+    G_STMT_END
+#endif /* NM_IGNORED */
+
+#ifdef __COVERITY__
+
+/* Use special definitions of assertion macros in order to prevent
+ * false positives of ASSERT_SIDE_EFFECT on Coverity static analyzer
+ * for uses of assert_se() and assert_return().
+ *
+ * These definitions make expression go through a (trivial) function
+ * call to ensure they are not discarded. Also use ! or !! to ensure
+ * the boolean expressions are seen as such.
+ *
+ * This technique has been described and recommended in:
+ * https://community.synopsys.com/s/question/0D534000046Yuzb/suppressing-assertsideeffect-for-functions-that-allow-for-sideeffects
+ */
+
+extern void __coverity_panic__(void);
+
+static inline void __coverity_check__(int condition) {
+        if (!condition)
+                __coverity_panic__();
+}
+
+static inline int __coverity_check_and_return__(int condition) {
+        return condition;
+}
+
+#define assert_message_se(expr, message) __coverity_check__(!!(expr))
+
+#define assert_log(expr, message) __coverity_check_and_return__(!!(expr))
+
+#else  /* ! __COVERITY__ */
+
+#define assert_message_se(expr, message)                                \
+        do {                                                            \
+                if (_unlikely_(!(expr)))                                \
+                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
+        } while (false)
+
+#endif  /* __COVERITY__ */
+
+#define assert_se(expr) assert_message_se(expr, #expr)
+
+/* We override the glibc assert() here. */
+#undef assert
+#ifdef NDEBUG
+#define assert(expr) ({ if (!(expr)) __builtin_unreachable(); })
+#else
+#define assert(expr) assert_message_se(expr, #expr)
+#endif
+
+#define assert_not_reached()                                            \
+        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
+
+#endif
+
+/* This passes the argument through after (if asserts are enabled) checking that it is not null. */
+#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
+#define ASSERT_SE_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert_se)
+#define _ASSERT_PTR(expr, var, check)      \
+        ({                                 \
+                typeof(expr) var = (expr); \
+                check(var);                \
+                var;                       \
+        })
+
+#define ASSERT_NONNEG(expr)                              \
+        ({                                               \
+                typeof(expr) _expr_ = (expr), _zero = 0; \
+                assert(_expr_ >= _zero);                 \
+                _expr_;                                  \
+        })
+
+#define ASSERT_SE_NONNEG(expr)                           \
+        ({                                               \
+                typeof(expr) _expr_ = (expr), _zero = 0; \
+                assert_se(_expr_ >= _zero);              \
+                _expr_;                                  \
+        })
diff --git a/src/libnm-systemd-shared/src/fundamental/iovec-util-fundamental.h b/src/libnm-systemd-shared/src/fundamental/iovec-util-fundamental.h
index 68d5bf4e..4c86197e 100644
--- a/src/libnm-systemd-shared/src/fundamental/iovec-util-fundamental.h
+++ b/src/libnm-systemd-shared/src/fundamental/iovec-util-fundamental.h
@@ -1,6 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#if !SD_BOOT
+#include <stdlib.h>
+#include <sys/uio.h>
+#endif
+
+#include "assert-fundamental.h"
+#include "macro-fundamental.h"
+
 #if SD_BOOT
 /* struct iovec is a POSIX userspace construct. Let's introduce it also in EFI mode, it's just so useful */
 struct iovec {
@@ -8,7 +16,9 @@ struct iovec {
         size_t iov_len;
 };
 
-static inline void free(void *p);
+DISABLE_WARNING_REDUNDANT_DECLS;
+void free(void *p);
+REENABLE_WARNING;
 #endif
 
 /* This accepts both const and non-const pointers */
diff --git a/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h b/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h
index 418ea55f..abdfb9b6 100644
--- a/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h
+++ b/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h
@@ -1,16 +1,19 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#if !SD_BOOT
-#  include <assert.h>
-#endif
-
 #include <limits.h>
 #include <stdalign.h>
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
 
+/* This header unconditionally defines MAX() so include it here already so
+ * it won't override our own definition of MAX() that we define later in this
+ * file. */
+#if !SD_BOOT
+#include <sys/param.h>
+#endif
+
 /* Temporarily disable some warnings */
 #define DISABLE_WARNING_DEPRECATED_DECLARATIONS                         \
         _Pragma("GCC diagnostic push");                                 \
@@ -53,6 +56,9 @@
         _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
 
 #if 0 /* NM_IGNORED */
+#define DISABLE_WARNING_REDUNDANT_DECLS                                 \
+        _Pragma("GCC diagnostic push");                                 \
+        _Pragma("GCC diagnostic ignored \"-Wredundant-decls\"")
 
 #if HAVE_WARNING_ZERO_LENGTH_BOUNDS
 #  define DISABLE_WARNING_ZERO_LENGTH_BOUNDS                            \
@@ -123,9 +129,19 @@
 #  define _fallthrough_ __attribute__((__fallthrough__))
 #endif
 
+#if __GNUC__ >= 15
+#  define _nonnull_if_nonzero_(p, n) __attribute__((nonnull_if_nonzero(p, n)))
+#else
+#  define _nonnull_if_nonzero_(p, n)
+#endif
+
 #define XSTRINGIFY(x) #x
 #define STRINGIFY(x) XSTRINGIFY(x)
 
+/* C23 changed char8_t from char to unsigned char, hence we cannot pass u8 literals to e.g. fputs() without
+ * casting. Let's introduce our own way to declare UTF-8 literals, which casts u8 literals to const char*. */
+#define UTF8(s) ((const char*) (u8"" s))
+
 #ifndef __COVERITY__
 #  define VOID_0 ((void)0)
 #else
@@ -141,45 +157,7 @@
 #define XCONCATENATE(x, y) x ## y
 #define CONCATENATE(x, y) XCONCATENATE(x, y)
 
-#if SD_BOOT
-        _noreturn_ void efi_assert(const char *expr, const char *file, unsigned line, const char *function);
-
-        #ifdef NDEBUG
-                #define assert(expr) ({ if (!(expr)) __builtin_unreachable(); })
-                #define assert_not_reached() __builtin_unreachable()
-        #else
-                #define assert(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __func__); })
-                #define assert_not_reached() efi_assert("Code should not be reached", __FILE__, __LINE__, __func__)
-        #endif
-        #define static_assert _Static_assert
-        #define assert_se(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __func__); })
-#endif
-
-/* This passes the argument through after (if asserts are enabled) checking that it is not null. */
-#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
-#define ASSERT_SE_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert_se)
-#define _ASSERT_PTR(expr, var, check)      \
-        ({                                 \
-                typeof(expr) var = (expr); \
-                check(var);                \
-                var;                       \
-        })
-
-#define ASSERT_NONNEG(expr)                              \
-        ({                                               \
-                typeof(expr) _expr_ = (expr), _zero = 0; \
-                assert(_expr_ >= _zero);                 \
-                _expr_;                                  \
-        })
-
-#define ASSERT_SE_NONNEG(expr)                           \
-        ({                                               \
-                typeof(expr) _expr_ = (expr), _zero = 0; \
-                assert_se(_expr_ >= _zero);              \
-                _expr_;                                  \
-        })
-
-#define assert_cc(expr) static_assert(expr, #expr)
+#define assert_cc(expr) _Static_assert(expr, #expr)
 
 #define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
 #define UNIQ __COUNTER__
@@ -434,7 +412,7 @@
                         _found = true;                                  \
                         break;                                          \
                 default:                                                \
-                        break;                                          \
+                        ;                                               \
                 }                                                       \
                 _found;                                                 \
         })
@@ -467,82 +445,6 @@
                 (typeof(memory)) NULL;          \
         })
 
-static inline size_t ALIGN_TO(size_t l, size_t ali) {
-        assert(ISPOWEROF2(ali));
-
-        if (l > SIZE_MAX - (ali - 1))
-                return SIZE_MAX; /* indicate overflow */
-
-        return ((l + (ali - 1)) & ~(ali - 1));
-}
-
-static inline uint64_t ALIGN_TO_U64(uint64_t l, uint64_t ali) {
-        assert(ISPOWEROF2(ali));
-
-        if (l > UINT64_MAX - (ali - 1))
-                return UINT64_MAX; /* indicate overflow */
-
-        return ((l + (ali - 1)) & ~(ali - 1));
-}
-
-static inline size_t ALIGN_DOWN(size_t l, size_t ali) {
-        assert(ISPOWEROF2(ali));
-
-        return l & ~(ali - 1);
-}
-
-static inline uint64_t ALIGN_DOWN_U64(uint64_t l, uint64_t ali) {
-        assert(ISPOWEROF2(ali));
-
-        return l & ~(ali - 1);
-}
-
-static inline size_t ALIGN_OFFSET(size_t l, size_t ali) {
-        assert(ISPOWEROF2(ali));
-
-        return l & (ali - 1);
-}
-
-static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) {
-        assert(ISPOWEROF2(ali));
-
-        return l & (ali - 1);
-}
-
-#define ALIGN2(l) ALIGN_TO(l, 2)
-#define ALIGN4(l) ALIGN_TO(l, 4)
-#define ALIGN8(l) ALIGN_TO(l, 8)
-#define ALIGN2_PTR(p) ((void*) ALIGN2((uintptr_t) p))
-#define ALIGN4_PTR(p) ((void*) ALIGN4((uintptr_t) p))
-#define ALIGN8_PTR(p) ((void*) ALIGN8((uintptr_t) p))
-#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
-#define ALIGN_PTR(p) ((void*) ALIGN((uintptr_t) (p)))
-
-/* Checks if the specified pointer is aligned as appropriate for the specific type */
-#define IS_ALIGNED16(p) (((uintptr_t) p) % alignof(uint16_t) == 0)
-#define IS_ALIGNED32(p) (((uintptr_t) p) % alignof(uint32_t) == 0)
-#define IS_ALIGNED64(p) (((uintptr_t) p) % alignof(uint64_t) == 0)
-
-/* Same as ALIGN_TO but callable in constant contexts. */
-#define CONST_ALIGN_TO(l, ali)                                         \
-        __builtin_choose_expr(                                         \
-                __builtin_constant_p(l) &&                             \
-                __builtin_constant_p(ali) &&                           \
-                CONST_ISPOWEROF2(ali) &&                               \
-                (l <= SIZE_MAX - (ali - 1)),      /* overflow? */      \
-                ((l) + (ali) - 1) & ~((ali) - 1),                      \
-                VOID_0)
-
-/* Similar to ((t *) (void *) (p)) to cast a pointer. The macro asserts that the pointer has a suitable
- * alignment for type "t". This exists for places where otherwise "-Wcast-align=strict" would issue a
- * warning or if you want to assert that the cast gives a pointer of suitable alignment. */
-#define CAST_ALIGN_PTR(t, p)                                    \
-        ({                                                      \
-                const void *_p = (p);                           \
-                assert(((uintptr_t) _p) % alignof(t) == 0); \
-                (t *) _p;                                       \
-        })
-
 #define UPDATE_FLAG(orig, flag, b)                      \
         ((b) ? ((orig) | (flag)) : ((orig) & ~(flag)))
 #define SET_FLAG(v, flag, b) \
@@ -550,41 +452,11 @@ static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) {
 #define FLAGS_SET(v, flags) \
         ((~(v) & (flags)) == 0)
 
-/* A wrapper for 'func' to return void.
- * Only useful when a void-returning function is required by some API. */
-#define DEFINE_TRIVIAL_DESTRUCTOR(name, type, func)             \
-        static inline void name(type *p) {                      \
-                func(p);                                        \
-        }
-
-/* When func() returns the void value (NULL, -1, …) of the appropriate type */
-#define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func)                 \
-        static inline void func##p(type *p) {                   \
-                if (*p)                                         \
-                        *p = func(*p);                          \
-        }
-
-/* When func() doesn't return the appropriate type, set variable to empty afterwards.
- * The func() may be provided by a dynamically loaded shared library, hence add an assertion. */
-#define DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(type, func, empty)     \
-        static inline void func##p(type *p) {                   \
-                if (*p != (empty)) {                            \
-                        DISABLE_WARNING_ADDRESS;                \
-                        assert(func);                           \
-                        REENABLE_WARNING;                       \
-                        func(*p);                               \
-                        *p = (empty);                           \
-                }                                               \
-        }
+typedef struct {
+        int _empty[0];
+} dummy_t;
 
-/* When func() doesn't return the appropriate type, and is also a macro, set variable to empty afterwards. */
-#define DEFINE_TRIVIAL_CLEANUP_FUNC_FULL_MACRO(type, func, empty)       \
-        static inline void func##p(type *p) {                           \
-                if (*p != (empty)) {                                    \
-                        func(*p);                                       \
-                        *p = (empty);                                   \
-                }                                                       \
-        }
+assert_cc(sizeof(dummy_t) == 0);
 
 /* Restriction/bug (see below) was fixed in GCC 15 and clang 19. */
 #if __GNUC__ >= 15 || (defined(__clang__) && __clang_major__ >= 19)
@@ -633,3 +505,10 @@ static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) {
 
 #define PTR_TO_SIZE(p) ((size_t) ((uintptr_t) (p)))
 #define SIZE_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+
+#if 0 /* NM_IGNORED */
+assert_cc(STRLEN(__FILE__) > STRLEN(RELATIVE_SOURCE_PATH) + 1);
+#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
+#else /* NM_IGNORED */
+#define PROJECT_FILE __FILE__
+#endif /* NM_IGNORED */
\ No newline at end of file
diff --git a/src/libnm-systemd-shared/src/fundamental/memory-util-fundamental.h b/src/libnm-systemd-shared/src/fundamental/memory-util-fundamental.h
index 6870f54f..4b50714f 100644
--- a/src/libnm-systemd-shared/src/fundamental/memory-util-fundamental.h
+++ b/src/libnm-systemd-shared/src/fundamental/memory-util-fundamental.h
@@ -9,6 +9,7 @@
 #  include <string.h>
 #endif
 
+#include "assert-fundamental.h"
 #include "macro-fundamental.h"
 
 #define memzero(x, l)                                           \
@@ -17,7 +18,7 @@
                 _l_ > 0 ? memset((x), 0, _l_) : (x);            \
         })
 
-#if !SD_BOOT && HAVE_EXPLICIT_BZERO
+#if !SD_BOOT
 static inline void *explicit_bzero_safe(void *p, size_t l) {
         if (p && l > 0)
                 explicit_bzero(p, l);
@@ -106,3 +107,115 @@ static inline void array_cleanup(const ArrayCleanup *c) {
                                 _f;                                     \
                         }),                                             \
         }
+
+/* A wrapper for 'func' to return void.
+ * Only useful when a void-returning function is required by some API. */
+#define DEFINE_TRIVIAL_DESTRUCTOR(name, type, func)             \
+        static inline void name(type *p) {                      \
+                func(p);                                        \
+        }
+
+/* When func() returns the void value (NULL, -1, …) of the appropriate type */
+#define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func)                 \
+        static inline void func##p(type *p) {                   \
+                if (*p)                                         \
+                        *p = func(*p);                          \
+        }
+
+/* When func() doesn't return the appropriate type, set variable to empty afterwards.
+ * The func() may be provided by a dynamically loaded shared library, hence add an assertion. */
+#define DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(type, func, empty)     \
+        static inline void func##p(type *p) {                   \
+                if (*p != (empty)) {                            \
+                        DISABLE_WARNING_ADDRESS;                \
+                        assert(func);                           \
+                        REENABLE_WARNING;                       \
+                        func(*p);                               \
+                        *p = (empty);                           \
+                }                                               \
+        }
+
+/* When func() doesn't return the appropriate type, and is also a macro, set variable to empty afterwards. */
+#define DEFINE_TRIVIAL_CLEANUP_FUNC_FULL_MACRO(type, func, empty)       \
+        static inline void func##p(type *p) {                           \
+                if (*p != (empty)) {                                    \
+                        func(*p);                                       \
+                        *p = (empty);                                   \
+                }                                                       \
+        }
+
+static inline size_t ALIGN_TO(size_t l, size_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        if (l > SIZE_MAX - (ali - 1))
+                return SIZE_MAX; /* indicate overflow */
+
+        return ((l + (ali - 1)) & ~(ali - 1));
+}
+
+static inline uint64_t ALIGN_TO_U64(uint64_t l, uint64_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        if (l > UINT64_MAX - (ali - 1))
+                return UINT64_MAX; /* indicate overflow */
+
+        return ((l + (ali - 1)) & ~(ali - 1));
+}
+
+static inline size_t ALIGN_DOWN(size_t l, size_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        return l & ~(ali - 1);
+}
+
+static inline uint64_t ALIGN_DOWN_U64(uint64_t l, uint64_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        return l & ~(ali - 1);
+}
+
+static inline size_t ALIGN_OFFSET(size_t l, size_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        return l & (ali - 1);
+}
+
+static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) {
+        assert(ISPOWEROF2(ali));
+
+        return l & (ali - 1);
+}
+
+#define ALIGN2(l) ALIGN_TO(l, 2)
+#define ALIGN4(l) ALIGN_TO(l, 4)
+#define ALIGN8(l) ALIGN_TO(l, 8)
+#define ALIGN2_PTR(p) ((void*) ALIGN2((uintptr_t) p))
+#define ALIGN4_PTR(p) ((void*) ALIGN4((uintptr_t) p))
+#define ALIGN8_PTR(p) ((void*) ALIGN8((uintptr_t) p))
+#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
+#define ALIGN_PTR(p) ((void*) ALIGN((uintptr_t) (p)))
+
+/* Checks if the specified pointer is aligned as appropriate for the specific type */
+#define IS_ALIGNED16(p) (((uintptr_t) p) % alignof(uint16_t) == 0)
+#define IS_ALIGNED32(p) (((uintptr_t) p) % alignof(uint32_t) == 0)
+#define IS_ALIGNED64(p) (((uintptr_t) p) % alignof(uint64_t) == 0)
+
+/* Same as ALIGN_TO but callable in constant contexts. */
+#define CONST_ALIGN_TO(l, ali)                                         \
+        __builtin_choose_expr(                                         \
+                __builtin_constant_p(l) &&                             \
+                __builtin_constant_p(ali) &&                           \
+                CONST_ISPOWEROF2(ali) &&                               \
+                (l <= SIZE_MAX - (ali - 1)),      /* overflow? */      \
+                ((l) + (ali) - 1) & ~((ali) - 1),                      \
+                VOID_0)
+
+/* Similar to ((t *) (void *) (p)) to cast a pointer. The macro asserts that the pointer has a suitable
+ * alignment for type "t". This exists for places where otherwise "-Wcast-align=strict" would issue a
+ * warning or if you want to assert that the cast gives a pointer of suitable alignment. */
+#define CAST_ALIGN_PTR(t, p)                                    \
+        ({                                                      \
+                const void *_p = (p);                           \
+                assert(((uintptr_t) _p) % alignof(t) == 0); \
+                (t *) _p;                                       \
+        })
diff --git a/src/libnm-systemd-shared/src/fundamental/sha256-fundamental.c b/src/libnm-systemd-shared/src/fundamental/sha256-fundamental.c
index 6682bc87..8e842535 100644
--- a/src/libnm-systemd-shared/src/fundamental/sha256-fundamental.c
+++ b/src/libnm-systemd-shared/src/fundamental/sha256-fundamental.c
@@ -23,6 +23,13 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#if SD_BOOT
+#  include "efi-string.h"
+#else
+#  include <string.h>
+#endif
+
+#include "assert-fundamental.h"
 #include "macro-fundamental.h"
 #include "memory-util-fundamental.h"
 #include "sha256-fundamental.h"
diff --git a/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.c b/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.c
index da810cb7..0a62dbb2 100644
--- a/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.c
+++ b/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.c
@@ -85,7 +85,7 @@ static bool is_valid_version_char(sd_char a) {
 int strverscmp_improved(const sd_char *a, const sd_char *b) {
         /* This function is similar to strverscmp(3), but it treats '-' and '.' as separators.
          *
-         * The logic is based on rpm's rpmvercmp(), but unlike rpmvercmp(), it distiguishes e.g.
+         * The logic is based on rpm's rpmvercmp(), but unlike rpmvercmp(), it distinguishes e.g.
          * '123a' and '123.a', with '123a' being newer.
          *
          * It allows direct comparison of strings which contain both a version and a release; e.g.
diff --git a/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.h b/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.h
index 419f1cc3..a9638b4d 100644
--- a/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.h
+++ b/src/libnm-systemd-shared/src/fundamental/string-util-fundamental.h
@@ -8,6 +8,7 @@
 #  include <string.h>
 #endif
 
+#include "assert-fundamental.h"
 #include "macro-fundamental.h"
 
 #if SD_BOOT
@@ -16,6 +17,8 @@
 #  define strncmp strncmp16
 #  define strcasecmp strcasecmp16
 #  define strncasecmp strncasecmp16
+#  define strspn strspn16
+#  define strcspn strcspn16
 #  define STR_C(str)       (L ## str)
 typedef char16_t sd_char;
 #else
diff --git a/src/libnm-systemd-shared/src/shared/dns-domain.c b/src/libnm-systemd-shared/src/shared/dns-domain.c
index 42efd04a..eaca0715 100644
--- a/src/libnm-systemd-shared/src/shared/dns-domain.c
+++ b/src/libnm-systemd-shared/src/shared/dns-domain.c
@@ -15,6 +15,7 @@
 #include "hostname-util.h"
 #include "idn-util.h"
 #include "in-addr-util.h"
+#include "log.h"
 #include "macro.h"
 #include "parse-util.h"
 #include "string-util.h"
@@ -1395,7 +1396,7 @@ int dns_name_apply_idna(const char *name, char **ret) {
                 r = sym_idn2_lookup_u8((uint8_t*) name, (uint8_t**) &t,
                                        IDN2_NFC_INPUT | IDN2_TRANSITIONAL);
 
-        log_debug("idn2_lookup_u8: %s %s %s", name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t);
+        log_debug("idn2_lookup_u8: %s %s %s", name, glyph(GLYPH_ARROW_RIGHT), t);
         if (r == IDN2_OK) {
                 if (!startswith(name, "xn--")) {
                         _cleanup_free_ char *s = NULL;
@@ -1410,8 +1411,8 @@ int dns_name_apply_idna(const char *name, char **ret) {
 
                         if (!streq_ptr(name, s)) {
                                 log_debug("idn2 roundtrip failed: \"%s\" %s \"%s\" %s \"%s\", ignoring.",
-                                          name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t,
-                                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), s);
+                                          name, glyph(GLYPH_ARROW_RIGHT), t,
+                                          glyph(GLYPH_ARROW_RIGHT), s);
                                 *ret = NULL;
                                 return 0;
                         }
diff --git a/src/libnmc-base/nm-client-utils.c b/src/libnmc-base/nm-client-utils.c
index 326d8d20..10c2c295 100644
--- a/src/libnmc-base/nm-client-utils.c
+++ b/src/libnmc-base/nm-client-utils.c
@@ -483,7 +483,7 @@ NM_UTILS_LOOKUP_STR_DEFINE(
            "(\"unmanaged-devices\" for keyfile or \"NM_CONTROLLED=no\" for ifcfg-rh)")),
     NM_UTILS_LOOKUP_ITEM(NM_DEVICE_STATE_REASON_UNMANAGED_USER_CONF,
                          N_("The device is unmanaged by user decision in NetworkManager.conf "
-                            "('unmanaged' in a [device*] section")),
+                            "('unmanaged' in a [device*] section)")),
     NM_UTILS_LOOKUP_ITEM(
         NM_DEVICE_STATE_REASON_UNMANAGED_BY_DEFAULT,
         N_("The device is unmanaged because the device type is unmanaged by default")),
@@ -493,6 +493,8 @@ NM_UTILS_LOOKUP_STR_DEFINE(
                          N_("The device is unmanaged because it is an external device and is "
                             "unconfigured (down or without addresses)")),
     NM_UTILS_LOOKUP_ITEM(NM_DEVICE_STATE_REASON_NETWORKING_OFF, N_("Networking was disabled")),
+    NM_UTILS_LOOKUP_ITEM(NM_DEVICE_STATE_REASON_MODEM_NO_OPERATOR_CODE,
+                         N_("The modem didn't have an operator code")),
 
 );
 
diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c
index c035ad54..e2ab8dfa 100644
--- a/src/libnmc-setting/nm-meta-setting-desc.c
+++ b/src/libnmc-setting/nm-meta-setting-desc.c
@@ -4156,6 +4156,50 @@ _optionlist_set_fcn_vpn_secrets(NMSetting  *setting,
     return TRUE;
 }
 
+static void
+_objlist_obj_to_str_fcn_wireguard_peers(NMMetaAccessorGetType get_type,
+                                        NMSetting            *setting,
+                                        guint                 idx,
+                                        GString              *str)
+{
+    NMWireGuardPeer *peer;
+    gs_free char    *peer_str = NULL;
+
+    peer     = nm_setting_wireguard_get_peer(NM_SETTING_WIREGUARD(setting), idx);
+    peer_str = _nm_utils_wireguard_peer_to_string(peer);
+    g_string_append(str, peer_str);
+}
+
+static gboolean
+_objlist_set_fcn_wireguard_peers(NMSetting  *setting,
+                                 gboolean    do_add,
+                                 const char *value,
+                                 GError    **error)
+{
+    NMSettingWireGuard                   *s_wg = NM_SETTING_WIREGUARD(setting);
+    nm_auto_unref_wgpeer NMWireGuardPeer *peer = NULL;
+
+    peer = _nm_utils_wireguard_peer_from_string(value, error);
+    if (!peer)
+        return FALSE;
+
+    if (do_add) {
+        nm_setting_wireguard_append_peer(s_wg, peer);
+    } else {
+        NMWireGuardPeer *match;
+        guint            idx;
+
+        match = nm_setting_wireguard_get_peer_by_public_key(s_wg,
+                                                            nm_wireguard_peer_get_public_key(peer),
+                                                            &idx);
+        if (match) {
+            nm_setting_wireguard_remove_peer(s_wg, idx);
+        }
+    }
+
+    return TRUE;
+}
+
 static gboolean
 _set_fcn_wired_s390_subchannels(ARGS_SET_FCN)
 {
@@ -5801,6 +5845,9 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = {
             ),
         ),
     ),
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_DNSSEC,
+        .property_type =                &_pt_gobject_enum,
+    ),
     PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_MPTCP_FLAGS,
         .property_type =                &_pt_gobject_enum,
         .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
@@ -6169,6 +6216,9 @@ static const NMMetaPropertyInfo *const property_infos_GSM[] = {
     PROPERTY_INFO_WITH_DESC (NM_SETTING_GSM_INITIAL_EPS_BEARER_REFUSE_MSCHAPV2,
         .property_type =                &_pt_gobject_bool,
     ),
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_GSM_DEVICE_UID,
+        .property_type =                &_pt_gobject_string,
+    ),
     NULL
 };
 
@@ -8432,6 +8482,21 @@ static const NMMetaPropertyInfo *const property_infos_WIREGUARD[] = {
     PROPERTY_INFO_WITH_DESC (NM_SETTING_WIREGUARD_IP6_AUTO_DEFAULT_ROUTE,
         .property_type =                &_pt_gobject_ternary,
     ),
+
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_WIREGUARD_PEERS,
+        .property_type =                &_pt_objlist,
+        .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
+            PROPERTY_TYP_DATA_SUBTYPE (objlist,
+                .get_num_fcn =          OBJLIST_GET_NUM_FCN         (NMSettingWireGuard, nm_setting_wireguard_get_peers_len),
+                .clear_all_fcn =        (void (*) (NMSetting *))(void (*)(void)) nm_setting_wireguard_clear_peers,
+                .obj_to_str_fcn =       _objlist_obj_to_str_fcn_wireguard_peers,
+                .set_fcn =              _objlist_set_fcn_wireguard_peers,
+                .remove_by_idx_fcn_u =  (void (*) (NMSetting *, guint idx))(void (*)(void)) nm_setting_wireguard_remove_peer,
+                .strsplit_plain =       TRUE,
+            ),
+        ),
+    ),
+
     NULL
 };
 
diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in
index ce9f27f9..89f8c6d1 100644
--- a/src/libnmc-setting/settings-docs.h.in
+++ b/src/libnmc-setting/settings-docs.h.in
@@ -8,6 +8,7 @@
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not ports of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for controller connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave port connections untouched, 1: activate all the port connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0. Deprecated 1.46. Use \"autoconnect-ports\" instead, this is just an alias.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_CONTROLLER N_("Interface name of the controller device or UUID of the controller connection.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_DNS_OVER_TLS N_("Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: \"yes\" (2) use DNSOverTls and disabled fallback, \"opportunistic\" (1) use DNSOverTls but allow fallback to unencrypted resolution, \"no\" (0) don't ever use DNSOverTls. If unspecified \"default\" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.")
+#define DESCRIBE_DOC_NM_SETTING_CONNECTION_DNSSEC N_("Whether DNSSEC (dnssec) is enabled for the connection. The permitted values are: \"yes\" (2) use DNSSEC and disable fallback, \"allow-downgrade\" (1) use DNSSEC but allow fallback if the server does not support it, \"no\" (0) don't ever use DNSSEC. The effect of \"default\" (-1) depends on the dns plugin used. Systemd-resolved uses its global setting in this case. This feature requires a plugin which supports DNSSEC. Otherwise, the setting has no effect. One such plugin is systemd-resolved.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_DOWN_ON_POWEROFF N_("Whether the connection will be brought down before the system is powered off.  The default value is \"default\" (-1). When the default value is specified, then the global value from NetworkManager configuration is looked up, if not set, it is considered as \"no\" (0).")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT N_("If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_ID N_("A human readable unique identifier for the connection, like \"Work Wi-Fi\" or \"T-Mobile 3G\".")
@@ -20,7 +21,7 @@
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MASTER N_("Interface name of the controller device or UUID of the controller connection. Deprecated 1.46. Use \"controller\" instead, this is just an alias.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MDNS N_("Whether mDNS is enabled for the connection. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable mDNS for the interface, \"resolve\" (1) do not register hostname but allow resolving of mDNS host names and \"default\" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, \"default\" ultimately depends on the DNS plugin. This feature requires a plugin which supports mDNS. Otherwise, the setting has no effect. Currently the only supported DNS plugin is systemd-resolved. For systemd-resolved, the default is configurable via MulticastDNS= setting in resolved.conf.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_METERED N_("Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.")
-#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MPTCP_FLAGS N_("Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The \"enabled\" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless \"/proc/sys/net/mptcp/enabled\" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, \"also-without-sysctl\" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag \"also-without-default-route\" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is \"enabled,subflow\". Note that this means that MPTCP is by default done depending on the \"/proc/sys/net/mptcp/enabled\" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2).")
+#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MPTCP_FLAGS N_("Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The \"enabled\" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless \"/proc/sys/net/mptcp/enabled\" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, \"also-without-sysctl\" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag \"also-without-default-route\" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80), \"laminar\" (0x100). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is \"enabled,subflow\". Note that this means that MPTCP is by default done depending on the \"/proc/sys/net/mptcp/enabled\" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2).")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MUD_URL N_("If configured, set to a Manufacturer Usage Description (MUD) URL that points to manufacturer-recommended network policies for IoT devices. It is transmitted as a DHCPv4 or DHCPv6 option. The value must be a valid URL starting with \"https://\". The special value \"none\" is allowed to indicate that no MUD URL is used. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the ultimate default is \"none\".")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MULTI_CONNECT N_("Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.")
 #define DESCRIBE_DOC_NM_SETTING_CONNECTION_PERMISSIONS N_("An array of strings defining what access a given user has to this connection.  If this is NULL or empty, all users are allowed to access this connection; otherwise users are allowed if and only if they are in this list.  When this is not empty, the connection can be active only when one of the specified users is logged into an active session.  Each entry is of the form \"[type]:[id]:[reserved]\"; for example, \"user:dcbw:blah\". At this time only the \"user\" [type] is allowed.  Any other values are ignored and reserved for future use.  [id] is the username that this permission refers to, which may not contain the \":\" character. Any [reserved] information present must be ignored and is reserved for future use.  All of [type], [id], and [reserved] must be valid UTF-8.")
@@ -149,6 +150,7 @@
 #define DESCRIBE_DOC_NM_SETTING_GSM_APN N_("The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network.  The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9. If the APN is unset (the default) then it may be detected based on \"auto-config\" setting. The property can be explicitly set to the empty string to prevent that and use no APN.")
 #define DESCRIBE_DOC_NM_SETTING_GSM_AUTO_CONFIG N_("When TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database.")
 #define DESCRIBE_DOC_NM_SETTING_GSM_DEVICE_ID N_("The device unique identifier (as given by the WWAN management service) which this connection applies to.  If given, the connection will only apply to the specified device.")
+#define DESCRIBE_DOC_NM_SETTING_GSM_DEVICE_UID N_("The device UID (as given by the WWAN management service) which this connection applies to. In contrast to \"device-id\", which is an inherent property of the connected device, this setting refers to a property set by a UDEV-rule. Refer to the \"Common udev tags\" -> \"ID_MM_PHYSDEV_UID\" documentation of ModemManager. If given, the connection will only apply to the specified device.")
 #define DESCRIBE_DOC_NM_SETTING_GSM_HOME_ONLY N_("When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.")
 #define DESCRIBE_DOC_NM_SETTING_GSM_INITIAL_EPS_BEARER_APN N_("For LTE modems, this sets the APN for the initial EPS bearer that is set up when attaching to the network.  Setting this parameter implies initial-eps-bearer-configure to be TRUE.")
 #define DESCRIBE_DOC_NM_SETTING_GSM_INITIAL_EPS_BEARER_CONFIGURE N_("For LTE modems, this setting determines whether the initial EPS bearer shall be configured when bringing up the connection.  It is inferred TRUE if initial-eps-bearer-apn is set.")
@@ -203,7 +205,7 @@
 #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DNS_PRIORITY N_("DNS servers priority. The relative priority for DNS servers specified by this setting.  A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections.  It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the \"rotate\" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain.  Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually).  When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins.  If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured.")
 #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DNS_SEARCH N_("List of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting. When set on a profile that also enabled DHCP, the DNS search list received automatically (option 119 for DHCPv4 and option 24 for DHCPv6) gets merged with the manual list. This can be prevented by setting \"ignore-auto-dns\". Note that if no DNS searches are configured, the fallback will be derived from the domain from DHCP (option 15).")
 #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_FORWARDING N_("Whether to configure sysctl interface-specific forwarding. When enabled, the interface will act as a router to forward the packet from one interface to another. When set to \"default\" (-1), the value from global configuration is used; if no global default is defined, \"auto\" (2) will be used. The \"forwarding\" property is ignored when \"method\" is set to \"shared\", because forwarding is always enabled in this case. The accepted values are: \"default\" (-1): use global default. \"no\" (0): disabled. \"yes\" (1): enabled. \"auto\" (2): enable if any shared connection is active, use kernel default otherwise.")
-#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_GATEWAY N_("The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if \"never-default\" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See \"ip4-auto-default-route\".")
+#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_GATEWAY N_("The gateway associated with this configuration. This is only meaningful if addresses are also set on the device. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if \"never-default\" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See \"ip4-auto-default-route\".")
 #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS N_("When \"method\" is set to \"auto\" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the \"dns\" and \"dns-search\" properties, if any, are used.")
 #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES N_("When \"method\" is set to \"auto\" and this property to TRUE, automatically configured routes are ignored and only routes specified in the \"routes\" property, if any, are used.")
 #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_LINK_LOCAL N_("Enable and disable the IPv4 link-local configuration independently of the ipv4.method configuration. This allows a link-local address (169.254.x.y/16) to be obtained in addition to other addresses, such as those manually configured or obtained from a DHCP server. When set to \"auto\", the value is dependent on \"ipv4.method\". When set to \"default\", it honors the global connection default, before falling back to \"auto\". Note that if \"ipv4.method\" is \"disabled\", then link local addressing is always disabled too. The default is \"default\". Since 1.52, when set to \"fallback\", a link-local address is obtained if no other IPv4 address is set.")
@@ -239,7 +241,7 @@
 #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DNS_PRIORITY N_("DNS servers priority. The relative priority for DNS servers specified by this setting.  A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections.  It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the \"rotate\" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain.  Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually).  When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins.  If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured.")
 #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DNS_SEARCH N_("List of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting. When set on a profile that also enabled DHCP, the DNS search list received automatically (option 119 for DHCPv4 and option 24 for DHCPv6) gets merged with the manual list. This can be prevented by setting \"ignore-auto-dns\". Note that if no DNS searches are configured, the fallback will be derived from the domain from DHCP (option 15).")
 #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_FORWARDING N_("Whether to configure sysctl interface-specific forwarding. When enabled, the interface will act as a router to forward the packet from one interface to another. When set to \"default\" (-1), the value from global configuration is used; if no global default is defined, \"auto\" (2) will be used. The \"forwarding\" property is ignored when \"method\" is set to \"shared\", because forwarding is always enabled in this case. The accepted values are: \"default\" (-1): use global default. \"no\" (0): disabled. \"yes\" (1): enabled. \"auto\" (2): enable if any shared connection is active, use kernel default otherwise.")
-#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_GATEWAY N_("The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if \"never-default\" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See \"ip4-auto-default-route\".")
+#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_GATEWAY N_("The gateway associated with this configuration. This is only meaningful if addresses are also set on the device. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if \"never-default\" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See \"ip4-auto-default-route\".")
 #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS N_("When \"method\" is set to \"auto\" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the \"dns\" and \"dns-search\" properties, if any, are used.")
 #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES N_("When \"method\" is set to \"auto\" and this property to TRUE, automatically configured routes are ignored and only routes specified in the \"routes\" property, if any, are used.")
 #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IP6_PRIVACY N_("Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941.  If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64.  This enhances privacy, but could cause problems in some applications, on the other hand.  The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to \"-1\" (default) means fallback to global configuration \"ipv6.ip6-privacy\". If it's also unspecified or set to \"-1\", fallback to read \"/proc/sys/net/ipv6/conf/default/use_tempaddr\". Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the \"addr-gen-mode\" property's \"stable-privacy\" setting as another way of avoiding host tracking with IPv6 addresses.")
@@ -446,6 +448,7 @@
 #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_LISTEN_PORT N_("The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up.")
 #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_MTU N_("If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments. If zero a default MTU is used. Note that contrary to wg-quick's MTU setting, this does not take into account the current routes at the time of activation.")
 #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PEER_ROUTES N_("Whether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is \"0.0.0.0/0\" or \"::/0\" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically.")
+#define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PEERS N_("A comma-separated list of WireGuard peers. Each peer has the following syntax: PUBLIC_KEY [ATTRIBUTE=VALUE [ATTRIBUTE=VALUE]...] The supported attributes are: endpoint, allowed-ips, persistent-keepalive,  preshared-key, preshared-key-flags.")
 #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PRIVATE_KEY N_("The 256 bit private-key in base64 encoding.")
 #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PRIVATE_KEY_FLAGS N_("Flags indicating how to handle the \"private-key\" property.")
 #define DESCRIBE_DOC_NM_SETTING_WIRELESS_AP_ISOLATION N_("Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from \"default\" (-1) only when the interface is configured in AP mode. If set to \"true\" (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to \"false\" (0), devices can talk to each other. When set to \"default\" (-1), the global default is used; in case the global default is unspecified it is assumed to be \"false\" (0).")
diff --git a/src/linux-headers/mptcp.h b/src/linux-headers/mptcp.h
index ca502f1e..ed44b950 100644
--- a/src/linux-headers/mptcp.h
+++ b/src/linux-headers/mptcp.h
@@ -80,6 +80,7 @@ enum {
 #define MPTCP_PM_ADDR_FLAG_BACKUP			(1 << 2)
 #define MPTCP_PM_ADDR_FLAG_FULLMESH			(1 << 3)
 #define MPTCP_PM_ADDR_FLAG_IMPLICIT			(1 << 4)
+#define MPTCP_PM_ADDR_FLAG_LAMINAR			(1 << 5)
 
 enum {
 	MPTCP_PM_CMD_UNSPEC,
diff --git a/src/meson.build b/src/meson.build
index 0cf93bfd..7c020809 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -24,7 +24,7 @@ libn_acd = static_library(
     'n-acd/src/n-acd.c',
     'n-acd/src/n-acd-probe.c',
     'n-acd/src/util/timer.c',
-    enable_ebpf ? 'n-acd/src/n-acd-bpf.c' : 'n-acd/src/n-acd-bpf-fallback.c',
+    'n-acd/src/n-acd-bpf.c',
   ),
   include_directories: include_directories(
     'c-list/src',
diff --git a/src/n-acd/.github/workflows/ci.yml b/src/n-acd/.github/workflows/ci.yml
index 22fc8141..f6987414 100644
--- a/src/n-acd/.github/workflows/ci.yml
+++ b/src/n-acd/.github/workflows/ci.yml
@@ -49,42 +49,6 @@ jobs:
                 "--m32=1" \
                 "--source=/github/workspace"
 
-  ci-no-ebpf:
-    name: CI without eBPF
-    runs-on: ubuntu-latest
-
-    steps:
-    # See above in 'ci' job.
-    - name: Fetch CI
-      uses: actions/checkout@v2
-      with:
-        repository: c-util/automation
-        ref: v1
-        path: automation
-    - name: Build CI
-      working-directory: automation/src/ci-c-util
-      run: docker build --tag ci-c-util:v1 .
-
-    #
-    # Run CI
-    #
-    # This again runs the CI, but this time disables eBPF. We do support the
-    # legacy BPF fallback, so lets make sure we test for it.
-    #
-    - name: Fetch Sources
-      uses: actions/checkout@v2
-      with:
-        path: source
-    - name: Run through C-Util CI
-      run: |
-        docker run \
-                --privileged \
-                -v "$(pwd)/source:/github/workspace" \
-                "ci-c-util:v1" \
-                "--m32=1" \
-                "--mesonargs=-Debpf=false" \
-                "--source=/github/workspace"
-
   ci-valgrind:
     name: CI through Valgrind
     runs-on: ubuntu-latest
diff --git a/src/n-acd/README.md b/src/n-acd/README.md
index 08954182..d207e700 100644
--- a/src/n-acd/README.md
+++ b/src/n-acd/README.md
@@ -41,13 +41,6 @@ meson test
 ninja install
 ```
 
-The following configuration options are available:
-
- * `ebpf`: This boolean controls whether `ebpf` features are used to improve
-           the package filtering performance. If disabled, classic bpf will be
-           used. This feature requires a rather recent kernel (>=3.19).
-           Default is: true
-
 ### Repository:
 
  - **web**:   <https://github.com/nettools/n-acd>
diff --git a/src/n-acd/meson.build b/src/n-acd/meson.build
index 6479eb1a..ca72e567 100644
--- a/src/n-acd/meson.build
+++ b/src/n-acd/meson.build
@@ -22,6 +22,4 @@ dep_crbtree = sub_crbtree.get_variable('libcrbtree_dep')
 dep_csiphash = sub_csiphash.get_variable('libcsiphash_dep')
 dep_cstdaux = sub_cstdaux.get_variable('libcstdaux_dep')
 
-use_ebpf = get_option('ebpf')
-
 subdir('src')
diff --git a/src/n-acd/meson_options.txt b/src/n-acd/meson_options.txt
deleted file mode 100644
index b024ee1d..00000000
--- a/src/n-acd/meson_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-option('ebpf', type: 'boolean', value: true, description: 'Enable eBPF packet filtering')
diff --git a/src/n-acd/src/libnacd.sym b/src/n-acd/src/libnacd.sym
index f85e13ac..537eab3e 100644
--- a/src/n-acd/src/libnacd.sym
+++ b/src/n-acd/src/libnacd.sym
@@ -15,6 +15,7 @@ global:
         n_acd_ref;
         n_acd_unref;
         n_acd_get_fd;
+        n_acd_has_bpf;
         n_acd_dispatch;
         n_acd_pop_event;
         n_acd_probe;
diff --git a/src/n-acd/src/meson.build b/src/n-acd/src/meson.build
index 3e92681f..c1582f42 100644
--- a/src/n-acd/src/meson.build
+++ b/src/n-acd/src/meson.build
@@ -15,18 +15,9 @@ libnacd_sources = [
         'n-acd.c',
         'n-acd-probe.c',
         'util/timer.c',
+        'n-acd-bpf.c',
 ]
 
-if use_ebpf
-        libnacd_sources += [
-                'n-acd-bpf.c',
-        ]
-else
-        libnacd_sources += [
-                'n-acd-bpf-fallback.c',
-        ]
-endif
-
 libnacd_private = static_library(
         'nacd-private',
         libnacd_sources,
@@ -77,10 +68,8 @@ endif
 test_api = executable('test-api', ['test-api.c'], link_with: libnacd_shared)
 test('API Symbol Visibility', test_api)
 
-if use_ebpf
-        test_bpf = executable('test-bpf', ['test-bpf.c'], dependencies: libnacd_dep)
-        test('eBPF socket filtering', test_bpf)
-endif
+test_bpf = executable('test-bpf', ['test-bpf.c'], dependencies: libnacd_dep)
+test('eBPF socket filtering', test_bpf)
 
 test_loopback = executable('test-loopback', ['test-loopback.c'], dependencies: libnacd_dep)
 test('Echo Suppression via Loopback', test_loopback)
diff --git a/src/n-acd/src/n-acd-bpf-fallback.c b/src/n-acd/src/n-acd-bpf-fallback.c
deleted file mode 100644
index 3cf4eb06..00000000
--- a/src/n-acd/src/n-acd-bpf-fallback.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * A noop implementation of eBPF filter for IPv4 Address Conflict Detection
- *
- * These are a collection of dummy functions that have no effect, but allows
- * n-acd to compile without eBPF support.
- *
- * See n-acd-bpf.c for documentation.
- */
-
-#include <c-stdaux.h>
-#include <stddef.h>
-#include "n-acd-private.h"
-
-int n_acd_bpf_map_create(int *mapfdp, size_t max_entries) {
-        *mapfdp = -1;
-        return 0;
-}
-
-int n_acd_bpf_map_add(int mapfd, struct in_addr *addrp) {
-        return 0;
-}
-
-int n_acd_bpf_map_remove(int mapfd, struct in_addr *addrp) {
-        return 0;
-}
-
-int n_acd_bpf_compile(int *progfdp, int mapfd, struct ether_addr *macp) {
-        *progfdp = -1;
-        return 0;
-}
diff --git a/src/n-acd/src/n-acd-bpf.c b/src/n-acd/src/n-acd-bpf.c
index 57b29ddf..55b44ab9 100644
--- a/src/n-acd/src/n-acd-bpf.c
+++ b/src/n-acd/src/n-acd-bpf.c
@@ -170,6 +170,10 @@ int n_acd_bpf_map_add(int mapfd, struct in_addr *addrp) {
         uint8_t _dummy = 0;
         int r;
 
+        /* If we don't have a map to update, there is nothing to do. */
+        if (mapfd == -1)
+                return 0;
+
         memset(&attr, 0, sizeof(attr));
         attr = (union bpf_attr){
                 .map_fd = mapfd,
@@ -190,6 +194,10 @@ int n_acd_bpf_map_remove(int mapfd, struct in_addr *addrp) {
         union bpf_attr attr;
         int r;
 
+        /* If we don't have a map to update, there is nothing to do. */
+        if (mapfd == -1)
+                return 0;
+
         memset(&attr, 0, sizeof(attr));
         attr = (union bpf_attr){
                 .map_fd = mapfd,
diff --git a/src/n-acd/src/n-acd.c b/src/n-acd/src/n-acd.c
index c1d92865..9bc32244 100644
--- a/src/n-acd/src/n-acd.c
+++ b/src/n-acd/src/n-acd.c
@@ -284,6 +284,11 @@ int n_acd_ensure_bpf_map_space(NAcd *acd) {
 
         max_map = 2 * acd->max_bpf_map;
 
+        /* If we didn't succeed in creating a map during n_acd_new(),
+         * let's assume we are unable to create it here, and skip it. */
+        if (!n_acd_has_bpf(acd))
+                goto out;
+
         r = n_acd_bpf_map_create(&fd_map, max_map);
         if (r)
                 return r;
@@ -308,6 +313,8 @@ int n_acd_ensure_bpf_map_space(NAcd *acd) {
                 close(acd->fd_bpf_map);
         acd->fd_bpf_map = fd_map;
         fd_map = -1;
+
+out:
         acd->max_bpf_map = max_map;
         return 0;
 }
@@ -359,13 +366,16 @@ _c_public_ int n_acd_new(NAcd **acdp, NAcdConfig *config) {
 
         acd->max_bpf_map = 8;
 
+        /* Let's try to create a BPF map. If we fail, we want to ignore it
+         * only if we lack permissions to create it, and proceed without eBPF. */
         r = n_acd_bpf_map_create(&acd->fd_bpf_map, acd->max_bpf_map);
-        if (r)
-                return r;
-
-        r = n_acd_bpf_compile(&fd_bpf_prog, acd->fd_bpf_map, (struct ether_addr*) acd->mac);
-        if (r)
+        if (r == 0) {
+                r = n_acd_bpf_compile(&fd_bpf_prog, acd->fd_bpf_map, (struct ether_addr*) acd->mac);
+                if (r)
+                        return r;
+        } else if (r != -EPERM) {
                 return r;
+        }
 
         r = n_acd_socket_new(&acd->fd_socket, fd_bpf_prog, config);
         if (r)
@@ -572,6 +582,20 @@ _c_public_ void n_acd_get_fd(NAcd *acd, int *fdp) {
         *fdp = acd->fd_epoll;
 }
 
+/**
+ * n_acd_has_bpf() - query the usage of eBPF
+ * @acd:                        context object to operate on
+ *
+ * Checks whether the ACD probe is using eBPF or not.
+ *
+ * Return: true if the probe is using eBPF, or
+ *         false if the probe failed to configure eBPF
+ *               (e.g. due to missing capabilities)
+ */
+_c_public_ bool n_acd_has_bpf(NAcd *acd) {
+        return acd->fd_bpf_map != -1;
+}
+
 static int n_acd_handle_timeout(NAcd *acd) {
         NAcdProbe *probe;
         uint64_t now;
diff --git a/src/n-acd/src/n-acd.h b/src/n-acd/src/n-acd.h
index e2b01270..8e5cf59a 100644
--- a/src/n-acd/src/n-acd.h
+++ b/src/n-acd/src/n-acd.h
@@ -93,6 +93,7 @@ NAcd *n_acd_ref(NAcd *acd);
 NAcd *n_acd_unref(NAcd *acd);
 
 void n_acd_get_fd(NAcd *acd, int *fdp);
+bool n_acd_has_bpf(NAcd *acd);
 int n_acd_dispatch(NAcd *acd);
 int n_acd_pop_event(NAcd *acd, NAcdEvent **eventp);
 
diff --git a/src/n-acd/src/test-api.c b/src/n-acd/src/test-api.c
index 70f75208..009838aa 100644
--- a/src/n-acd/src/test-api.c
+++ b/src/n-acd/src/test-api.c
@@ -56,6 +56,7 @@ static void test_api_functions(void) {
                 (void *)n_acd_ref,
                 (void *)n_acd_unref,
                 (void *)n_acd_get_fd,
+                (void *)n_acd_has_bpf,
                 (void *)n_acd_dispatch,
                 (void *)n_acd_pop_event,
                 (void *)n_acd_probe,
diff --git a/src/n-acd/src/test-bpf.c b/src/n-acd/src/test-bpf.c
index 78f9d0f1..17e89803 100644
--- a/src/n-acd/src/test-bpf.c
+++ b/src/n-acd/src/test-bpf.c
@@ -19,6 +19,9 @@
 #include "n-acd-private.h"
 #include "test.h"
 
+// https://mesonbuild.com/Unit-tests.html#skipped-tests-and-hard-errors
+#define RETURN_TEST_SKIPPED 77
+
 #define ETHER_ARP_PACKET_INIT(_op, _mac, _sip, _tip) {                  \
                 .ea_hdr = {                                             \
                         .ar_hrd = htobe16(ARPHRD_ETHER),                \
@@ -43,11 +46,15 @@
                 .arp_tpa[3] =  be32toh((_tip)->s_addr) & 0xff,          \
         }
 
-static void test_map(void) {
+static int test_map(void) {
         int r, mapfd = -1;
         struct in_addr addr = { 1 };
 
         r = n_acd_bpf_map_create(&mapfd, 8);
+        if (r == -EPERM) {
+                return RETURN_TEST_SKIPPED;
+        }
+
         c_assert(r >= 0);
         c_assert(mapfd >= 0);
 
@@ -67,6 +74,7 @@ static void test_map(void) {
         c_assert(r == -ENOENT);
 
         close(mapfd);
+        return 0;
 }
 
 static void verify_success(struct ether_arp *packet, int out_fd, int in_fd) {
@@ -92,7 +100,7 @@ static void verify_failure(struct ether_arp *packet, int out_fd, int in_fd) {
         c_assert(errno == EAGAIN);
 }
 
-static void test_filter(void) {
+static int test_filter(void) {
         uint8_t buf[sizeof(struct ether_arp) + 1] = {};
         struct ether_addr mac1 = { { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 } };
         struct ether_addr mac2 = { { 0x01, 0x02, 0x03, 0x04, 0x05, 0x07 } };
@@ -103,6 +111,10 @@ static void test_filter(void) {
         int r, mapfd = -1, progfd = -1, pair[2];
 
         r = n_acd_bpf_map_create(&mapfd, 1);
+        if (r == -EPERM) {
+                return RETURN_TEST_SKIPPED;
+        }
+
         c_assert(r >= 0);
 
         r = n_acd_bpf_compile(&progfd, mapfd, &mac1);
@@ -214,13 +226,21 @@ static void test_filter(void) {
         close(pair[1]);
         close(progfd);
         close(mapfd);
+
+        return 0;
 }
 
 int main(int argc, char **argv) {
+        int r;
         test_setup();
 
-        test_map();
-        test_filter();
+        if ((r = test_map())) {
+                return r;
+        }
+
+        if ((r = test_filter())) {
+                return r;
+        }
 
         return 0;
 }
diff --git a/src/n-dhcp4/src/n-dhcp4-c-connection.c b/src/n-dhcp4/src/n-dhcp4-c-connection.c
index e76ea165..707c6604 100644
--- a/src/n-dhcp4/src/n-dhcp4-c-connection.c
+++ b/src/n-dhcp4/src/n-dhcp4-c-connection.c
@@ -379,6 +379,10 @@ void n_dhcp4_c_connection_get_timeout(NDhcp4CConnection *connection,
         *timeoutp = timeout;
 }
 
+void n_dhcp4_c_connection_clear_client_ip(NDhcp4CConnection *connection) {
+        connection->client_ip = INADDR_ANY;
+}
+
 static int n_dhcp4_c_connection_packet_broadcast(NDhcp4CConnection *connection,
                                                  NDhcp4Outgoing *message) {
         int r;
diff --git a/src/n-dhcp4/src/n-dhcp4-c-probe.c b/src/n-dhcp4/src/n-dhcp4-c-probe.c
index 58d61e72..43dff7b0 100644
--- a/src/n-dhcp4/src/n-dhcp4-c-probe.c
+++ b/src/n-dhcp4/src/n-dhcp4-c-probe.c
@@ -198,7 +198,7 @@ _c_public_ void n_dhcp4_client_probe_config_set_init_reboot(NDhcp4ClientProbeCon
  *
  * This sets the DSCP property of the configuration object, which specifies
  * the DSCP value to set in the first six bits of the DS field in the IPv4
- * header. If this function is not called, the DSCP will be set to CS0.
+ * header. If this function is not called, the DSCP will be set to CS0 (0).
  */
 _c_public_ void n_dhcp4_client_probe_config_set_dscp(NDhcp4ClientProbeConfig *config, uint8_t dscp) {
         config->dscp = dscp & 0x3F;
@@ -703,6 +703,8 @@ static int n_dhcp4_client_probe_transition_deferred(NDhcp4ClientProbe *probe, ui
 
         switch (probe->state) {
         case N_DHCP4_CLIENT_PROBE_STATE_INIT:
+                /* reset client IP (CIADDR) */
+                n_dhcp4_c_connection_clear_client_ip(&probe->connection);
                 r = n_dhcp4_c_connection_listen(&probe->connection);
                 if (r)
                         return r;
diff --git a/src/n-dhcp4/src/n-dhcp4-private.h b/src/n-dhcp4/src/n-dhcp4-private.h
index dbfe9b4a..7e71406e 100644
--- a/src/n-dhcp4/src/n-dhcp4-private.h
+++ b/src/n-dhcp4/src/n-dhcp4-private.h
@@ -617,6 +617,8 @@ void n_dhcp4_c_connection_close(NDhcp4CConnection *connection);
 void n_dhcp4_c_connection_get_timeout(NDhcp4CConnection *connection,
                                       uint64_t *timeoutp);
 
+void n_dhcp4_c_connection_clear_client_ip(NDhcp4CConnection *connection);
+
 int n_dhcp4_c_connection_discover_new(NDhcp4CConnection *connection,
                                       NDhcp4Outgoing **request);
 int n_dhcp4_c_connection_select_new(NDhcp4CConnection *connection,
diff --git a/src/nm-cloud-setup/main.c b/src/nm-cloud-setup/main.c
index d2a5a1cf..51c65107 100644
--- a/src/nm-cloud-setup/main.c
+++ b/src/nm-cloud-setup/main.c
@@ -797,8 +797,8 @@ _oci_new_vlan_dev(SigTermData                          *sigterm_data,
 
     connection = _new_connection();
 
-    macvlan_name  = g_strdup_printf("macvlan%ld", config_data->iface_idx);
-    connection_id = g_strdup_printf("%s%ld", connection_type, config_data->iface_idx);
+    macvlan_name  = g_strdup_printf("macvlan%" G_GSSIZE_FORMAT, config_data->iface_idx);
+    connection_id = g_strdup_printf("%s%" G_GSSIZE_FORMAT, connection_type, config_data->iface_idx);
 
     wired_mac_addr = parent_hwaddr;
     if (nm_streq(connection_type, NM_SETTING_MACVLAN_SETTING_NAME)) {
diff --git a/src/nm-initrd-generator/nm-initrd-generator.c b/src/nm-initrd-generator/nm-initrd-generator.c
index b89b4e41..68993c00 100644
--- a/src/nm-initrd-generator/nm-initrd-generator.c
+++ b/src/nm-initrd-generator/nm-initrd-generator.c
@@ -78,7 +78,7 @@ output_conn(gpointer key, gpointer value, gpointer user_data)
         filename      = nm_keyfile_utils_create_filename(basename, TRUE);
         full_filename = g_build_filename(connections_dir, filename, NULL);
 
-        if (!nm_utils_file_set_contents(full_filename, data, len, 0600, NULL, NULL, &error))
+        if (!nm_utils_file_set_contents(full_filename, data, len, 0600, NULL, NULL, NULL, &error))
             goto err_out;
     } else
         g_print("\n*** Connection '%s' ***\n\n%s", basename, data);
diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c
index fdd7283e..5cdb3bcd 100644
--- a/src/nm-initrd-generator/nmi-cmdline-reader.c
+++ b/src/nm-initrd-generator/nmi-cmdline-reader.c
@@ -1063,27 +1063,44 @@ reader_parse_vlan(Reader *reader, char *argument)
     const char    *vlan;
     const char    *phy;
     const char    *vlanid;
+    guint64        id;
 
     vlan = get_word(&argument, ':');
     phy  = get_word(&argument, ':');
 
+    if (!vlan) {
+        _LOGW(LOGD_CORE, "missing VLAN interface name");
+        return;
+    }
+
+    if (!phy) {
+        _LOGW(LOGD_CORE, "missing VLAN parent");
+        return;
+    }
+
     for (vlanid = vlan + strlen(vlan); vlanid > vlan; vlanid--) {
         if (!g_ascii_isdigit(*(vlanid - 1)))
             break;
     }
 
+    if (vlanid[0] == '\0') {
+        _LOGW(LOGD_CORE, "missing VLAN id in '%s'", vlan);
+        return;
+    }
+
+    id = _nm_utils_ascii_str_to_int64(vlanid, 10, 0, 4094, G_MAXUINT);
+    if (id == G_MAXUINT) {
+        _LOGW(LOGD_CORE, "invalid VLAN id '%s'", vlanid);
+        return;
+    }
+
     connection = reader_get_connection(reader, vlan, NM_SETTING_VLAN_SETTING_NAME, TRUE);
 
     s_vlan = nm_connection_get_setting_vlan(connection);
-    g_object_set(s_vlan,
-                 NM_SETTING_VLAN_PARENT,
-                 phy,
-                 NM_SETTING_VLAN_ID,
-                 (guint) _nm_utils_ascii_str_to_int64(vlanid, 10, 0, G_MAXUINT, G_MAXUINT),
-                 NULL);
+    g_object_set(s_vlan, NM_SETTING_VLAN_PARENT, phy, NM_SETTING_VLAN_ID, (guint32) id, NULL);
 
     if (argument && *argument)
-        _LOGW(LOGD_CORE, "Ignoring extra: '%s'.", argument);
+        _LOGW(LOGD_CORE, "ignoring extra VLAN argument '%s'", argument);
 
     if (!nm_strv_ptrarray_contains(reader->vlan_parents, phy))
         g_ptr_array_add(reader->vlan_parents, g_strdup(phy));
@@ -1256,8 +1273,10 @@ reader_parse_rd_znet(Reader *reader, char *argument, gboolean net_ifnames)
 static void
 reader_parse_global_dns(Reader *reader, char *argument)
 {
-    if (!nm_dns_uri_parse(AF_UNSPEC, argument, NULL)) {
-        _LOGW(LOGD_CORE, "rd.net.dns: invalid server '%s'", argument);
+    gs_free_error GError *error = NULL;
+
+    if (!nm_dns_uri_parse(AF_UNSPEC, argument, NULL, &error)) {
+        _LOGW(LOGD_CORE, "rd.net.dns: invalid server '%s': %s", argument, error->message);
         return;
     }
 
diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c
index ac722872..b49905fb 100644
--- a/src/nm-initrd-generator/tests/test-cmdline-reader.c
+++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c
@@ -1847,6 +1847,66 @@ test_vlan_over_bond(void)
 }
 
 static void
+test_vlan_invalid(void)
+{
+    {
+        /* Case 1: Missing name */
+        const char *const             *ARGV0       = NM_MAKE_STRV("vlan=");
+        gs_unref_hashtable GHashTable *connections = NULL;
+
+        NMTST_EXPECT_NM_WARN("cmdline-reader: missing VLAN interface name");
+        connections = _parse_cons(ARGV0);
+        g_assert_cmpint(g_hash_table_size(connections), ==, 0);
+        g_test_assert_expected_messages();
+    }
+
+    {
+        /* Case 2: Missing parent */
+        const char *const             *ARGV0       = NM_MAKE_STRV("vlan=vlan12");
+        gs_unref_hashtable GHashTable *connections = NULL;
+
+        NMTST_EXPECT_NM_WARN("cmdline-reader: missing VLAN parent");
+        connections = _parse_cons(ARGV0);
+        g_assert_cmpint(g_hash_table_size(connections), ==, 0);
+        g_test_assert_expected_messages();
+    }
+
+    {
+        /* Case 3: Interface name without trailing digits should fail,
+         * not trigger a GLib assertion. */
+        const char *const             *ARGV0       = NM_MAKE_STRV("vlan=myvlan:eth0");
+        gs_unref_hashtable GHashTable *connections = NULL;
+
+        NMTST_EXPECT_NM_WARN("cmdline-reader: missing VLAN id in 'myvlan'");
+        connections = _parse_cons(ARGV0);
+        g_assert_cmpint(g_hash_table_size(connections), ==, 0);
+        g_test_assert_expected_messages();
+    }
+
+    {
+        /* Case 4: An invalid VLAN id should be rejected */
+        const char *const             *ARGV0       = NM_MAKE_STRV("vlan=myvlan4095:eth0");
+        gs_unref_hashtable GHashTable *connections = NULL;
+
+        NMTST_EXPECT_NM_WARN("cmdline-reader: invalid VLAN id '4095'");
+        connections = _parse_cons(ARGV0);
+        g_assert_cmpint(g_hash_table_size(connections), ==, 0);
+        g_test_assert_expected_messages();
+    }
+
+    {
+        /* Case 5: Extra arguments */
+        const char *const             *ARGV0 = NM_MAKE_STRV("vlan=eth0.80:eth0:reorder_hdr=on");
+        gs_unref_hashtable GHashTable *connections = NULL;
+
+        NMTST_EXPECT_NM_WARN("cmdline-reader: ignoring extra VLAN argument 'reorder_hdr=on'");
+        connections = _parse_cons(ARGV0);
+        g_assert_cmpint(g_hash_table_size(connections), ==, 2);
+        g_test_assert_expected_messages();
+    }
+}
+
+static void
 test_ibft_ip_dev(void)
 {
     const char *const            *ARGV = NM_MAKE_STRV("ip=eth0:ibft");
@@ -2604,7 +2664,7 @@ test_global_dns(void)
     gs_free char                  *dns_resolve_mode   = NULL;
     gint64                         carrier_timeout_sec = 0;
 
-    NMTST_EXPECT_NM_WARN("cmdline-reader: rd.net.dns: invalid server 'foobar'");
+    NMTST_EXPECT_NM_WARN("cmdline-reader: rd.net.dns: invalid server 'foobar':*");
     connections = _parse(ARGV,
                          &hostname,
                          &carrier_timeout_sec,
@@ -2963,6 +3023,7 @@ main(int argc, char **argv)
     g_test_add_func("/initrd/cmdline/vlan", test_vlan);
     g_test_add_func("/initrd/cmdline/vlan/dhcp-on-parent", test_vlan_with_dhcp_on_parent);
     g_test_add_func("/initrd/cmdline/vlan/over-bond", test_vlan_over_bond);
+    g_test_add_func("/initrd/cmdline/vlan/invalid", test_vlan_invalid);
     g_test_add_func("/initrd/cmdline/bridge", test_bridge);
     g_test_add_func("/initrd/cmdline/bridge/default", test_bridge_default);
     g_test_add_func("/initrd/cmdline/bridge/ip", test_bridge_ip);
diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c
index 9a018113..e81e710f 100644
--- a/src/nmcli/devices.c
+++ b/src/nmcli/devices.c
@@ -2090,6 +2090,7 @@ typedef struct {
     char               *specific_object;
     bool                hotspot : 1;
     bool                create : 1;
+    bool                start_agent : 1;
 } AddAndActivateInfo;
 
 static AddAndActivateInfo *
@@ -2097,6 +2098,7 @@ add_and_activate_info_new(NmCli      *nmc,
                           NMDevice   *device,
                           gboolean    hotspot,
                           gboolean    create,
+                          gboolean    start_agent,
                           const char *specific_object)
 {
     AddAndActivateInfo *info;
@@ -2107,6 +2109,7 @@ add_and_activate_info_new(NmCli      *nmc,
         .device          = g_object_ref(device),
         .hotspot         = hotspot,
         .create          = create,
+        .start_agent     = start_agent,
         .specific_object = g_strdup(specific_object),
     };
     return info;
@@ -2364,7 +2367,7 @@ do_device_connect(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const
                          nmc);
     }
 
-    info = add_and_activate_info_new(nmc, device, FALSE, FALSE, NULL);
+    info = add_and_activate_info_new(nmc, device, FALSE, FALSE, FALSE, NULL);
 
     nm_client_activate_connection_async(nmc->client,
                                         NULL, /* let NM find a connection automatically */
@@ -3603,6 +3606,16 @@ activate_update2_cb(GObject *source_object, GAsyncResult *res, gpointer user_dat
         return;
     }
 
+    if (info->start_agent && !nmc->secret_agent) {
+        nmc->secret_agent = nm_secret_agent_simple_new("nmcli-connect");
+        if (nmc->secret_agent) {
+            g_signal_connect(nmc->secret_agent,
+                             NM_SECRET_AGENT_SIMPLE_REQUEST_SECRETS,
+                             G_CALLBACK(nmc_secrets_requested),
+                             nmc);
+        }
+    }
+
     nm_client_activate_connection_async(nmc->client,
                                         NM_CONNECTION(remote_con),
                                         info->device,
@@ -3617,6 +3630,7 @@ save_and_activate_connection(NmCli        *nmc,
                              NMDevice     *device,
                              NMConnection *connection,
                              gboolean      hotspot,
+                             gboolean      start_agent,
                              const char   *specific_object)
 {
     AddAndActivateInfo *info;
@@ -3625,9 +3639,15 @@ save_and_activate_connection(NmCli        *nmc,
                                      device,
                                      hotspot,
                                      !NM_IS_REMOTE_CONNECTION(connection),
+                                     start_agent,
                                      specific_object);
 
     if (NM_IS_REMOTE_CONNECTION(connection)) {
+        /* Don't start the agent immediately. Otherwise the agent registration
+         * to the daemon will trigger a new activation if the connection was
+         * blocked due to bad secrets. This new activation would use the old
+         * secrets.
+         */
         nm_remote_connection_update2(NM_REMOTE_CONNECTION(connection),
                                      nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL),
                                      NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT,
@@ -3636,6 +3656,16 @@ save_and_activate_connection(NmCli        *nmc,
                                      activate_update2_cb,
                                      info);
     } else {
+        if (start_agent) {
+            nmc->secret_agent = nm_secret_agent_simple_new("nmcli-connect");
+            if (nmc->secret_agent) {
+                g_signal_connect(nmc->secret_agent,
+                                 NM_SECRET_AGENT_SIMPLE_REQUEST_SECRETS,
+                                 G_CALLBACK(nmc_secrets_requested),
+                                 nmc);
+            }
+        }
+
         nm_client_add_and_activate_connection_async(nmc->client,
                                                     connection,
                                                     info->device,
@@ -3665,6 +3695,7 @@ do_device_wifi_connect(const NMCCommand *cmd, NmCli *nmc, int argc, const char *
     gboolean private                         = FALSE;
     gboolean           hidden                = FALSE;
     gboolean           wep_passphrase        = FALSE;
+    gboolean           start_agent           = FALSE;
     GByteArray        *bssid1_arr            = NULL;
     GByteArray        *bssid2_arr            = NULL;
     gs_free NMDevice **devices               = NULL;
@@ -4029,18 +4060,13 @@ do_device_wifi_connect(const NMCCommand *cmd, NmCli *nmc, int argc, const char *
                              NM_802_11_AP_SEC_KEY_MGMT_OWE | NM_802_11_AP_SEC_KEY_MGMT_OWE_TM))) {
         NMSettingWirelessSecurity *s_wsec = NULL;
 
-        /* Create secret agent */
-        nmc->secret_agent = nm_secret_agent_simple_new("nmcli-connect");
-        if (nmc->secret_agent) {
-            g_signal_connect(nmc->secret_agent,
-                             NM_SECRET_AGENT_SIMPLE_REQUEST_SECRETS,
-                             G_CALLBACK(nmc_secrets_requested),
-                             nmc);
-        }
+        /* Start the secret agent just before initiating the activation. */
+        start_agent = TRUE;
 
         if (password) {
             if (!connection)
                 connection = nm_simple_connection_new();
+            s_wsec = nm_connection_get_setting_wireless_security(connection);
             if (!s_wsec) {
                 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
                 nm_connection_add_setting(connection, NM_SETTING(s_wsec));
@@ -4075,7 +4101,12 @@ do_device_wifi_connect(const NMCCommand *cmd, NmCli *nmc, int argc, const char *
     nmc->nowait_flag = (nmc->timeout == 0);
     nmc->should_wait++;
 
-    save_and_activate_connection(nmc, device, connection, FALSE, nm_object_get_path(NM_OBJECT(ap)));
+    save_and_activate_connection(nmc,
+                                 device,
+                                 connection,
+                                 FALSE,
+                                 start_agent,
+                                 nm_object_get_path(NM_OBJECT(ap)));
 
 finish:
     if (bssid1_arr)
@@ -4535,7 +4566,7 @@ do_device_wifi_hotspot(const NMCCommand *cmd, NmCli *nmc, int argc, const char *
     nmc->nowait_flag = (nmc->timeout == 0);
     nmc->should_wait++;
 
-    save_and_activate_connection(nmc, device, connection, TRUE, NULL);
+    save_and_activate_connection(nmc, device, connection, TRUE, FALSE, NULL);
 }
 
 static void
diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
index 854a0227..881c41ca 100644
--- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
+++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
@@ -733,10 +733,14 @@
                   nmcli-description="Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: &quot;yes&quot; (2) use DNSOverTls and disabled fallback, &quot;opportunistic&quot; (1) use DNSOverTls but allow fallback to unencrypted resolution, &quot;no&quot; (0) don&apos;t ever use DNSOverTls. If unspecified &quot;default&quot; depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved."
                   format="choice (NMSettingConnectionDnsOverTls)"
                   values="default (-1), no (0), opportunistic (1), yes (2)" />
+        <property name="dnssec"
+                  nmcli-description="Whether DNSSEC (dnssec) is enabled for the connection. The permitted values are: &quot;yes&quot; (2) use DNSSEC and disable fallback, &quot;allow-downgrade&quot; (1) use DNSSEC but allow fallback if the server does not support it, &quot;no&quot; (0) don&apos;t ever use DNSSEC. The effect of &quot;default&quot; (-1) depends on the dns plugin used. Systemd-resolved uses its global setting in this case. This feature requires a plugin which supports DNSSEC. Otherwise, the setting has no effect. One such plugin is systemd-resolved."
+                  format="choice (NMSettingConnectionDnssec)"
+                  values="default (-1), no (0), allow-downgrade (1), yes (2)" />
         <property name="mptcp-flags"
-                  nmcli-description="Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If &quot;disabled&quot; (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The &quot;enabled&quot; (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless &quot;/proc/sys/net/mptcp/enabled&quot; sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, &quot;also-without-sysctl&quot; (0x4) flag can be used. In that case, NetworkManager doesn&apos;t look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag &quot;also-without-default-route&quot; (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags &quot;signal&quot; (0x10), &quot;subflow&quot; (0x20), &quot;backup&quot; (0x40), &quot;fullmesh&quot; (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is &quot;enabled,subflow&quot;. Note that this means that MPTCP is by default done depending on the &quot;/proc/sys/net/mptcp/enabled&quot; sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via &quot;/proc/sys/net/mptcp/enabled&quot;. That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2)."
+                  nmcli-description="Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If &quot;disabled&quot; (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The &quot;enabled&quot; (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless &quot;/proc/sys/net/mptcp/enabled&quot; sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, &quot;also-without-sysctl&quot; (0x4) flag can be used. In that case, NetworkManager doesn&apos;t look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag &quot;also-without-default-route&quot; (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags &quot;signal&quot; (0x10), &quot;subflow&quot; (0x20), &quot;backup&quot; (0x40), &quot;fullmesh&quot; (0x80), &quot;laminar&quot; (0x100). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is &quot;enabled,subflow&quot;. Note that this means that MPTCP is by default done depending on the &quot;/proc/sys/net/mptcp/enabled&quot; sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via &quot;/proc/sys/net/mptcp/enabled&quot;. That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2)."
                   format="flags (NMMptcpFlags)"
-                  values="none/default (0x0), disabled (0x1), enabled (0x2), also-without-sysctl (0x4), also-without-default-route (0x8), signal (0x10), subflow (0x20), backup (0x40), fullmesh (0x80)" />
+                  values="none/default (0x0), disabled (0x1), enabled (0x2), also-without-sysctl (0x4), also-without-default-route (0x8), signal (0x10), subflow (0x20), backup (0x40), fullmesh (0x80), laminar (0x100)" />
         <property name="mud-url"
                   nmcli-description="If configured, set to a Manufacturer Usage Description (MUD) URL that points to manufacturer-recommended network policies for IoT devices. It is transmitted as a DHCPv4 or DHCPv6 option. The value must be a valid URL starting with &quot;https://&quot;. The special value &quot;none&quot; is allowed to indicate that no MUD URL is used. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the ultimate default is &quot;none&quot;."
                   format="string" />
@@ -1198,6 +1202,9 @@
                   nmcli-description="For LTE modems, this disables MSCHAPV2 authentication method for the initial EPS bearer that is set up when attaching to the network."
                   format="boolean"
                   values="true/yes/on, false/no/off" />
+        <property name="device-uid"
+                  nmcli-description="The device UID (as given by the WWAN management service) which this connection applies to. In contrast to &quot;device-id&quot;, which is an inherent property of the connected device, this setting refers to a property set by a UDEV-rule. Refer to the &quot;Common udev tags&quot; -&gt; &quot;ID_MM_PHYSDEV_UID&quot; documentation of ModemManager. If given, the connection will only apply to the specified device."
+                  format="string" />
     </setting>
     <setting name="hostname" >
         <property name="priority"
@@ -1350,7 +1357,7 @@
                   format="list of ipv4.addresses objects" />
         <property name="gateway"
                   alias="gw4"
-                  nmcli-description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if &quot;never-default&quot; is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See &quot;ip4-auto-default-route&quot;."
+                  nmcli-description="The gateway associated with this configuration. This is only meaningful if addresses are also set on the device. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if &quot;never-default&quot; is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See &quot;ip4-auto-default-route&quot;."
                   format="IPv4 address" />
         <property name="routes"
                   nmcli-description="A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: &quot;ip[/prefix] [next-hop] [metric] [attribute=val]...[,ip[/prefix]...]&quot;. For example &quot;192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24&quot;."
@@ -1492,7 +1499,7 @@
                   format="list of ipv6.addresses objects" />
         <property name="gateway"
                   alias="gw6"
-                  nmcli-description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if &quot;never-default&quot; is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See &quot;ip4-auto-default-route&quot;."
+                  nmcli-description="The gateway associated with this configuration. This is only meaningful if addresses are also set on the device. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if &quot;never-default&quot; is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See &quot;ip4-auto-default-route&quot;."
                   format="IPv6 address" />
         <property name="routes"
                   nmcli-description="Array of IP routes."
@@ -2331,6 +2338,9 @@
                   nmcli-description="Like ip4-auto-default-route, but for the IPv6 default route."
                   format="ternary"
                   values="true/yes/on, false/no/off, default/unknown" />
+        <property name="peers"
+                  nmcli-description="A comma-separated list of WireGuard peers. Each peer has the following syntax: PUBLIC_KEY [ATTRIBUTE=VALUE [ATTRIBUTE=VALUE]...] The supported attributes are: endpoint, allowed-ips, persistent-keepalive,  preshared-key, preshared-key-flags."
+                  format="list of wireguard.peers objects" />
     </setting>
     <setting name="wpan" >
         <property name="mac-address"
diff --git a/src/tests/client/meson.build b/src/tests/client/meson.build
index 5686a1c1..570a4a26 100644
--- a/src/tests/client/meson.build
+++ b/src/tests/client/meson.build
@@ -10,9 +10,6 @@ test(
     '--',
     'TestNmcli',
   ],
-  env: [
-    'LIBTOOL=',
-  ],
   timeout: 120,
 )
 
@@ -27,9 +24,6 @@ if enable_nm_cloud_setup
       '--',
       'TestNmCloudSetup',
     ],
-    env: [
-      'LIBTOOL=',
-    ],
     timeout: 120,
   )
 endif
diff --git a/src/tests/client/test-client.check-on-disk/test_002.expected b/src/tests/client/test-client.check-on-disk/test_002.expected
index 11c8bb9c..cc35e4fd 100644
--- a/src/tests/client/test-client.check-on-disk/test_002.expected
+++ b/src/tests/client/test-client.check-on-disk/test_002.expected
@@ -506,12 +506,12 @@ NAME   UUID                                  TYPE      DEVICE
 con-1  5fcfd6d7-1e63-3332-8826-a7eda103792d  ethernet  --     
 
 <<<
-size: 1704
+size: 1757
 location: src/tests/client/test-client.py:test_002()/23
 cmd: $NMCLI c s con-1
 lang: C
 returncode: 0
-stdout: 1576 bytes
+stdout: 1629 bytes
 >>>
 connection.id:                          con-1
 connection.uuid:                        5fcfd6d7-1e63-3332-8826-a7eda103792d
@@ -543,17 +543,18 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
 
 <<<
-size: 1715
+size: 1768
 location: src/tests/client/test-client.py:test_002()/24
 cmd: $NMCLI c s con-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 1577 bytes
+stdout: 1630 bytes
 >>>
 connection.id:                          con-1
 connection.uuid:                        5fcfd6d7-1e63-3332-8826-a7eda103792d
@@ -585,6 +586,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
diff --git a/src/tests/client/test-client.check-on-disk/test_003.expected b/src/tests/client/test-client.check-on-disk/test_003.expected
index 40959fed..809b5579 100644
--- a/src/tests/client/test-client.check-on-disk/test_003.expected
+++ b/src/tests/client/test-client.check-on-disk/test_003.expected
@@ -182,12 +182,12 @@ id
 path
 uuid
 <<<
-size: 6579
+size: 6675
 location: src/tests/client/test-client.py:test_003()/14
 cmd: $NMCLI con s con-gsm1
 lang: C
 returncode: 0
-stdout: 6446 bytes
+stdout: 6542 bytes
 >>>
 connection.id:                          con-gsm1
 connection.uuid:                        UUID-con-gsm1-REPLACED-REPLACED-REPL
@@ -219,6 +219,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -324,18 +325,19 @@ gsm.initial-eps-bearer-refuse-pap:      no
 gsm.initial-eps-bearer-refuse-chap:     no
 gsm.initial-eps-bearer-refuse-mschap:   no
 gsm.initial-eps-bearer-refuse-mschapv2: no
+gsm.device-uid:                         --
 proxy.method:                           none
 proxy.browser-only:                     no
 proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 6622
+size: 6718
 location: src/tests/client/test-client.py:test_003()/15
 cmd: $NMCLI con s con-gsm1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6479 bytes
+stdout: 6575 bytes
 >>>
 connection.id:                          con-gsm1
 connection.uuid:                        UUID-con-gsm1-REPLACED-REPLACED-REPL
@@ -367,6 +369,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -472,48 +475,49 @@ gsm.initial-eps-bearer-refuse-pap:      nie
 gsm.initial-eps-bearer-refuse-chap:     nie
 gsm.initial-eps-bearer-refuse-mschap:   nie
 gsm.initial-eps-bearer-refuse-mschapv2: nie
+gsm.device-uid:                         --
 proxy.method:                           none
 proxy.browser-only:                     nie
 proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 584
+size: 588
 location: src/tests/client/test-client.py:test_003()/16
 cmd: $NMCLI -g all con s con-gsm1
 lang: C
 returncode: 0
-stdout: 445 bytes
+stdout: 449 bytes
 >>>
-connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::: :0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 serial:5:8:even:1:100
-gsm:no:::<hidden>:0:xyz.con-gsm1::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no
+gsm:no:::<hidden>:0:xyz.con-gsm1::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no:
 proxy:none:no::
 
 <<<
-size: 594
+size: 598
 location: src/tests/client/test-client.py:test_003()/17
 cmd: $NMCLI -g all con s con-gsm1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 445 bytes
+stdout: 449 bytes
 >>>
-connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::: :0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 serial:5:8:even:1:100
-gsm:no:::<hidden>:0:xyz.con-gsm1::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no
+gsm:no:::<hidden>:0:xyz.con-gsm1::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no:
 proxy:none:no::
 
 <<<
-size: 6567
+size: 6663
 location: src/tests/client/test-client.py:test_003()/18
 cmd: $NMCLI con s con-gsm2
 lang: C
 returncode: 0
-stdout: 6434 bytes
+stdout: 6530 bytes
 >>>
 connection.id:                          con-gsm2
 connection.uuid:                        UUID-con-gsm2-REPLACED-REPLACED-REPL
@@ -545,6 +549,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -650,18 +655,19 @@ gsm.initial-eps-bearer-refuse-pap:      no
 gsm.initial-eps-bearer-refuse-chap:     no
 gsm.initial-eps-bearer-refuse-mschap:   no
 gsm.initial-eps-bearer-refuse-mschapv2: no
+gsm.device-uid:                         --
 proxy.method:                           none
 proxy.browser-only:                     no
 proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 6610
+size: 6706
 location: src/tests/client/test-client.py:test_003()/19
 cmd: $NMCLI con s con-gsm2
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6467 bytes
+stdout: 6563 bytes
 >>>
 connection.id:                          con-gsm2
 connection.uuid:                        UUID-con-gsm2-REPLACED-REPLACED-REPL
@@ -693,6 +699,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -798,48 +805,49 @@ gsm.initial-eps-bearer-refuse-pap:      nie
 gsm.initial-eps-bearer-refuse-chap:     nie
 gsm.initial-eps-bearer-refuse-mschap:   nie
 gsm.initial-eps-bearer-refuse-mschapv2: nie
+gsm.device-uid:                         --
 proxy.method:                           none
 proxy.browser-only:                     nie
 proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 572
+size: 576
 location: src/tests/client/test-client.py:test_003()/20
 cmd: $NMCLI -g all con s con-gsm2
 lang: C
 returncode: 0
-stdout: 433 bytes
+stdout: 437 bytes
 >>>
-connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::: :0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 serial:5:8:even:1:100
-gsm:no:::<hidden>:0:::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no
+gsm:no:::<hidden>:0:::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no:
 proxy:none:no::
 
 <<<
-size: 582
+size: 586
 location: src/tests/client/test-client.py:test_003()/21
 cmd: $NMCLI -g all con s con-gsm2
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 433 bytes
+stdout: 437 bytes
 >>>
-connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::: :0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 serial:5:8:even:1:100
-gsm:no:::<hidden>:0:::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no
+gsm:no:::<hidden>:0:::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no:
 proxy:none:no::
 
 <<<
-size: 6567
+size: 6663
 location: src/tests/client/test-client.py:test_003()/22
 cmd: $NMCLI con s con-gsm3
 lang: C
 returncode: 0
-stdout: 6434 bytes
+stdout: 6530 bytes
 >>>
 connection.id:                          con-gsm3
 connection.uuid:                        UUID-con-gsm3-REPLACED-REPLACED-REPL
@@ -871,6 +879,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -976,18 +985,19 @@ gsm.initial-eps-bearer-refuse-pap:      no
 gsm.initial-eps-bearer-refuse-chap:     no
 gsm.initial-eps-bearer-refuse-mschap:   no
 gsm.initial-eps-bearer-refuse-mschapv2: no
+gsm.device-uid:                         --
 proxy.method:                           none
 proxy.browser-only:                     no
 proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 6610
+size: 6706
 location: src/tests/client/test-client.py:test_003()/23
 cmd: $NMCLI con s con-gsm3
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6467 bytes
+stdout: 6563 bytes
 >>>
 connection.id:                          con-gsm3
 connection.uuid:                        UUID-con-gsm3-REPLACED-REPLACED-REPL
@@ -1019,6 +1029,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1124,39 +1135,40 @@ gsm.initial-eps-bearer-refuse-pap:      nie
 gsm.initial-eps-bearer-refuse-chap:     nie
 gsm.initial-eps-bearer-refuse-mschap:   nie
 gsm.initial-eps-bearer-refuse-mschapv2: nie
+gsm.device-uid:                         --
 proxy.method:                           none
 proxy.browser-only:                     nie
 proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 573
+size: 577
 location: src/tests/client/test-client.py:test_003()/24
 cmd: $NMCLI -g all con s con-gsm3
 lang: C
 returncode: 0
-stdout: 434 bytes
+stdout: 438 bytes
 >>>
-connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::: :0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 serial:5:8:even:1:100
-gsm:no:::<hidden>:0: ::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no
+gsm:no:::<hidden>:0: ::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no:
 proxy:none:no::
 
 <<<
-size: 583
+size: 587
 location: src/tests/client/test-client.py:test_003()/25
 cmd: $NMCLI -g all con s con-gsm3
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 434 bytes
+stdout: 438 bytes
 >>>
-connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::: :0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 serial:5:8:even:1:100
-gsm:no:::<hidden>:0: ::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no
+gsm:no:::<hidden>:0: ::<hidden>:0:no::::auto:no:::<hidden>:0:yes:no:no:no:no:no:
 proxy:none:no::
 
 <<<
@@ -1300,12 +1312,12 @@ UUID                                  NAME
 UUID-ethernet-REPLACED-REPLACED-REPL  ethernet 
 
 <<<
-size: 5919
+size: 5972
 location: src/tests/client/test-client.py:test_003()/37
 cmd: $NMCLI -f ALL con s ethernet
 lang: C
 returncode: 0
-stdout: 5779 bytes
+stdout: 5832 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1337,6 +1349,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1433,12 +1446,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5954
+size: 6007
 location: src/tests/client/test-client.py:test_003()/38
 cmd: $NMCLI -f ALL con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5804 bytes
+stdout: 5857 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1470,6 +1483,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1586,12 +1600,12 @@ stdout: 51 bytes
 GENERAL.STATE:                          aktywowano
 
 <<<
-size: 6621
+size: 6674
 location: src/tests/client/test-client.py:test_003()/41
 cmd: $NMCLI con s ethernet
 lang: C
 returncode: 0
-stdout: 6488 bytes
+stdout: 6541 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1623,6 +1637,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1732,12 +1747,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6660
+size: 6713
 location: src/tests/client/test-client.py:test_003()/42
 cmd: $NMCLI con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6517 bytes
+stdout: 6570 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1769,6 +1784,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -2364,12 +2380,12 @@ UUID                                  NAME
 UUID-ethernet-REPLACED-REPLACED-REPL  ethernet 
 
 <<<
-size: 5919
+size: 5972
 location: src/tests/client/test-client.py:test_003()/62
 cmd: $NMCLI -f ALL con s ethernet
 lang: C
 returncode: 0
-stdout: 5779 bytes
+stdout: 5832 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2401,6 +2417,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -2497,12 +2514,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5954
+size: 6007
 location: src/tests/client/test-client.py:test_003()/63
 cmd: $NMCLI -f ALL con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5804 bytes
+stdout: 5857 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2534,6 +2551,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -2654,12 +2672,12 @@ GENERAL.STATE:                          aktywowano
 GENERAL.STATE:                          aktywowano
 
 <<<
-size: 7331
+size: 7384
 location: src/tests/client/test-client.py:test_003()/66
 cmd: $NMCLI con s ethernet
 lang: C
 returncode: 0
-stdout: 7198 bytes
+stdout: 7251 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2691,6 +2709,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -2814,12 +2833,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 7374
+size: 7427
 location: src/tests/client/test-client.py:test_003()/67
 cmd: $NMCLI con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7231 bytes
+stdout: 7284 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2851,6 +2870,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -3482,12 +3502,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 7334
+size: 7387
 location: src/tests/client/test-client.py:test_003()/84
 cmd: $NMCLI con s ethernet
 lang: C
 returncode: 0
-stdout: 7201 bytes
+stdout: 7254 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -3519,6 +3539,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -3642,12 +3663,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 7378
+size: 7431
 location: src/tests/client/test-client.py:test_003()/85
 cmd: $NMCLI con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7235 bytes
+stdout: 7288 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -3679,6 +3700,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -3802,12 +3824,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6664
+size: 6717
 location: src/tests/client/test-client.py:test_003()/86
 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 6491 bytes
+stdout: 6544 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -3839,6 +3861,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -3948,12 +3971,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6704
+size: 6757
 location: src/tests/client/test-client.py:test_003()/87
 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6521 bytes
+stdout: 6574 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -3985,6 +4008,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4304,12 +4328,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 7346
+size: 7399
 location: src/tests/client/test-client.py:test_003()/94
 cmd: $NMCLI --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 7201 bytes
+stdout: 7254 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -4341,6 +4365,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4464,12 +4489,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 7390
+size: 7443
 location: src/tests/client/test-client.py:test_003()/95
 cmd: $NMCLI --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7235 bytes
+stdout: 7288 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -4501,6 +4526,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4624,12 +4650,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6676
+size: 6729
 location: src/tests/client/test-client.py:test_003()/96
 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 6491 bytes
+stdout: 6544 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -4661,6 +4687,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4770,12 +4797,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6716
+size: 6769
 location: src/tests/client/test-client.py:test_003()/97
 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6521 bytes
+stdout: 6574 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -4807,6 +4834,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -5142,12 +5170,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 8587
+size: 8640
 location: src/tests/client/test-client.py:test_003()/104
 cmd: $NMCLI --pretty con s ethernet
 lang: C
 returncode: 0
-stdout: 8444 bytes
+stdout: 8497 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -5182,6 +5210,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -5318,12 +5347,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 8652
+size: 8705
 location: src/tests/client/test-client.py:test_003()/105
 cmd: $NMCLI --pretty con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 8499 bytes
+stdout: 8552 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -5358,6 +5387,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -5494,12 +5524,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7605
+size: 7658
 location: src/tests/client/test-client.py:test_003()/106
 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 7422 bytes
+stdout: 7475 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -5534,6 +5564,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -5652,12 +5683,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7658
+size: 7711
 location: src/tests/client/test-client.py:test_003()/107
 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7465 bytes
+stdout: 7518 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -5692,6 +5723,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -6060,12 +6092,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 8599
+size: 8652
 location: src/tests/client/test-client.py:test_003()/114
 cmd: $NMCLI --pretty --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 8444 bytes
+stdout: 8497 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -6100,6 +6132,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -6236,12 +6269,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 8664
+size: 8717
 location: src/tests/client/test-client.py:test_003()/115
 cmd: $NMCLI --pretty --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 8499 bytes
+stdout: 8552 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -6276,6 +6309,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -6412,12 +6446,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7617
+size: 7670
 location: src/tests/client/test-client.py:test_003()/116
 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 7422 bytes
+stdout: 7475 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -6452,6 +6486,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -6570,12 +6605,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7670
+size: 7723
 location: src/tests/client/test-client.py:test_003()/117
 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7465 bytes
+stdout: 7518 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -6610,6 +6645,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -6958,12 +6994,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
 
 <<<
-size: 3938
+size: 3959
 location: src/tests/client/test-client.py:test_003()/124
 cmd: $NMCLI --terse con s ethernet
 lang: C
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -6995,6 +7031,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -7118,12 +7155,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3948
+size: 3969
 location: src/tests/client/test-client.py:test_003()/125
 cmd: $NMCLI --terse con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7155,6 +7192,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -7278,12 +7316,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3588
+size: 3609
 location: src/tests/client/test-client.py:test_003()/126
 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7315,6 +7353,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -7424,12 +7463,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3598
+size: 3619
 location: src/tests/client/test-client.py:test_003()/127
 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7461,6 +7500,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -7776,12 +7816,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
 
 <<<
-size: 3950
+size: 3971
 location: src/tests/client/test-client.py:test_003()/134
 cmd: $NMCLI --terse --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7813,6 +7853,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -7936,12 +7977,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3960
+size: 3981
 location: src/tests/client/test-client.py:test_003()/135
 cmd: $NMCLI --terse --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7973,6 +8014,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -8096,12 +8138,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3600
+size: 3621
 location: src/tests/client/test-client.py:test_003()/136
 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8133,6 +8175,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -8242,12 +8285,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3610
+size: 3631
 location: src/tests/client/test-client.py:test_003()/137
 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8279,6 +8322,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -8598,15 +8642,15 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 5055
+size: 5083
 location: src/tests/client/test-client.py:test_003()/144
 cmd: $NMCLI --mode tabular con s ethernet
 lang: C
 returncode: 0
-stdout: 4906 bytes
+stdout: 4934 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      no              --           --                  --                         --                    auto  --                --            --            default      --                    -1 (default)             
@@ -8629,15 +8673,15 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 5105
+size: 5133
 location: src/tests/client/test-client.py:test_003()/145
 cmd: $NMCLI --mode tabular con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4946 bytes
+stdout: 4974 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      nie             --           --                  --                         --                    automatyczne  --                --            --            default      --                    -1 (default)             
@@ -8660,15 +8704,15 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deza
 
 
 <<<
-size: 4593
+size: 4621
 location: src/tests/client/test-client.py:test_003()/146
 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 4404 bytes
+stdout: 4432 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      no              --           --                  --                         --                    auto  --                --            --            default      --                    -1 (default)             
@@ -8687,15 +8731,15 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 4641
+size: 4669
 location: src/tests/client/test-client.py:test_003()/147
 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4442 bytes
+stdout: 4470 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      nie             --           --                  --                         --                    automatyczne  --                --            --            default      --                    -1 (default)             
@@ -8850,15 +8894,15 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 5067
+size: 5095
 location: src/tests/client/test-client.py:test_003()/154
 cmd: $NMCLI --mode tabular --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 4906 bytes
+stdout: 4934 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      no              --           --                  --                         --                    auto  --                --            --            default      --                    -1 (default)             
@@ -8881,15 +8925,15 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 5117
+size: 5145
 location: src/tests/client/test-client.py:test_003()/155
 cmd: $NMCLI --mode tabular --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4946 bytes
+stdout: 4974 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      nie             --           --                  --                         --                    automatyczne  --                --            --            default      --                    -1 (default)             
@@ -8912,15 +8956,15 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deza
 
 
 <<<
-size: 4605
+size: 4633
 location: src/tests/client/test-client.py:test_003()/156
 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 4404 bytes
+stdout: 4432 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      no              --           --                  --                         --                    auto  --                --            --            default      --                    -1 (default)             
@@ -8939,15 +8983,15 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 4653
+size: 4681
 location: src/tests/client/test-client.py:test_003()/157
 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4442 bytes
+stdout: 4470 bytes
 >>>
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 802-3-ethernet  --    0      --      nie             --           --                  --                         --                    automatyczne  --                --            --            default      --                    -1 (default)             
@@ -9118,19 +9162,19 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 8054
+size: 8096
 location: src/tests/client/test-client.py:test_003()/164
 cmd: $NMCLI --mode tabular --pretty con s ethernet
 lang: C
 returncode: 0
-stdout: 7896 bytes
+stdout: 7938 bytes
 >>>
 =========================================
   Connection profile details (ethernet)
 =========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9165,19 +9209,19 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 8184
+size: 8226
 location: src/tests/client/test-client.py:test_003()/165
 cmd: $NMCLI --mode tabular --pretty con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 8016 bytes
+stdout: 8058 bytes
 >>>
 ===========================================
   Szczegóły profilu połączenia (ethernet)
 ===========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9212,19 +9256,19 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deza
 
 
 <<<
-size: 7136
+size: 7178
 location: src/tests/client/test-client.py:test_003()/166
 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 6938 bytes
+stdout: 6980 bytes
 >>>
 =========================================
   Connection profile details (ethernet)
 =========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9251,19 +9295,19 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 7238
+size: 7280
 location: src/tests/client/test-client.py:test_003()/167
 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7030 bytes
+stdout: 7072 bytes
 >>>
 ===========================================
   Szczegóły profilu połączenia (ethernet)
 ===========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9466,19 +9510,19 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL  gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA  ethernet 
 
 <<<
-size: 8066
+size: 8108
 location: src/tests/client/test-client.py:test_003()/174
 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 7896 bytes
+stdout: 7938 bytes
 >>>
 =========================================
   Connection profile details (ethernet)
 =========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9513,19 +9557,19 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 8196
+size: 8238
 location: src/tests/client/test-client.py:test_003()/175
 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 8016 bytes
+stdout: 8058 bytes
 >>>
 ===========================================
   Szczegóły profilu połączenia (ethernet)
 ===========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9560,19 +9604,19 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deza
 
 
 <<<
-size: 7148
+size: 7190
 location: src/tests/client/test-client.py:test_003()/176
 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 6938 bytes
+stdout: 6980 bytes
 >>>
 =========================================
   Connection profile details (ethernet)
 =========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu   s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9599,19 +9643,19 @@ GENERAL  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  eth0     eth0      deac
 
 
 <<<
-size: 7250
+size: 7292
 location: src/tests/client/test-client.py:test_003()/177
 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7030 bytes
+stdout: 7072 bytes
 >>>
 ===========================================
   Szczegóły profilu połączenia (ethernet)
 ===========================================
-name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id        uuid                                  stable-id  type            interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  ethernet  UUID-ethernet-REPLACED-REPLACED-REPL  --         802-3-ethernet  --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name            port  speed  duplex  auto-negotiate  mac-address  cloned-mac-address  generate-mac-address-mask  mac-address-denylist  mtu           s390-subchannels  s390-nettype  s390-options  wake-on-lan  wake-on-lan-password  accept-all-mac-addresses 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -9794,14 +9838,14 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
 
 <<<
-size: 931
+size: 934
 location: src/tests/client/test-client.py:test_003()/184
 cmd: $NMCLI --mode tabular --terse con s ethernet
 lang: C
 returncode: 0
-stdout: 775 bytes
+stdout: 778 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -9811,14 +9855,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no:
 GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6::
 
 <<<
-size: 941
+size: 944
 location: src/tests/client/test-client.py:test_003()/185
 cmd: $NMCLI --mode tabular --terse con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 775 bytes
+stdout: 778 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -9828,14 +9872,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no:
 GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6::
 
 <<<
-size: 779
+size: 782
 location: src/tests/client/test-client.py:test_003()/186
 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 583 bytes
+stdout: 586 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -9843,14 +9887,14 @@ proxy:none:no::
 GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6::
 
 <<<
-size: 789
+size: 792
 location: src/tests/client/test-client.py:test_003()/187
 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 583 bytes
+stdout: 586 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -9956,14 +10000,14 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm
 UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
 
 <<<
-size: 943
+size: 946
 location: src/tests/client/test-client.py:test_003()/194
 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 775 bytes
+stdout: 778 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -9973,14 +10017,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no:
 GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6::
 
 <<<
-size: 953
+size: 956
 location: src/tests/client/test-client.py:test_003()/195
 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 775 bytes
+stdout: 778 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -9990,14 +10034,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no:
 GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6::
 
 <<<
-size: 791
+size: 794
 location: src/tests/client/test-client.py:test_003()/196
 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 583 bytes
+stdout: 586 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -10005,14 +10049,14 @@ proxy:none:no::
 GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6::
 
 <<<
-size: 801
+size: 804
 location: src/tests/client/test-client.py:test_003()/197
 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 583 bytes
+stdout: 586 bytes
 >>>
-connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 802-3-ethernet::0::no:::::auto::::default::-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
@@ -10326,12 +10370,12 @@ UUID:                                   UUID-con-xx1-REPLACED-REPLACED-REPLA
 TYPE:                                   ethernet
 
 <<<
-size: 7352
+size: 7405
 location: src/tests/client/test-client.py:test_003()/204
 cmd: $NMCLI --mode multiline con s ethernet
 lang: C
 returncode: 0
-stdout: 7201 bytes
+stdout: 7254 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -10363,6 +10407,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -10486,12 +10531,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 7396
+size: 7449
 location: src/tests/client/test-client.py:test_003()/205
 cmd: $NMCLI --mode multiline con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7235 bytes
+stdout: 7288 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -10523,6 +10568,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -10646,12 +10692,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6682
+size: 6735
 location: src/tests/client/test-client.py:test_003()/206
 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 6491 bytes
+stdout: 6544 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -10683,6 +10729,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -10792,12 +10839,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6722
+size: 6775
 location: src/tests/client/test-client.py:test_003()/207
 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6521 bytes
+stdout: 6574 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -10829,6 +10876,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -11352,12 +11400,12 @@ UUID:                                   UUID-con-xx1-REPLACED-REPLACED-REPLA
 TYPE:                                   ethernet
 
 <<<
-size: 7364
+size: 7417
 location: src/tests/client/test-client.py:test_003()/214
 cmd: $NMCLI --mode multiline --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 7201 bytes
+stdout: 7254 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11389,6 +11437,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -11512,12 +11561,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 7408
+size: 7461
 location: src/tests/client/test-client.py:test_003()/215
 cmd: $NMCLI --mode multiline --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7235 bytes
+stdout: 7288 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11549,6 +11598,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -11672,12 +11722,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6694
+size: 6747
 location: src/tests/client/test-client.py:test_003()/216
 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 6491 bytes
+stdout: 6544 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11709,6 +11759,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -11818,12 +11869,12 @@ GENERAL.ZONE:                           --
 GENERAL.MASTER-PATH:                    --
 
 <<<
-size: 6734
+size: 6787
 location: src/tests/client/test-client.py:test_003()/217
 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6521 bytes
+stdout: 6574 bytes
 >>>
 connection.id:                          ethernet
 connection.uuid:                        UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11855,6 +11906,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12416,12 +12468,12 @@ TYPE:                                   ethernet
 -------------------------------------------------------------------------------
 
 <<<
-size: 8604
+size: 8657
 location: src/tests/client/test-client.py:test_003()/224
 cmd: $NMCLI --mode multiline --pretty con s ethernet
 lang: C
 returncode: 0
-stdout: 8444 bytes
+stdout: 8497 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -12456,6 +12508,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12592,12 +12645,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 8669
+size: 8722
 location: src/tests/client/test-client.py:test_003()/225
 cmd: $NMCLI --mode multiline --pretty con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 8499 bytes
+stdout: 8552 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -12632,6 +12685,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12768,12 +12822,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7622
+size: 7675
 location: src/tests/client/test-client.py:test_003()/226
 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 7422 bytes
+stdout: 7475 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -12808,6 +12862,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12926,12 +12981,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7675
+size: 7728
 location: src/tests/client/test-client.py:test_003()/227
 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7465 bytes
+stdout: 7518 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -12966,6 +13021,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -13560,12 +13616,12 @@ TYPE:                                   ethernet
 -------------------------------------------------------------------------------
 
 <<<
-size: 8616
+size: 8669
 location: src/tests/client/test-client.py:test_003()/234
 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 8444 bytes
+stdout: 8497 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -13600,6 +13656,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -13736,12 +13793,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 8681
+size: 8734
 location: src/tests/client/test-client.py:test_003()/235
 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 8499 bytes
+stdout: 8552 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -13776,6 +13833,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -13912,12 +13970,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7634
+size: 7687
 location: src/tests/client/test-client.py:test_003()/236
 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 7422 bytes
+stdout: 7475 bytes
 >>>
 ===============================================================================
                      Connection profile details (ethernet)
@@ -13952,6 +14010,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -14070,12 +14129,12 @@ GENERAL.MASTER-PATH:                    --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7687
+size: 7740
 location: src/tests/client/test-client.py:test_003()/237
 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7465 bytes
+stdout: 7518 bytes
 >>>
 ===============================================================================
                     Szczegóły profilu połączenia (ethernet)
@@ -14110,6 +14169,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -14666,12 +14726,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA
 TYPE:802-3-ethernet
 
 <<<
-size: 3955
+size: 3976
 location: src/tests/client/test-client.py:test_003()/244
 cmd: $NMCLI --mode multiline --terse con s ethernet
 lang: C
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -14703,6 +14763,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -14826,12 +14887,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3965
+size: 3986
 location: src/tests/client/test-client.py:test_003()/245
 cmd: $NMCLI --mode multiline --terse con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -14863,6 +14924,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -14986,12 +15048,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3605
+size: 3626
 location: src/tests/client/test-client.py:test_003()/246
 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -15023,6 +15085,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -15132,12 +15195,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3615
+size: 3636
 location: src/tests/client/test-client.py:test_003()/247
 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -15169,6 +15232,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -15692,12 +15756,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA
 TYPE:802-3-ethernet
 
 <<<
-size: 3967
+size: 3988
 location: src/tests/client/test-client.py:test_003()/254
 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet
 lang: C
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -15729,6 +15793,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -15852,12 +15917,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3977
+size: 3998
 location: src/tests/client/test-client.py:test_003()/255
 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3796 bytes
+stdout: 3817 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -15889,6 +15954,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16012,12 +16078,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3617
+size: 3638
 location: src/tests/client/test-client.py:test_003()/256
 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: C
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -16049,6 +16115,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16158,12 +16225,12 @@ GENERAL.ZONE:
 GENERAL.MASTER-PATH:
 
 <<<
-size: 3627
+size: 3648
 location: src/tests/client/test-client.py:test_003()/257
 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3406 bytes
+stdout: 3427 bytes
 >>>
 connection.id:ethernet
 connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -16195,6 +16262,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
diff --git a/src/tests/client/test-client.check-on-disk/test_004.expected b/src/tests/client/test-client.check-on-disk/test_004.expected
index 09422f10..11ef7556 100644
--- a/src/tests/client/test-client.check-on-disk/test_004.expected
+++ b/src/tests/client/test-client.check-on-disk/test_004.expected
@@ -58,12 +58,12 @@ location: src/tests/client/test-client.py:test_004()/7
 cmd: $NMCLI connection mod con-xx1 ipv4.addresses 192.168.77.5/24 ipv4.routes '2.3.4.5/32 192.168.77.1' ipv6.addresses 1:2:3:4::6/64 ipv6.routes 1:2:3:4:5:6::5/128
 lang: C
 returncode: 0
-size: 6199
+size: 6252
 location: src/tests/client/test-client.py:test_004()/8
 cmd: $NMCLI con s con-xx1
 lang: C
 returncode: 0
-stdout: 6068 bytes
+stdout: 6121 bytes
 >>>
 connection.id:                          con-xx1
 connection.uuid:                        UUID-con-xx1-REPLACED-REPLACED-REPLA
@@ -95,6 +95,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -194,12 +195,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 6234
+size: 6287
 location: src/tests/client/test-client.py:test_004()/9
 cmd: $NMCLI con s con-xx1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6093 bytes
+stdout: 6146 bytes
 >>>
 connection.id:                          con-xx1
 connection.uuid:                        UUID-con-xx1-REPLACED-REPLACED-REPLA
@@ -231,6 +232,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -366,12 +368,12 @@ con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  vpn       --
 con-xx1    UUID-con-xx1-REPLACED-REPLACED-REPLA  wifi      --     
 
 <<<
-size: 5575
+size: 5628
 location: src/tests/client/test-client.py:test_004()/13
 cmd: $NMCLI con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5441 bytes
+stdout: 5494 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -403,6 +405,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -490,12 +493,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5602
+size: 5655
 location: src/tests/client/test-client.py:test_004()/14
 cmd: $NMCLI con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5458 bytes
+stdout: 5511 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -527,6 +530,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -686,12 +690,12 @@ con-xx1    UUID-con-xx1-REPLACED-REPLACED-REPLA  wifi      wlan0
 con-1      5fcfd6d7-1e63-3332-8826-a7eda103792d  ethernet  --     
 
 <<<
-size: 6703
+size: 6756
 location: src/tests/client/test-client.py:test_004()/21
 cmd: $NMCLI con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6569 bytes
+stdout: 6622 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -723,6 +727,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -831,12 +836,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6736
+size: 6789
 location: src/tests/client/test-client.py:test_004()/22
 cmd: $NMCLI con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6592 bytes
+stdout: 6645 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -868,6 +873,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1092,12 +1098,12 @@ con-xx1    UUID-con-xx1-REPLACED-REPLACED-REPLA  wifi      0          never
 con-1      5fcfd6d7-1e63-3332-8826-a7eda103792d  ethernet  0          never           yes          0                     no        /org/freedesktop/NetworkManager/Settings/Connection/1  no      --      --         --                                                  --     /etc/NetworkManager/system-connections/con-1     
 
 <<<
-size: 6709
+size: 6762
 location: src/tests/client/test-client.py:test_004()/27
 cmd: $NMCLI con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1129,6 +1135,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1237,12 +1244,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6746
+size: 6799
 location: src/tests/client/test-client.py:test_004()/28
 cmd: $NMCLI con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1274,6 +1281,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1382,12 +1390,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6709
+size: 6762
 location: src/tests/client/test-client.py:test_004()/29
 cmd: $NMCLI con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1419,6 +1427,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1527,12 +1536,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6746
+size: 6799
 location: src/tests/client/test-client.py:test_004()/30
 cmd: $NMCLI con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1564,6 +1573,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1672,12 +1682,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 5582
+size: 5635
 location: src/tests/client/test-client.py:test_004()/31
 cmd: $NMCLI -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5441 bytes
+stdout: 5494 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1709,6 +1719,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -1796,12 +1807,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5609
+size: 5662
 location: src/tests/client/test-client.py:test_004()/32
 cmd: $NMCLI -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5458 bytes
+stdout: 5511 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1833,6 +1844,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4530,12 +4542,12 @@ connection.type:                        802-11-wireless
 connection.interface-name:              --
 
 <<<
-size: 6721
+size: 6774
 location: src/tests/client/test-client.py:test_004()/77
 cmd: $NMCLI --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -4567,6 +4579,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4675,12 +4688,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6758
+size: 6811
 location: src/tests/client/test-client.py:test_004()/78
 cmd: $NMCLI --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -4712,6 +4725,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4820,12 +4834,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6721
+size: 6774
 location: src/tests/client/test-client.py:test_004()/79
 cmd: $NMCLI --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -4857,6 +4871,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -4965,12 +4980,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6758
+size: 6811
 location: src/tests/client/test-client.py:test_004()/80
 cmd: $NMCLI --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -5002,6 +5017,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -5110,12 +5126,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 5594
+size: 5647
 location: src/tests/client/test-client.py:test_004()/81
 cmd: $NMCLI --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5441 bytes
+stdout: 5494 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -5147,6 +5163,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -5234,12 +5251,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5621
+size: 5674
 location: src/tests/client/test-client.py:test_004()/82
 cmd: $NMCLI --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5458 bytes
+stdout: 5511 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -5271,6 +5288,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -7968,12 +7986,12 @@ connection.type:                        802-11-wireless
 connection.interface-name:              --
 
 <<<
-size: 7730
+size: 7783
 location: src/tests/client/test-client.py:test_004()/127
 cmd: $NMCLI --pretty con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -8008,6 +8026,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -8126,12 +8145,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7780
+size: 7833
 location: src/tests/client/test-client.py:test_004()/128
 cmd: $NMCLI --pretty con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -8166,6 +8185,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -8284,12 +8304,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7730
+size: 7783
 location: src/tests/client/test-client.py:test_004()/129
 cmd: $NMCLI --pretty con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -8324,6 +8344,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -8442,12 +8463,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7780
+size: 7833
 location: src/tests/client/test-client.py:test_004()/130
 cmd: $NMCLI --pretty con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -8482,6 +8503,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -8600,12 +8622,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 6211
+size: 6264
 location: src/tests/client/test-client.py:test_004()/131
 cmd: $NMCLI --pretty -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6060 bytes
+stdout: 6113 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -8640,6 +8662,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -8732,12 +8755,12 @@ proxy.pac-script:                       --
 -------------------------------------------------------------------------------
 
 <<<
-size: 6243
+size: 6296
 location: src/tests/client/test-client.py:test_004()/132
 cmd: $NMCLI --pretty -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6082 bytes
+stdout: 6135 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -8772,6 +8795,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12078,12 +12102,12 @@ connection.interface-name:              --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7742
+size: 7795
 location: src/tests/client/test-client.py:test_004()/177
 cmd: $NMCLI --pretty --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -12118,6 +12142,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12236,12 +12261,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7792
+size: 7845
 location: src/tests/client/test-client.py:test_004()/178
 cmd: $NMCLI --pretty --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -12276,6 +12301,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12394,12 +12420,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7742
+size: 7795
 location: src/tests/client/test-client.py:test_004()/179
 cmd: $NMCLI --pretty --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -12434,6 +12460,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12552,12 +12579,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7792
+size: 7845
 location: src/tests/client/test-client.py:test_004()/180
 cmd: $NMCLI --pretty --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -12592,6 +12619,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12710,12 +12738,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 6223
+size: 6276
 location: src/tests/client/test-client.py:test_004()/181
 cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6060 bytes
+stdout: 6113 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -12750,6 +12778,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -12842,12 +12871,12 @@ proxy.pac-script:                       --
 -------------------------------------------------------------------------------
 
 <<<
-size: 6255
+size: 6308
 location: src/tests/client/test-client.py:test_004()/182
 cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6082 bytes
+stdout: 6135 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -12882,6 +12911,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -16188,12 +16218,12 @@ connection.interface-name:              --
 -------------------------------------------------------------------------------
 
 <<<
-size: 3428
+size: 3449
 location: src/tests/client/test-client.py:test_004()/227
 cmd: $NMCLI --terse con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16225,6 +16255,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16333,12 +16364,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3438
+size: 3459
 location: src/tests/client/test-client.py:test_004()/228
 cmd: $NMCLI --terse con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16370,6 +16401,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16478,12 +16510,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3428
+size: 3449
 location: src/tests/client/test-client.py:test_004()/229
 cmd: $NMCLI --terse con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16515,6 +16547,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16623,12 +16656,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3438
+size: 3459
 location: src/tests/client/test-client.py:test_004()/230
 cmd: $NMCLI --terse con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16660,6 +16693,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16768,12 +16802,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 2853
+size: 2874
 location: src/tests/client/test-client.py:test_004()/231
 cmd: $NMCLI --terse -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16805,6 +16839,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -16892,12 +16927,12 @@ proxy.pac-url:
 proxy.pac-script:
 
 <<<
-size: 2863
+size: 2884
 location: src/tests/client/test-client.py:test_004()/232
 cmd: $NMCLI --terse -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16929,6 +16964,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -19596,12 +19632,12 @@ connection.type:802-11-wireless
 connection.interface-name:
 
 <<<
-size: 3440
+size: 3461
 location: src/tests/client/test-client.py:test_004()/277
 cmd: $NMCLI --terse --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -19633,6 +19669,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -19741,12 +19778,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3450
+size: 3471
 location: src/tests/client/test-client.py:test_004()/278
 cmd: $NMCLI --terse --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -19778,6 +19815,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -19886,12 +19924,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3440
+size: 3461
 location: src/tests/client/test-client.py:test_004()/279
 cmd: $NMCLI --terse --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -19923,6 +19961,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -20031,12 +20070,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3450
+size: 3471
 location: src/tests/client/test-client.py:test_004()/280
 cmd: $NMCLI --terse --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -20068,6 +20107,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -20176,12 +20216,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 2865
+size: 2886
 location: src/tests/client/test-client.py:test_004()/281
 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -20213,6 +20253,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -20300,12 +20341,12 @@ proxy.pac-url:
 proxy.pac-script:
 
 <<<
-size: 2875
+size: 2896
 location: src/tests/client/test-client.py:test_004()/282
 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -20337,6 +20378,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -23004,15 +23046,15 @@ connection.type:802-11-wireless
 connection.interface-name:
 
 <<<
-size: 4546
+size: 4574
 location: src/tests/client/test-client.py:test_004()/327
 cmd: $NMCLI --mode tabular con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 4396 bytes
+stdout: 4424 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  no                  no               --              --         --         0 (default)   yes                            -1 (default)        -1 (default)  --             --         0x0 (none)           no             yes       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -23033,15 +23075,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 4585
+size: 4613
 location: src/tests/client/test-client.py:test_004()/328
 cmd: $NMCLI --mode tabular con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4425 bytes
+stdout: 4453 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  nie                 nie              --              --         --         0 (default)   tak                            -1 (default)        -1 (default)  --             --         0x0 (none)           nie            tak       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -23062,15 +23104,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 4546
+size: 4574
 location: src/tests/client/test-client.py:test_004()/329
 cmd: $NMCLI --mode tabular con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 4396 bytes
+stdout: 4424 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  no                  no               --              --         --         0 (default)   yes                            -1 (default)        -1 (default)  --             --         0x0 (none)           no             yes       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -23091,15 +23133,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 4585
+size: 4613
 location: src/tests/client/test-client.py:test_004()/330
 cmd: $NMCLI --mode tabular con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4425 bytes
+stdout: 4453 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  nie                 nie              --              --         --         0 (default)   tak                            -1 (default)        -1 (default)  --             --         0x0 (none)           nie            tak       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -23120,15 +23162,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 3794
+size: 3822
 location: src/tests/client/test-client.py:test_004()/331
 cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3637 bytes
+stdout: 3665 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  no                  no               --              --         --         0 (default)   yes                            -1 (default)        -1 (default)  --             --         0x0 (none)           no             yes       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -23144,15 +23186,15 @@ proxy  none    no            --       --
 
 
 <<<
-size: 3822
+size: 3850
 location: src/tests/client/test-client.py:test_004()/332
 cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3655 bytes
+stdout: 3683 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  nie                 nie              --              --         --         0 (default)   tak                            -1 (default)        -1 (default)  --             --         0x0 (none)           nie            tak       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -24658,15 +24700,15 @@ interface-name
 
 
 <<<
-size: 4558
+size: 4586
 location: src/tests/client/test-client.py:test_004()/377
 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 4396 bytes
+stdout: 4424 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  no                  no               --              --         --         0 (default)   yes                            -1 (default)        -1 (default)  --             --         0x0 (none)           no             yes       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -24687,15 +24729,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 4597
+size: 4625
 location: src/tests/client/test-client.py:test_004()/378
 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4425 bytes
+stdout: 4453 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  nie                 nie              --              --         --         0 (default)   tak                            -1 (default)        -1 (default)  --             --         0x0 (none)           nie            tak       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -24716,15 +24758,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 4558
+size: 4586
 location: src/tests/client/test-client.py:test_004()/379
 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 4396 bytes
+stdout: 4424 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  no                  no               --              --         --         0 (default)   yes                            -1 (default)        -1 (default)  --             --         0x0 (none)           no             yes       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -24745,15 +24787,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 4597
+size: 4625
 location: src/tests/client/test-client.py:test_004()/380
 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 4425 bytes
+stdout: 4453 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  nie                 nie              --              --         --         0 (default)   tak                            -1 (default)        -1 (default)  --             --         0x0 (none)           nie            tak       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -24774,15 +24816,15 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 3806
+size: 3834
 location: src/tests/client/test-client.py:test_004()/381
 cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3637 bytes
+stdout: 3665 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  no                  no               --              --         --         0 (default)   yes                            -1 (default)        -1 (default)  --             --         0x0 (none)           no             yes       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -24798,15 +24840,15 @@ proxy  none    no            --       --
 
 
 <<<
-size: 3834
+size: 3862
 location: src/tests/client/test-client.py:test_004()/382
 cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3655 bytes
+stdout: 3683 bytes
 >>>
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ipv4  auto    --   --          --           0             --         --       --      -1            0 (unspec)   --             -1 (default)        -1 (default)       -1 (default)  nie                 nie              --              --         --         0 (default)   tak                            -1 (default)        -1 (default)  --             --         0x0 (none)           nie            tak       -1 (default)      -1 (default)  --                            -1 (default)              0 (default)  --                   -1 (default)       --                 0 (default)            
@@ -26312,19 +26354,19 @@ interface-name
 
 
 <<<
-size: 7089
+size: 7131
 location: src/tests/client/test-client.py:test_004()/427
 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6930 bytes
+stdout: 6972 bytes
 >>>
 ==========================================
   Connection profile details (con-vpn-1)
 ==========================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -26354,19 +26396,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 7175
+size: 7217
 location: src/tests/client/test-client.py:test_004()/428
 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7006 bytes
+stdout: 7048 bytes
 >>>
 ============================================
   Szczegóły profilu połączenia (con-vpn-1)
 ============================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -26396,19 +26438,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 7089
+size: 7131
 location: src/tests/client/test-client.py:test_004()/429
 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6930 bytes
+stdout: 6972 bytes
 >>>
 ==========================================
   Connection profile details (con-vpn-1)
 ==========================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -26438,19 +26480,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 7175
+size: 7217
 location: src/tests/client/test-client.py:test_004()/430
 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7006 bytes
+stdout: 7048 bytes
 >>>
 ============================================
   Szczegóły profilu połączenia (con-vpn-1)
 ============================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -26480,19 +26522,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 5751
+size: 5793
 location: src/tests/client/test-client.py:test_004()/431
 cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5585 bytes
+stdout: 5627 bytes
 >>>
 ==========================================
   Connection profile details (con-vpn-1)
 ==========================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -26512,19 +26554,19 @@ proxy  none    no            --       --
 
 
 <<<
-size: 5798
+size: 5840
 location: src/tests/client/test-client.py:test_004()/432
 cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5622 bytes
+stdout: 5664 bytes
 >>>
 ============================================
   Szczegóły profilu połączenia (con-vpn-1)
 ============================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -28620,19 +28662,19 @@ interface-name
 
 
 <<<
-size: 7101
+size: 7143
 location: src/tests/client/test-client.py:test_004()/477
 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6930 bytes
+stdout: 6972 bytes
 >>>
 ==========================================
   Connection profile details (con-vpn-1)
 ==========================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -28662,19 +28704,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 7187
+size: 7229
 location: src/tests/client/test-client.py:test_004()/478
 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7006 bytes
+stdout: 7048 bytes
 >>>
 ============================================
   Szczegóły profilu połączenia (con-vpn-1)
 ============================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -28704,19 +28746,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 7101
+size: 7143
 location: src/tests/client/test-client.py:test_004()/479
 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6930 bytes
+stdout: 6972 bytes
 >>>
 ==========================================
   Connection profile details (con-vpn-1)
 ==========================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -28746,19 +28788,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 - VPN connected  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 7187
+size: 7229
 location: src/tests/client/test-client.py:test_004()/480
 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7006 bytes
+stdout: 7048 bytes
 >>>
 ============================================
   Szczegóły profilu połączenia (con-vpn-1)
 ============================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -28788,19 +28830,19 @@ NAME  TYPE     USERNAME  GATEWAY  BANNER                            VPN-STATE
 VPN   openvpn  --        --       *** VPN connection con-vpn-1 ***  5 — Połączono z VPN  key1 = val1 | key2 = val2 | key3 = val3 
 
 <<<
-size: 5763
+size: 5805
 location: src/tests/client/test-client.py:test_004()/481
 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5585 bytes
+stdout: 5627 bytes
 >>>
 ==========================================
   Connection profile details (con-vpn-1)
 ==========================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered  lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              yes          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   unknown  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -28820,19 +28862,19 @@ proxy  none    no            --       --
 
 
 <<<
-size: 5810
+size: 5852
 location: src/tests/client/test-client.py:test_004()/482
 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5622 bytes
+stdout: 5664 bytes
 >>>
 ============================================
   Szczegóły profilu połączenia (con-vpn-1)
 ============================================
-name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  mptcp-flags    wait-device-timeout  wait-activation-delay 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
+name        id         uuid                                  stable-id  type  interface-name  autoconnect  autoconnect-priority  autoconnect-retries  multi-connect  auth-retries  timestamp  permissions  zone  controller  master  slave-type  port-type  autoconnect-slaves  autoconnect-ports  down-on-poweroff  secondaries  gateway-ping-timeout  ip-ping-timeout  ip-ping-addresses  ip-ping-addresses-require-all  metered   lldp     mdns          llmnr         dns-over-tls  dnssec        mptcp-flags    wait-device-timeout  wait-activation-delay 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+connection  con-vpn-1  UUID-con-vpn-1-REPLACED-REPLACED-REP  --         vpn   --              tak          0                     -1 (default)         0 (default)    -1            0          --           --    --          --      --          --         -1 (default)        -1 (default)       -1 (default)      --           0                     0                --                 -1 (default)                   nieznane  default  -1 (default)  -1 (default)  -1 (default)  -1 (default)  0x0 (default)  -1                   -1                    
 
 name  method  dns  dns-search  dns-options  dns-priority  addresses  gateway  routes  route-metric  route-table  routing-rules  replace-local-rule  dhcp-send-release  routed-dns    ignore-auto-routes  ignore-auto-dns  dhcp-client-id  dhcp-iaid  dhcp-dscp  dhcp-timeout  dhcp-send-hostname-deprecated  dhcp-send-hostname  forwarding    dhcp-hostname  dhcp-fqdn  dhcp-hostname-flags  never-default  may-fail  required-timeout  dad-timeout   dhcp-vendor-class-identifier  dhcp-ipv6-only-preferred  link-local   dhcp-reject-servers  auto-route-ext-gw  shared-dhcp-range  shared-dhcp-lease-time 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -30928,14 +30970,14 @@ interface-name
 
 
 <<<
-size: 886
+size: 889
 location: src/tests/client/test-client.py:test_004()/527
 cmd: $NMCLI --mode tabular --terse con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -30944,14 +30986,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 896
+size: 899
 location: src/tests/client/test-client.py:test_004()/528
 cmd: $NMCLI --mode tabular --terse con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -30960,14 +31002,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 886
+size: 889
 location: src/tests/client/test-client.py:test_004()/529
 cmd: $NMCLI --mode tabular --terse con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -30976,14 +31018,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 896
+size: 899
 location: src/tests/client/test-client.py:test_004()/530
 cmd: $NMCLI --mode tabular --terse con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -30992,28 +31034,28 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 593
+size: 596
 location: src/tests/client/test-client.py:test_004()/531
 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 429 bytes
+stdout: 432 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
 proxy:none:no::
 
 <<<
-size: 603
+size: 606
 location: src/tests/client/test-client.py:test_004()/532
 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 429 bytes
+stdout: 432 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -31866,14 +31908,14 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA
 
 
 <<<
-size: 898
+size: 901
 location: src/tests/client/test-client.py:test_004()/577
 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -31882,14 +31924,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 908
+size: 911
 location: src/tests/client/test-client.py:test_004()/578
 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -31898,14 +31940,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 898
+size: 901
 location: src/tests/client/test-client.py:test_004()/579
 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -31914,14 +31956,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 908
+size: 911
 location: src/tests/client/test-client.py:test_004()/580
 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 729 bytes
+stdout: 732 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -31930,28 +31972,28 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:
 VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3
 
 <<<
-size: 605
+size: 608
 location: src/tests/client/test-client.py:test_004()/581
 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 429 bytes
+stdout: 432 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
 proxy:none:no::
 
 <<<
-size: 615
+size: 618
 location: src/tests/client/test-client.py:test_004()/582
 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 429 bytes
+stdout: 432 bytes
 >>>
-connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:0x0:-1:-1
+connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1:-1:-1::0:0::-1:unknown:default:-1:-1:-1:-1:0x0:-1:-1
 ipv4:auto::::0::::-1:0::-1:-1:-1:no:no::::0:yes:-1:-1:::0x0:no:yes:-1:-1::-1:0::-1::0
 ipv6:auto::::0::::-1:0::-1:-1:-1:no:no:no:yes:-1:-1:0:0:default:0:auto::::0:yes:-1::0x0:-1:
 vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0
@@ -32804,12 +32846,12 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA
 
 
 <<<
-size: 6727
+size: 6780
 location: src/tests/client/test-client.py:test_004()/627
 cmd: $NMCLI --mode multiline con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32841,6 +32883,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -32949,12 +32992,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6764
+size: 6817
 location: src/tests/client/test-client.py:test_004()/628
 cmd: $NMCLI --mode multiline con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32986,6 +33029,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -33094,12 +33138,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6727
+size: 6780
 location: src/tests/client/test-client.py:test_004()/629
 cmd: $NMCLI --mode multiline con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -33131,6 +33175,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -33239,12 +33284,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6764
+size: 6817
 location: src/tests/client/test-client.py:test_004()/630
 cmd: $NMCLI --mode multiline con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -33276,6 +33321,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -33384,12 +33430,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 5600
+size: 5653
 location: src/tests/client/test-client.py:test_004()/631
 cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5441 bytes
+stdout: 5494 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -33421,6 +33467,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -33508,12 +33555,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5627
+size: 5680
 location: src/tests/client/test-client.py:test_004()/632
 cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5458 bytes
+stdout: 5511 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -33545,6 +33592,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -36752,12 +36800,12 @@ connection.type:                        802-11-wireless
 connection.interface-name:              --
 
 <<<
-size: 6739
+size: 6792
 location: src/tests/client/test-client.py:test_004()/677
 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -36789,6 +36837,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -36897,12 +36946,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6776
+size: 6829
 location: src/tests/client/test-client.py:test_004()/678
 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -36934,6 +36983,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -37042,12 +37092,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6739
+size: 6792
 location: src/tests/client/test-client.py:test_004()/679
 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6575 bytes
+stdout: 6628 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -37079,6 +37129,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -37187,12 +37238,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 6776
+size: 6829
 location: src/tests/client/test-client.py:test_004()/680
 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6602 bytes
+stdout: 6655 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -37224,6 +37275,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -37332,12 +37384,12 @@ VPN.CFG[2]:                             key2 = val2
 VPN.CFG[3]:                             key3 = val3
 
 <<<
-size: 5612
+size: 5665
 location: src/tests/client/test-client.py:test_004()/681
 cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 5441 bytes
+stdout: 5494 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -37369,6 +37421,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -37456,12 +37509,12 @@ proxy.pac-url:                          --
 proxy.pac-script:                       --
 
 <<<
-size: 5639
+size: 5692
 location: src/tests/client/test-client.py:test_004()/682
 cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 5458 bytes
+stdout: 5511 bytes
 >>>
 connection.id:                          con-vpn-1
 connection.uuid:                        UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -37493,6 +37546,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -40700,12 +40754,12 @@ connection.type:                        802-11-wireless
 connection.interface-name:              --
 
 <<<
-size: 7747
+size: 7800
 location: src/tests/client/test-client.py:test_004()/727
 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -40740,6 +40794,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -40858,12 +40913,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7797
+size: 7850
 location: src/tests/client/test-client.py:test_004()/728
 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -40898,6 +40953,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -41016,12 +41072,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7747
+size: 7800
 location: src/tests/client/test-client.py:test_004()/729
 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -41056,6 +41112,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -41174,12 +41231,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7797
+size: 7850
 location: src/tests/client/test-client.py:test_004()/730
 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -41214,6 +41271,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -41332,12 +41390,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 6228
+size: 6281
 location: src/tests/client/test-client.py:test_004()/731
 cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6060 bytes
+stdout: 6113 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -41372,6 +41430,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -41464,12 +41523,12 @@ proxy.pac-script:                       --
 -------------------------------------------------------------------------------
 
 <<<
-size: 6260
+size: 6313
 location: src/tests/client/test-client.py:test_004()/732
 cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6082 bytes
+stdout: 6135 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -41504,6 +41563,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -45350,12 +45410,12 @@ connection.interface-name:              --
 -------------------------------------------------------------------------------
 
 <<<
-size: 7759
+size: 7812
 location: src/tests/client/test-client.py:test_004()/777
 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -45390,6 +45450,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -45508,12 +45569,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7809
+size: 7862
 location: src/tests/client/test-client.py:test_004()/778
 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -45548,6 +45609,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -45666,12 +45728,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7759
+size: 7812
 location: src/tests/client/test-client.py:test_004()/779
 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 7586 bytes
+stdout: 7639 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -45706,6 +45768,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -45824,12 +45887,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 7809
+size: 7862
 location: src/tests/client/test-client.py:test_004()/780
 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 7626 bytes
+stdout: 7679 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -45864,6 +45927,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -45982,12 +46046,12 @@ VPN.CFG[3]:                             key3 = val3
 -------------------------------------------------------------------------------
 
 <<<
-size: 6240
+size: 6293
 location: src/tests/client/test-client.py:test_004()/781
 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 6060 bytes
+stdout: 6113 bytes
 >>>
 ===============================================================================
                     Connection profile details (con-vpn-1)
@@ -46022,6 +46086,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -46114,12 +46179,12 @@ proxy.pac-script:                       --
 -------------------------------------------------------------------------------
 
 <<<
-size: 6272
+size: 6325
 location: src/tests/client/test-client.py:test_004()/782
 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 6082 bytes
+stdout: 6135 bytes
 >>>
 ===============================================================================
                    Szczegóły profilu połączenia (con-vpn-1)
@@ -46154,6 +46219,7 @@ connection.lldp:                        default
 connection.mdns:                        -1 (default)
 connection.llmnr:                       -1 (default)
 connection.dns-over-tls:                -1 (default)
+connection.dnssec:                      -1 (default)
 connection.mptcp-flags:                 0x0 (default)
 connection.wait-device-timeout:         -1
 connection.wait-activation-delay:       -1
@@ -50000,12 +50066,12 @@ connection.interface-name:              --
 -------------------------------------------------------------------------------
 
 <<<
-size: 3445
+size: 3466
 location: src/tests/client/test-client.py:test_004()/827
 cmd: $NMCLI --mode multiline --terse con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -50037,6 +50103,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -50145,12 +50212,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3455
+size: 3476
 location: src/tests/client/test-client.py:test_004()/828
 cmd: $NMCLI --mode multiline --terse con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -50182,6 +50249,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -50290,12 +50358,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3445
+size: 3466
 location: src/tests/client/test-client.py:test_004()/829
 cmd: $NMCLI --mode multiline --terse con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -50327,6 +50395,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -50435,12 +50504,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3455
+size: 3476
 location: src/tests/client/test-client.py:test_004()/830
 cmd: $NMCLI --mode multiline --terse con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -50472,6 +50541,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -50580,12 +50650,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 2870
+size: 2891
 location: src/tests/client/test-client.py:test_004()/831
 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -50617,6 +50687,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -50704,12 +50775,12 @@ proxy.pac-url:
 proxy.pac-script:
 
 <<<
-size: 2880
+size: 2901
 location: src/tests/client/test-client.py:test_004()/832
 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -50741,6 +50812,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -53948,12 +54020,12 @@ connection.type:802-11-wireless
 connection.interface-name:
 
 <<<
-size: 3457
+size: 3478
 location: src/tests/client/test-client.py:test_004()/877
 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -53985,6 +54057,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -54093,12 +54166,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3467
+size: 3488
 location: src/tests/client/test-client.py:test_004()/878
 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -54130,6 +54203,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -54238,12 +54312,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3457
+size: 3478
 location: src/tests/client/test-client.py:test_004()/879
 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -54275,6 +54349,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -54383,12 +54458,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 3467
+size: 3488
 location: src/tests/client/test-client.py:test_004()/880
 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 3285 bytes
+stdout: 3306 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -54420,6 +54495,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -54528,12 +54604,12 @@ VPN.CFG[2]:key2 = val2
 VPN.CFG[3]:key3 = val3
 
 <<<
-size: 2882
+size: 2903
 location: src/tests/client/test-client.py:test_004()/881
 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1
 lang: C
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -54565,6 +54641,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
@@ -54652,12 +54729,12 @@ proxy.pac-url:
 proxy.pac-script:
 
 <<<
-size: 2892
+size: 2913
 location: src/tests/client/test-client.py:test_004()/882
 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1
 lang: pl_PL.UTF-8
 returncode: 0
-stdout: 2703 bytes
+stdout: 2724 bytes
 >>>
 connection.id:con-vpn-1
 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -54689,6 +54766,7 @@ connection.lldp:default
 connection.mdns:-1
 connection.llmnr:-1
 connection.dns-over-tls:-1
+connection.dnssec:-1
 connection.mptcp-flags:0x0
 connection.wait-device-timeout:-1
 connection.wait-activation-delay:-1
diff --git a/src/tests/client/test-client.py b/src/tests/client/test-client.py
index 80080056..6cf1924c 100755
--- a/src/tests/client/test-client.py
+++ b/src/tests/client/test-client.py
@@ -97,8 +97,6 @@ ENV_NM_TEST_UBSAN_OPTIONS = "NM_TEST_UBSAN_OPTIONS"
 # Valgrind is always disabled, if NM_TEST_REGENERATE is enabled.
 ENV_NM_TEST_VALGRIND = "NM_TEST_VALGRIND"
 
-ENV_LIBTOOL = "LIBTOOL"
-
 ###############################################################################
 
 import collections
@@ -678,9 +676,6 @@ class Util:
                 "--log-file=" + valgrind_log[1],
                 cmd,
             ]
-            libtool = conf.get(ENV_LIBTOOL)
-            if libtool:
-                argv = list(libtool) + ["--mode=execute"] + argv
         else:
             argv = [cmd]
 
@@ -693,7 +688,17 @@ class Util:
         micro = ver & 0xFF
         minor = (ver >> 8) & 0xFF
         major = ver >> 16
-        return "%s.%s.%s" % (major, minor, micro)
+
+        # Convert 1.57.1 -> 1.57.1-dev and 1.55.90 -> 1.56-rc1
+        if micro >= 90:
+            minor += 1
+            micro = "-rc" + str(micro - 89)
+        elif minor % 2 == 1:
+            micro = f".{micro}-dev"
+        else:
+            micro = f".{micro}"
+
+        return "%s.%s%s" % (major, minor, micro)
 
 
 ###############################################################################
@@ -784,21 +789,6 @@ class Configuration:
                     v = "print_stacktrace=1:halt_on_error=1"
                 else:
                     assert False
-        elif name == ENV_LIBTOOL:
-            v = os.environ.get(name, None)
-            if v is None:
-                v = os.path.abspath(
-                    os.path.dirname(self.get("ENV_NM_TEST_CLIENT_NMCLI_UNCHECKED_PATH"))
-                    + "/../../libtool"
-                )
-                if not os.path.isfile(v):
-                    v = None
-                else:
-                    v = [v]
-            elif not v:
-                v = None
-            else:
-                v = shlex.split(v)
         else:
             raise Exception()
         self._values[name] = v
@@ -3284,7 +3274,7 @@ def main():
                     sys.executable,
                     __file__,
                     "--started-with-dbus-session",
-                    *sys.argv[1:]
+                    *sys.argv[1:],
                 )
             except OSError as e:
                 if e.errno != errno.ENOENT:
diff --git a/src/tests/client/test-client.sh b/src/tests/client/test-client.sh
index dd08e4d8..ac07dd20 100755
--- a/src/tests/client/test-client.sh
+++ b/src/tests/client/test-client.sh
@@ -72,12 +72,10 @@ fi
 test -d "$BUILDDIR" || die "BUILDDIR \"$BUILDDIR\" does not exist?"
 test -d "$SRCDIR" || die "SRCDIR \"$SRCDIR\" does not exist?"
 
-if test -f "$BUILDDIR/src/libnm-client-impl/.libs/libnm.so" ; then
-    LIBDIR="$BUILDDIR/src/libnm-client-impl/.libs"
-elif test -f "$BUILDDIR/src/libnm-client-impl/libnm.so" ; then
+if test -f "$BUILDDIR/src/libnm-client-impl/libnm.so" ; then
     LIBDIR="$BUILDDIR/src/libnm-client-impl"
 else
-    die "libnm.so does not exist under expected paths in \"$BUILDDIR/src/libnm-client-impl/{.,.libs}/\""
+    die "libnm.so does not exist under expected paths in \"$BUILDDIR/src/libnm-client-impl/\""
 fi
 
 mkdir -p "$BUILDDIR/src/tests/client/" || die "failure to create build output directory \"$BUILDDIR/src/tests/client/\""
@@ -88,12 +86,6 @@ export GI_TYPELIB_PATH="$BUILDDIR/src/libnm-client-impl${GI_TYPELIB_PATH:+:$GI_T
 export LD_LIBRARY_PATH="$LIBDIR${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
 export NM_TEST_CLIENT_BUILDDIR="$BUILDDIR"
 
-# Run nmcli at least once. With libtool, nmcli is a shell script and with LTO
-# this seems to perform some slow setup during the first run. If we do that
-# during the test, it will timeout and fail.
-"$NM_TEST_CLIENT_NMCLI_PATH" --version &>/dev/null || :
-"$NM_TEST_CLIENT_CLOUD_SETUP_PATH" --invalid &>/dev/null || :
-
 # we first collect all the output in "test-client.log" and print it at once
 # afterwards. The only reason is that when you run with `make -j` that the
 # test output is grouped together.
diff --git a/tools/create-exports-NetworkManager.sh b/tools/create-exports-NetworkManager.sh
index 38bcdaf6..e6fc01b9 100755
--- a/tools/create-exports-NetworkManager.sh
+++ b/tools/create-exports-NetworkManager.sh
@@ -18,14 +18,8 @@ _sort() {
 }
 
 call_nm() {
-    if [ -n "$from_meson" ]; then
-        "${NM:-nm}" "$1" |
-            sed -n 's/.* \([^ ]\) \([^ ]*\)$/\1 \2/p'
-    else
-        libtool=(${LIBTOOL:-libtool})
-        ${libtool[@]} --mode=execute "${NM:-nm}" "$1" |
-            sed -n 's/.* \([^ ]\) \([^ ]*\)$/\1 \2/p'
-    fi
+    "${NM:-nm}" -D "$1" |
+        sed -n 's/.* \([^ ]\) \([^ ]*\)$/\1 \2/p'
 }
 
 get_symbols_nm () {
@@ -42,9 +36,9 @@ EOF
 }
 
 get_symbols_missing() {
-    (for f in $(find ./src/core/settings/plugins/*/${libs} \
-                     ./src/core/devices/*/${libs} \
-                     ./src/core/ppp/${libs} -name '*.so' 2>/dev/null); do
+    (for f in $(find ./src/core/settings/plugins/*/ \
+                     ./src/core/devices/*/ \
+                     ./src/core/ppp/ -name '*.so' 2>/dev/null); do
         call_nm "$f" |
             sed -n 's/^\([U]\) \(\(nm_\|nmp_\|_nm\|NM\|_NM\|nmtst_\|c_siphash_\|c_list_\).*\)$/\2/p'
     done) |
@@ -61,14 +55,6 @@ do_update() {
     do_generate > ./src/core/NetworkManager.ver
 }
 
-if [ -f "build.ninja" ]; then
-    from_meson=1
-    libs=
-else
-    from_meson=
-    libs=.libs/
-fi
-
 SYMBOLS_MISSING="$(get_symbols_missing | pretty)"
 SYMBOLS_EXPLICIT="$(get_symbols_explicit | pretty)"
 
@@ -86,7 +72,7 @@ local:
 EOF
 }
 
-test -f ./src/core/${libs}libNetworkManager.a || die "must be called from NetworkManager top build dir after building the tree"
+test -f ./src/core/libNetworkManager.a || die "must be called from NetworkManager top build dir after building the tree"
 
 case "$1" in
     --called-from-build)
@@ -105,4 +91,3 @@ case "$1" in
         do_generate
         ;;
 esac
-
diff --git a/tools/meson-post-install.sh b/tools/meson-post-install.sh
index fe85d417..2560e3d1 100755
--- a/tools/meson-post-install.sh
+++ b/tools/meson-post-install.sh
@@ -7,7 +7,7 @@ nm_pkglibdir="$4"
 nm_pkgstatedir="$5"
 nm_mandir="$6"
 nm_sysconfdir="$7"
-enable_docs="$8"
+enable_man="$8"
 enable_ifcfg_rh="$9"
 enable_nm_cloud_setup="${10}"
 install_systemdunitdir="${11}"
@@ -40,7 +40,7 @@ done
 mkdir -p "${DESTDIR}${nm_pkgstatedir}"
 chmod 0700 "${DESTDIR}${nm_pkgstatedir}"
 
-if [ "$enable_docs" = 1 ]; then
+if [ "$enable_man" = 1 ]; then
 
     for alias in nmtui-connect nmtui-edit nmtui-hostname; do
         ln -fn "${DESTDIR}${nm_mandir}/man1/nmtui.1" "${DESTDIR}${nm_mandir}/man1/${alias}.1"
@@ -58,4 +58,3 @@ if [ "$enable_nm_cloud_setup" = 1 -a "$install_systemdunitdir" = 1 ]; then
     ln -sfn '../pre-up.d/90-nm-cloud-setup.sh' "${DESTDIR}${nm_pkglibdir}/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh"
     ln -sfn 'no-wait.d/90-nm-cloud-setup.sh' "${DESTDIR}${nm_pkglibdir}/dispatcher.d/90-nm-cloud-setup.sh"
 fi
-
diff --git a/tools/nm-in-container b/tools/nm-in-container
index 365b8fcf..e4ee8b94 100755
--- a/tools/nm-in-container
+++ b/tools/nm-in-container
@@ -189,7 +189,7 @@ RUN dnf install -y \\
     --skip-broken \\
     \\
     /usr/bin/python \\
-    /usr/sbin/ausearch \\
+    audit \\
     ModemManager-devel \\
     ModemManager-glib-devel \\
     NetworkManager \\
@@ -227,11 +227,10 @@ RUN dnf install -y \\
     libnvme-devel \\
     libpsl-devel \\
     libselinux-devel \\
-    libtool \\
     libubsan \\
     libuuid-devel \\
     meson \\
-    mlocate \\
+    plocate \\
     mobile-broadband-provider-info-devel \\
     newt-devel \\
     nispor \\
@@ -267,7 +266,7 @@ RUN dnf install -y \\
     which \\
     \\
     'dbus*' \\
-    'openvswitch2*' \\
+    'openvswitch*' \\
     /usr/bin/pytest \\
     /usr/bin/debuginfo-install \\
     NetworkManager-openvpn \\
@@ -290,7 +289,6 @@ RUN dnf install -y \\
     git \\
     hostapd \\
     iproute-tc \\
-    ipsec-tools \\
     iputils \\
     iscsi-initiator-utils \\
     iw \\
@@ -322,7 +320,7 @@ RUN dnf install -y \\
     wireguard-tools \\
     wireshark-cli
 
-RUN dnf debuginfo-install --skip-broken NetworkManager \$(ldd /usr/sbin/NetworkManager | sed -n 's/.* => \\(.*\\) (0x[0-9A-Fa-f]*)$/\1/p' | xargs -n1 readlink -f) -y
+RUN dnf debuginfo-install --skip-unavailable --skip-broken NetworkManager \$(ldd /usr/sbin/NetworkManager | sed -n 's/.* => \\(.*\\) (0x[0-9A-Fa-f]*)$/\1/p' | xargs -n1 readlink -f) -y
 
 RUN dnf clean all
 
diff --git a/tools/run-nm-test.sh b/tools/run-nm-test.sh
index 9f0a6531..fe61f14b 100755
--- a/tools/run-nm-test.sh
+++ b/tools/run-nm-test.sh
@@ -34,8 +34,6 @@ usage() {
     echo "        depending on a hard-coded list of tests that require it. This flag overwrites"
     echo "        the automatism to always launch a D-Bus session"
     echo "  --no-launch-dbus|-D: prevent launching a D-Bus session"
-    echo "  --no-libtool: when running with valgrind, the script tries automatically to"
-    echo "        use libtool as necessary. This disables libtool usage"
     echo "  --valgrind|-v: run under valgrind"
     echo "  --no-valgrind|-V: disable running under valgrind (overrides NMTST_USE_VALGRIND=1)"
     echo "  -d: set NMTST_DEBUG=d"
@@ -50,7 +48,6 @@ usage() {
     echo ""
     echo "  The following environment variables are honored:"
     echo "    NMTST_USE_VALGRIND=0|1: enable/disable valgrind"
-    echo "    NMTST_LIBTOOL=: libtool path (or disable)"
     echo "    NMTST_LAUNCH_DBUS=0|1: whether to lounch a D-Bus session"
     echo "    NMTST_SET_DEBUG=0|1: saet NMTST_DEBUG=d"
     echo ""
@@ -75,12 +72,6 @@ BUILDDIR=
 if [ "$CALLED_FROM_MAKE" == 1 ]; then
     BUILDDIR="$1"
     shift
-    if [ -n "$1" ]; then
-        NMTST_LIBTOOL=($1 --mode=execute);
-    else
-        NMTST_LIBTOOL=()
-    fi
-    shift
     NMTST_VALGRIND_ARG="$1"; shift
     if [[ "$NMTST_VALGRIND_ARG" == no ]]; then
         NMTST_VALGRIND_ARG=
@@ -130,14 +121,6 @@ else
         # by default, disable valgrind checks.
         NMTST_USE_VALGRIND=0
     fi
-
-    if [ -n "$NMTST_LIBTOOL" ] ; then
-        NMTST_LIBTOOL=("$NMTST_LIBTOOL" "--mode=execute")
-    elif [ -z "${NMTST_LIBTOOL+x}" -a -f "$SCRIPT_PATH/../libtool" ]; then
-        NMTST_LIBTOOL=(sh "$SCRIPT_PATH/../libtool" "--mode=execute")
-    else
-        NMTST_LIBTOOL=()
-    fi
     TEST_ARGV=()
     unset TEST
     while test $# -gt 0; do
@@ -154,10 +137,6 @@ else
             NMTST_LAUNCH_DBUS=0
             shift
             ;;
-        "--no-libtool")
-            NMTST_LIBTOOL=()
-            shift
-            ;;
         "--valgrind"|-v)
             NMTST_USE_VALGRIND=1
             shift;
@@ -209,7 +188,6 @@ else
                 BUILDDIR="$(dirname "$BUILDDIR")"
                 [[ "$BUILDDIR" == / ]] && BUILDDIR=
                 [[ -z "$BUILDDIR" ]] && break
-                [[ -e "$BUILDDIR/src/libnm-client-impl/.libs/libnm.so" ]] && break
                 [[ -e "$BUILDDIR/src/libnm-client-impl/libnm.so" ]] && break
             done
         fi
@@ -257,11 +235,7 @@ fi
 if [[ -n "$BUILDDIR" ]]; then
     if [[ -d "$BUILDDIR/src/libnm-client-impl" ]]; then
         export GI_TYPELIB_PATH="$BUILDDIR/src/libnm-client-impl/${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
-        if [[ -d "$BUILDDIR/src/libnm-client-impl/.libs" ]]; then
-            export LD_LIBRARY_PATH="$BUILDDIR/src/libnm-client-impl/.libs${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
-        else
-            export LD_LIBRARY_PATH="$BUILDDIR/src/libnm-client-impl${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
-        fi
+        export LD_LIBRARY_PATH="$BUILDDIR/src/libnm-client-impl${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
     fi
 fi
 
@@ -304,7 +278,6 @@ export G_SLICE=always-malloc
 export G_DEBUG=gc-friendly
 export NM_TEST_UNDER_VALGRIND=1
 "${NMTST_DBUS_RUN_SESSION[@]}" \
-"${NMTST_LIBTOOL[@]}" \
 "$NMTST_VALGRIND" \
     --quiet \
     --error-exitcode=$VALGRIND_ERROR \
diff --git a/tools/test-sudo-wrapper.sh b/tools/test-sudo-wrapper.sh
index b375368e..a9019bc3 100755
--- a/tools/test-sudo-wrapper.sh
+++ b/tools/test-sudo-wrapper.sh
@@ -3,25 +3,13 @@
 CMD="$1"
 shift;
 
-# convert the libtool internal path
-resolve_cmd() {
-    local C="$1"
-
-    local C2="$(echo "$C" | sed 's#^\(.*/\)\.libs/lt-\([^/]\+\)$#\1\2#')"
-    if [[ "$C2" != "$C" && ! -x "$C2" ]]; then
-        # such a file does not exist... back to $C
-        C2="$C"
-    fi
-    echo "$C2"
-}
-
 if [[ $UID == 0 ]]; then
     # we are already root. Execute directly.
-    exec "$(resolve_cmd "$CMD")" "$@"
+    exec "$CMD" "$@"
 elif [[ "$NMTST_SUDO_NO_CALL_SELF" != "" ]]; then
     # when setting $NMTST_SUDO_NO_CALL_SELF, pass the (resolved) command
     # directly to sudo.
-    exec sudo "$(resolve_cmd "$CMD")" "$@"
+    exec sudo "$CMD" "$@"
 else
     # by default, call self again with sudo.
     exec sudo -E "$0" "$CMD" "$@"
diff --git a/valgrind.suppressions b/valgrind.suppressions
index 5725ee22..9ed3c413 100644
--- a/valgrind.suppressions
+++ b/valgrind.suppressions
@@ -108,23 +108,6 @@
    obj:/*/ld-*.so
 }
 {
-   # added on Fedora 22
-   # This happens when setting LD_LIBRARY_PATH and the linker is searching the libraries to load.
-   # for example:
-   # LD_LIBRARY_PATH=./././././././././././././././././libnm/.libs:./libnm-util/.libs:./libnm-glib/.libs
-   _dl_expand_dynamic_string_token
-   Memcheck:Cond
-   fun:index
-   fun:expand_dynamic_string_token
-   ...
-   fun:dl_main
-   fun:_dl_sysdep_start
-   fun:_dl_start_final
-   fun:_dl_start
-   obj:/*/ld-*.so
-   ...
-}
-{
     all_gobject_init_ctor
     Memcheck:Leak
     ...