From 239b0fbbc9162df4e6cf7050d80b35ae2e271f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Mon, 17 Nov 2025 16:42:05 +0100 Subject: [PATCH 001/153] release: bump version to 1.57.0 (development) --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index f02ef5ef75..2f9ab5c299 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ 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.55.90', + version: '1.57.0', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', From d687768c610a9574a00813a564aaf382fd5e46fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 18 Nov 2025 10:39:49 +0100 Subject: [PATCH 002/153] libnm: move hsr symbols to the right version These symbols has been added to the 1.54.2 stable branch, so they are actually available since then. --- src/libnm-client-impl/libnm.ver | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver index ca7a4c300e..1fb3282d82 100644 --- a/src/libnm-client-impl/libnm.ver +++ b/src/libnm-client-impl/libnm.ver @@ -2077,13 +2077,17 @@ global: nm_sriov_preserve_on_down_get_type; } libnm_1_52_0; +libnm_1_54_2 { +global: + nm_setting_hsr_get_interlink; + nm_setting_hsr_get_protocol_version; + nm_setting_hsr_protocol_version_get_type; +} libnm_1_54_0; + libnm_1_56_0 { global: nm_dns_server_validate; nm_setting_gsm_get_device_uid; - nm_setting_hsr_get_interlink; - nm_setting_hsr_get_protocol_version; - nm_setting_hsr_protocol_version_get_type; nm_setting_connection_get_dnssec; nm_setting_connection_dnssec_get_type; } libnm_1_54_0; From 3b10b88290da6a5e3835849baffcc847b7693c08 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 18 Nov 2025 13:51:26 +0100 Subject: [PATCH 003/153] core: fix rate-limit test failures It's possible that the first timeout gets delayed; therefore the interval between the first and the second callback can be less than one second, and the budget doesn't refill completely. Schedule the second timeout from the first callback to guarantee that at least one second passes between the callbacks. Fixes: ff0c4346fc0c ('core: add rate-limiting helper') --- src/core/tests/test-utils.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/core/tests/test-utils.c b/src/core/tests/test-utils.c index ec760cf171..0418d3ae89 100644 --- a/src/core/tests/test-utils.c +++ b/src/core/tests/test-utils.c @@ -264,8 +264,7 @@ test_shorten_hostname(void) typedef struct { NMRateLimit ratelimit; GMainLoop *loop; - GSource *source1; - GSource *source2; + GSource *source; guint num; } RateLimitData; @@ -283,10 +282,9 @@ rate_limit_window_expire_cb(gpointer user_data) 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); - nm_clear_g_source_inst(&data->source1); - return G_SOURCE_CONTINUE; } @@ -304,7 +302,8 @@ rate_limit_check_cb(gpointer user_data) 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->source2); + 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; } @@ -317,12 +316,10 @@ test_rate_limit_check(void) data = (RateLimitData) { .loop = g_main_loop_new(NULL, FALSE), .ratelimit = {}, + .source = nm_g_timeout_add_source(1, rate_limit_check_cb, &data), .num = 0, }; - data.source1 = nm_g_timeout_add_source(1100, rate_limit_window_expire_cb, &data); - data.source2 = nm_g_timeout_add_source(10, rate_limit_check_cb, &data); - g_main_loop_run(data.loop); g_main_loop_unref(data.loop); } From 2b03057de0dac8182c2537d9fd9af9a9015fb631 Mon Sep 17 00:00:00 2001 From: "Matthieu Baerts (NGI0)" Date: Thu, 13 Nov 2025 19:19:07 +0100 Subject: [PATCH 004/153] mptcp: add 'laminar' endpoint support This new endpoint type has been recently added to the kernel in v6.18 [1]. It 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. The support of the new flag is easy: simply by declaring a new flag for NM, and adding it in the related helpers and existing checks looking at the different MPTCP endpoint. The documentation now references the new endpoint type. Note that only the new 'define' has been added in the Linux header file: this file has changed a bit since the last sync, now split in two files. Only this new line is needed, so the minimum has been modified here. Link: https://git.kernel.org/torvalds/c/539f6b9de39e [1] Signed-off-by: Matthieu Baerts (NGI0) --- src/core/nm-l3cfg.c | 4 ++-- src/libnm-core-aux-intern/nm-libnm-core-utils.h | 11 ++++++----- src/libnm-core-impl/nm-setting-connection.c | 5 +++-- src/libnm-core-public/nm-dbus-interface.h | 11 +++++++++++ src/libnm-platform/nm-linux-platform.c | 1 + src/libnm-platform/nm-platform.c | 3 ++- src/libnm-platform/nm-platform.h | 1 + src/libnmc-setting/settings-docs.h.in | 2 +- src/linux-headers/mptcp.h | 1 + src/nmcli/gen-metadata-nm-settings-nmcli.xml.in | 4 ++-- 10 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index d2ec113a53..0d93f76bc2 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -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/libnm-core-aux-intern/nm-libnm-core-utils.h b/src/libnm-core-aux-intern/nm-libnm-core-utils.h index 8f30b95820..432a21409f 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h @@ -300,11 +300,12 @@ 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)) diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index f0b1c96512..4f25533c07 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -3458,7 +3458,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" @@ -3518,7 +3518,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-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h index 8db76db1f4..42bff04ae0 100644 --- a/src/libnm-core-public/nm-dbus-interface.h +++ b/src/libnm-core-public/nm-dbus-interface.h @@ -1460,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 */ @@ -1476,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-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index e703774388..cc5b99e095 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); /*****************************************************************************/ diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index d7fb59b079..853157d204 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -7982,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) diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index 9c8425b883..033dc51541 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 diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index e4ed5f6ba9..4e8978cb20 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -21,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.") diff --git a/src/linux-headers/mptcp.h b/src/linux-headers/mptcp.h index ca502f1edc..ed44b9509b 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/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in index 9f3f0ef383..949bc6804e 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in @@ -738,9 +738,9 @@ format="choice (NMSettingConnectionDnssec)" values="default (-1), no (0), allow-downgrade (1), yes (2)" /> + 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)" /> From 8caa781270e0427575381d9815dfb424ee5d0221 Mon Sep 17 00:00:00 2001 From: "Matthieu Baerts (NGI0)" Date: Thu, 13 Nov 2025 19:19:22 +0100 Subject: [PATCH 005/153] mptcp: set the laminar flag by default By default, the MPTCP limits have 'add_addr_accepted' set to 0. It means that when the other peer announces an additional address it can be reached from, the receiver will not try to establish any new subflows to this address. If this limit is increased, and without the new 'laminar' flag, the MPTCP in-kernel path-manager will select the source address by looking at the routing tables to establish this new subflow. This is not ideal: very likely, the source address will be the one linked to the default route and a new subflow from the same interface as the initial one will be created instead of using another path. This is especially problematic when the other peer has set the 'C-flag' in the MPTCP connection request (MP_CAPABLE). This flag can be set to tell the other side that the peer will not accept extra subflows requests sent to its initial IP address and port: typically set by a server using an anycast address, behind a legacy Layer 4 load balancer. It sounds better to add the 'laminar' flag by default to pick the source address from well-defined MPTCP endpoints, rather than relying on routing rules which will likely not pick the most interesting solution. Note that older kernels will accept unsupported flags, and ignore them. So it is fine to have the new flag added by default even if it is not supported. Signed-off-by: Matthieu Baerts (NGI0) --- man/NetworkManager.conf.xml | 2 +- src/libnm-core-aux-intern/nm-libnm-core-utils.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index 65cad02cf9..6c055e9d2e 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -895,7 +895,7 @@ ipv6.ip6-privacy=0 connection.mptcp-flags - If unspecified, the fallback is 0x22 ("enabled,subflow"). Note that if sysctl /proc/sys/net/mptcp/enabled is disabled, NetworkManager will still not configure endpoints. + If unspecified, the fallback is 0x122 ("enabled,subflow,laminar"). Note that if sysctl /proc/sys/net/mptcp/enabled is disabled, NetworkManager will still not configure endpoints. connection.dns-over-tls 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 432a21409f..0e75982ecc 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h @@ -307,7 +307,8 @@ gpointer _nm_connection_new_setting(NMConnection *connection, GType gtype); | 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); From 3ce1da1fd22bc50d3aea8e451c90159a94292874 Mon Sep 17 00:00:00 2001 From: "Matthieu Baerts (NGI0)" Date: Tue, 18 Nov 2025 14:38:28 +0100 Subject: [PATCH 006/153] NEWS: new MPTCP 'laminar' endpoint & default A summary linked to the last two commits. Signed-off-by: Matthieu Baerts (NGI0) --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index b8b9212eb3..9e2d0cc15d 100644 --- a/NEWS +++ b/NEWS @@ -34,6 +34,8 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! 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. ============================================= NetworkManager-1.54 From 6e2de1d2b3118e817f930e19e0ea15cde50e3858 Mon Sep 17 00:00:00 2001 From: Popax21 Date: Mon, 17 Nov 2025 04:52:23 +0100 Subject: [PATCH 007/153] core: restrict connectivity check lookups to per-link DNS if available Restrict connectivity check DNS lookups to just the relevant link if the link has a per-link DNS resolver configured. This change was previously discussed as part of issue https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1836, and brings NM's behavior back in line with the behavior documented in the man page. The connectivity check checks for a per-link DNS resolver by querying systemd-resolved's `ScopeMask` for the link; this involves a small D-Bus roundtrip, but is ultimately the more flexible solution since it is also capable of dealing with per-link DNS configuration stemming from other sources. Fixes: e6dac4f0b67e ('core: don't restrict DNS interface when performing connectivity check') --- src/core/nm-connectivity.c | 134 ++++++++++++++++++++++++++++++++----- 1 file changed, 118 insertions(+), 16 deletions(-) diff --git a/src/core/nm-connectivity.c b/src/core/nm-connectivity.c index 2aa22331ea..c7915fd962 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; } From 636fb5ef24640856515584977174fa44a986e374 Mon Sep 17 00:00:00 2001 From: Antonio Alvarez Feijoo Date: Fri, 14 Nov 2025 16:46:57 +0100 Subject: [PATCH 008/153] systemd: install initrd services using a generator Since both `NetworkManager.service` and `NetworkManager-initrd.service` are allocated for the same bus name (`org.freedesktop.NetworkManager`) and this is not allowed, the best option is to use a systemd generator to install them only in the initrd, instead of setting fixed Install sections. Fixes #1814 --- contrib/fedora/rpm/NetworkManager.spec | 2 + contrib/fedora/rpm/configure-for-system.sh | 1 + data/NetworkManager-config-initrd.service.in | 5 +- data/NetworkManager-initrd.service.in | 10 +--- ...tworkManager-wait-online-initrd.service.in | 5 +- meson.build | 9 ++++ meson_options.txt | 1 + src/nm-initrd-generator/meson.build | 7 +++ .../nm-initrd-generator.sh | 50 +++++++++++++++++++ 9 files changed, 73 insertions(+), 17 deletions(-) create mode 100755 src/nm-initrd-generator/nm-initrd-generator.sh diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 0732fb495f..820cfda607 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -675,6 +675,7 @@ Preferably use nmcli instead. -Dsession_tracking=systemd \ -Dsuspend_resume=systemd \ -Dsystemdsystemunitdir=%{_unitdir} \ + -Dsystemdsystemgeneratordir=%{_systemdgeneratordir} \ -Dsystem_ca_path=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem \ -Ddbus_conf_dir=%{dbus_sys_dir} \ -Dtests=yes \ @@ -747,6 +748,7 @@ rm -f %{buildroot}%{_libdir}/pppd/%{ppp_version}/*.la rm -f %{buildroot}%{nmplugindir}/*.la # Don't use the *-initrd.service files yet, wait dracut to support them +rm -f %{buildroot}%{_systemdgeneratordir}/nm-initrd-generator.sh rm -f %{buildroot}%{_unitdir}/NetworkManager-config-initrd.service rm -f %{buildroot}%{_unitdir}/NetworkManager-initrd.service rm -f %{buildroot}%{_unitdir}/NetworkManager-wait-online-initrd.service diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh index 6bdf66825a..bcf619c645 100755 --- a/contrib/fedora/rpm/configure-for-system.sh +++ b/contrib/fedora/rpm/configure-for-system.sh @@ -398,6 +398,7 @@ meson setup\ -Dsession_tracking=systemd \ -Dsuspend_resume=systemd \ -Dsystemdsystemunitdir=/usr/lib/systemd/system \ + -Dsystemdsystemgeneratordir=/usr/lib/systemd/system-generators \ -Dsystem_ca_path=/etc/pki/tls/cert.pem \ -Ddbus_conf_dir="$P_DBUS_SYS_DIR" \ -Dtests=yes \ diff --git a/data/NetworkManager-config-initrd.service.in b/data/NetworkManager-config-initrd.service.in index 4baf0f648e..4f03803658 100644 --- a/data/NetworkManager-config-initrd.service.in +++ b/data/NetworkManager-config-initrd.service.in @@ -1,10 +1,10 @@ [Unit] Description=NetworkManager Configuration (initrd) +AssertPathExists=/etc/initrd-release DefaultDependencies=no Wants=systemd-journald.socket After=systemd-journald.socket Before=systemd-udevd.service systemd-udev-trigger.service -ConditionPathExists=/etc/initrd-release [Service] Type=oneshot @@ -22,6 +22,3 @@ ExecStartPost=/bin/sh -c ' \ fi \ ' RemainAfterExit=yes - -[Install] -WantedBy=initrd.target diff --git a/data/NetworkManager-initrd.service.in b/data/NetworkManager-initrd.service.in index aef73a571d..f936ffd238 100644 --- a/data/NetworkManager-initrd.service.in +++ b/data/NetworkManager-initrd.service.in @@ -1,11 +1,11 @@ [Unit] Description=NetworkManager (initrd) +AssertPathExists=/etc/initrd-release DefaultDependencies=no Wants=systemd-udev-trigger.service network.target After=systemd-udev-trigger.service network-pre.target dbus.service NetworkManager-config-initrd.service Before=network.target BindsTo=dbus.service -ConditionPathExists=/etc/initrd-release ConditionPathExists=/run/NetworkManager/initrd/neednet ConditionPathExistsGlob=|/usr/lib/NetworkManager/system-connections/* ConditionPathExistsGlob=|/run/NetworkManager/system-connections/* @@ -22,11 +22,3 @@ Environment=NM_CONFIG_ENABLE_TAG=initrd Restart=on-failure ProtectSystem=true ProtectHome=read-only - -[Install] -WantedBy=initrd.target -# We want to enable NetworkManager-wait-online-initrd.service whenever this -# service is enabled. NetworkManager-wait-online-initrd.service has -# WantedBy=network-online.target, so enabling it only has an effect if -# network-online.target itself is enabled or pulled in by some other unit. -Also=NetworkManager-config-initrd.service NetworkManager-wait-online-initrd.service diff --git a/data/NetworkManager-wait-online-initrd.service.in b/data/NetworkManager-wait-online-initrd.service.in index da4a252234..b89aa81657 100644 --- a/data/NetworkManager-wait-online-initrd.service.in +++ b/data/NetworkManager-wait-online-initrd.service.in @@ -1,10 +1,10 @@ [Unit] Description=NetworkManager Wait Online (initrd) +AssertPathExists=/etc/initrd-release DefaultDependencies=no Requires=NetworkManager-initrd.service After=NetworkManager-initrd.service Before=network-online.target -ConditionPathExists=/etc/initrd-release ConditionPathExists=/run/NetworkManager/initrd/neednet [Service] @@ -21,6 +21,3 @@ Type=oneshot ExecStart=@bindir@/nm-online -s -q RemainAfterExit=yes Environment=NM_ONLINE_TIMEOUT=3600 - -[Install] -WantedBy=initrd.target network-online.target diff --git a/meson.build b/meson.build index 2f9ab5c299..56bbe28163 100644 --- a/meson.build +++ b/meson.build @@ -383,6 +383,14 @@ if install_systemdunitdir and systemd_systemdsystemunitdir == '' systemd_systemdsystemunitdir = systemd_dep.get_variable(pkgconfig: 'systemdsystemunitdir', pkgconfig_define: ['rootprefix', nm_prefix]) endif +systemd_systemdsystemgeneratordir = get_option('systemdsystemgeneratordir') +install_systemdgeneratordir = (systemd_systemdsystemgeneratordir != 'no') + +if install_systemdgeneratordir and systemd_systemdsystemgeneratordir == '' + assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd user generator dir or disable it') + systemd_systemdsystemgeneratordir = systemd_dep.get_variable(pkgconfig: 'systemdsystemgeneratordir', pkgconfig_define: ['rootprefix', nm_prefix]) +endif + enable_systemd_journal = get_option('systemd_journal') if enable_systemd_journal assert(libsystemd_dep.found(), 'Missing systemd-journald support') @@ -1059,6 +1067,7 @@ output = '\nSystem paths:\n' output += ' prefix: ' + nm_prefix + '\n' output += ' exec_prefix: ' + nm_prefix + '\n' output += ' systemdunitdir: ' + systemd_systemdsystemunitdir + '\n' +output += ' systemdgeneratordir: ' + systemd_systemdsystemgeneratordir + '\n' output += ' udev_dir: ' + udev_udevdir + '\n' output += ' nmbinary: ' + nm_pkgsbindir + '\n' output += ' nmconfdir: ' + nm_pkgconfdir + '\n' diff --git a/meson_options.txt b/meson_options.txt index d28cc76fc8..8ec68a46bd 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,5 +1,6 @@ # system paths option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files') +option('systemdsystemgeneratordir', type: 'string', value: '', description: 'Directory for systemd generator files') option('system_ca_path', type: 'string', value: '/etc/ssl/certs', description: 'path to system CA certificates') option('udev_dir', type: 'string', value: '', description: 'Absolute path of the udev base directory. Set to \'no\' not to install the udev rule') option('dbus_conf_dir', type: 'string', value: '', description: 'where D-Bus system.d directory is') diff --git a/src/nm-initrd-generator/meson.build b/src/nm-initrd-generator/meson.build index 6b02e0668d..2315ebe4f2 100644 --- a/src/nm-initrd-generator/meson.build +++ b/src/nm-initrd-generator/meson.build @@ -46,3 +46,10 @@ executable( install: true, install_dir: nm_libexecdir, ) + +if install_systemdgeneratordir + install_data( + 'nm-initrd-generator.sh', + install_dir: systemd_systemdsystemgeneratordir, + ) +endif diff --git a/src/nm-initrd-generator/nm-initrd-generator.sh b/src/nm-initrd-generator/nm-initrd-generator.sh new file mode 100755 index 0000000000..20ff78cca5 --- /dev/null +++ b/src/nm-initrd-generator/nm-initrd-generator.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1-or-later + +# initrd-specific units +initrd_units=( + NetworkManager-config-initrd.service + NetworkManager-initrd.service + NetworkManager-wait-online-initrd.service +) + +# host-specific units +host_units=( + NetworkManager.service + NetworkManager-dispatcher.service + NetworkManager-wait-online.service +) + +# Get generator normal directory +normal_dir=$1 + +# Since NetworkManager-initrd.service and NetworkManager.service are allocated +# for the same bus name org.freedesktop.NetworkManager, we should mask one of +# them depending on if we are in the initrd or on the host. +if [ "$SYSTEMD_IN_INITRD" != 1 ]; then + # Mask initrd units in the host + for unit in "${initrd_units[@]}"; do + ln -s /dev/null "$normal_dir"/"$unit" 2> /dev/null + done + # Nothing else to do + exit 0 +fi + +# Mask host units in the initrd +for unit in "${host_units[@]}"; do + ln -s /dev/null "$normal_dir"/"$unit" 2> /dev/null +done + +# Install initrd units in the unit file hierarchy +mkdir -p "$normal_dir"/initrd.target.wants +mkdir -p "$normal_dir"/network-online.target.wants +for unit in "${initrd_units[@]}"; do + ln -s /usr/lib/systemd/system/"$unit" \ + "$normal_dir"/initrd.target.wants/"$unit" + if [ "$unit" = "NetworkManager-wait-online-initrd.service" ]; then + ln -s /usr/lib/systemd/system/"$unit" \ + "$normal_dir"/network-online.target.wants/"$unit" + fi +done + +exit 0 From b3f9f525054299ed1b22b15e2a3f663778b9951f Mon Sep 17 00:00:00 2001 From: filmsi Date: Mon, 24 Nov 2025 20:31:55 +0000 Subject: [PATCH 009/153] Updated Slovenian translation --- po/sl.po | 5181 +++++++++++++++++++++++++----------------------------- 1 file changed, 2420 insertions(+), 2761 deletions(-) diff --git a/po/sl.po b/po/sl.po index 053089510e..617f28ed7f 100644 --- a/po/sl.po +++ b/po/sl.po @@ -3,17 +3,18 @@ # # Matic Žgur , 2007. # Andrej Žnidaršič , 2009 - 2010. -# Martin Srebotnjak , 2011 - 2012, 2024 - 2025. # Matej Urbančič , 2010 - 2012. # Lubomir Rintel , 2016. #zanata # Thomas Haller , 2017. #zanata +# Martin Srebotnjak , 2011 - 2012, 2024 - 2025. +# msgid "" msgstr "" "Project-Id-Version: NetworkManager\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/" "NetworkManager/issues\n" -"POT-Creation-Date: 2025-09-27 03:32+0000\n" -"PO-Revision-Date: 2025-09-28 19:02+0200\n" +"POT-Creation-Date: 2025-11-19 15:33+0000\n" +"PO-Revision-Date: 2025-11-24 15:04+0100\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Slovenian GNOME Translation Team \n" "Language: sl\n" @@ -204,7 +205,7 @@ msgid "%s %u" msgstr "%s %u" #: src/core/devices/adsl/nm-device-adsl.c:118 -#: src/libnmc-setting/nm-meta-setting-desc.c:8993 +#: src/libnmc-setting/nm-meta-setting-desc.c:9005 msgid "ADSL connection" msgstr "Povezava ADSL" @@ -243,12 +244,12 @@ msgid "DUN connection must include a GSM or CDMA setting" msgstr "Povezava DUN mora vključevati nastavitev GSM ali CDMA" #: src/core/devices/bluetooth/nm-device-bt.c:382 -#: src/core/devices/wwan/nm-modem-broadband.c:918 +#: src/core/devices/wwan/nm-modem-broadband.c:920 msgid "GSM connection" msgstr "Povezava GSM" #: src/core/devices/bluetooth/nm-device-bt.c:384 -#: src/core/devices/wwan/nm-modem-broadband.c:938 +#: src/core/devices/wwan/nm-modem-broadband.c:940 msgid "CDMA connection" msgstr "Povezava CDMA" @@ -273,7 +274,6 @@ msgid "Bridge connection" msgstr "Povezava mosta" #: src/core/devices/nm-device-dummy.c:56 -#, fuzzy msgid "Dummy connection" msgstr "Lažna povezava" @@ -282,21 +282,21 @@ msgstr "Lažna povezava" msgid "Wired connection %d" msgstr "Žična povezava %d" -#: src/core/devices/nm-device-ethernet.c:1640 -#: src/libnmc-setting/nm-meta-setting-desc.c:9037 +#: src/core/devices/nm-device-ethernet.c:1653 +#: src/libnmc-setting/nm-meta-setting-desc.c:9049 msgid "Veth connection" msgstr "Povezava Veth" -#: src/core/devices/nm-device-ethernet.c:1697 +#: src/core/devices/nm-device-ethernet.c:1710 msgid "PPPoE connection" msgstr "Povezava PPPoE" -#: src/core/devices/nm-device-ethernet.c:1697 +#: src/core/devices/nm-device-ethernet.c:1710 msgid "Wired connection" msgstr "Žična povezava" #: src/core/devices/nm-device-infiniband.c:160 -#: src/libnmc-setting/nm-meta-setting-desc.c:9008 +#: src/libnmc-setting/nm-meta-setting-desc.c:9020 msgid "InfiniBand connection" msgstr "Povezava InfiniBand" @@ -317,17 +317,17 @@ msgid "TUN connection" msgstr "Povezava TUN" #: src/core/devices/nm-device-vlan.c:370 -#: src/libnmc-setting/nm-meta-setting-desc.c:9038 +#: src/libnmc-setting/nm-meta-setting-desc.c:9050 msgid "VLAN connection" msgstr "Povezava VLAN" #: src/core/devices/nm-device-vrf.c:185 -#: src/libnmc-setting/nm-meta-setting-desc.c:9040 +#: src/libnmc-setting/nm-meta-setting-desc.c:9052 msgid "VRF connection" msgstr "Povezava VRF" #: src/core/devices/nm-device-vxlan.c:385 -#: src/libnmc-setting/nm-meta-setting-desc.c:9041 +#: src/libnmc-setting/nm-meta-setting-desc.c:9053 msgid "VXLAN connection" msgstr "Povezava VXLAN" @@ -468,9 +468,8 @@ msgid "connection does not match access point" msgstr "povezava se ne ujema z dostopno točko" #: src/core/devices/wifi/nm-wifi-utils.c:654 -#, fuzzy msgid "connection does not match mesh point" -msgstr "povezava se ne ujema s točko mreže" +msgstr "povezava se ne ujema s točko mreževine" #: src/core/devices/wifi/nm-wifi-utils.c:673 msgid "Access point is unencrypted but setting specifies security" @@ -647,7 +646,7 @@ msgstr "Možnosti programa NetworkManager" msgid "Show NetworkManager options" msgstr "Pokaži možnosti programa NetworkManager" -#: src/core/nm-manager.c:6998 src/libnmc-setting/nm-meta-setting-desc.c:9039 +#: src/core/nm-manager.c:7001 src/libnmc-setting/nm-meta-setting-desc.c:9051 msgid "VPN connection" msgstr "Povezava VPN" @@ -751,7 +750,6 @@ msgid "" 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 ni bila lažna povezava." @@ -835,7 +833,7 @@ msgstr "Napravi primanjkuje zmogljivosti, ki jih zahteva povezava." #: src/libnm-client-impl/nm-device-olpc-mesh.c:103 msgid "The connection was not an OLPC Mesh connection." -msgstr "Povezava ni bila povezava OLPC Mesh." +msgstr "Povezava ni bila povezava Mreževine OLPC." #: src/libnm-client-impl/nm-device-ovs-bridge.c:74 msgid "The connection was not a ovs_bridge connection." @@ -1033,7 +1031,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:503 src/nmcli/utils.c:1852 +#: src/libnmc-base/nm-client-utils.c:505 src/nmcli/utils.c:1852 msgid "Unknown" msgstr "Neznano" @@ -1334,9 +1332,9 @@ msgstr "nepričakovan uuid %s namesto %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: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-connection.c:1442 +#: src/libnm-core-impl/nm-setting-connection.c:1480 +#: src/libnm-core-impl/nm-setting-connection.c:1979 #: 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 @@ -1625,8 +1623,8 @@ msgid "unsupported option \"%s.%s\" of variant type %s" msgstr "Nepodprta možnost »%s.%s« variante vrste %s" #: src/libnm-core-impl/nm-setting-6lowpan.c:81 -#: src/libnm-core-impl/nm-setting-hsr.c:131 -#: src/libnm-core-impl/nm-setting-hsr.c:149 +#: src/libnm-core-impl/nm-setting-hsr.c:171 +#: src/libnm-core-impl/nm-setting-hsr.c:189 #: src/libnm-core-impl/nm-setting-veth.c:81 msgid "property is not specified" msgstr "Lastnost ni določena" @@ -1703,13 +1701,13 @@ msgstr "geslo ni podprto, če potrdilo ni v žetonu PKCS#11" #: 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: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-connection.c:1452 +#: src/libnm-core-impl/nm-setting-connection.c:1495 +#: src/libnm-core-impl/nm-setting-connection.c:1747 +#: src/libnm-core-impl/nm-setting-gsm.c:560 +#: src/libnm-core-impl/nm-setting-gsm.c:575 +#: src/libnm-core-impl/nm-setting-gsm.c:618 +#: src/libnm-core-impl/nm-setting-gsm.c:627 #: 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 @@ -1788,12 +1786,11 @@ msgstr "" "zastavice" #: src/libnm-core-impl/nm-setting-8021x.c:2953 -#, fuzzy msgid "" "invalid auth flags: both enable and disable are set for the same TLS version" msgstr "" -"Neveljavne zastavice za preverjanje pristnosti: omogoči in onemogoči sta " -"nastavljeni za isto različico TLS" +"Neveljavne zastavice za preverjanje pristnosti: enable (omogoči) in disable " +"(onemogoči) sta nastavljeni za isto različico TLS" #: src/libnm-core-impl/nm-setting-bluetooth.c:167 #, c-format @@ -1971,163 +1968,163 @@ msgstr "Možnost »%s« mora biti potenca števila 2" msgid "bridge connection should have a ethernet setting as well" msgstr "Mostna povezava mora imeti tudi ethernetno nastavitev" -#: src/libnm-core-impl/nm-setting-connection.c:1318 +#: src/libnm-core-impl/nm-setting-connection.c:1336 #, c-format msgid "setting required for connection of type '%s'" msgstr "nastavitev, potrebna za povezavo vrste »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1349 +#: src/libnm-core-impl/nm-setting-connection.c:1367 #, c-format msgid "Unknown port type '%s'" msgstr "Neznana vrsta vrat »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1364 +#: src/libnm-core-impl/nm-setting-connection.c:1382 #, c-format msgid "Slave connections need a valid '%s' property" msgstr "Podrejene povezave potrebujejo veljavno lastnost »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1387 +#: src/libnm-core-impl/nm-setting-connection.c:1405 #, c-format msgid "Cannot set '%s' without '%s'" msgstr "Ni mogoče nastaviti »%s« brez »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1446 +#: src/libnm-core-impl/nm-setting-connection.c:1464 #, c-format msgid "'%s' is not a valid UUID" msgstr "»%s« ni veljaven UUID" -#: src/libnm-core-impl/nm-setting-connection.c:1491 +#: src/libnm-core-impl/nm-setting-connection.c:1509 #, c-format msgid "connection type '%s' is not valid" msgstr "Vrsta povezave »%s« ni veljavna" -#: src/libnm-core-impl/nm-setting-connection.c:1597 +#: src/libnm-core-impl/nm-setting-connection.c:1615 #, c-format msgid "'%s' connections must be attached as port to '%s', not '%s'" msgstr "Povezave »%s« morajo biti pritrjene kot vrata na »%s«, ne »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1612 +#: src/libnm-core-impl/nm-setting-connection.c:1630 #, c-format msgid "metered value %d is not valid" msgstr "Izmerjena vrednost %d ni veljavna" -#: 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 +#: src/libnm-core-impl/nm-setting-connection.c:1644 +#: src/libnm-core-impl/nm-setting-connection.c:1658 +#: src/libnm-core-impl/nm-setting-connection.c:1672 +#: src/libnm-core-impl/nm-setting-connection.c:1733 #, c-format msgid "value %d is not valid" msgstr "vrednost %d ni veljavna" -#: src/libnm-core-impl/nm-setting-connection.c:1670 +#: src/libnm-core-impl/nm-setting-connection.c:1688 msgid "\"disabled\" flag cannot be combined with other MPTCP flags" msgstr "" "Zastavice »onemogočeno« (»disabled«) ni mogoče kombinirati z drugimi " "zastavicami MPTCP" -#: src/libnm-core-impl/nm-setting-connection.c:1684 +#: src/libnm-core-impl/nm-setting-connection.c:1702 msgid "cannot set both \"signal\" and \"fullmesh\" MPTCP flags" msgstr "ni možno nastaviti zastavic MPTCP »signal« in »fullmesh«" -#: src/libnm-core-impl/nm-setting-connection.c:1696 +#: src/libnm-core-impl/nm-setting-connection.c:1714 #, c-format msgid "value %u is not a valid combination of MPTCP flags" msgstr "vrednost %u ni veljavna kombinacija zastavic MPTCP" -#: src/libnm-core-impl/nm-setting-connection.c:1743 +#: src/libnm-core-impl/nm-setting-connection.c:1761 msgid "DHCP option cannot be longer than 255 characters" msgstr "Možnost DHCP ne sme biti daljša od 255 znakov" -#: src/libnm-core-impl/nm-setting-connection.c:1754 +#: src/libnm-core-impl/nm-setting-connection.c:1772 msgid "MUD URL is not a valid URL" msgstr "URL MUD ni veljaven URL" -#: src/libnm-core-impl/nm-setting-connection.c:1774 +#: src/libnm-core-impl/nm-setting-connection.c:1792 msgid "invalid permissions not in format \"user:$UNAME[:]\"" msgstr "neveljavna dovoljenja, ki niso v obliki »uporabnik:$UIME[:]\"" -#: src/libnm-core-impl/nm-setting-connection.c:1790 -#: src/libnm-core-impl/nm-setting-connection.c:1807 +#: src/libnm-core-impl/nm-setting-connection.c:1808 +#: src/libnm-core-impl/nm-setting-connection.c:1825 #, c-format msgid "can only be set if %s.%s is set" msgstr "lahko se uporablja, samo če je nastavljeno %s.%s" -#: src/libnm-core-impl/nm-setting-connection.c:1821 +#: src/libnm-core-impl/nm-setting-connection.c:1839 #, c-format msgid "is incompatible with '%s'" msgstr "ni združljivo z »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1846 +#: src/libnm-core-impl/nm-setting-connection.c:1864 #, 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«)" -#: src/libnm-core-impl/nm-setting-connection.c:1860 +#: src/libnm-core-impl/nm-setting-connection.c:1878 #, c-format msgid "contains IPv4 address '%s', %s.%s cannot be 'true'" msgstr "vsebuje naslov IPv4 »%s«, %s.%s ne more biti »true«" -#: src/libnm-core-impl/nm-setting-connection.c:1874 +#: src/libnm-core-impl/nm-setting-connection.c:1892 #, 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«" -#: src/libnm-core-impl/nm-setting-connection.c:1899 +#: src/libnm-core-impl/nm-setting-connection.c:1917 #, c-format msgid "contains IPv6 address '%s', %s.%s cannot be '%s'" msgstr "vsebuje naslov IPv6 »%s«, %s.%s ne more biti »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1914 +#: src/libnm-core-impl/nm-setting-connection.c:1932 #, c-format msgid "contains IPv6 address '%s', %s.%s cannot be 'true'" msgstr "vsebuje naslov IPv6 »%s«, %s.%s ne more biti »true«" -#: src/libnm-core-impl/nm-setting-connection.c:1928 +#: src/libnm-core-impl/nm-setting-connection.c:1946 #, 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«" -#: src/libnm-core-impl/nm-setting-connection.c:1944 +#: src/libnm-core-impl/nm-setting-connection.c:1962 #, c-format msgid "has an invalid IP address '%s'" msgstr "ima neveljaven naslov IP »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:1973 +#: src/libnm-core-impl/nm-setting-connection.c:1991 #, c-format 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 +#: src/libnm-core-impl/nm-setting-connection.c:2009 #, c-format msgid "port-type '%s' requires a '%s' setting in the connection" msgstr "Vrsta vrat port-type »%s« zahteva nastavitev »%s« v povezavi" -#: src/libnm-core-impl/nm-setting-connection.c:2002 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-connection.c:2020 +#, c-format msgid "" "Detect a port connection with '%s' set and a port type '%s'. '%s' should be " "set to '%s'" msgstr "" -"Zaznajte podrejeno povezavo z nastavljeno »%s« in vrsto vrat »%s«. »%s« bi " -"moralo biti nastavljeno na »%s«" +"Zaznajte povezavo vrat z nastavljeno »%s« in vrsto vrat »%s«. »%s« bi moralo " +"biti nastavljeno na »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:2028 +#: src/libnm-core-impl/nm-setting-connection.c:2046 #, c-format msgid "A port connection with '%s' set to '%s' cannot have a '%s' setting" msgstr "" "Povezava vrat z »%s«, nastavljena na »%s«, ne more imeti nastavitve »%s«" -#: src/libnm-core-impl/nm-setting-connection.c:2045 +#: src/libnm-core-impl/nm-setting-connection.c:2063 msgid "UUID needs normalization" msgstr "UUID potrebuje normalizacijo" -#: src/libnm-core-impl/nm-setting-connection.c:2062 +#: src/libnm-core-impl/nm-setting-connection.c:2080 msgid "has duplicate addresses" msgstr "ima podvojene naslove" -#: src/libnm-core-impl/nm-setting-connection.c:2074 +#: src/libnm-core-impl/nm-setting-connection.c:2092 msgid "read-only is deprecated and not settable for the user" msgstr "Samo za branje je zastarelo in ga ni mogoče nastaviti za uporabnika" @@ -2189,48 +2186,52 @@ msgstr "neznana možnost ethtool »%s«" msgid "the property is required when %s.%s is set" msgstr "lastnost je obvezna, ko je %s.%s nastavljen" -#: src/libnm-core-impl/nm-setting-gsm.c:483 +#: src/libnm-core-impl/nm-setting-gsm.c:501 msgid "property value is empty" msgstr "vrednost lastnosti je prazna" -#: src/libnm-core-impl/nm-setting-gsm.c:492 +#: src/libnm-core-impl/nm-setting-gsm.c:510 msgid "property value is too long (>64)" msgstr "vrednost lastnosti je predolga (>64)" -#: src/libnm-core-impl/nm-setting-gsm.c:524 +#: src/libnm-core-impl/nm-setting-gsm.c:542 #, c-format msgid "'%s' contains invalid char(s) (use [A-Za-z._-])" msgstr "»%s« vsebuje neveljavne znake (uporabite [A-Za-z._-])" -#: src/libnm-core-impl/nm-setting-gsm.c:571 +#: src/libnm-core-impl/nm-setting-gsm.c:589 #, c-format msgid "'%s' length is invalid (should be 5 or 6 digits)" msgstr "Dolžina »%s« je neveljavna (mora biti 5 ali 6 števk)" -#: src/libnm-core-impl/nm-setting-gsm.c:585 +#: src/libnm-core-impl/nm-setting-gsm.c:603 #, c-format msgid "'%s' is not a number" msgstr "»%s« ni število" -#: src/libnm-core-impl/nm-setting-gsm.c:622 +#: src/libnm-core-impl/nm-setting-gsm.c:640 msgid "property is empty or wrong size" msgstr "lastnost je prazna ali napačne velikosti" -#: src/libnm-core-impl/nm-setting-gsm.c:635 +#: src/libnm-core-impl/nm-setting-gsm.c:653 msgid "property must contain only digits" msgstr "lastnost mora vsebovati samo števke" -#: src/libnm-core-impl/nm-setting-gsm.c:649 +#: src/libnm-core-impl/nm-setting-gsm.c:667 msgid "can't be enabled when manual configuration is present" 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-hsr.c:179 +#: src/libnm-core-impl/nm-setting-hsr.c:197 #: src/libnm-core-impl/nm-setting-veth.c:90 #, c-format msgid "'%s' is not a valid interface name" msgstr "»%s« ni veljavno ime vmesnika" +#: src/libnm-core-impl/nm-setting-hsr.c:207 +msgid "HSR protocol cannot be configured for PRP interfaces" +msgstr "Protokola HSR ni mogoče prilagoditi za vmesnike PRP" + #: src/libnm-core-impl/nm-setting-infiniband.c:213 msgid "Must specify a P_Key if specifying parent" msgstr "Če navedete nadrejeno, morate navesti P_Key" @@ -2616,11 +2617,8 @@ msgid "'%s' is not a valid tunnel key" msgstr "»%s« ni veljaven ključ tunela" #: src/libnm-core-impl/nm-setting-ip-tunnel.c:483 -#, fuzzy msgid "a fixed TTL is allowed only when path MTU discovery is enabled" -msgstr "" -"fiksna življenjska doba življenja je dovoljena le, če je omogočeno " -"odkrivanje MTU poti" +msgstr "fiksni TTL je dovoljen le, če je omogočeno odkrivanje poti MTU" #: src/libnm-core-impl/nm-setting-ip-tunnel.c:502 #, c-format @@ -2827,12 +2825,12 @@ msgid "key cannot start with \"NM.\"" msgstr "ključ se ne more začeti z »NM«." #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:166 -#, fuzzy, c-format +#, c-format msgid "" "OVS %s can only be added to a profile of type OVS bridge/port/interface or " "to OVS system interface" msgstr "" -"OVS %s se lahko doda samo profilu tipa OVS most/vrata/vmesnik ali " +"OVS %s se lahko doda samo profilu vrste most/vrata/vmesnik OVS ali " "sistemskemu vmesniku OVS" #: src/libnm-core-impl/nm-setting-ovs-external-ids.c:363 @@ -2854,10 +2852,11 @@ msgid "'%s' is not a valid interface type" msgstr "»%s« ni veljavna vrsta vmesnika" #: src/libnm-core-impl/nm-setting-ovs-interface.c:137 -#, fuzzy, c-format +#, c-format msgid "A connection with a '%s' setting needs connection.type explicitly set" msgstr "" -"Povezava z nastavitvijo »%s« zahteva eksplicitno nastavljeno povezavo.type" +"Povezava z nastavitvijo »%s« zahteva eksplicitno nastavljeno connection.type " +"(povezava.vrsta)" #: src/libnm-core-impl/nm-setting-ovs-interface.c:151 #, c-format @@ -2875,12 +2874,12 @@ msgid "A connection can not have both '%s' and '%s' settings at the same time" msgstr "Povezava ne more imeti hkrati nastavitev »%s« in »%s«" #: src/libnm-core-impl/nm-setting-ovs-interface.c:201 -#, fuzzy, c-format +#, c-format 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.vvrsta »ovs-interface«, " "vendar je »%s«" #: src/libnm-core-impl/nm-setting-ovs-interface.c:217 @@ -2890,9 +2889,9 @@ msgid "" 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 +#, c-format msgid "A connection with ovs-interface.type '%s' setting a 'ovs-patch' setting" -msgstr "Povezava z ovs-interface.type '%s' nastavitev 'ovs-patch'" +msgstr "Povezava z ovs-interface.type '%s' nastavlja nastavitev 'ovs-patch'" #: src/libnm-core-impl/nm-setting-ovs-interface.c:267 msgid "Missing ovs interface setting" @@ -2953,15 +2952,13 @@ msgid "setting this property requires non-zero '%s' property" msgstr "Za nastavitev te lastnosti potrebujete neničelno lastnost »%s«" #: src/libnm-core-impl/nm-setting-proxy.c:137 -#, fuzzy msgid "invalid proxy method" -msgstr "Neveljavna metoda proxy" +msgstr "neveljavna metoda posredovanja" #: src/libnm-core-impl/nm-setting-proxy.c:147 #: src/libnm-core-impl/nm-setting-proxy.c:159 -#, fuzzy msgid "this property is not allowed for method none" -msgstr "Ta lastnost ni dovoljena za metodo none" +msgstr "ta lastnost ni dovoljena za metodo none" #: src/libnm-core-impl/nm-setting-proxy.c:173 msgid "the script is too large" @@ -2988,9 +2985,9 @@ msgid "'%s' is not a valid MAC address" msgstr "»%s« ni veljaven naslov MAC" #: src/libnm-core-impl/nm-setting-sriov.c:1121 -#, fuzzy, c-format +#, 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" +msgstr "VF z indeksom %u, vendar je skupno število VF-jev %u" #: src/libnm-core-impl/nm-setting-sriov.c:1135 #, c-format @@ -2998,9 +2995,9 @@ msgid "invalid VF %u: %s" msgstr "neveljaven VF %u: %s" #: src/libnm-core-impl/nm-setting-sriov.c:1149 -#, fuzzy, c-format +#, c-format msgid "duplicate VF index %u" -msgstr "neveljavno polje '%s'" +msgstr "podvojeni indeks VF %u" #: src/libnm-core-impl/nm-setting-sriov.c:1173 #, c-format @@ -3137,9 +3134,8 @@ msgid "secret name cannot be empty" 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 skrivnih zastavic ni bila najdena" #: src/libnm-core-impl/nm-setting-vrf.c:73 msgid "table cannot be zero" @@ -3186,16 +3182,14 @@ msgid "Wake-on-LAN password can only be used with magic packet mode" 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 msgid "both speed and duplex should have a valid value or both should be unset" msgstr "" -"Hitrost in dupleks morata imeti veljavno vrednost ali pa morata biti oba " +"hitrost in dupleks morata imeti veljavno vrednost ali pa morata biti oba " "nenastavljena" #: src/libnm-core-impl/nm-setting-wired.c:1164 -#, fuzzy msgid "both speed and duplex are required for static link configuration" -msgstr "Hitrost in dupleks sta potrebna za konfiguracijo statične povezave" +msgstr "hitrost in dupleks sta potrebna za prilagoditev statične povezave" #: src/libnm-core-impl/nm-setting-wireguard.c:747 msgid "missing public-key for peer" @@ -3301,12 +3295,11 @@ msgstr "" "»wpa-eap« ali »wpa-eap-suite-b-192«" #: src/libnm-core-impl/nm-setting-wireless-security.c:1127 -#, fuzzy msgid "" "pmf can only be 'default' or 'required' when using 'owe', 'sae' or 'wpa-eap-" "suite-b-192' key management" msgstr "" -"PMF je lahko »privzeto« ali »obvezno« samo pri upravljanju ključev »dolg«, " +"pmf je lahko »default« ali »required« samo pri upravljanju ključev »owe«, " "»sae« ali »wpa-eap-suite-b-192«" #: src/libnm-core-impl/nm-setting-wireless.c:1125 @@ -3454,34 +3447,30 @@ msgid "invalid runner-tx-hash" msgstr "neveljaven runner-tx-hash" #: src/libnm-core-impl/nm-team-utils.c:2302 -#, fuzzy, c-format +#, c-format msgid "%s is only allowed for runner %s" msgstr "%s je dovoljeno samo za tekača %s" #: src/libnm-core-impl/nm-team-utils.c:2312 -#, fuzzy, c-format +#, c-format msgid "%s is only allowed for runners %s" 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ča lacp in activebackup ni mogoče nastaviti skupaj" #: src/libnm-core-impl/nm-team-utils.c:2347 -#, fuzzy msgid "missing link watcher" -msgstr "opazovalec manjkajočih povezav" +msgstr "opazovalnik manjkajočih povezav" #: src/libnm-core-impl/nm-team-utils.c:2373 -#, fuzzy msgid "team config exceeds size limit" -msgstr "Konfiguracija ekipe presega omejitev velikosti" +msgstr "prilagoditev ekipe presega omejitev velikosti" #: src/libnm-core-impl/nm-team-utils.c:2384 -#, fuzzy msgid "team config is not valid UTF-8" -msgstr "Napaka: vrednost časovne omejitve '%s' ni veljavna." +msgstr "prilagoditev ekipe ni veljaven UTF-8" #: src/libnm-core-impl/nm-team-utils.c:2559 #, c-format @@ -3775,9 +3764,9 @@ msgid "unsupported attribute '%s' of type '%s'" msgstr "nepodprt atribut »%s« vrste »%s«" #: src/libnm-core-impl/nm-utils.c:5961 -#, fuzzy, c-format +#, c-format msgid "Bridge VLANs %d and %d are not sorted by ascending vid" -msgstr "Mostni VLAN-ji %d in %d niso razvrščeni po naraščajočem vidu" +msgstr "Mostni VLAN-i %d in %d niso razvrščeni po naraščajočem vid-u" #: src/libnm-core-impl/nm-utils.c:5985 #, c-format @@ -3794,16 +3783,14 @@ msgid "unknown flags 0x%x" msgstr "neznane zastavice 0x%x" #: src/libnm-core-impl/nm-utils.c:6152 -#, fuzzy msgid "" "'fqdn-no-update' and 'fqdn-serv-update' flags cannot be set at the same time" msgstr "" "Zastavic »fqdn-no-update« in »fqdn-serv-update« ni mogoče nastaviti hkrati." #: src/libnm-core-impl/nm-utils.c:6163 -#, fuzzy msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags" -msgstr "Oznaka 'fqdn-clear-flags' ni združljiva z drugimi zastavicami FQDN" +msgstr "Zastavica 'fqdn-clear-flags' ni združljiva z drugimi zastavicami FQDN" #: src/libnm-core-impl/nm-utils.c:6171 msgid "DHCPv6 does not support the E (encoded) FQDN flag" @@ -3901,9 +3888,9 @@ msgid "Invalid IV length (must be at least %u)." msgstr "Neveljavna dolžina IV (mora biti vsaj %u)." #: src/libnm-crypto/nm-crypto-gnutls.c:120 -#, fuzzy, c-format +#, c-format msgid "Failed to initialize the decryption cipher context: %s (%s)" -msgstr "Začenjanje vsebine dešifrirne cifre je spodletelo: %s / %s." +msgstr "Ni bilo mogoče inicializirati konteksta šifre za dešifriranje: %s (%s)" #: src/libnm-crypto/nm-crypto-gnutls.c:134 #, c-format @@ -3925,9 +3912,9 @@ msgid "Unsupported key cipher for encryption" msgstr "Nepodprta šifra ključa za šifriranje" #: src/libnm-crypto/nm-crypto-gnutls.c:210 -#, fuzzy, c-format +#, c-format msgid "Failed to initialize the encryption cipher context: %s (%s)" -msgstr "Začenjanje vsebine šifrirne cifre je spodletelo: %s / %s." +msgstr "Inicializacija konteksta šifrirne šifre ni uspela: %s (%s)" #: src/libnm-crypto/nm-crypto-gnutls.c:238 #, c-format @@ -4684,9 +4671,8 @@ msgid "The Wi-Fi P2P peer could not be found" 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 obravnave naprav je vrnil napako" +msgstr "Dispečer za obravnavo naprav je vrnil napako" #: src/libnmc-base/nm-client-utils.c:471 msgid "" @@ -4748,93 +4734,97 @@ msgstr "" msgid "Networking was disabled" msgstr "Delovanje v omrežjih je onemogočeno" -#: src/libnmc-base/nm-client-utils.c:504 +#: src/libnmc-base/nm-client-utils.c:497 +msgid "The modem didn't have an operator code" +msgstr "Modem ni imel kode operaterja" + +#: src/libnmc-base/nm-client-utils.c:506 msgid "Unknown reason" msgstr "Neznani razlog" -#: src/libnmc-base/nm-client-utils.c:506 +#: src/libnmc-base/nm-client-utils.c:508 msgid "The connection was disconnected" msgstr "Povezava je bila prekinjena" -#: src/libnmc-base/nm-client-utils.c:508 +#: src/libnmc-base/nm-client-utils.c:510 msgid "Disconnected by user" msgstr "Uporabnik je prekinil povezavo" -#: src/libnmc-base/nm-client-utils.c:510 +#: src/libnmc-base/nm-client-utils.c:512 msgid "The base network connection was interrupted" msgstr "Osnovna omrežna povezava je bila prekinjena" -#: src/libnmc-base/nm-client-utils.c:512 +#: src/libnmc-base/nm-client-utils.c:514 msgid "The VPN service stopped unexpectedly" msgstr "Storitev VPN se je nepričakovano ustavila" -#: src/libnmc-base/nm-client-utils.c:514 +#: src/libnmc-base/nm-client-utils.c:516 msgid "The VPN service returned invalid configuration" msgstr "Storitev VPN je vrnila neveljavno prilagoditev" -#: src/libnmc-base/nm-client-utils.c:516 +#: src/libnmc-base/nm-client-utils.c:518 msgid "The connection attempt timed out" msgstr "Časovna omejitev poskusa povezave je potekla" -#: src/libnmc-base/nm-client-utils.c:518 +#: src/libnmc-base/nm-client-utils.c:520 msgid "The VPN service did not start in time" msgstr "Storitev VPN se ni zagnala pravočasno" -#: src/libnmc-base/nm-client-utils.c:520 +#: src/libnmc-base/nm-client-utils.c:522 msgid "The VPN service failed to start" msgstr "Storitev VPN se ni uspela zagnati" -#: src/libnmc-base/nm-client-utils.c:521 +#: src/libnmc-base/nm-client-utils.c:523 msgid "No valid secrets" msgstr "Brez veljavnih skrivnosti" -#: src/libnmc-base/nm-client-utils.c:522 +#: src/libnmc-base/nm-client-utils.c:524 msgid "Invalid secrets" msgstr "Neveljavne skrivnosti" -#: src/libnmc-base/nm-client-utils.c:524 +#: src/libnmc-base/nm-client-utils.c:526 msgid "The connection was removed" msgstr "Povezava je bila odstranjena" -#: src/libnmc-base/nm-client-utils.c:526 +#: src/libnmc-base/nm-client-utils.c:528 msgid "Master connection failed" msgstr "Glavna povezava ni uspela" -#: src/libnmc-base/nm-client-utils.c:528 +#: src/libnmc-base/nm-client-utils.c:530 msgid "Could not create a software link" msgstr "Programske povezave ni bilo mogoče ustvariti" -#: src/libnmc-base/nm-client-utils.c:530 +#: src/libnmc-base/nm-client-utils.c:532 msgid "The device disappeared" msgstr "Naprava je izginila" -#: src/libnmc-base/nm-client-utils.c:856 +#: src/libnmc-base/nm-client-utils.c:858 msgid "missing colon for \".:\" format" msgstr "manjkajoče dvopičje za obliko zapisa ».:«" -#: src/libnmc-base/nm-client-utils.c:873 +#: src/libnmc-base/nm-client-utils.c:875 msgid "missing dot for \".:\" format" msgstr "manjkajoča pika za obliko zapisa ».:«" -#: src/libnmc-base/nm-client-utils.c:879 +#: src/libnmc-base/nm-client-utils.c:881 msgid "missing setting for \".:\" format" msgstr "" "manjkajoča nastavitev za obliko zapisa ».:«" -#: src/libnmc-base/nm-client-utils.c:890 +#: src/libnmc-base/nm-client-utils.c:892 msgid "missing property for \".:\" format" msgstr "" "manjkajoča lastnost za obliko zapisa ».:«" -#: src/libnmc-base/nm-client-utils.c:900 +#: src/libnmc-base/nm-client-utils.c:902 msgid "invalid setting name" msgstr "Neveljavno ime nastavitve" -#: src/libnmc-base/nm-client-utils.c:914 +#: src/libnmc-base/nm-client-utils.c:916 msgid "property name is not UTF-8" msgstr "ime lastnosti ni UTF-8" -#: src/libnmc-base/nm-client-utils.c:931 src/libnmc-base/nm-client-utils.c:937 +#: src/libnmc-base/nm-client-utils.c:933 src/libnmc-base/nm-client-utils.c:939 msgid "secret is not UTF-8" msgstr "skrivnost ni UTF-8" @@ -4981,7 +4971,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:7163 +#: src/libnmc-setting/nm-meta-setting-desc.c:7175 msgid "MKA CAK" msgstr "MKA CAK" @@ -5003,17 +4993,17 @@ msgid "unknown VPN plugin \"%s\"" msgstr "neznani vstavek VPN »%s«" #: src/libnmc-base/nm-vpn-helpers.c:58 -#, fuzzy, c-format +#, c-format msgid "cannot load legacy-only VPN plugin \"%s\" for \"%s\"" -msgstr "ne morem naložiti podedovanega vstavka VPN »%s« za »%s«" +msgstr "ni možno naložiti podedovanega vstavka VPN »%s« za »%s«" #: src/libnmc-base/nm-vpn-helpers.c:66 -#, fuzzy, c-format +#, c-format msgid "" "cannot load VPN plugin \"%s\" due to missing \"%s\". Missing client plugin?" msgstr "" -"ne morem naložiti vtičnika VPN »%s« zaradi manjkajočega »%s«. Manjka vtičnik " -"odjemalca?" +"ne možno naložiti vtičnika VPN »%s« zaradi manjkajočega »%s«. Ali manjka " +"vstavek odjemalca?" #: src/libnmc-base/nm-vpn-helpers.c:73 #, c-format @@ -5041,9 +5031,8 @@ msgid "Cookie" msgstr "Piškotek" #: src/libnmc-base/nm-vpn-helpers.c:166 -#, fuzzy msgid "Gateway certificate hash" -msgstr "Razpršitev potrdila prehoda" +msgstr "Razpršena vsota potrdila prehoda" #: src/libnmc-base/nm-vpn-helpers.c:167 msgid "Gateway DNS resolution ('host:IP')" @@ -5102,9 +5091,9 @@ msgid "the next hop ('%s') must be first" msgstr "naslednji skok (»%s«) mora biti prvi" #: src/libnmc-setting/nm-meta-setting-desc.c:350 -#, fuzzy, c-format +#, c-format msgid "the metric ('%s') must be before attributes" -msgstr "meritev (\"%s\") mora biti pred atributi" +msgstr "meritev (‘%s’) mora biti pred atributi" #: src/libnmc-setting/nm-meta-setting-desc.c:403 #, c-format @@ -5215,9 +5204,8 @@ msgid "0 (none)" msgstr "0 (brez)" #: src/libnmc-setting/nm-meta-setting-desc.c:1854 -#, fuzzy msgid "agent-owned, " -msgstr "v lasti zastopnika, " +msgstr "v lasti agenta, " #: src/libnmc-setting/nm-meta-setting-desc.c:1856 msgid "not saved, " @@ -5270,9 +5258,9 @@ msgstr "" "želji geslo" #: src/libnmc-setting/nm-meta-setting-desc.c:2508 -#, fuzzy, c-format +#, c-format msgid "failed to set bond option \"%s\"" -msgstr "Določanje maske signala je spodletelo: %d" +msgstr "ni uspelo nastaviti možnosti vezave \"%s\"" #: src/libnmc-setting/nm-meta-setting-desc.c:2556 #, c-format @@ -5326,17 +5314,15 @@ msgstr "0 (onemogočeno)" #: src/libnmc-setting/nm-meta-setting-desc.c:2921 msgid "enabled, " -msgstr "omogočeno, " +msgstr "enabled (omogočeno), " #: src/libnmc-setting/nm-meta-setting-desc.c:2923 -#, fuzzy msgid "advertise, " -msgstr "Oglaševanje" +msgstr "advertise (oglaševano), " #: src/libnmc-setting/nm-meta-setting-desc.c:2925 -#, fuzzy msgid "willing, " -msgstr "Willing" +msgstr "willing (voljno), " #: src/libnmc-setting/nm-meta-setting-desc.c:3014 #, c-format @@ -5344,7 +5330,6 @@ msgid "'%s' is not a valid DCB flag" msgstr "»%s« ni veljavna zastavica DCB" #: 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" @@ -5413,9 +5398,9 @@ msgid "The valid syntax is: '[-] [pvid] [untagged]'" msgstr "Veljavna skladnja je: '[-] [pvid] [neoznačeno]'" #: src/libnmc-setting/nm-meta-setting-desc.c:4080 -#, fuzzy, c-format +#, c-format msgid "invalid priority map '%s'" -msgstr "neveljavno polje '%s'" +msgstr "neveljavna prednostna preslikava »%s«" #: src/libnmc-setting/nm-meta-setting-desc.c:4217 #, c-format @@ -5453,9 +5438,9 @@ msgstr "" "pravi %s." #: src/libnmc-setting/nm-meta-setting-desc.c:4395 -#, fuzzy, c-format +#, c-format msgid "WEP key is guessed to be of %s" -msgstr "Ključ WEP naj bi bil %s" +msgstr "Ugibana vrednost ključa WEP je %s" #: src/libnmc-setting/nm-meta-setting-desc.c:4402 #, c-format @@ -5535,7 +5520,6 @@ msgstr "" " nastavite team.config /etc/my-team.conf\n" #: src/libnmc-setting/nm-meta-setting-desc.c:4938 -#, fuzzy 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 " @@ -5560,18 +5544,18 @@ msgid "" " name=arp_ping source-host=172.16.1.1 target-host=172.16.1.254, " "name=ethtool delay-up=3\n" msgstr "" -"Vnesite seznam opazovalcev povezav, oblikovanih kot slovarji, kjer so ključi " -"združene lastnosti. Slovarski pari so v obliki: key=value in pari so ločeni " -"z ' '. Slovarji so ločeni z ','.\n" +"Vnesite seznam opazovalnikov povezav, oblikovanih kot slovarji, kjer so " +"ključi lastnosti teamd. Slovarski pari so v obliki: ključ=vrednost in pari " +"so ločeni z ' '. Slovarji so ločeni z ','.\n" "Dovoljeni/zahtevani ključi v slovarju se spreminjajo glede na vrsto " -"opazovalca povezav, medtem ko je edina lastnost, ki je skupna vsem " -"opazovalcem povezav, 'ime'*, ki določa opazovalca povezave, ki ga je treba " -"določiti.\n" +"opazovalnika povezav, medtem ko je edina lastnost, ki je skupna vsem " +"opazovalnikom povezav, ‘name'*, ki določa opazovalnika povezave, ki ga je " +"treba določiti.\n" "\n" -"Lastnosti, ki so na voljo za opazovalca povezav 'ethtool':\n" -" 'zakasnitev', 'zakasnitev'\n" +"Lastnosti, ki so na voljo za opazovalnika povezav 'ethtool':\n" +" ‘delay-up’, ‘delay-down’\n" "\n" -"Lastnosti, ki so na voljo za opazovalca povezav »nsna_ping«:\n" +"Lastnosti, ki so na voljo za opazovalnika povezav »nsna_ping«:\n" " 'init-wait', 'interval', 'missed-max', 'target-host'*\n" "\n" "Lastnosti, ki so na voljo za arp_ping, vključujejo vse tiste za nsna_ping " @@ -5589,7 +5573,6 @@ msgid "IEEE 802.15.4 (WPAN) parent device or connection UUID" msgstr "Nadrejena naprava IEEE 802.15.4 (WPAN) ali UUID povezave" #: src/libnmc-setting/nm-meta-setting-desc.c:5177 -#, fuzzy msgid "" "Enter bytes as a list of hexadecimal values.\n" "Two formats are accepted:\n" @@ -5605,7 +5588,7 @@ msgstr "" "Sprejemljivi sta dve obliki:\n" "(a) niz šestnajstiških števk, pri čemer vsaki dve števki predstavljata en " "bajt\n" -"(b) presledkom ločen seznam bajtov, zapisanih kot šestnajstiške števke (z " +"(b) s presledki ločen seznam bajtov, zapisanih kot šestnajstiške števke (z " "neobvezno predpono 0x/0X in neobvezno začetno 0).\n" "\n" "Primeri: ab0455a6ea3a74C2\n" @@ -5613,8 +5596,8 @@ msgstr "" #: 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 +#: src/libnmc-setting/nm-meta-setting-desc.c:6137 +#: src/libnmc-setting/nm-meta-setting-desc.c:7542 msgid "Password [none]" msgstr "Geslo [brez]" @@ -5632,11 +5615,11 @@ msgid "Port Priority" msgstr "Prednost vrat" #: 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 +#: src/libnmc-setting/nm-meta-setting-desc.c:6284 +#: src/libnmc-setting/nm-meta-setting-desc.c:8300 +#: src/libnmc-setting/nm-meta-setting-desc.c:8338 +#: src/libnmc-setting/nm-meta-setting-desc.c:8550 +#: src/libnmc-setting/nm-meta-setting-desc.c:8815 msgid "MAC [none]" msgstr "MAC [brez]" @@ -5686,13 +5669,12 @@ msgid "Bridge port STP path cost" msgstr "Stroški poti STP vrat mosta" #: src/libnmc-setting/nm-meta-setting-desc.c:5521 -#, fuzzy msgid "Hairpin" msgstr "Lasnica" #: 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 +#: src/libnmc-setting/nm-meta-setting-desc.c:6131 +#: src/libnmc-setting/nm-meta-setting-desc.c:8145 msgid "Username [none]" msgstr "Uporabniško ime [brez]" @@ -5750,26 +5732,26 @@ msgstr "" "'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:6144 +#: src/libnmc-setting/nm-meta-setting-desc.c:6147 msgid "APN" msgstr "APN" -#: src/libnmc-setting/nm-meta-setting-desc.c:6226 +#: src/libnmc-setting/nm-meta-setting-desc.c:6232 msgid "hsr port1" msgstr "hsr vrata1" -#: src/libnmc-setting/nm-meta-setting-desc.c:6233 +#: src/libnmc-setting/nm-meta-setting-desc.c:6239 msgid "hsr port2" msgstr "hsr vrata2" -#: src/libnmc-setting/nm-meta-setting-desc.c:6239 +#: src/libnmc-setting/nm-meta-setting-desc.c:6245 msgid "hsr multicast spec" msgstr "hsr multicast spec" -#: 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/libnmc-setting/nm-meta-setting-desc.c:6293 +#: src/libnmc-setting/nm-meta-setting-desc.c:7082 +#: src/libnmc-setting/nm-meta-setting-desc.c:8385 +#: src/libnmc-setting/nm-meta-setting-desc.c:8612 #: 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-loopback.c:56 #: src/nmtui/nmt-page-veth.c:80 src/nmtui/nmt-page-vlan.c:100 @@ -5777,15 +5759,15 @@ msgstr "hsr multicast spec" msgid "MTU" msgstr "MTU" -#: src/libnmc-setting/nm-meta-setting-desc.c:6300 +#: src/libnmc-setting/nm-meta-setting-desc.c:6312 msgid "P_KEY [none]" msgstr "P_KEY [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6318 +#: src/libnmc-setting/nm-meta-setting-desc.c:6330 msgid "Parent interface [none]" msgstr "Nadrejeni vmesnik [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6347 +#: src/libnmc-setting/nm-meta-setting-desc.c:6359 msgid "" "Enter a list of IPv4 addresses of DNS servers.\n" "\n" @@ -5795,12 +5777,11 @@ msgstr "" "\n" "Primer: 8.8.8.8, 8.8.4.4\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:6397 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:6409 msgid "IPv4 address (IP[/plen]) [none]" msgstr "Naslov IPv4 (IP[/plen]) [none]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6399 +#: src/libnmc-setting/nm-meta-setting-desc.c:6411 msgid "" "Enter a list of IPv4 addresses formatted as:\n" " ip[/prefix], ip[/prefix],...\n" @@ -5814,11 +5795,11 @@ msgstr "" "\n" "Primer: 192.168.1.5/24, 10.0.0.11/24\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:6418 +#: src/libnmc-setting/nm-meta-setting-desc.c:6430 msgid "IPv4 gateway [none]" msgstr "Prehod IPv4 [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6427 +#: src/libnmc-setting/nm-meta-setting-desc.c:6439 msgid "" "Enter a list of IPv4 routes formatted as:\n" " ip[/prefix] [next-hop] [metric],...\n" @@ -5841,7 +5822,7 @@ msgstr "" "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:6467 +#: src/libnmc-setting/nm-meta-setting-desc.c:6479 msgid "" "Enter a list of IPv4 routing rules formatted as:\n" " priority [prio] [from [src]] [to [dst]], ,...\n" @@ -5851,8 +5832,7 @@ msgstr "" " priority [prio] [from [vir]] [do [CLJ]], ,...\n" "\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:6658 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:6670 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 " @@ -5863,20 +5843,20 @@ msgid "" "\n" "Example: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n" msgstr "" -"Vnesite seznam naslovov IPv6 strežnikov DNS. Če je metoda konfiguracije " -"IPv6 »samodejna«, se ti strežniki DNS dodajo tistim (če obstajajo), ki jih " -"vrne samodejna konfiguracija. Strežnikov DNS ni mogoče uporabljati z " -"metodami konfiguracije IPv6 v skupni rabi ali z lokalno povezavo, saj ni " -"zgornjega omrežja. V vseh drugih načinih konfiguracije IPv6 se ti strežniki " -"DNS uporabljajo kot edini strežniki DNS za to povezavo.\n" +"Vnesite seznam naslovov IPv6 strežnikov DNS. Če je metoda prilagoditve IPv6 " +"»auto«, se ti strežniki DNS dodajo tistim (če obstajajo), ki jih vrne " +"samodejna prilagoditev. Strežnikov DNS ni mogoče uporabljati z metodami " +"prilagoditve IPv6 v skupni rabi ali s krajevno povezavo, saj ni omrežja " +"navzgor. V vseh drugih načinih prilagoditev IPv6 se ti strežniki DNS " +"uporabljajo kot edini strežniki DNS za to povezavo.\n" "\n" "Primer: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:6714 +#: src/libnmc-setting/nm-meta-setting-desc.c:6726 msgid "IPv6 address (IP[/plen]) [none]" msgstr "Naslov IPv6 (IP[/plen]) [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6716 +#: src/libnmc-setting/nm-meta-setting-desc.c:6728 msgid "" "Enter a list of IPv6 addresses formatted as:\n" " ip[/prefix], ip[/prefix],...\n" @@ -5890,12 +5870,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:6735 +#: src/libnmc-setting/nm-meta-setting-desc.c:6747 msgid "IPv6 gateway [none]" msgstr "Prehod IPv6 [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6744 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:6756 msgid "" "Enter a list of IPv6 routes formatted as:\n" " ip[/prefix] [next-hop] [metric],...\n" @@ -5909,204 +5888,195 @@ msgid "" " abbe::/64 55\n" msgstr "" "Vnesite seznam poti IPv6, ki je oblikovan kot:\n" -" ip[/predpona] [naslednji skok] [metrika],...\n" +" ip[/prefix] [naslednji-skok] [metrika],...\n" "\n" "Manjkajoča predpona se šteje za predpono 128.\n" "Manjkajoči naslednji skok se šteje za \"::\".\n" "Manjkajoča metrika pomeni privzeto (NM/jedro bo nastavilo privzeto " "vrednost).\n" "\n" -"Primeri: 2001:db8:govedina:2::/64 2001:db8:govedina::2, 2001:db8:" -"govedina:3::/64 2001:db8:govedina::3 2\n" -" Abbe::/64 55\n" +"Primeri: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:" +"db8:beef::3 2\n" +" abbe::/64 55\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:6784 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:6796 msgid "" "Enter a list of IPv6 routing rules formatted as:\n" " priority [prio] [from [src]] [to [dst]], ,...\n" "\n" msgstr "" "Vnesite seznam pravil usmerjanja IPv6, ki so oblikovana kot:\n" -" prednostna naloga [prio] [od [src]] [do [DST]], ,...\n" +" priority [prio] [from [vir]] [to [cilj]], ,...\n" "\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:6976 -#: src/libnmc-setting/nm-meta-setting-desc.c:8188 +#: src/libnmc-setting/nm-meta-setting-desc.c:6988 +#: src/libnmc-setting/nm-meta-setting-desc.c:8200 msgid "Parent device [none]" msgstr "Nadrejena naprava [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6982 +#: src/libnmc-setting/nm-meta-setting-desc.c:6994 msgid "Local endpoint [none]" msgstr "Krajevna končna točka [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:6989 -#: src/libnmc-setting/nm-meta-setting-desc.c:8207 +#: src/libnmc-setting/nm-meta-setting-desc.c:7001 +#: src/libnmc-setting/nm-meta-setting-desc.c:8219 msgid "Remote" msgstr "Oddaljeno" -#: src/libnmc-setting/nm-meta-setting-desc.c:7040 +#: src/libnmc-setting/nm-meta-setting-desc.c:7052 msgid "IPVLAN parent device or connection UUID" msgstr "Nadrejena naprava IPVLAN ali UUID povezave" -#: src/libnmc-setting/nm-meta-setting-desc.c:7136 +#: src/libnmc-setting/nm-meta-setting-desc.c:7148 msgid "MACsec parent device or connection UUID" msgstr "Nadrejena naprava MACsec ali UUID povezave" -#: src/libnmc-setting/nm-meta-setting-desc.c:7157 +#: src/libnmc-setting/nm-meta-setting-desc.c:7169 msgid "Enable encryption" msgstr "Omogoči šifriranje" -#: src/libnmc-setting/nm-meta-setting-desc.c:7173 +#: src/libnmc-setting/nm-meta-setting-desc.c:7185 msgid "MKA_CKN" msgstr "MKA_CKN" -#: src/libnmc-setting/nm-meta-setting-desc.c:7179 +#: src/libnmc-setting/nm-meta-setting-desc.c:7191 #: src/nmtui/nmt-page-macsec.c:170 msgid "SCI port" msgstr "Vrata SCI" -#: src/libnmc-setting/nm-meta-setting-desc.c:7208 +#: src/libnmc-setting/nm-meta-setting-desc.c:7220 msgid "MACVLAN parent device or connection UUID" msgstr "Nadrejena naprava MACVLAN ali UUID povezave" -#: src/libnmc-setting/nm-meta-setting-desc.c:7229 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:7241 msgid "Tap" -msgstr "TAP" +msgstr "Tap" -#: 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 +#: src/libnmc-setting/nm-meta-setting-desc.c:7312 +#: src/libnmc-setting/nm-meta-setting-desc.c:8510 src/nmtui/nmt-page-wifi.c:216 msgid "SSID" msgstr "SSID" -#: src/libnmc-setting/nm-meta-setting-desc.c:7310 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:7322 msgid "OLPC Mesh channel" -msgstr "Povezava CDMA %d" +msgstr "Kanal Mreževine OLPC" -#: src/libnmc-setting/nm-meta-setting-desc.c:7320 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:7332 msgid "DHCP anycast MAC address [none]" -msgstr "Naslov MAC vsakomernega oddajanja DHCP [brez]" +msgstr "Naslov MAC anycast DHCP [none/brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:7511 +#: src/libnmc-setting/nm-meta-setting-desc.c:7523 msgid "PPPoE parent device" msgstr "Nadrejena naprava PPPoE" -#: src/libnmc-setting/nm-meta-setting-desc.c:7517 +#: src/libnmc-setting/nm-meta-setting-desc.c:7529 msgid "Service [none]" msgstr "Storitev [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:7524 +#: src/libnmc-setting/nm-meta-setting-desc.c:7536 msgid "PPPoE username" msgstr "Uporabniško ime PPPoE" -#: src/libnmc-setting/nm-meta-setting-desc.c:7573 +#: src/libnmc-setting/nm-meta-setting-desc.c:7585 msgid "Browser only" msgstr "Samo brskalnik" -#: src/libnmc-setting/nm-meta-setting-desc.c:7579 +#: src/libnmc-setting/nm-meta-setting-desc.c:7591 msgid "PAC URL" msgstr "URL PAC" -#: src/libnmc-setting/nm-meta-setting-desc.c:7585 +#: src/libnmc-setting/nm-meta-setting-desc.c:7597 msgid "PAC script" msgstr "Skript PAC" -#: src/libnmc-setting/nm-meta-setting-desc.c:7721 -#: src/libnmc-setting/nm-meta-setting-desc.c:7910 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:7733 +#: src/libnmc-setting/nm-meta-setting-desc.c:7922 msgid "Team JSON configuration [none]" msgstr "Prilagoditev skupine JSON [none]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8013 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:8025 msgid "User ID [none]" -msgstr "ID uporabnika [none]" +msgstr "ID uporabnika [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8019 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:8031 msgid "Group ID [none]" msgstr "ID skupine [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8025 +#: src/libnmc-setting/nm-meta-setting-desc.c:8037 msgid "Enable PI" msgstr "Omogoči PI" -#: src/libnmc-setting/nm-meta-setting-desc.c:8031 +#: src/libnmc-setting/nm-meta-setting-desc.c:8043 msgid "Enable VNET header" msgstr "Omogoči glavo VNET" -#: src/libnmc-setting/nm-meta-setting-desc.c:8037 +#: src/libnmc-setting/nm-meta-setting-desc.c:8049 msgid "Enable multi queue" msgstr "Omogoči več čakalnih vrst" -#: src/libnmc-setting/nm-meta-setting-desc.c:8050 +#: src/libnmc-setting/nm-meta-setting-desc.c:8062 msgid "veth peer" msgstr "veth peer" -#: src/libnmc-setting/nm-meta-setting-desc.c:8063 +#: src/libnmc-setting/nm-meta-setting-desc.c:8075 msgid "VLAN parent device or connection UUID" msgstr "Nadrejena naprava VLAN ali UUID povezave" -#: src/libnmc-setting/nm-meta-setting-desc.c:8070 +#: src/libnmc-setting/nm-meta-setting-desc.c:8082 msgid "VLAN ID (<0-4094>)" msgstr "ID VLAN (<0-4094>)" -#: src/libnmc-setting/nm-meta-setting-desc.c:8076 +#: src/libnmc-setting/nm-meta-setting-desc.c:8088 msgid "VLAN flags (<0-7>) [none]" msgstr "Zastavice VLAN (<0-7>) [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8092 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:8104 msgid "Ingress priority maps [none]" -msgstr "Prednostni zemljevidi vnosa [brez]" +msgstr "Prednostni zemljevidi vnosa [none/brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8103 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:8115 msgid "Egress priority maps [none]" -msgstr "Prednostni zemljevidi izhoda [brez]" +msgstr "Prednostni zemljevidi izhoda [none/brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8175 +#: src/libnmc-setting/nm-meta-setting-desc.c:8187 msgid "Table" msgstr "Tabela" -#: src/libnmc-setting/nm-meta-setting-desc.c:8195 +#: src/libnmc-setting/nm-meta-setting-desc.c:8207 msgid "VXLAN ID" msgstr "ID VXLAN" -#: src/libnmc-setting/nm-meta-setting-desc.c:8201 +#: src/libnmc-setting/nm-meta-setting-desc.c:8213 msgid "Local address [none]" msgstr "Krajevni naslov [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8213 +#: src/libnmc-setting/nm-meta-setting-desc.c:8225 msgid "Minimum source port" msgstr "Najmanjša izvorna vrata" -#: src/libnmc-setting/nm-meta-setting-desc.c:8219 +#: src/libnmc-setting/nm-meta-setting-desc.c:8231 msgid "Maximum source port" msgstr "Največja izvorna vrata" -#: src/libnmc-setting/nm-meta-setting-desc.c:8225 +#: src/libnmc-setting/nm-meta-setting-desc.c:8237 msgid "Destination port" msgstr "Ciljna vrata" -#: src/libnmc-setting/nm-meta-setting-desc.c:8265 src/nmtui/nmt-page-veth.c:54 +#: src/libnmc-setting/nm-meta-setting-desc.c:8277 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:8295 +#: src/libnmc-setting/nm-meta-setting-desc.c:8307 msgid "WiMAX NSP name" msgstr "Ime WiMAX NSP" -#: src/libnmc-setting/nm-meta-setting-desc.c:8332 -#: src/libnmc-setting/nm-meta-setting-desc.c:8543 +#: src/libnmc-setting/nm-meta-setting-desc.c:8344 +#: src/libnmc-setting/nm-meta-setting-desc.c:8555 msgid "Cloned MAC [none]" msgstr "Klonirani MAC [brez]" -#: src/libnmc-setting/nm-meta-setting-desc.c:8381 +#: src/libnmc-setting/nm-meta-setting-desc.c:8393 msgid "" "Enter a list of subchannels (comma or space separated).\n" "\n" @@ -6116,7 +6086,7 @@ msgstr "" "\n" "Primer: 0.0.0e20 0.0.0e21 0.0.0e22\n" -#: src/libnmc-setting/nm-meta-setting-desc.c:8752 +#: src/libnmc-setting/nm-meta-setting-desc.c:8764 msgid "" "Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, " "and 2 or passphrase.\n" @@ -6124,236 +6094,228 @@ 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:8811 +#: src/libnmc-setting/nm-meta-setting-desc.c:8823 msgid "Short address (<0x0000-0xffff>)" msgstr "Kratek naslov (<0x0000-0xffff>)" -#: src/libnmc-setting/nm-meta-setting-desc.c:8827 +#: src/libnmc-setting/nm-meta-setting-desc.c:8839 msgid "PAN Identifier (<0x0000-0xffff>)" msgstr "Identifikator PAN (<0x0000-0xffff>)" -#: src/libnmc-setting/nm-meta-setting-desc.c:8842 +#: src/libnmc-setting/nm-meta-setting-desc.c:8854 msgid "Page ()" msgstr "Stran ()" -#: src/libnmc-setting/nm-meta-setting-desc.c:8856 +#: src/libnmc-setting/nm-meta-setting-desc.c:8868 msgid "Channel ()" msgstr "Kanal ()" #. *************************************************************************** -#: src/libnmc-setting/nm-meta-setting-desc.c:8991 +#: src/libnmc-setting/nm-meta-setting-desc.c:9003 msgid "6LOWPAN settings" msgstr "Nastavitve 6LOWPAN" -#: src/libnmc-setting/nm-meta-setting-desc.c:8992 +#: src/libnmc-setting/nm-meta-setting-desc.c:9004 msgid "802-1x settings" msgstr "Nastavitve 802-1x" -#: src/libnmc-setting/nm-meta-setting-desc.c:8994 +#: src/libnmc-setting/nm-meta-setting-desc.c:9006 msgid "bluetooth connection" msgstr "Povezava Bluetooth" -#: src/libnmc-setting/nm-meta-setting-desc.c:8995 +#: src/libnmc-setting/nm-meta-setting-desc.c:9007 msgid "Bond device" msgstr "Vezna naprava" -#: src/libnmc-setting/nm-meta-setting-desc.c:8996 +#: src/libnmc-setting/nm-meta-setting-desc.c:9008 msgid "Bond port" msgstr "Vezna vrata" -#: src/libnmc-setting/nm-meta-setting-desc.c:8997 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9009 msgid "Bridge device" msgstr "Naprava mosta" -#: src/libnmc-setting/nm-meta-setting-desc.c:8998 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9010 msgid "Bridge port" msgstr "Vrata mosta" -#: src/libnmc-setting/nm-meta-setting-desc.c:8999 +#: src/libnmc-setting/nm-meta-setting-desc.c:9011 msgid "CDMA mobile broadband connection" msgstr "Mobilna širokopasovna povezava CDMA" -#: src/libnmc-setting/nm-meta-setting-desc.c:9000 +#: src/libnmc-setting/nm-meta-setting-desc.c:9012 msgid "General settings" msgstr "Splošne nastavitve" -#: src/libnmc-setting/nm-meta-setting-desc.c:9001 +#: src/libnmc-setting/nm-meta-setting-desc.c:9013 msgid "DCB settings" msgstr "Nastavitve DCB" -#: src/libnmc-setting/nm-meta-setting-desc.c:9002 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9014 msgid "Dummy settings" -msgstr "Lažne nastavitve" +msgstr "Nastavitve lažne" -#: src/libnmc-setting/nm-meta-setting-desc.c:9003 +#: src/libnmc-setting/nm-meta-setting-desc.c:9015 msgid "Ethtool settings" msgstr "Nastavitve Ethtool" -#: src/libnmc-setting/nm-meta-setting-desc.c:9004 +#: src/libnmc-setting/nm-meta-setting-desc.c:9016 msgid "Generic settings" msgstr "Splošne nastavitve" -#: src/libnmc-setting/nm-meta-setting-desc.c:9005 +#: src/libnmc-setting/nm-meta-setting-desc.c:9017 msgid "GSM mobile broadband connection" msgstr "Mobilna širokopasovna povezava GSM" -#: src/libnmc-setting/nm-meta-setting-desc.c:9006 +#: src/libnmc-setting/nm-meta-setting-desc.c:9018 msgid "Hostname settings" msgstr "Nastavitve imena gostitelja" -#: src/libnmc-setting/nm-meta-setting-desc.c:9007 +#: src/libnmc-setting/nm-meta-setting-desc.c:9019 msgid "HSR settings" msgstr "Nastavitve HSR" -#: src/libnmc-setting/nm-meta-setting-desc.c:9009 +#: src/libnmc-setting/nm-meta-setting-desc.c:9021 msgid "IPv4 protocol" msgstr "Protokol IPv4" -#: src/libnmc-setting/nm-meta-setting-desc.c:9010 +#: src/libnmc-setting/nm-meta-setting-desc.c:9022 msgid "IPv6 protocol" msgstr "Protokol IPv6" -#: src/libnmc-setting/nm-meta-setting-desc.c:9011 +#: src/libnmc-setting/nm-meta-setting-desc.c:9023 msgid "IP-tunnel settings" msgstr "Nastavitve predora IP" -#: src/libnmc-setting/nm-meta-setting-desc.c:9012 +#: src/libnmc-setting/nm-meta-setting-desc.c:9024 msgid "IPVLAN settings" msgstr "Nastavitve IPVLAN" -#: src/libnmc-setting/nm-meta-setting-desc.c:9013 +#: src/libnmc-setting/nm-meta-setting-desc.c:9025 msgid "Link settings" msgstr "Nastavitve povezave" -#: src/libnmc-setting/nm-meta-setting-desc.c:9014 +#: src/libnmc-setting/nm-meta-setting-desc.c:9026 msgid "Loopback settings" msgstr "Nastavitve povratne zanke" -#: src/libnmc-setting/nm-meta-setting-desc.c:9015 +#: src/libnmc-setting/nm-meta-setting-desc.c:9027 msgid "MACsec connection" msgstr "Povezava MACsec" -#: src/libnmc-setting/nm-meta-setting-desc.c:9016 +#: src/libnmc-setting/nm-meta-setting-desc.c:9028 msgid "macvlan connection" msgstr "Povezava MACVLAN" -#: src/libnmc-setting/nm-meta-setting-desc.c:9017 +#: src/libnmc-setting/nm-meta-setting-desc.c:9029 msgid "Match" msgstr "Se sklada" -#: src/libnmc-setting/nm-meta-setting-desc.c:9018 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9030 msgid "OLPC Mesh connection" -msgstr "Povezava CDMA %d" +msgstr "Povezava Mreževine OLPC" -#: src/libnmc-setting/nm-meta-setting-desc.c:9019 +#: src/libnmc-setting/nm-meta-setting-desc.c:9031 msgid "Open vSwitch bridge settings" msgstr "Odpri nastavitve mostu vSwitch" -#: src/libnmc-setting/nm-meta-setting-desc.c:9020 +#: src/libnmc-setting/nm-meta-setting-desc.c:9032 msgid "Open vSwitch DPDK interface settings" msgstr "Odpri nastavitve vmesnika vSwitch DPDK" -#: src/libnmc-setting/nm-meta-setting-desc.c:9021 +#: src/libnmc-setting/nm-meta-setting-desc.c:9033 msgid "OVS Other Config" msgstr "Druge prilagoditve OVS" -#: src/libnmc-setting/nm-meta-setting-desc.c:9022 +#: src/libnmc-setting/nm-meta-setting-desc.c:9034 msgid "OVS External IDs" msgstr "Zunanji ID-ji OVS" -#: src/libnmc-setting/nm-meta-setting-desc.c:9023 +#: src/libnmc-setting/nm-meta-setting-desc.c:9035 msgid "Open vSwitch interface settings" msgstr "Odpri nastavitve vmesnika vSwitch" -#: src/libnmc-setting/nm-meta-setting-desc.c:9024 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9036 msgid "Open vSwitch patch interface settings" msgstr "Odpri nastavitve vmesnika prevezovalnika vSwitch" -#: src/libnmc-setting/nm-meta-setting-desc.c:9025 +#: src/libnmc-setting/nm-meta-setting-desc.c:9037 msgid "Open vSwitch port settings" msgstr "Odpri nastavitve vrat vSwitch" -#: src/libnmc-setting/nm-meta-setting-desc.c:9026 +#: src/libnmc-setting/nm-meta-setting-desc.c:9038 msgid "PPP settings" msgstr "Nastavitve PPP" -#: src/libnmc-setting/nm-meta-setting-desc.c:9027 +#: src/libnmc-setting/nm-meta-setting-desc.c:9039 msgid "PPPoE" msgstr "PPPoE" -#: src/libnmc-setting/nm-meta-setting-desc.c:9028 +#: src/libnmc-setting/nm-meta-setting-desc.c:9040 msgid "Prefix delegation settings" msgstr "Predpni nastavitve delegiranja" -#: src/libnmc-setting/nm-meta-setting-desc.c:9029 +#: src/libnmc-setting/nm-meta-setting-desc.c:9041 msgid "Proxy" msgstr "Posr. strežnik" -#: src/libnmc-setting/nm-meta-setting-desc.c:9030 +#: src/libnmc-setting/nm-meta-setting-desc.c:9042 msgid "Serial settings" msgstr "Serijske nastavitve" -#: src/libnmc-setting/nm-meta-setting-desc.c:9031 +#: src/libnmc-setting/nm-meta-setting-desc.c:9043 msgid "SR-IOV settings" msgstr "Nastavitve SR-IOV" -#: src/libnmc-setting/nm-meta-setting-desc.c:9032 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9044 msgid "Traffic controls" msgstr "Nadzor prometa" -#: src/libnmc-setting/nm-meta-setting-desc.c:9033 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9045 msgid "Team device" -msgstr "Naprava je bila odstranjena" +msgstr "Naprava skupine" -#: src/libnmc-setting/nm-meta-setting-desc.c:9034 -#, fuzzy +#: src/libnmc-setting/nm-meta-setting-desc.c:9046 msgid "Team port" msgstr "Vrata skupine" -#: src/libnmc-setting/nm-meta-setting-desc.c:9035 +#: src/libnmc-setting/nm-meta-setting-desc.c:9047 msgid "Tun device" msgstr "Naprava Tun" -#: src/libnmc-setting/nm-meta-setting-desc.c:9036 +#: src/libnmc-setting/nm-meta-setting-desc.c:9048 msgid "User settings" msgstr "Uporabniške nastavitve" -#: src/libnmc-setting/nm-meta-setting-desc.c:9042 +#: src/libnmc-setting/nm-meta-setting-desc.c:9054 msgid "Wi-Fi P2P connection" msgstr "Povezava Wi-Fi P2P" -#: src/libnmc-setting/nm-meta-setting-desc.c:9043 +#: src/libnmc-setting/nm-meta-setting-desc.c:9055 msgid "WiMAX connection" msgstr "Povezava WiMAX" -#: src/libnmc-setting/nm-meta-setting-desc.c:9044 +#: src/libnmc-setting/nm-meta-setting-desc.c:9056 msgid "Wired Ethernet" msgstr "Žična omrežna povezava" -#: src/libnmc-setting/nm-meta-setting-desc.c:9045 +#: src/libnmc-setting/nm-meta-setting-desc.c:9057 msgid "WireGuard VPN settings" msgstr "Nastavitve WireGuard VPN" -#: src/libnmc-setting/nm-meta-setting-desc.c:9046 +#: src/libnmc-setting/nm-meta-setting-desc.c:9058 msgid "Wi-Fi connection" msgstr "Povezava Wi-Fi" -#: src/libnmc-setting/nm-meta-setting-desc.c:9047 +#: src/libnmc-setting/nm-meta-setting-desc.c:9059 msgid "Wi-Fi security settings" msgstr "Varnostne nastavitve omrežja Wi-Fi" -#: src/libnmc-setting/nm-meta-setting-desc.c:9048 +#: src/libnmc-setting/nm-meta-setting-desc.c:9060 msgid "WPAN settings" msgstr "Nastavitve WPAN" -#: src/libnmc-setting/nm-meta-setting-desc.c:9478 +#: src/libnmc-setting/nm-meta-setting-desc.c:9490 msgid "name" msgstr "ime" @@ -6382,7 +6344,6 @@ msgid "VPN type" msgstr "Vrsta VPN" #: src/libnmc-setting/nm-meta-setting-desc.h:29 -#, fuzzy msgid "Master" msgstr "Glavni" @@ -6396,7 +6357,6 @@ msgid "Bluetooth type" msgstr "Vrsta Bluetooth" #: src/libnmc-setting/nm-meta-setting-desc.h:47 -#, fuzzy msgid "Bonding mode" msgstr "Način vezave" @@ -6425,27 +6385,24 @@ 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 msgid "" "The number of retries for the authentication. Zero means to try " "indefinitely; -1 means to use a global default. If the global default is not " "set, the authentication retries for 3 times before failing the connection. " "Currently, this only applies to 802-1x authentication." msgstr "" -"Število ponovnih poskusov za preverjanje pristnosti. Nič pomeni poskušati v " -"nedogled; -1 pomeni uporabo globalne privzete nastavitve. Če globalna " -"privzeta nastavitev ni nastavljena, se preverjanje pristnosti ponovi 3-krat, " +"Število ponovnih poskusov preverjanja pristnosti. Nič pomeni poskušati v " +"nedogled; -1 pomeni uporabo globalne privzete vrednosti. Če globalna " +"privzeta nastavitev ni nastavljena, preverjanje pristnosti poskusi 3-krat, " "preden povezava ne uspe. Trenutno to velja samo za preverjanje pristnosti " "802-1x." #: src/libnmc-setting/settings-docs.h.in:4 -#, fuzzy msgid "" "Whether or not the connection should be automatically connected by " "NetworkManager when the resources for the connection are available. TRUE to " @@ -6462,22 +6419,21 @@ msgid "" "is identical, the choice is undefined. Depending on \"connection.multi-" "connect\", a profile can (auto)connect only once at a time or multiple times." msgstr "" -"Ali naj NetworkManager samodejno poveže povezavo, ko so na voljo viri za " -"povezavo. TRUE za samodejno aktiviranje povezave, FALSE za ročno " -"posredovanje za aktiviranje povezave. Samodejna povezava se zgodi, ko so " -"okoliščine primerne. To na primer pomeni, da je naprava trenutno upravljana " -"in ni aktivna. Samodejna povezava tako nikoli ne nadomesti ali tekmuje z že " -"aktivnim profilom. Upoštevajte, da samodejna povezava ni izvedena za profile " -"VPN. Oglejte si »sekundarne« kot alternativo za samodejno povezovanje " -"profilov VPN. Če je več profilov pripravljenih za samodejno povezavo na isti " -"napravi, je izbran tisti z boljšim »connection.autoconnect-priority«. Če so " -"prioritete enake, se aktivira nazadnje povezan profil. Če profili niso bili " -"povezani prej ali je njihov »connection.timestamp« enak, izbira ni določena. " -"Odvisno od »connection.multi-connect« se lahko profil (samodejno) poveže le " -"enkrat naenkrat ali večkrat." +"Ali naj NetworkManager samodejno vzpostavi povezavo s povezavo, ko so na " +"voljo viri za povezavo. TRUE za samodejno aktiviranje povezave, FALSE za " +"ročno posredovanje za aktiviranje povezave. Samodejna povezava se zgodi, ko " +"so okoliščine primerne. To na primer pomeni, da je naprava trenutno " +"upravljana in ni aktivna. Samodejna povezava tako nikoli ne nadomešča ali " +"tekmuje z že aktivnim profilom. Upoštevajte, da samodejna povezava ni " +"implementirana za profile VPN. Oglejte si »sekundarne« kot alternativo za " +"samodejno povezovanje profilov VPN. Če je več profilov pripravljenih za " +"samodejno povezavo na isti napravi, je izbran tisti z boljšo »connection." +"autoconnect-priority«. Če so prednostne naloge enake, se aktivira nazadnje " +"povezani profil. Če profili prej niso bili povezani ali je njihov " +"»connection.timestamp« enak, je izbira nedoločena. Odvisno od »connection." +"multi-connect« se lahko profil (samodejno) poveže samo enkrat ali večkrat." #: 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 " @@ -6488,17 +6444,16 @@ msgid "" "set, global connection.autoconnect-ports is read to determine the real " "value. If it is default as well, this fallbacks to 0." msgstr "" -"Ali naj se vrata te povezave samodejno prikažejo, ko NetworkManager aktivira " -"to povezavo. To ima resničen učinek le na povezave krmilnikov. Lastnosti " -"»samodejna povezava«, »prioriteta samodejne povezave« in »ponovna povezava« " -"niso povezane s to nastavitvijo. Dovoljene vrednosti so: 0: pustite povezave " -"vrat nedotaknjene, 1: aktivirajte vse povezave vrat s to povezavo, -1: " -"privzeto. Če je nastavljena -1 (privzeto), se prebere globalna connection." -"autoconnect-ports, da se določi dejanska vrednost. Če je tudi privzeto, se " -"to vrne na 0." +"Ali naj se vrata te povezave samodejno odprejo, ko upravitelj omrežja " +"aktivira to povezavo. To ima resničen učinek le za povezave krmilnika. " +"Lastnosti »samodejna povezava«, »prioriteta samodejnega povezovanja« in " +"»samodejno ponovno povezovanje« niso povezane s to nastavitvijo. Dovoljene " +"vrednosti so: 0: pustite povezave vrat nedotaknjene, 1: aktivirajte vse " +"povezave vrat s to povezavo, -1: privzeto. Če je nastavljena vrednost -1 " +"(privzeto), se globalna povezava.autoconnect-ports prebere, da se določi " +"dejanska vrednost. Če je tudi privzeto, se to vrne na 0." #: src/libnmc-setting/settings-docs.h.in:6 -#, fuzzy msgid "" "The autoconnect priority in range -999 to 999. If the connection is set to " "autoconnect, connections with higher priority will be preferred. The higher " @@ -6507,15 +6462,14 @@ msgid "" "autoconnect. In case of equal priority, the profile used most recently is " "chosen." msgstr "" -"Prednost samodejnega povezovanja v območju od -999 do 999. Če je povezava " -"nastavljena na samodejno vzpostavljanje, bodo prednostne povezave z višjo " -"prioriteto. Višja številka pomeni večjo prednost. Privzeto je 0. " -"Upoštevajte, da je ta lastnost pomembna le, če je za samodejno povezavo na " -"voljo več profilov kandidatov. V primeru enake prioritete se izbere profil, " -"ki je bil uporabljen nazadnje" +"Prioriteta samodejnega povezovanja v območju od -999 do 999. Če je povezava " +"nastavljena na samodejno vzpostavljanje povezave, bodo prednostne povezave z " +"višjo prioriteto. Višja številka pomeni višjo prednost. Privzeto 0. " +"Upoštevajte, da je ta lastnost pomembna le, če je za samodejno povezovanje " +"na voljo več kot en profil kandidata. V primeru enake prednosti se izbere " +"profil, ki je bil uporabljen zadnjič." #: src/libnmc-setting/settings-docs.h.in:7 -#, fuzzy msgid "" "The number of times a connection should be tried when autoactivating before " "giving up. Zero means forever, -1 means the global default (4 times if not " @@ -6523,14 +6477,13 @@ msgid "" "blocking autoconnect. Note that after a timeout, NetworkManager will try to " "autoconnect again." msgstr "" -"Kolikokrat je treba poskusiti povezavo pri samodejnem aktiviranju, preden " -"odnehate. Nič pomeni večno, -1 pomeni globalno privzeto (4-krat, če ni " -"preglasljeno). Če nastavite na 1, to pomeni, da poskusite aktivirati samo " -"enkrat, preden blokirate samodejno povezavo. Upoštevajte, da bo po časovni " -"omejitvi NetworkManager znova poskusil samodejno vzpostaviti povezavo." +"Kolikokrat je treba poskusiti povezavo pri samodejni aktivaciji, preden " +"odnehate. Nič pomeni za vedno, -1 pomeni globalno privzeto (4-krat, če ni " +"preglaseno). Če to možnost nastavite na 1, poskusite aktivirati samo enkrat, " +"preden blokirate samodejno povezavo. Upoštevajte, da bo po časovni omejitvi " +"NetworkManager znova poskusil vzpostaviti samodejno povezavo." #: src/libnmc-setting/settings-docs.h.in:8 -#, 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 " @@ -6542,15 +6495,15 @@ msgid "" "value. If it is default as well, this fallbacks to 0. Deprecated 1.46. Use " "\"autoconnect-ports\" instead, this is just an alias." msgstr "" -"Ali naj se podrejeni elementi te povezave samodejno prikažejo, ko " -"NetworkManager aktivira to povezavo. To ima resničen učinek le na glavne " -"povezave. Lastnosti »samodejna povezava«, »prioriteta samodejne povezave« in " -"»ponovna povezava« niso povezane s to nastavitvijo. Dovoljene vrednosti so: " -"0: pustite podrejene povezave nedotaknjene, 1: aktivirajte vse podrejene " -"povezave s to povezavo, -1: privzeto. Če je nastavljena -1 (privzeto), se " -"prebere globalna povezava.autoconnect-slaves, da se določi realna vrednost. " -"Če je tudi privzeto, se to vrne na 0. Zastarelo 1.46. Namesto tega uporabite " -"»samodejna povezava-vrata«, to je samo vzdevek." +"Ali naj se vrata te povezave samodejno odprejo, ko upravitelj omrežja " +"aktivira to povezavo. To ima resničen učinek le za povezave krmilnika. " +"Lastnosti »samodejna povezava«, »prioriteta samodejnega povezovanja« in " +"»samodejno ponovno povezovanje« niso povezane s to nastavitvijo. Dovoljene " +"vrednosti so: 0: pustite povezave vrat nedotaknjene, 1: aktivirajte vse " +"povezave vrat s to povezavo, -1: privzeto. Če je nastavljena vrednost -1 " +"(privzeto), se globalna povezava.autoconnect-slaves prebere, da se določi " +"realna vrednost. Če je tudi privzeto, se to vrne na 0. Zastarelo 1.46. " +"Namesto tega uporabite \"autoconnect-ports\", to je samo vzdevek." #: src/libnmc-setting/settings-docs.h.in:9 msgid "" @@ -6558,7 +6511,6 @@ msgid "" msgstr "Ime vmesnika krmilne naprave ali UUID povezave krmilnika." #: src/libnmc-setting/settings-docs.h.in:10 -#, fuzzy msgid "" "Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls " "is a technology which uses TLS to encrypt dns traffic. The permitted values " @@ -6571,29 +6523,45 @@ msgid "" msgstr "" "Ali je za povezavo omogočen DNSOverTls (dns-over-tls). DNSOverTls je " "tehnologija, ki uporablja TLS za šifriranje prometa DNS. Dovoljene vrednosti " -"so: »da« (2) uporabite DNSOverTls in onemogočite nadomestno razrešitev, " -"»oportunistično« (1) uporabite DNSOverTls, vendar dovolite nadomestno " -"razrešitev na nešifrirano ločljivost, »ne« (0) nikoli ne uporabljajte " -"DNSOverTls. Če ni določeno, je \"privzeto\" odvisno od uporabljenega " -"vtičnika. Systemd-resolved uporablja globalno nastavitev. Ta funkcija " -"zahteva vtičnik, ki podpira DNSOverTls. V nasprotnem primeru nastavitev nima " -"učinka. Eden takih vtičnikov je dns-systemd-resolved." +"so: »yes« (2) uporabi DNSOverTls in onemogoči nadomestno različico, " +"»oportunistic« (1) uporabi DNSOverTls, vendar dovoli nadomestno ločljivost, " +"»no« (0) nikoli ne uporablja DNSOverTls. Če ni določeno, je »default« " +"odvisno od uporabljenega vstavka. Systemd-resolved uporablja globalno " +"nastavitev. Ta funkcija zahteva vstavek, ki podpira DNSOverTls. V nasprotnem " +"primeru nastavitev nima učinka. Eden takih vstavkov je dns-systemd-resolved." #: src/libnmc-setting/settings-docs.h.in:11 -#, fuzzy +msgid "" +"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." +msgstr "" +"Ali je za povezavo omogočen DNSOverTls (dns-over-tls). DNSOverTls je " +"tehnologija, ki uporablja TLS za šifriranje prometa DNS. Dovoljene vrednosti " +"so: »yes« (2) uporabi DNSOverTls in onemogoči nadomestno različico, " +"»oportunistic« (1) uporabi DNSOverTls, vendar dovoli nadomestno ločljivost, " +"»no« (0) nikoli ne uporablja DNSOverTls. Če ni določeno, je »default« " +"odvisna od uporabljenega vstavka. Systemd-resolved uporablja globalno " +"nastavitev. Ta funkcija zahteva vstavek, ki podpira DNSOverTls. V nasprotnem " +"primeru nastavitev nima učinka. Eden takih vstavkov je dns-systemd-resolved." + +#: src/libnmc-setting/settings-docs.h.in:12 msgid "" "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)." msgstr "" -"Ali bo povezava prekinjena, preden se sistem izklopi. Privzeta vrednost je " -"»privzeto« (-1). Ko je določena privzeta vrednost, se poišče globalna " -"vrednost iz konfiguracije programa NetworkManager, če ni nastavljena, se " -"šteje za »ne« (0)." +"Ali bo povezava prekinjena, preden bo sistem izklopljen. Privzeta vrednost " +"je »default« (»privzeto«) (-1). Ko je določena privzeta vrednost, se poišče " +"globalna vrednost iz prilagoditev NetworkManagerja, če ni nastavljena, se " +"šteje za »no« (0) (ne)." -#: src/libnmc-setting/settings-docs.h.in:12 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:13 msgid "" "If greater than zero, delay success of IP addressing until either the " "timeout is reached, or an IP gateway replies to a ping." @@ -6601,17 +6569,15 @@ msgstr "" "Če je večja od nič, odložite uspeh naslavljanja IP, dokler ni dosežena " "časovna omejitev ali dokler prehod IP ne odgovori na ping." -#: src/libnmc-setting/settings-docs.h.in:13 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:14 msgid "" "A human readable unique identifier for the connection, like \"Work Wi-Fi\" " "or \"T-Mobile 3G\"." msgstr "" -"Človeku berljiv enolični identifikator za povezavo, na primer »Službeni Wi-" -"Fi« ali »T-Mobile 3G«." +"Človeku berljiv enolični identifikator za povezavo, npr. »Službeni Wi-Fi« " +"ali »T-Mobile 3G«." -#: src/libnmc-setting/settings-docs.h.in:14 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:15 msgid "" "The name of the network interface this connection is bound to. If not set, " "then the connection can be attached to any interface of the appropriate type " @@ -6624,7 +6590,7 @@ msgid "" "interface." msgstr "" "Ime omrežnega vmesnika, na katerega je vezana ta povezava. Če ni " -"nastavljena, lahko povezavo pritrdite na kateri koli vmesnik ustreznega tipa " +"nastavljena, lahko povezavo pritrdite na kateri koli vmesnik ustrezne vrste " "(ob upoštevanju omejitev, ki jih nalagajo druge nastavitve). Za programske " "naprave določa ime ustvarjene naprave. Za vrste povezav, pri katerih imen " "vmesnikov ni mogoče enostavno narediti trajnih (npr. mobilna širokopasovna " @@ -6633,8 +6599,7 @@ msgstr "" "imena vmesnikov spremenijo ali spremenijo vrstni red, je povezava morda " "uporabljena za napačen vmesnik." -#: src/libnmc-setting/settings-docs.h.in:15 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:16 msgid "" "The property specifies a list of target IP addresses for pinging. When " "multiple targets are set, NetworkManager will start multiple ping processes " @@ -6650,11 +6615,11 @@ msgstr "" "mogoče nastaviti le, če je nastavljena connection.ip-ping-timeout. Časovna " "omejitev ip-ping-time se uporablja za zakasnitev uspešnosti naslavljanja IP, " "dokler ni dosežena določena časovna omejitev (v sekundah) ali dokler ciljni " -"naslov IP ne odgovori na ping. Konfiguriranje »ip-ping-addresses« lahko " -"odloži doseganje network-online.target systemd zaradi čakanja na dokončanje " +"naslov IP ne odgovori na ping. Prilagajanje »ip-ping-addresses« lahko odloži " +"doseganje network-online.target systemd zaradi čakanja na dokončanje " "operacij ping ali časovne omejitve." -#: src/libnmc-setting/settings-docs.h.in:16 +#: src/libnmc-setting/settings-docs.h.in:17 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 " @@ -6664,7 +6629,7 @@ msgstr "" "»ip-ping-addresses« ali pa morajo biti vsa preverjanja pinga uspešna za »ip-" "ping-addresses«." -#: src/libnmc-setting/settings-docs.h.in:17 +#: src/libnmc-setting/settings-docs.h.in:18 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 " @@ -6678,12 +6643,11 @@ msgstr "" "Ta lastnost ni združljiva z »gateway-ping-timeout«, teh dveh lastnosti ne " "morete nastaviti hkrati." -#: src/libnmc-setting/settings-docs.h.in:18 +#: src/libnmc-setting/settings-docs.h.in:19 msgid "Whether LLDP is enabled for the connection." msgstr "Ali je za povezavo omogočen protokol LLDP." -#: src/libnmc-setting/settings-docs.h.in:19 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:20 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 " @@ -6696,29 +6660,28 @@ msgid "" "requires a plugin which supports LLMNR. Otherwise, the setting has no " "effect. One such plugin is dns-systemd-resolved." msgstr "" -"Ali je za povezavo omogočena lokalna povezava za razreševanje imen " -"večoddajanja (LLMNR). LLMNR je protokol, ki temelji na obliki paketa DNS " -"(Domain Name System), ki gostiteljem IPv4 in IPv6 omogoča razreševanje imen " -"za gostitelje na isti lokalni povezavi. Dovoljene vrednosti so: »da« (2) " -"registrirajte ime gostitelja in razrešite povezavo, »ne« (0) onemogočite " -"LLMNR za vmesnik, »razrešite« (1) ne registrirajte imena gostitelja, vendar " -"dovolite razreševanje imen gostiteljev LLMNR Če ni določeno, je »privzeto« " -"na koncu odvisno od vtičnika DNS (kar za systemd-resolved trenutno pomeni " -"»da«). Ta funkcija zahteva vtičnik, ki podpira LLMNR. V nasprotnem primeru " -"nastavitev nima učinka. Eden takih vtičnikov je dns-systemd-resolved." +"Ali je za povezavo omogočena krajevna povezava za razreševanje imen " +"večvrstnega oddajanja (LLMNR). LLMNR je protokol, ki temelji na obliki " +"paketa DNS (Domain Name System), ki gostiteljem IPv4 in IPv6 omogoča " +"razreševanje imen za gostitelje na isti krajevni povezavi. Dovoljene " +"vrednosti so: »yes« (2) registriraj ime gostitelja in razreši povezavo, " +"»no« (0) onemogoči LLMNR za vmesnik, »resolve« (1) ne registriraj imena " +"gostitelja, vendar dovoli razreševanje imen gostiteljev LLMNR. Če ni " +"določeno, je »default« na koncu odvisen od vstavka DNS (kar za systemd-" +"resolved trenutno pomeni »yes«). Ta funkcija zahteva vstavek, ki podpira " +"LLMNR. V nasprotnem primeru nastavitev nima učinka. Eden takih vstavkov je " +"dns-systemd-resolved." -#: src/libnmc-setting/settings-docs.h.in:20 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:21 msgid "" "Interface name of the controller device or UUID of the controller " "connection. Deprecated 1.46. Use \"controller\" instead, this is just an " "alias." msgstr "" -"Ime vmesnika glavne naprave ali UUID glavne povezave. Zastarelo 1.46. " -"Namesto tega uporabite »krmilnik«, to je samo vzdevek." +"Ime vmesnika naprave kontrolnika ali UUID povezave kontrolnika. Zastarelo od " +"1.46. Namesto tega uporabite »controller«, to je samo vzdevek." -#: src/libnmc-setting/settings-docs.h.in:21 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:22 msgid "" "Whether mDNS is enabled for the connection. The permitted values are: \"yes" "\" (2) register hostname and resolving for the connection, \"no\" (0) " @@ -6730,27 +6693,25 @@ msgid "" "supported DNS plugin is systemd-resolved. For systemd-resolved, the default " "is configurable via MulticastDNS= setting in resolved.conf." msgstr "" -"Ali je za povezavo omogočen mDNS. Dovoljene vrednosti so: »da« (2) " -"registriraj ime gostitelja in razreši povezavo, »ne« (0) onemogoči mDNS za " -"vmesnik, »resolve« (1) ne registriraj imena gostitelja, ampak dovoli " +"Ali je za povezavo omogočen mDNS. Dovoljene vrednosti so: »yes« (2) " +"registrira ime gostitelja in razreši povezavo, »no« (0) onemogoči mDNS za " +"vmesnik, »resolve« (1) ne registrira imena gostitelja, ampak dovoli " "razreševanje imen gostiteljev mDNS in »default« (-1) za omogočanje iskanja " "globalne privzete nastavitve v NetworkManager.conf. Če ni določeno, je " -"»privzeto« na koncu odvisno od vtičnika DNS. Ta funkcija zahteva vtičnik, ki " +"»default« na koncu odvisno od vstavka DNS. Ta funkcija zahteva vstavek, ki " "podpira mDNS. V nasprotnem primeru nastavitev nima učinka. Trenutno je edini " -"podprti vtičnik DNS systemd-resolved. Za systemd-resolved je privzeto " -"nastavitev mogoče konfigurirati z nastavitvijo MulticastDNS= v resolved.conf." +"podprti vstavek DNS systemd-resolved. Za systemd-resolved je privzeto " +"nastavitev mogoče prilagoditi z nastavitvijo MulticastDNS= v resolved.conf." -#: src/libnmc-setting/settings-docs.h.in:22 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:23 msgid "" "Whether the connection is metered. When updating this property on a " "currently activated connection, the change takes effect immediately." msgstr "" -"Ali je povezava z omejenim prenosom podatkov. Ko posodobite to lastnost za " -"trenutno aktivirano povezavo, sprememba začne veljati takoj." +"Ali je povezava z omejenim, merjenim prenosom podatkov. Ko posodobite to " +"lastnost za trenutno aktivirano povezavo, sprememba začne veljati takoj." -#: src/libnmc-setting/settings-docs.h.in:23 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:24 msgid "" "Whether to configure MPTCP endpoints and the address flags. If MPTCP is " "enabled in NetworkManager, it will configure the addresses of the interface " @@ -6772,54 +6733,54 @@ msgid "" "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)." +"\"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)." msgstr "" -"Ali želite konfigurirati končne točke MPTCP in zastavice naslovov. Če je v " -"upravitelju omrežja omogočen MPTCP, bodo naslovi vmesnika konfigurirani kot " +"Ali želite prilagoditi končne točke MPTCP in zastavice naslovov. Če je v " +"upravitelju omrežja omogočen MPTCP, bodo naslovi vmesnika prilagojeni kot " "končne točke MPTCP. Upoštevajte, da bodo naslovi povratne zanke IPv4 " -"(127.0.0.0/8), lokalni naslovi povezave IPv4 (169.254.0.0/16), naslov " -"povratne zanke IPv6 (::1), lokalni naslovi povezave IPv6 (fe80::/10), " -"edinstveni lokalni naslovi IPv6 (ULA, fc00::/7) in naslovi razširitev " -"zasebnosti IPv6 (rfc3041, ipv6.ip6-privacy) izključeni iz konfiguracije kot " -"končne točke. Če je »onemogočeno« (0x1), je obdelava MPTCP za vmesnik " +"(127.0.0.0/8), krajevni naslovi povezave IPv4 (169.254.0.0/16), naslov " +"povratne zanke IPv6 (::1), krajevni naslovi povezave IPv6 (fe80::/10), " +"edinstveni krajevni naslovi IPv6 (ULA, fc00::/7) in naslovi razširitev " +"zasebnosti IPv6 (rfc3041, ipv6.ip6-privacy) izključeni iz prilagoditve kot " +"končne točke. Če je »disabled« (0x1), je obdelava MPTCP za vmesnik " "onemogočena in nobena končna točka ni registrirana. Zastavica " -"»omogočeno« (0x2) pomeni, da je omogočena obdelava MPTCP. Ta zastava je " +"»enabled« (0x2) pomeni, da je omogočena obdelava MPTCP. Ta zastavico je " "mogoče sklepati tudi iz prisotnosti drugih zastav. Tudi če je omogočeno, bo " "ravnanje z MPTCP privzeto še vedno onemogočeno, razen če je vklopljen sysctl " "»/proc/sys/net/mptcp/enabled«. NetworkManager ne spremeni sysctl in to je " -"odvisno od skrbnika ali distribucije. Če želite konfigurirati končne točke, " +"odvisno od skrbnika ali distribucije. Če želite prilagoditi končne točke, " "tudi če je sysctl onemogočen, lahko uporabite zastavico »also-without-" -"sysctl« (0x4). V tem primeru NetworkManager ne gleda na sysctl in " -"konfigurira končne točke ne glede na to. Tudi če je omogočeno, bo " -"NetworkManager konfiguriral končne točke MPTCP samo za določeno družino " -"naslovov, če je v glavni usmerjevalni tabeli privzeta pot unicast (0.0.0.0/0 " -"ali ::/0). Zastavica »tudi-brez-privzete-poti« (0x8) lahko to preglasi. Ko " -"je omogočena obdelava MPTCP, so končne točke konfigurirane z določenimi " +"sysctl« (0x4). V tem primeru NetworkManager ne gleda na sysctl in prilagodi " +"končne točke ne glede na to. Tudi če je omogočeno, bo NetworkManager " +"konfiguriral končne točke MPTCP samo za določeno družino naslovov, če je v " +"glavni usmerjevalni tabeli privzeta pot unikasta (0.0.0.0/0 ali ::/0). " +"Zastavica »also-without-default-route« (0x8) lahko to preglasi. Ko je " +"omogočena obdelava MPTCP, so končne točke prilagojene z določenimi " "naslovnimi zastavicami »signal« (0x10), »subflow« (0x20), »backup« (0x40), " -"»fullmesh« (0x80). Za dodatne informacije o zastavicah glejte priročnik ip-" -"mptcp(8). Če so zastavice enake nič (0x0), se upošteva privzeta globalna " -"povezava iz orodja NetworkManager.conf. Če še vedno ni določeno, je " -"nadomestna možnost »omogočeno,podtok«. Upoštevajte, da to pomeni, da je " -"MPTCP privzeto odvisen od »/proc/sys/net/mptcp/enabled«. NetworkManager ne " -"spremeni omejitev MPTCP niti ne omogoči MPTCP prek »/proc/sys/net/mptcp/" -"enabled«. To je konfiguracija gostitelja, ki jo lahko skrbnik spremeni prek " -"sysctl in ip-mptcp. Strogo filtriranje povratnih poti (rp_filter) prekine " -"številne primere uporabe MPTCP, tako da, ko je omogočena obdelava MPTCP za " -"naslove IPv4 na vmesniku, NetworkManager sprosti strogo filtriranje povratne " -"poti (1) na ohlapno nastavitev (2)." +"»fullmesh« (0x80), »laminar« (0x100). Za dodatne informacije o zastavicah " +"glejte priročnik ip-mptcp(8). Če so zastavice enake nič (0x0), se upošteva " +"privzeta globalna povezava iz orodja NetworkManager.conf. Če še vedno ni " +"določeno, je nadomestna možnost »enabled,subflow«. Upoštevajte, da to " +"pomeni, da je MPTCP privzeto odvisen od »/proc/sys/net/mptcp/enabled«. " +"NetworkManager ne spremeni omejitev MPTCP niti ne omogoči MPTCP prek »/proc/" +"sys/net/mptcp/enabled«. To je prilagoditev gostitelja, ki jo lahko skrbnik " +"spremeni prek sysctl in ip-mptcp. Strogo filtriranje povratnih poti " +"(rp_filter) prekine številne primere uporabe MPTCP, tako da, ko je omogočena " +"obdelava MPTCP za naslove IPv4 na vmesniku, NetworkManager sprosti strogo " +"filtriranje povratne poti (1) na ohlapno nastavitev (2)." -#: src/libnmc-setting/settings-docs.h.in:24 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:25 msgid "" "If configured, set to a Manufacturer Usage Description (MUD) URL that points " "to manufacturer-recommended network policies for IoT devices. It is " @@ -6829,16 +6790,16 @@ msgid "" "(the default), a global connection default gets consulted. If still " "unspecified, the ultimate default is \"none\"." msgstr "" -"Če je konfigurirana, nastavite URL opisa uporabe proizvajalca (MUD), ki kaže " -"na omrežne pravilnike, ki jih priporoča proizvajalec za naprave IoT. Prenosi " -"se kot možnost DHCPv4 ali DHCPv6. Vrednost mora biti veljaven URL, ki se " -"začne z »https://«. Posebna vrednost »none« lahko označuje, da ni uporabljen " -"URL MUD. Če vrednost za posamezen profil ni določena (privzeta), se poišče " -"privzeta nastavitev globalne povezave. Če še vedno ni določeno, je končna " -"privzeta vrednost »none«." +"Če je prilagojeno, nastavite URL opisa uporabe proizvajalca (MUD, angl. " +"Manufacturer Usage Description), ki kaže na omrežne pravilnike, ki jih " +"priporoča proizvajalec za naprave IoT. Prenosi se kot možnost DHCPv4 ali " +"DHCPv6. Vrednost mora biti veljaven URL, ki se začne z »https://«. Posebna " +"vrednost »none« lahko označuje, da ni uporabljen URL MUD. Če vrednost za " +"posamezen profil ni določena (privzeta), se poišče privzeta nastavitev " +"globalne povezave. Če še vedno ni določeno, je končna privzeta vrednost " +"»none«." -#: src/libnmc-setting/settings-docs.h.in:25 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:26 msgid "" "Specifies whether the profile can be active multiple times at a particular " "moment. The value is of type NMConnectionMultiConnect." @@ -6846,8 +6807,7 @@ msgstr "" "Določa, ali je profil lahko aktiven večkrat v določenem trenutku. Vrednost " "je vrste NMConnectionMultiConnect." -#: src/libnmc-setting/settings-docs.h.in:26 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:27 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 " @@ -6861,33 +6821,31 @@ msgid "" "present must be ignored and is reserved for future use. All of [type], " "[id], and [reserved] must be valid UTF-8." msgstr "" -"Niz nizov, ki določajo, kakšen dostop ima določen uporabnik do te povezave. " +"Niz nizov, ki določajo, kakšen dostop ima določen uporabnik do te povezave. " "Če je ta možnost NULL ali prazna, lahko vsi uporabniki dostopajo do te " -"povezave; sicer so uporabniki dovoljeni, če in samo če so na tem seznamu. " -"Če ta ni prazna, je povezava lahko aktivna le, če je eden od določenih " -"uporabnikov prijavljen v aktivno sejo. Vsak vnos je v obliki \"[vrsta]:[id]:" -"[rezervirano]\"; Na primer, \"Uporabnik:DCBW:blah\". Trenutno je dovoljena " -"samo »uporabnik« [vrsta]. Vse druge vrednosti so prezrte in rezervirane za " -"prihodnjo uporabo. [id] je uporabniško ime, na katerega se nanaša to " -"dovoljenje, ki ne sme vsebovati znaka \":\". Vse [rezervirane] informacije " -"je treba prezreti in so rezervirane za prihodnjo uporabo. Vse [vrsta], [id] " -"in [rezervirano] morajo biti veljavne UTF-8." +"povezave; sicer so uporabniki pripuščeni, če in samo če so na tem seznamu. " +"Če ta ni prazen, je povezava lahko aktivna le, če je eden od določenih " +"uporabnikov prijavljen v aktivno sejo. Vsak vnos je v obliki \"[vrsta]:[id]:" +"[rezervirano]\"; primer: \"Uporabnik:DCBW:blah\". Trenutno je dovoljena samo " +"»user« [vrsta]. Vse druge vrednosti so prezrte in rezervirane za prihodnjo " +"uporabo. [id] je uporabniško ime, na katerega se nanaša to dovoljenje, ki ne " +"sme vsebovati znaka \":\". Vse [rezervirane] informacije je treba prezreti " +"in so rezervirane za prihodnjo uporabo. Vse vrednosti [vrsta], [id] in " +"[rezervirano] morajo biti v veljavnem zapisu UTF-8." -#: src/libnmc-setting/settings-docs.h.in:27 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:28 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 "" "Nastavitev imena vrste naprave povezave krmilnika teh vrat (npr. »Bond«) ali " -"NULL, če ta povezava ni vrata." +"NULL, če ta povezava niso vrata." -#: src/libnmc-setting/settings-docs.h.in:28 +#: src/libnmc-setting/settings-docs.h.in:29 msgid "This property is deprecated and has no meaning." msgstr "Ta lastnost je zastarela in nima nobenega pomena." -#: src/libnmc-setting/settings-docs.h.in:29 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:30 msgid "" "List of connection UUIDs that should be activated when the base connection " "itself is activated. Currently, only VPN connections are supported." @@ -6895,19 +6853,17 @@ msgstr "" "Seznam UUID-jev povezave, ki jih je treba aktivirati, ko je aktivirana " "osnovna povezava. Trenutno so podprte samo povezave VPN." -#: src/libnmc-setting/settings-docs.h.in:30 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:31 msgid "" "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 "" -"Nastavitev imena vrste naprave glavne povezave tega slave (npr. »bond«) ali " -"NULL, če ta povezava ni podrejena. Zastarelo 1.46. Namesto tega uporabite " -"\"port-type\", to je samo vzdevek." +"Nastavitev imena vrste naprave povezave kontrolnika teh vrat (npr. »bond«) " +"ali NULL, če ta povezava niso vrata. Zastarelo od 1.46 naprej. Namesto tega " +"uporabite \"port-type\", to je samo vzdevek." -#: src/libnmc-setting/settings-docs.h.in:31 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:32 msgid "" "This represents the identity of the connection used for various purposes. It " "allows configuring multiple profiles to share the identity. Also, the stable-" @@ -6944,41 +6900,40 @@ msgid "" "connection profile." msgstr "" "To predstavlja identiteto povezave, ki se uporablja za različne namene. " -"Omogoča konfiguriranje več profilov za skupno rabo identitete. Tudi stable-" -"id lahko vsebuje označbe mesta, ki so nadomeščene dinamično in " -"deterministično, odvisno od konteksta. Stable-id se uporablja za generiranje " -"IPv6 stabilnih zasebnih naslovov z ipv6.addr-gen-mode=stable-privacy. " -"Uporablja se tudi za sejanje ustvarjenega kloniranega naslova MAC za " -"ethernet.cloned-mac-address=stable in wifi.cloned-mac-address=stable. " -"Uporablja se tudi za izpeljavo identifikatorja odjemalca DHCP z ipv4.dhcp-" -"client-id=stable, DHCPv6 DUID z ipv6.dhcp-duid=stable-[llt,ll,uuid] in DHCP " -"IAID z ipv4.iaid=stable in ipv6.iaid=stable. Upoštevajte, da so glede na " -"kontekst, v katerem se uporablja, v algoritem za generiranje vključeni tudi " -"drugi parametri. Na primer, običajno je vključen tudi ključ na gostitelja, " -"tako da različni sistemi na koncu ustvarijo različne ID-je. Ali pa z ipv6." -"addr-gen-mode=stable-privacy, je vključeno tudi ime naprave, tako da " -"različni vmesniki dajejo različne naslove. Ključ za posameznega gostitelja " -"je identiteta vašega računalnika in je shranjen v /var/lib/NetworkManager/" -"secret_key. Glejte priročnik NetworkManager(8) o skrivnem ključu in " -"identiteti gostitelja. Znak »$« je obravnavan kot poseben za izvajanje " -"dinamičnih zamenjav v času aktiviranja. Trenutno so podprti " +"Omogoča prilagajanje več profilov za skupno rabo identitete. Tudi stable-id " +"lahko vsebuje označbe mesta, ki so nadomeščene dinamično in deterministično, " +"odvisno od konteksta. Stable-id se uporablja za generiranje stabilnih " +"zasebnih naslovov IPv6 z ipv6.addr-gen-mode=stable-privacy. Uporablja se " +"tudi za sejanje ustvarjenega kloniranega naslova MAC za ethernet.cloned-mac-" +"address=stable in wifi.cloned-mac-address=stable. Uporablja se tudi za " +"izpeljavo identifikatorja odjemalca DHCP z ipv4.dhcp-client-id=stable, " +"DHCPv6 DUID z ipv6.dhcp-duid=stable-[llt,ll,uuid] in DHCP IAID z ipv4." +"iaid=stable in ipv6.iaid=stable. Upoštevajte, da so glede na kontekst, v " +"katerem se uporablja, v algoritem za generiranje vključeni tudi drugi " +"parametri. Primer: običajno je vključen tudi ključ za posameznega " +"gostitelja, tako da različni sistemi na koncu ustvarijo različne ID-je. Ali " +"pa: z ipv6.addr-gen-mode=stable-privacy je vključeno tudi ime naprave, tako " +"da različni vmesniki dajejo različne naslove. Ključ za posameznega " +"gostitelja je identiteta vašega računalnika in je shranjen v /var/lib/" +"NetworkManager/secret_key. Glejte priročnik NetworkManager(8) o skrivnem " +"ključu in identiteti gostitelja. Znak »$« je obravnavan kot poseben za " +"izvajanje dinamičnih zamenjav v času aktiviranja. Trenutno so podprti " "»${CONNECTION}\", »${DEVICE}«, »${MAC}«, »${NETWORK_SSID}«, »${BOOT}«, " -"»${RANDOM}«. Ti učinkovito ustvarjajo edinstvene ID-je na povezavo, " -"napravo, SSID, zagon ali vsakič. »${CONNECTION}« uporablja connection.uuid " +"»${RANDOM}«. Ti učinkovito ustvarjajo edinstvene ID-je na povezavo, napravo, " +"SSID, zagon ali vsakokrat. »${CONNECTION}« uporablja connection.uuid " "profila, »${DEVICE}« uporablja ime vmesnika naprave in »${MAC}« trajni " "naslov MAC naprave. »${NETWORK_SSID}« uporablja SSID za omrežja Wi-Fi, v " "drugih omrežjih pa se vrne na »${CONNECTION}«. Vsi neprepoznani vzorci, ki " "sledijo '$', so obravnavani dobesedno, vendar so rezervirani za prihodnjo " "uporabo. Zato vam svetujemo, da se izognete \"$\" ali se mu izognete kot \"$$" -"\". Nastavite ga na primer na »${CONNECTION}-${BOOT}-${DEVICE}«, da " -"ustvarite edinstven ID za to povezavo, ki se spreminja z vsakim ponovnim " -"zagonom in se razlikuje glede na vmesnik, kjer se profil aktivira. Če " -"vrednost ni nastavljena, se poišče privzeta nastavitev globalne povezave. Če " -"vrednost še vedno ni nastavljena, je privzeta »default${CONNECTION}« in " -"ustvarite edinstven ID za vsak profil povezave." +"\". Nastavite ga npr. na »${CONNECTION}-${BOOT}-${DEVICE}«, da ustvarite " +"edinstven ID za to povezavo, ki se spreminja z vsakim ponovnim zagonom in se " +"razlikuje glede na vmesnik, kjer se profil aktivira. Če vrednost ni " +"nastavljena, se poišče privzeta nastavitev globalne povezave. Če vrednost še " +"vedno ni nastavljena, je privzeta »default${CONNECTION}« in ustvarite " +"edinstven ID za vsak profil povezave." -#: src/libnmc-setting/settings-docs.h.in:32 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:33 msgid "" "The time, in seconds since the Unix Epoch, that the connection was last " "_successfully_ fully activated. NetworkManager updates the connection " @@ -6986,14 +6941,13 @@ msgid "" "active connection has the latest timestamp. The property is only meant for " "reading (changes to this property will not be preserved)." msgstr "" -"Čas, v sekundah od Unix Epohe, ko je bila povezava nazadnje _uspešno_ v " +"Čas, v sekundah od Epohe Unix, ko je bila povezava nazadnje _uspešno_ v " "celoti aktivirana. NetworkManager redno posodablja časovni žig povezave, ko " "je povezava aktivna, da zagotovi, da ima aktivna povezava najnovejši časovni " -"žig. Nepremičnina je namenjena samo branju (spremembe te lastnosti ne bodo " +"žig. Lastnost je namenjena samo branju (spremembe te lastnosti ne bodo " "ohranjene)." -#: src/libnmc-setting/settings-docs.h.in:33 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:34 msgid "" "Base type of the connection. For hardware-dependent connections, should " "contain the setting name of the hardware-type specific setting (ie, \"802-3-" @@ -7002,12 +6956,12 @@ msgid "" "setting name of that setting type (ie, \"vpn\" or \"bridge\", etc)." msgstr "" "Osnovna vrsta povezave. Za povezave, odvisne od strojne opreme, mora " -"vsebovati ime nastavitve nastavitve, specifične za vrsto strojne opreme (tj. " -"»802-3-ethernet« ali »802-11-wireless« ali »bluetooth« itd.), za povezave, " -"ki niso odvisne od strojne opreme, kot je VPN ali kako drugače, pa mora " -"vsebovati ime nastavitve te vrste nastavitve (tj. »vpn« ali »bridge« itd.)." +"vsebovati ime nastavitve, specifične za vrsto strojne opreme (tj. »802-3-" +"ethernet«, »802-11-wireless« ali »bluetooth« itd.), za povezave, ki niso " +"odvisne od strojne opreme, kot je VPN ali kako drugače, pa mora vsebovati " +"ime nastavitve te vrste nastavitve (tj. »vpn« ali »bridge« itd.)." -#: src/libnmc-setting/settings-docs.h.in:34 +#: src/libnmc-setting/settings-docs.h.in:35 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 " @@ -7021,7 +6975,7 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:36 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 " @@ -7033,8 +6987,7 @@ msgstr "" "čakalnega časa. Privzeta vrednost je -1, ki ima trenutno enak pomen kot brez " "čakalnega časa." -#: src/libnmc-setting/settings-docs.h.in:36 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:37 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 " @@ -7045,15 +6998,14 @@ msgid "" "meaning as no wait time." msgstr "" "Časovna omejitev v milisekundah za čakanje na zagon naprave. Med zagonom " -"lahko traja nekaj časa, da jih gonilnik zazna naprave. Ta lastnost bo " -"povzročila zakasnitev NetworkManager-wait-online.service in nm-online, da se " -"naprava lahko prikaže. To deluje tako, da počakate na dano časovno omejitev, " -"dokler ni na voljo in upravljana združljiva naprava za profil. Vrednost 0 " -"pomeni, da ni čakalnega časa. Privzeta vrednost je -1, ki ima trenutno enak " -"pomen kot brez čakalnega časa." +"lahko traja nekaj časa, da gonilnik zazna naprave. Ta lastnost bo povzročila " +"zakasnitev NetworkManager-wait-online.service in nm-online, da se naprava " +"lahko prikaže. To deluje tako, da počakate na dano časovno omejitev, dokler " +"ni na voljo in upravljana združljiva naprava za profil. Vrednost 0 pomeni, " +"da ni čakanja. Privzeta vrednost je -1, ki ima trenutno enak pomen kot brez " +"čakanja." -#: src/libnmc-setting/settings-docs.h.in:37 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:38 msgid "" "The trust level of a the connection. Free form case-insensitive string (for " "example \"Home\", \"Work\", \"Public\"). NULL or unspecified zone means the " @@ -7061,14 +7013,13 @@ msgid "" "When updating this property on a currently activated connection, the change " "takes effect immediately." msgstr "" -"Raven zaupanja povezave. Niz brez razlikovanja med velikimi in malimi " -"črkami v prosti obliki (na primer »Domov«, »Delo«, »Javno«). NULL ali " -"nedoločeno območje pomeni, da bo povezava postavljena v privzeto območje, " -"kot ga določa požarni zid. Ko posodobite to lastnost za trenutno aktivirano " -"povezavo, sprememba začne veljati takoj." +"Raven zaupanja povezave. Niz ne razlikuje med velikimi in malimi črkami v " +"prosti obliki (npr. »Doma«, »Poslovno«, »Javno«). NULL ali nedoločeno " +"območje pomeni, da bo povezava postavljena v privzeto območje, kot ga določa " +"požarni zid. Ko posodobite to lastnost za trenutno aktivirano povezavo, " +"sprememba začne veljati takoj." -#: src/libnmc-setting/settings-docs.h.in:38 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:39 msgid "" "If given, specifies the parent interface name or parent connection UUID from " "which this 6LowPAN interface should be created." @@ -7076,8 +7027,7 @@ msgstr "" "Če je navedeno, določa ime nadrejenega vmesnika ali UUID nadrejene povezave, " "iz katerega naj se ustvari ta vmesnik 6LowPAN." -#: src/libnmc-setting/settings-docs.h.in:39 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:40 msgid "" "List of strings to be matched against the altSubjectName of the certificate " "presented by the authentication server. If the list is empty, no " @@ -7087,29 +7037,26 @@ msgstr "" "strežnik za preverjanje pristnosti. Če je seznam prazen, se preverjanje " "parametra altSubjectName strežnikovega potrdila ne izvede." -#: src/libnmc-setting/settings-docs.h.in:40 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:41 msgid "" "Anonymous identity string for EAP authentication methods. Used as the " "unencrypted identity with EAP types that support different tunneled identity " "like EAP-TTLS." msgstr "" -"Anonimni niz identitete za načine preverjanja pristnosti EAP. Uporablja se " +"Anonimni niz identitete za načine preverjanja pristnosti EAP. Uporablja se " "kot nešifrirana identiteta z vrstami EAP, ki podpirajo različne tunelirane " "identitete, kot je EAP-TTLS." -#: src/libnmc-setting/settings-docs.h.in:41 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:42 msgid "" "A timeout for the authentication. Zero means the global default; if the " "global default is not set, the authentication timeout is 25 seconds." msgstr "" "Časovna omejitev za preverjanje pristnosti. Nič pomeni globalno privzeto " -"vrednost; Če globalna privzeta nastavitev ni nastavljena, je časovna " +"vrednost; če globalna privzeta nastavitev ni nastavljena, je časovna " "omejitev preverjanja pristnosti 25 sekund." -#: src/libnmc-setting/settings-docs.h.in:42 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:43 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 " @@ -7120,12 +7067,11 @@ msgid "" msgstr "" "Vsebuje pot do potrdila CA, če ga uporablja metoda EAP, določena v lastnosti " "802-1x.eap. To lastnost lahko prekličete, tudi če metoda EAP podpira " -"potrdila CA, vendar to omogoča napade človeka v sredini in NI priporočljivo. " +"potrdila CA, vendar to omogoča napade s posrednikom in NI priporočljivo. " "Upoštevajte, da bo omogočanje 802-1x.system-ca-certs preglasilo to " -"nastavitev za uporabo vgrajene poti, če vgrajena pot ni imenik." +"nastavitev za uporabo vgrajene poti, če vgrajena pot ni mapa." -#: src/libnmc-setting/settings-docs.h.in:43 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:44 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 " @@ -7135,13 +7081,12 @@ msgstr "" "cert«. Smiselno je le, če je potrdilo shranjeno v žetonu PKCS#11, ki zahteva " "prijavo." -#: src/libnmc-setting/settings-docs.h.in:44 +#: src/libnmc-setting/settings-docs.h.in:45 msgid "Flags indicating how to handle the \"ca-cert-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »ca-cert-password«." -#: src/libnmc-setting/settings-docs.h.in:45 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:46 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 " @@ -7149,38 +7094,35 @@ msgid "" "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 formatu PEM ali DER, ki " -"se doda v verifikacijsko verigo poleg potrdila, določenega v lastnosti »ca-" +"V UTF-8 kodirana pot do mape, ki vsebuje potrdila v obliki PEM ali DER, ki " +"se doda v verifikacijsko verigo poleg potrdila, določenega z lastnostjo »ca-" "cert«. Če je omogočen NMSetting8021x:system-ca-certs in je vgrajena pot CA " -"obstoječi imenik, se ta nastavitev prezre." +"obstoječa mapa, je ta nastavitev prezrta." -#: src/libnmc-setting/settings-docs.h.in:46 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:47 msgid "" "Contains the path to the client certificate if used by the EAP method " "specified in the 802-1x.eap property." msgstr "" -"Vsebuje pot do odjemalskega potrdila, če ga uporablja metoda EAP, določena v " +"Vsebuje pot do potrdila odjemalca, če ga uporablja metoda EAP, določena v " "lastnosti 802-1x.eap." -#: src/libnmc-setting/settings-docs.h.in:47 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:48 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 " "that requires a login." msgstr "" -"Geslo, uporabljeno za dostop do odjemalskega potrdila, shranjenega v " -"lastnosti »client-cert«. Smiselno je le, če je potrdilo shranjeno v žetonu " -"PKCS#11, ki zahteva prijavo." +"Geslo, uporabljeno za dostop do potrdila odjemalsca, shranjenega v lastnosti " +"»client-cert«. Smiselno je le, če je potrdilo shranjeno v žetonu PKCS#11, ki " +"zahteva prijavo." -#: src/libnmc-setting/settings-docs.h.in:48 +#: src/libnmc-setting/settings-docs.h.in:49 msgid "Flags indicating how to handle the \"client-cert-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »client-cert-password«." -#: src/libnmc-setting/settings-docs.h.in:49 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:50 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 " @@ -7191,13 +7133,12 @@ msgid "" msgstr "" "Omejitev za ime domene strežnika. Če je nastavljeno, se ta seznam FQDN-jev " "uporablja kot zahteva za ujemanje elementov dNSName potrdila, ki ga " -"predstavi strežnik za preverjanje pristnosti. Če se najde ujemajoča se " -"dNSName, je ta omejitev izpolnjena. Če vrednosti dNSName niso prisotne, se " +"predstavi strežnik za preverjanje pristnosti. Če se najde ujemajoča se " +"dNSName, je ta omejitev izpolnjena. e vrednosti dNSName niso prisotne, se " "ta omejitev ujema z SubjectName CN z isto primerjavo. Več veljavnih FQDN-jev " "je mogoče posredovati kot seznam, ločen z »;«." -#: src/libnmc-setting/settings-docs.h.in:50 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:51 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 " @@ -7208,14 +7149,13 @@ msgid "" msgstr "" "Omejitev za ime domene strežnika. Če je nastavljeno, se ta FQDN uporablja " "kot zahteva za ujemanje pripone za elemente dNSName potrdila, ki ga " -"predstavi strežnik za preverjanje pristnosti. Če se najde ujemajoča se " -"dNSName, je ta omejitev izpolnjena. Če ni nobenih vrednosti dNSName, se ta " -"omejitev ujema z SubjectName CN z uporabo iste primerjave ujemanja pripone. " +"predstavi strežnik za preverjanje pristnosti. Če se najde ujemajoči se " +"dNSName, je ta omejitev izpolnjena. Če ni nobenih vrednosti dNSName, se ta " +"omejitev ujema s SubjectName CN z uporabo iste primerjave ujemanja pripone. " "Od različice 1.24 se lahko več veljavnih FQDN-jev posreduje kot seznam, " "ločen z »;«." -#: src/libnmc-setting/settings-docs.h.in:51 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:52 msgid "" "The allowed EAP method to be used when authenticating to the network with " "802.1x. Valid methods are: \"leap\", \"md5\", \"tls\", \"peap\", \"ttls\", " @@ -7226,19 +7166,18 @@ msgstr "" "Dovoljena metoda EAP, ki se uporablja pri preverjanju pristnosti v omrežju s " "standardom 802.1x. Veljavne metode so: \"leap\", \"md5\", \"tls\", \"peap" "\", \"ttls\", \"pwd\" in \"fast\". Vsaka metoda zahteva drugačno " -"konfiguracijo z uporabo lastnosti te nastavitve; Za dovoljene kombinacije " -"glejte wpa_supplicant dokumentacijo." +"prilagoditev z uporabo lastnosti te nastavitve; za dovoljene kombinacije " +"glejte dokumentacijo wpa_supplicant." -#: src/libnmc-setting/settings-docs.h.in:52 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:53 msgid "" "Identity string for EAP authentication methods. Often the user's user or " "login name." msgstr "" "Niz identitete za načine preverjanja pristnosti EAP. Pogosto uporabniško " -"ali uporabniško ime uporabnika." +"ali prijavno ime uporabnika." -#: src/libnmc-setting/settings-docs.h.in:53 +#: src/libnmc-setting/settings-docs.h.in:54 msgid "" "Define openssl_ciphers for wpa_supplicant. Openssl sometimes moves ciphers " "among SECLEVELs, thus compiled-in default value in wpa_supplicant (as " @@ -7250,7 +7189,7 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:55 msgid "" "Whether the 802.1X authentication is optional. If TRUE, the activation will " "continue even after a timeout or an authentication failure. Setting the " @@ -7263,11 +7202,11 @@ msgstr "" "povezave. Če je nastavljena na FALSE, se lahko aktiviranje nadaljuje šele po " "uspešnem preverjanju pristnosti." -#: src/libnmc-setting/settings-docs.h.in:55 +#: src/libnmc-setting/settings-docs.h.in:56 msgid "UTF-8 encoded file path containing PAC for EAP-FAST." msgstr "Pot datoteke, kodirana v UTF-8, ki vsebuje PAC za EAP-FAST." -#: src/libnmc-setting/settings-docs.h.in:56 +#: src/libnmc-setting/settings-docs.h.in:57 msgid "" "UTF-8 encoded password used for EAP authentication methods. If both the " "\"password\" property and the \"password-raw\" property are specified, " @@ -7277,15 +7216,15 @@ msgstr "" "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:340 +#: src/libnmc-setting/settings-docs.h.in:58 +#: src/libnmc-setting/settings-docs.h.in:90 +#: src/libnmc-setting/settings-docs.h.in:132 +#: src/libnmc-setting/settings-docs.h.in:170 +#: src/libnmc-setting/settings-docs.h.in:344 msgid "Flags indicating how to handle the \"password\" property." msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »password«." -#: src/libnmc-setting/settings-docs.h.in:58 +#: src/libnmc-setting/settings-docs.h.in:59 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\" " @@ -7296,12 +7235,11 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:60 msgid "Flags indicating how to handle the \"password-raw\" property." msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »password-raw«." -#: src/libnmc-setting/settings-docs.h.in:60 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:61 msgid "" "Specifies authentication flags to use in \"phase 1\" outer authentication " "using NMSetting8021xAuthFlags options. The individual TLS versions can be " @@ -7316,10 +7254,9 @@ msgstr "" "je mogoče tudi onemogočiti. Če določena zastavica za onemogočanje TLS ni " "nastavljena, mora prosilec to dovoliti ali prepovedati. Možnosti TLS so " "preslikane v nastavitve tls_disable_tlsv1_x in tls_disable_time_checks. Za " -"več podrobnosti si oglejte dokumentacijo wpa_supplicant." +"podrobnosti si oglejte dokumentacijo wpa_supplicant." -#: src/libnmc-setting/settings-docs.h.in:61 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:62 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 " @@ -7330,27 +7267,24 @@ msgid "" msgstr "" "Omogoči ali onemogoči omogočanje poverilnic EAP-FAST v vrstici, ko je FAST " "določen kot metoda EAP v lastnosti »eap«. Priznane vrednosti so " -"»0« (onemogočeno), »1« (dovoli omogočanje omogočanja brez preverjanja " -"pristnosti), »2« (dovoli omogočanje omogočanja preverjene pristnosti) in " -"»3« (dovoli omogočanje omogočanja uporabe s preverjeno pristnostjo in brez " -"preverjanja pristnosti). Za več podrobnosti si oglejte dokumentacijo " -"wpa_supplicant." +"»0« (onemogočeno), »1« (dovoli omogočanje brez preverjanja pristnosti), " +"»2« (dovoli omogočanje overjene pristnosti) in »3« (dovoli omogočanje " +"uporabe s preverjeno pristnostjo in brez preverjanja pristnosti). Za " +"podrobnosti si oglejte dokumentacijo wpa_supplicant." -#: src/libnmc-setting/settings-docs.h.in:62 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:63 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 " "\"1\" to force use of the new PEAP label. See the wpa_supplicant " "documentation for more details." msgstr "" -"Prisili uporabo nove oznake PEAP med izpeljavo ključa. Nekateri strežniki " -"RADIUS bodo morda morali vsiliti novo oznako PEAP za interoperabilnost s " -"protokolom PEAPv1. Nastavite na »1«, da vsilite uporabo nove oznake PEAP. " -"Za več podrobnosti si oglejte dokumentacijo wpa_supplicant." +"Prisili uporabo nove oznake PEAP med izpeljavo ključa. Nekateri strežniki " +"RADIUS bodo morda morali vsiliti novo oznako PEAP za medopravilnost s " +"protokolom PEAPv1. Nastavite na »1«, da vsilite uporabo nove oznake PEAP. Za " +"podrobnosti si oglejte dokumentacijo wpa_supplicant." -#: src/libnmc-setting/settings-docs.h.in:63 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:64 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 " @@ -7359,14 +7293,13 @@ msgid "" "set to \"0\" or \"1\" to force that specific PEAP version." msgstr "" "Uveljavi, katera različica PEAP je uporabljena, ko je PEAP nastavljen kot " -"metoda EAP v lastnosti »eap«. Ko niste nastavljeni, bo uporabljena " -"različica, ki jo je sporočil strežnik. Včasih je treba pri uporabi " -"starejših strežnikov RADIUS prisiliti odjemalca, da uporabi določeno " -"različico PEAP. Če želite to narediti, lahko to lastnost nastavite na »0« " -"ali »1«, da vsilite določeno različico PEAP." +"metoda EAP v lastnosti »eap«. Ko ni nastavljeno, bo uporabljena različica, " +"ki jo je sporočil strežnik. Včasih je treba pri uporabi starejših strežnikov " +"RADIUS prisiliti odjemalca, da uporabi določeno različico PEAP. Če želite " +"to narediti, lahko to lastnost nastavite na »0« ali »1«, da vsilite določeno " +"različico PEAP." -#: src/libnmc-setting/settings-docs.h.in:64 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:65 msgid "" "List of strings to be matched against the altSubjectName of the certificate " "presented by the authentication server during the inner \"phase 2\" " @@ -7378,8 +7311,7 @@ msgstr "" "»faze 2«. Če je seznam prazen, se preverjanje parametra altSubjectName " "strežnikovega potrdila ne izvede." -#: src/libnmc-setting/settings-docs.h.in:65 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:66 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. " @@ -7391,18 +7323,17 @@ msgid "" "wpa_supplicant documentation for more details. Both \"phase2-auth\" and " "\"phase2-autheap\" cannot be specified." msgstr "" -"Določa dovoljeno notranjo metodo preverjanja pristnosti »faza 2«, če je " -"metoda EAP, ki uporablja notranji tunel TLS, določena v lastnosti »eap«. Za " +"Določa dovoljeno notranjo metodo preverjanja pristnosti »faze 2«, če je " +"metoda EAP, ki uporablja notranji tunel TLS, določena v lastnosti »eap«. Pri " "TTLS ta lastnost izbere eno od podprtih notranjih metod, ki niso EAP: »pap«, " "»chap«, »mschap«, »mschapv2«, medtem ko »phase2-autheap« izbere notranjo " -"metodo EAP. Za PEAP izbere notranjo metodo EAP, eno od: \"gtc\", \"otp\", " +"metodo EAP. Pri PEAP izbere notranjo metodo EAP, eno od: \"gtc\", \"otp\", " "\"md5\" in \"tls\". Vsaka notranja metoda \"faze 2\" zahteva posebne " -"parametre za uspešno preverjanje pristnosti; Za več podrobnosti si oglejte " +"parametre za uspešno overjanje pristnosti; za podrobnosti si oglejte " "dokumentacijo wpa_supplicant. Možnosti »phase2-auth« in »phase2-autheap« ni " "mogoče določiti." -#: src/libnmc-setting/settings-docs.h.in:66 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:67 msgid "" "Specifies the allowed \"phase 2\" inner EAP-based authentication method when " "TTLS is specified in the \"eap\" property. Recognized EAP-based \"phase 2\" " @@ -7411,14 +7342,13 @@ msgid "" "authentication; see the wpa_supplicant documentation for more details." msgstr "" "Določa dovoljeno notranjo metodo preverjanja pristnosti »faze 2«, ki temelji " -"na EAP, ko je življenjska doba življenjske dobi določena v lastnosti »eap«. " -"Priznane metode \"faze 2\", ki temeljijo na EAP, so \"md5\", \"mschapv2\", " -"\"otp\", \"gtc\" in \"tls\". Vsaka notranja metoda \"faze 2\" zahteva " -"posebne parametre za uspešno preverjanje pristnosti; Za več podrobnosti si " -"oglejte dokumentacijo wpa_supplicant." +"na EAP, ko jeTTLS določen v lastnosti »eap«. Priznane metode \"faze 2\", ki " +"temeljijo na EAP, so \"md5\", \"mschapv2\", \"otp\", \"gtc\" in \"tls\". " +"Vsaka notranja metoda \"faze 2\" zahteva posebne parametre za uspešno " +"preverjanje pristnosti; za podrobnosti si oglejte dokumentacijo " +"wpa_supplicant." -#: src/libnmc-setting/settings-docs.h.in:67 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:68 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 " @@ -7430,11 +7360,11 @@ msgstr "" "Vsebuje pot do potrdila CA »faze 2«, če ga uporablja metoda EAP, določena v " "lastnostih 802-1x.phase2-auth ali 802-1x.phase2-autheap. To lastnost lahko " "prekličete, tudi če metoda EAP podpira potrdila CA, vendar to omogoča napade " -"človeka v sredini in NI priporočljivo. Upoštevajte, da bo omogočanje 802-1x." +"s posrednikom in NI priporočljivo. Upoštevajte, da bo omogočanje 802-1x." "system-ca-certs preglasilo to nastavitev za uporabo vgrajene poti, če " -"vgrajena pot ni imenik." +"vgrajena pot ni mapa." -#: src/libnmc-setting/settings-docs.h.in:68 +#: src/libnmc-setting/settings-docs.h.in:69 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 " @@ -7444,14 +7374,14 @@ msgstr "" "lastnosti »phase2-ca-cert«. Smiselno je le, če je potrdilo shranjeno v " "žetonu PKCS#11, ki zahteva prijavo." -#: src/libnmc-setting/settings-docs.h.in:69 +#: src/libnmc-setting/settings-docs.h.in:70 msgid "" "Flags indicating how to handle the \"phase2-ca-cert-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »phase2-ca-cert-" "password«." -#: src/libnmc-setting/settings-docs.h.in:70 +#: src/libnmc-setting/settings-docs.h.in:71 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 " @@ -7464,36 +7394,33 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:72 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 "" -"Vsebuje pot do odjemalskega potrdila »faze 2«, če ga uporablja metoda EAP, " +"Vsebuje pot do potrdila odjemalca »faze 2«, če ga uporablja metoda EAP, " "določena v lastnostih 802-1x.phase2-auth ali 802-1x.phase2-autheap." -#: src/libnmc-setting/settings-docs.h.in:72 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:73 msgid "" "The password used to access the \"phase2\" client certificate stored in " "\"phase2-client-cert\" property. Only makes sense if the certificate is " "stored on a PKCS#11 token that requires a login." msgstr "" -"Geslo, uporabljeno za dostop do odjemalskega potrdila »phase2«, shranjenega " -"v lastnosti »phase2-client-cert«. Smiselno je le, če je potrdilo shranjeno v " +"Geslo, uporabljeno za dostop do potrdila odjemalca »phase2«, shranjenega v " +"lastnosti »phase2-client-cert«. Smiselno je le, če je potrdilo shranjeno v " "žetonu PKCS#11, ki zahteva prijavo." -#: src/libnmc-setting/settings-docs.h.in:73 +#: src/libnmc-setting/settings-docs.h.in:74 msgid "" "Flags indicating how to handle the \"phase2-client-cert-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »phase2-client-cert-" "password«." -#: src/libnmc-setting/settings-docs.h.in:74 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:75 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 " @@ -7505,13 +7432,12 @@ msgstr "" "Omejitev za ime domene strežnika. Če je nastavljeno, se ta seznam FQDN-jev " "uporablja kot zahteva za ujemanje elementov dNSName potrdila, ki ga " "predstavi strežnik za preverjanje pristnosti med notranjim preverjanjem " -"pristnosti »faze 2«. Če se najde ujemajoča se dNSName, je ta omejitev " -"izpolnjena. Če vrednosti dNSName niso prisotne, se ta omejitev ujema z " +"pristnosti »faze 2«. Če se najde ujemajoči se dNSName, je ta pogoj " +"izpolnjen. Če vrednosti dNSName niso prisotne, se ta pogoj ujema s " "SubjectName CN z isto primerjavo. Več veljavnih FQDN-jev je mogoče " "posredovati kot seznam, ločen z »;«." -#: src/libnmc-setting/settings-docs.h.in:75 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:76 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 " @@ -7524,21 +7450,20 @@ msgstr "" "Omejitev za ime domene strežnika. Če je nastavljeno, se ta FQDN uporablja " "kot zahteva za ujemanje pripone za elemente dNSName potrdila, ki ga " "predstavi strežnik za preverjanje pristnosti med notranjim preverjanjem " -"pristnosti »faze 2«. Če se najde ujemajoča se dNSName, je ta omejitev " -"izpolnjena. Če ni nobenih vrednosti dNSName, se ta omejitev ujema z " +"pristnosti »faze 2«. Če se najde ujemajoči se dNSName, je ta pogoj " +"izpolnjen. Če ni nobenih vrednosti dNSName, se ta omejitev ujema z " "SubjectName CN z uporabo iste primerjave ujemanja pripone. Od različice 1.24 " "se lahko več veljavnih FQDN-jev posreduje kot seznam, ločen z »;«." -#: src/libnmc-setting/settings-docs.h.in:76 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:77 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 "" -"Pot do notranjega zasebnega ključa »faza 2«, ko je lastnost 802-1x.phase2-" -"auth ali 802-1x.phase2-autheap nastavljena na »tls«." +"Pot do notranjega zasebnega ključa »faze 2«, ko je lastnost 802-1x.phase2-" +"auth ali 802-1x.phase2-autheap nastavljeno na »tls«." -#: src/libnmc-setting/settings-docs.h.in:77 +#: src/libnmc-setting/settings-docs.h.in:78 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, " @@ -7548,15 +7473,14 @@ msgstr "" "lastnosti 802-1x.phase2-private-key. To običajno uporabljajo tajni agenti, " "ne neposredno uporabniki." -#: src/libnmc-setting/settings-docs.h.in:78 +#: src/libnmc-setting/settings-docs.h.in:79 msgid "" "Flags indicating how to handle the \"phase2-private-key-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »phase2-private-key-" "password«." -#: src/libnmc-setting/settings-docs.h.in:79 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:80 msgid "" "Substring to be matched against the subject of the certificate presented by " "the authentication server during the inner \"phase 2\" authentication. When " @@ -7570,24 +7494,22 @@ msgstr "" "preverjanje pristnosti. Ta lastnost zagotavlja malo varnosti, če sploh, in " "je ne smete uporabljati." -#: src/libnmc-setting/settings-docs.h.in:80 +#: src/libnmc-setting/settings-docs.h.in:81 msgid "PIN used for EAP authentication methods." 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 +#: src/libnmc-setting/settings-docs.h.in:82 +#: src/libnmc-setting/settings-docs.h.in:172 msgid "Flags indicating how to handle the \"pin\" property." msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »pin«." -#: src/libnmc-setting/settings-docs.h.in:82 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:83 msgid "" "The path to the private key when the 802-1.eap property is set to \"tls\"." msgstr "" "Pot do zasebnega ključa, ko je lastnost 802-1.eap nastavljena na »tls«." -#: src/libnmc-setting/settings-docs.h.in:83 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:84 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." @@ -7596,13 +7518,12 @@ msgstr "" "802-1x.private-key. To običajno uporabljajo tajni agenti, ne neposredno " "uporabniki." -#: src/libnmc-setting/settings-docs.h.in:84 +#: src/libnmc-setting/settings-docs.h.in:85 msgid "Flags indicating how to handle the \"private-key-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »private-key-password«." -#: src/libnmc-setting/settings-docs.h.in:85 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:86 msgid "" "Substring to be matched against the subject of the certificate presented by " "the authentication server. When unset, no verification of the authentication " @@ -7610,12 +7531,11 @@ msgid "" "security, if any, and should not be used." msgstr "" "Podniz, ki se ujema z zadevo potrdila, ki ga predstavi strežnik za " -"preverjanje pristnosti. Če niste nastavljeni, se ne izvede preverjanje " -"zadeve potrdila strežnika za preverjanje pristnosti. Ta lastnost zagotavlja " -"malo varnosti, če sploh, in je ne smete uporabljati." +"preverjanje pristnosti. Če ni nastavljeno, se ne izvede preverjanje zadeve " +"potrdila strežnika za preverjanje pristnosti. Ta lastnost zagotavlja malo " +"varnosti, če sploh, in je ne smete uporabljati." -#: src/libnmc-setting/settings-docs.h.in:86 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:87 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-" @@ -7626,44 +7546,44 @@ msgid "" "\"ca-cert\" and \"phase2-ca-cert\" properties instead (sets ca_cert/ca_cert2 " "options for wpa_supplicant)." msgstr "" -"Če je TRUE, preglasi lastnosti »ca-path« in »phase2-ca-path« z uporabo " -"imenika sistemske CA, ki je določen v času konfiguracije s stikalom --system-" -"ca-path. Potrdila v tem imeniku so dodana v verigo preverjanja poleg vseh " -"potrdil, določenih v lastnostih »ca-cert« in »phase2-ca-cert«. Če je pot, ki " -"je navedena z --system-ca-path, ime datoteke (sveženj zaupanja vrednih " -"potrdil CA), preglasi lastnosti »ca-cert« in »phase2-ca-cert« (nastavi " -"možnosti ca_cert/ca_cert2 za wpa_supplicant)." +"Če je TRUE, preglasi lastnosti »ca-path« in »phase2-ca-path« z uporabo mape " +"sistemskega CA, ki je določen v času prilagoditve s stikalom --system-ca-" +"path. Potrdila v tej mapi so dodana v verigo preverjanja poleg vseh potrdil, " +"določenih v lastnostih »ca-cert« in »phase2-ca-cert«. Če je pot, ki je " +"navedena z --system-ca-path, ime datoteke (sveženj zaupanja vrednih potrdil " +"CA) preglasi lastnosti »ca-cert« in »phase2-ca-cert« (nastavi možnosti " +"ca_cert/ca_cert2 za wpa_supplicant)." -#: src/libnmc-setting/settings-docs.h.in:87 +#: src/libnmc-setting/settings-docs.h.in:88 msgid "Encapsulation of ADSL connection. Can be \"vcmux\" or \"llc\"." msgstr "Enkapsulacija povezave ADSL povezave. Lahko je »vcmux« ali »llc«." -#: src/libnmc-setting/settings-docs.h.in:88 +#: src/libnmc-setting/settings-docs.h.in:89 msgid "Password used to authenticate with the ADSL service." msgstr "Geslo, uporabljeno za preverjanje pristnosti s storitvijo ADSL." -#: src/libnmc-setting/settings-docs.h.in:90 +#: src/libnmc-setting/settings-docs.h.in:91 msgid "ADSL connection protocol. Can be \"pppoa\", \"pppoe\" or \"ipoatm\"." msgstr "Protokol povezave ADSL. Lahko je »pppoa«, »pppoe« ali »ipoatm«." -#: src/libnmc-setting/settings-docs.h.in:91 +#: src/libnmc-setting/settings-docs.h.in:92 msgid "Username used to authenticate with the ADSL service." msgstr "" "Uporabniško ime, uporabljeno za preverjanje pristnosti s storitvijo ADSL." -#: src/libnmc-setting/settings-docs.h.in:92 +#: src/libnmc-setting/settings-docs.h.in:93 msgid "VCI of ADSL connection" msgstr "VCI povezave ADSL" -#: src/libnmc-setting/settings-docs.h.in:93 +#: src/libnmc-setting/settings-docs.h.in:94 msgid "VPI of ADSL connection" msgstr "VPI povezave ADSL" -#: src/libnmc-setting/settings-docs.h.in:94 +#: src/libnmc-setting/settings-docs.h.in:95 msgid "The Bluetooth address of the device." msgstr "Naslov Bluetooth za napravo." -#: src/libnmc-setting/settings-docs.h.in:95 +#: src/libnmc-setting/settings-docs.h.in:96 msgid "" "Either \"dun\" for Dial-Up Networking connections or \"panu\" for Personal " "Area Networking connections to devices supporting the NAP profile." @@ -7671,7 +7591,7 @@ msgstr "" "»dun« za klicne omrežne povezave ali »panu« za povezave osebnega omrežja z " "napravami, ki podpirajo profil NAP." -#: src/libnmc-setting/settings-docs.h.in:96 +#: src/libnmc-setting/settings-docs.h.in:97 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-" @@ -7681,31 +7601,29 @@ msgstr "" "morajo biti nizi. Imena možnosti morajo vsebovati samo alfanumerične znake " "(npr. [a-zA-Z0-9])." -#: src/libnmc-setting/settings-docs.h.in:97 +#: src/libnmc-setting/settings-docs.h.in:98 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 +#: src/libnmc-setting/settings-docs.h.in:99 msgid "The Spanning Tree Protocol (STP) forwarding delay, in seconds." msgstr "" "Zakasnitev posredovanja protokola STP (Spanning Tree Protocol) v sekundah." -#: src/libnmc-setting/settings-docs.h.in:99 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:100 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 " "address format, ie an address of the form 01:80:C2:00:00:0X, with X in [0, " "4..F]. If not specified the default value is 01:80:C2:00:00:00." msgstr "" -"Če je navedeno, je naslov MAC skupine večoddajnega oddajanja, ki jo ta most " -"uporablja za STP. Naslov mora biti lokalni naslov povezave v standardnem " +"Če je navedeno, je naslov MAC skupine večvrstnega oddajanja, ki jo ta most " +"uporablja za STP. Naslov mora biti krajevni naslov povezave v standardnem " "formatu naslova Ethernet MAC, tj. naslov v obliki 01:80:C2:00:00:0X, pri " "čemer je X v [0, 4..F]. Če ni določeno, je privzeta vrednost 01:80:" "C2:00:00:00." -#: src/libnmc-setting/settings-docs.h.in:100 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:101 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 " @@ -7714,18 +7632,17 @@ msgid "" "or 2 set because they are used for STP, MAC pause frames and LACP." msgstr "" "Maska skupinskih naslovov za posredovanje. Običajno se naslovi skupin v " -"obsegu od 01:80:C2:00:00:00:00 do 01:80:C2:00:00:0F običajno ne posredujejo " -"v skladu s standardi. Ta lastnost je maska 16 bitov, od katerih vsak ustreza " -"naslovu skupine v tem obsegu, ki ga je treba posredovati. Maska ne more " -"imeti nastavljenih bitov 0, 1 ali 2, ker se uporabljajo za STP, MAC premor " -"okvirjev in LACP." +"obsegu od 01:80:C2:00:00:00:00 do 01:80:C2:00:00:0F ne posredujejo v skladu " +"s standardi. Ta lastnost je maska 16 bitov, od katerih vsak ustreza naslovu " +"skupine v tem obsegu, ki ga je treba posredovati. Maska ne more imeti " +"nastavljenih bitov 0, 1 ali 2, ker se uporabljajo za STP, okvirje premora " +"MAC in LACP." -#: src/libnmc-setting/settings-docs.h.in:101 +#: src/libnmc-setting/settings-docs.h.in:102 msgid "The Spanning Tree Protocol (STP) hello time, in seconds." msgstr "Pozdravni čas protokola Spanning Tree Protocol (STP) v sekundah." -#: src/libnmc-setting/settings-docs.h.in:102 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:103 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." @@ -7733,45 +7650,40 @@ msgid "" "address. Note that setting \"ethernet.cloned-mac-address\" anyway overwrites " "the MAC address of the bridge later while activating the bridge." msgstr "" -"Če je določeno, naslov MAC mostu. Pri ustvarjanju novega mostu bo nastavljen " +"Naslov MAR mostu, če je naveden. Pri ustvarjanju novega mostu bo nastavljen " "ta naslov MAC. Če to polje ni določeno, se namesto tega sklicuje na " "»ethernet.cloned-mac-address«, da se ustvari začetni naslov MAC. " "Upoštevajte, da nastavitev »ethernet.cloned-mac-address« vseeno prepiše " "naslov MAC mostu pozneje, medtem ko aktivirate most." -#: src/libnmc-setting/settings-docs.h.in:103 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:104 msgid "The Spanning Tree Protocol (STP) maximum message age, in seconds." msgstr "" "Največja starost sporočila protokola STP (Spanning Tree Protocol) v sekundah." -#: src/libnmc-setting/settings-docs.h.in:104 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:105 msgid "Set maximum size of multicast hash table (value must be a power of 2)." msgstr "" -"Nastavite največjo velikost razpršilne tabele za večoddajanje (vrednost mora " -"biti potenca 2)." +"Nastavite največjo velikost razpršilne tabele za večvrstno oddajanje " +"(vrednost mora biti potenca števila 2)." -#: src/libnmc-setting/settings-docs.h.in:105 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:106 msgid "" "Set the number of queries the bridge will send before stopping forwarding a " "multicast group after a \"leave\" message has been received." msgstr "" "Nastavite število poizvedb, ki jih bo most poslal, preden prenehate " -"posredovati skupino za več oddaj po prejemu sporočila »zapusti«." +"posredovati skupino za več oddaj po prejemu sporočila »leave«." -#: src/libnmc-setting/settings-docs.h.in:106 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:107 msgid "" "Set interval (in deciseconds) between queries to find remaining members of a " "group, after a \"leave\" message is received." msgstr "" "Nastavite interval (v decisekundah) med poizvedbami, da poiščete preostale " -"člane skupine po prejemu sporočila »zapusti«." +"člane skupine po prejemu sporočila »leave«." -#: src/libnmc-setting/settings-docs.h.in:107 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:108 msgid "" "Set delay (in deciseconds) after which the bridge will leave a group, if no " "membership reports for this group are received." @@ -7779,17 +7691,15 @@ msgstr "" "Nastavite zakasnitev (v decisekundah), po kateri bo most zapustil skupino, " "če ne prejmete poročil o članstvu za to skupino." -#: src/libnmc-setting/settings-docs.h.in:108 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:109 msgid "" "Enable or disable sending of multicast queries by the bridge. If not " "specified the option is disabled." msgstr "" -"Omogočite ali onemogočite pošiljanje poizvedb za večoddajanje prek mostu. Če " -"ni navedeno, je možnost onemogočena." +"Omogočite ali onemogočite pošiljanje poizvedb za večvrstno oddajanje prek " +"mostu. Če ni navedeno, je možnost onemogočena." -#: src/libnmc-setting/settings-docs.h.in:109 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:110 msgid "" "If no queries are seen after this delay (in deciseconds) has passed, the " "bridge will start to send its own queries." @@ -7797,8 +7707,7 @@ msgstr "" "Če po preteku te zakasnitve (v decisekundah) ni nobenih poizvedb, bo most " "začel pošiljati svoje poizvedbe." -#: src/libnmc-setting/settings-docs.h.in:110 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:111 msgid "" "Interval (in deciseconds) between queries sent by the bridge after the end " "of the startup phase." @@ -7806,8 +7715,7 @@ msgstr "" "Interval (v decisekundah) med poizvedbami, ki jih pošlje most po koncu " "zagonske faze." -#: src/libnmc-setting/settings-docs.h.in:111 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:112 msgid "" "Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD " "queries sent by the bridge." @@ -7815,7 +7723,7 @@ msgstr "" "Nastavite najdaljši odzivni čas/največjo zakasnitev odziva (v decisekundah) " "za poizvedbe IGMP/MLD, ki jih pošlje most." -#: src/libnmc-setting/settings-docs.h.in:112 +#: src/libnmc-setting/settings-docs.h.in:113 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." @@ -7823,20 +7731,19 @@ msgstr "" "Če je omogočeno, se kot izvorni naslov za poizvedbe IGMP uporabi lastni " "naslov IP mosta, sicer se uporabi privzeta vrednost 0.0.0.0." -#: src/libnmc-setting/settings-docs.h.in:113 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:114 msgid "" "Sets bridge's multicast router. Multicast-snooping must be enabled for this " "option to work. Supported values are: 'auto', 'disabled', 'enabled' to which " "kernel assigns the numbers 1, 0, and 2, respectively. If not specified the " "default value is 'auto' (1)." msgstr "" -"Nastavi usmerjevalnik za večoddajanje mostu. Če želite, da ta možnost " -"deluje, mora biti omogočeno vohljanje za večoddajanje. Podprte vrednosti so: " -"'auto', 'disabled', 'enabled', ki jim jedro dodeli številke 1, 0 in 2. Če ni " -"navedeno, je privzeta vrednost »samodejno« (1)." +"Nastavi usmerjevalnik mosta za večvrstno oddajanje. Če želite, da ta možnost " +"deluje, mora biti omogočeno vohljanje za večvrstno oddajanje. Podprte " +"vrednosti so: 'auto', 'disabled', 'enabled', ki jim jedro dodeli številke 1, " +"0 in 2. Če ni navedeno, je privzeta vrednost »auto« (1)." -#: src/libnmc-setting/settings-docs.h.in:114 +#: src/libnmc-setting/settings-docs.h.in:115 msgid "" "Controls whether IGMP snooping is enabled for this bridge. Note that if " "snooping was automatically disabled due to hash collisions, the system may " @@ -7846,12 +7753,12 @@ msgstr "" "vohunjenje samodejno onemogočeno zaradi trkov razpršitve, lahko sistem " "zavrne omogočanje funkcije, dokler trki niso razrešeni." -#: src/libnmc-setting/settings-docs.h.in:115 +#: src/libnmc-setting/settings-docs.h.in:116 msgid "Set the number of IGMP queries to send during startup phase." msgstr "" "Nastavite število poizvedb IGMP, ki jih želite poslati med fazo zagona." -#: src/libnmc-setting/settings-docs.h.in:116 +#: src/libnmc-setting/settings-docs.h.in:117 msgid "" "Sets the time (in deciseconds) between queries sent out at startup to " "determine membership information." @@ -7859,7 +7766,7 @@ msgstr "" "Nastavi čas (v decisekundah) med poizvedbami, poslanimi ob zagonu, da določi " "podatke o članstvu." -#: src/libnmc-setting/settings-docs.h.in:117 +#: src/libnmc-setting/settings-docs.h.in:118 msgid "" "Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower " "values are \"better\"; the lowest priority bridge will be elected the root " @@ -7869,13 +7776,13 @@ msgstr "" "vrednosti so »boljše«; most z najnižjo prednostjo bo izvoljen za korenski " "most." -#: src/libnmc-setting/settings-docs.h.in:118 +#: src/libnmc-setting/settings-docs.h.in:119 msgid "" "Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." msgstr "" "Nadzira, ali je za ta most omogočen protokol STP (Spanning Tree Protocol)." -#: src/libnmc-setting/settings-docs.h.in:119 +#: src/libnmc-setting/settings-docs.h.in:120 msgid "" "The default PVID for the ports of the bridge, that is the VLAN id assigned " "to incoming untagged frames." @@ -7883,12 +7790,11 @@ msgstr "" "Privzeti PVID za vrata mostu, to je ID VLAN, dodeljen dohodnim neoznačenim " "okvirjem." -#: src/libnmc-setting/settings-docs.h.in:120 +#: src/libnmc-setting/settings-docs.h.in:121 msgid "Control whether VLAN filtering is enabled on the bridge." msgstr "Nadzirajte, ali je na mostu omogočeno filtriranje VLAN." -#: src/libnmc-setting/settings-docs.h.in:121 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:122 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'." @@ -7897,13 +7803,12 @@ msgstr "" "vrednosti so: »802.1Q«, »802.1ad«. Če ni navedeno, je privzeta vrednost " "»802.1Q«." -#: src/libnmc-setting/settings-docs.h.in:122 +#: src/libnmc-setting/settings-docs.h.in:123 msgid "Controls whether per-VLAN stats accounting is enabled." msgstr "" "Nadzoruje, ali je omogočeno vodenje statistike za posamezno omrežje VLAN." -#: src/libnmc-setting/settings-docs.h.in:123 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:124 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-" @@ -7912,32 +7817,30 @@ msgid "" "$vid is either a single id between 1 and 4094 or a range, represented as a " "couple of ids separated by a dash." msgstr "" -"Matrika mostnih objektov VLAN. Poleg tukaj navedenih VLAN-ov bo most imel " -"tudi privzeto omrežje VLAN, ki ga konfigurira lastnost bridge.vlan-default-" -"pvid. V nmcli lahko seznam VLAN določite z naslednjo sintakso: $vid [pvid] " -"[neoznačeno] [, $vid [pvid] [neoznačeno]]... kjer je $vid en id med 1 in " -"4094 ali obseg, ki je predstavljen kot par ID-jev, ločenih s pomišljajem." +"Matrika objektov VLAN mostu. Poleg tukaj navedenih VLAN-ov bo most imel tudi " +"privzeto omrežje VLAN, ki ga prilagodi lastnost bridge.vlan-default-pvid. V " +"nmcli lahko seznam VLAN določite z naslednjo skladnjo: $vid [pvid] " +"[untagged] [, $vid [pvid] [untagged]]… kjer je $vid en id med 1 in 4094 ali " +"obseg, ki je predstavljen kot par ID-jev, ločenih s pomišljajem." -#: src/libnmc-setting/settings-docs.h.in:124 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:125 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." msgstr "" -"Omogoči ali onemogoči »način ostrine« za vrata, ki omogoča, da se okvirji " -"pošljejo nazaj skozi vrata, na katerih je bil okvir sprejet." +"Omogoči ali onemogoči »način lasnice« (»hairpin mode«) za vrata, ki omogoča, " +"da se okvirji pošljejo nazaj skozi vrata, na katerih je bil okvir sprejet." -#: src/libnmc-setting/settings-docs.h.in:125 +#: src/libnmc-setting/settings-docs.h.in:126 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 +#: src/libnmc-setting/settings-docs.h.in:127 msgid "The Spanning Tree Protocol (STP) priority of this bridge port." msgstr "Prednost protokola STP (Spanning Tree Protocol) teh vrat mosta." -#: src/libnmc-setting/settings-docs.h.in:127 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:128 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 " @@ -7946,93 +7849,85 @@ msgid "" "[untagged]]... where $vid is either a single id between 1 and 4094 or a " "range, represented as a couple of ids separated by a dash." msgstr "" -"Matrika mostnih objektov VLAN. Poleg tukaj navedenih VLAN-ov bodo vrata " -"imela tudi privzeti pvid VLAN, ki ga na mostu konfigurira lastnost bridge." -"vlan-default-pvid. V nmcli lahko seznam VLAN določite z naslednjo sintakso: " -"$vid [pvid] [neoznačeno] [, $vid [pvid] [neoznačeno]]... kjer je $vid en id " -"med 1 in 4094 ali obseg, ki je predstavljen kot par ID-jev, ločenih s " -"pomišljajem." +"Matrika objektov VLAN mostu. Poleg tukaj navedenih VLAN-ov bodo vrata imela " +"tudi privzeti pvid VLAN, ki ga na mostu prilagodi lastnost bridge.vlan-" +"default-pvid. V nmcli lahko seznam VLAN določite z naslednjo skladnjo: $vid " +"[pvid] [untagged] [, $vid [pvid] [untagged]]… kjer je $vid en id med 1 in " +"4094 ali obseg, ki je predstavljen kot par ID-jev, ločenih s pomišljajem." -#: src/libnmc-setting/settings-docs.h.in:128 -#: src/libnmc-setting/settings-docs.h.in:164 -#: src/libnmc-setting/settings-docs.h.in:179 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:129 +#: src/libnmc-setting/settings-docs.h.in:166 +#: src/libnmc-setting/settings-docs.h.in:183 msgid "" "If non-zero, only transmit packets of the specified size or smaller, " "breaking larger packets up into multiple frames." msgstr "" -"Če ni nič, prenašajte samo pakete določene velikosti ali manjše, pri čemer " -"razbijte večje pakete v več okvirjev." +"Če ni nič, prenaša samo pakete določene velikosti ali manjše, pri čemer " +"razbije večje pakete v več eternetnih okvirjev." -#: src/libnmc-setting/settings-docs.h.in:129 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:130 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 " "used when required." msgstr "" "Številka, ki jo želite poklicati za vzpostavitev povezave z mobilnim " -"širokopasovnim omrežjem, ki temelji na CDMA, če obstaja. Če ni določeno, se " +"širokopasovnim omrežjem, ki temelji na CDMA, če obstaja. Če ni določena, se " "po potrebi uporabi privzeta številka (#777)." -#: src/libnmc-setting/settings-docs.h.in:130 -#: src/libnmc-setting/settings-docs.h.in:167 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:131 +#: src/libnmc-setting/settings-docs.h.in:169 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 " "password is required, it is specified here." msgstr "" -"Geslo, ki se uporablja za preverjanje pristnosti v omrežju, če je potrebno. " -"Mnogi ponudniki ne zahtevajo gesla ali sprejmejo gesla. Če pa je potrebno " +"Geslo, ki se uporablja za preverjanje pristnosti v omrežju, če je potrebno. " +"Mnogi ponudniki ne zahtevajo gesla ali gesla ne sprejmejo. Če pa je potrebno " "geslo, je navedeno tukaj." -#: src/libnmc-setting/settings-docs.h.in:132 -#: src/libnmc-setting/settings-docs.h.in:173 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:133 +#: src/libnmc-setting/settings-docs.h.in:175 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 " "username is required, it is specified here." msgstr "" "Uporabniško ime, ki se uporablja za preverjanje pristnosti v omrežju, če je " -"potrebno. Mnogi ponudniki ne zahtevajo uporabniškega imena ali sprejemajo " -"nobenega uporabniškega imena. Če pa je potrebno uporabniško ime, je " -"navedeno tukaj." +"potrebno. Mnogi ponudniki ne zahtevajo uporabniškega imena ali ne sprejemajo " +"nobenega uporabniškega imena. Če pa je potrebno uporabniško ime, je navedeno " +"tukaj." -#: src/libnmc-setting/settings-docs.h.in:133 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:134 msgid "" "Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be " "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing" "\" (0x4)." msgstr "" "Določa NMSettingDcbFlags za program DCB FCoE. 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:134 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:135 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 " "invalid and the default was \"fabric\"." msgstr "" -"Način krmilnika FCoE; bodisi \"tkanina\" ali \"vn2vn\". Od različice 1.34 je " -"privzeta vrednost NULL in pomeni »tkanina«. Pred različico 1.34 je bila NULL " -"zavrnjena kot neveljavna, privzeta vrednost pa je bila »FABRIC«." +"Način krmilnika FCoE; bodisi »fabric« ali \"vn2vn\". Od različice 1.34 je " +"privzeta vrednost NULL in pomeni »fabric«. Pred različico 1.34 je bila NULL " +"zavrnjena kot neveljavna, privzeta vrednost pa je bila »fabric«." -#: src/libnmc-setting/settings-docs.h.in:135 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:136 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 " "the \"enable\" (0x1) flag." msgstr "" "Najvišja uporabniška prioriteta (0 - 7), ki jo morajo uporabljati okvirji " -"FCoE, ali -1 za privzeto prioriteto. Uporablja se samo, če lastnost »app-" +"FCoE, ali -1 za privzeto prioriteto. Uporablja se samo, če lastnost »app-" "fcoe-flags« vključuje zastavico »enable« (0x1)." -#: src/libnmc-setting/settings-docs.h.in:136 +#: src/libnmc-setting/settings-docs.h.in:137 msgid "" "Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be " "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing" @@ -8041,7 +7936,7 @@ msgstr "" "Določa NMSettingDcbFlags za program DCB FIP. Zastavice so lahko poljubna " "kombinacija »enable« (0x1), »advertise« (0x2) in »willing« (0x4)." -#: src/libnmc-setting/settings-docs.h.in:137 +#: src/libnmc-setting/settings-docs.h.in:138 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 " @@ -8051,18 +7946,16 @@ msgstr "" "FIP, ali -1 za privzeto prioriteto. Uporablja se samo, če lastnost »app-fip-" "flags« vključuje zastavico »enable« (0x1)." -#: src/libnmc-setting/settings-docs.h.in:138 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:139 msgid "" "Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be " "any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing" "\" (0x4)." msgstr "" -"Določa NMSettingDcbFlags za program DCB iSCSI. Zastavice so lahko poljubna " -"kombinacija »omogoči« (0x1), »oglaševanje« (0x2) in »pripravljen« (0x4)." +"Določa NMSettingDcbFlags za program DCB iSCSI. Zastavice so lahko poljubna " +"kombinacija »enable« (0x1), »advertise« (0x2) in »willing« (0x4)." -#: src/libnmc-setting/settings-docs.h.in:139 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:140 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 " @@ -8072,7 +7965,7 @@ msgstr "" "iSCSI, ali -1 za privzeto prioriteto. Uporablja se samo, če lastnost »app-" "iscsi-flags« vključuje zastavico »enable« (0x1)." -#: src/libnmc-setting/settings-docs.h.in:140 +#: src/libnmc-setting/settings-docs.h.in:141 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 " @@ -8085,7 +7978,7 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:142 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 " @@ -8095,75 +7988,67 @@ msgstr "" "prioriteti (0 - 7) in vrednost označuje, ali naj ustrezna prioriteta prenese " "prioriteto naprej ali ne." -#: src/libnmc-setting/settings-docs.h.in:142 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:143 msgid "" "Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags " "may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and " "\"willing\" (0x4)." msgstr "" "Določa NMSettingDcbFlags za prednostni nadzor pretoka DCB (PFC). Zastavice " -"so lahko poljubna kombinacija »omogoči« (0x1), »oglaševanje« (0x2) in " -"»pripravljen« (0x4)." +"so lahko poljubna kombinacija »enable« (0x1), »advertise« (0x2) in " +"»willing« (0x4)." -#: src/libnmc-setting/settings-docs.h.in:143 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:144 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 " "allocated to that group. Allowed values are 0 - 100, and the sum of all " "values must total 100 percents." msgstr "" -"Matrika z 8 vrednostmi uint, pri čemer indeks polja ustreza ID-ju prednostne " -"skupine (0 - 7), vrednost pa označuje odstotek pasovne širine povezave, " -"dodeljene tej skupini. Dovoljene vrednosti so od 0 do 100, vsota vseh " -"vrednosti pa mora znašati 100 odstotkov." +"Polje z 8 vrednostmi uint, kjer indeks polja ustreza ID-ju prednostne " +"skupine (0–7) in vrednost označuje odstotek pasovne širine povezave, " +"dodeljene tej skupini. Dovoljene vrednosti so 0 - 100, vsota vseh vrednosti " +"pa mora znašati 100 odstotkov." -#: src/libnmc-setting/settings-docs.h.in:144 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:145 msgid "" "Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any " "combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4)." msgstr "" "Določa NMSettingDcbFlags za prednostne skupine DCB. Zastavice so lahko " -"poljubna kombinacija »omogoči« (0x1), »oglaševanje« (0x2) in " -"»pripravljen« (0x4)." +"poljubna kombinacija »enable« (0x1), »advertise« (0x2) in »willing« (0x4)." -#: src/libnmc-setting/settings-docs.h.in:145 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:146 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 " "Priority Group ID values are 0 - 7 or 15 for the unrestricted group." msgstr "" -"Matrika z 8 vrednostmi uint, kjer indeks matrike ustreza prioriteti " -"uporabnika (0 - 7), vrednost pa označuje ID prednostne skupine. Dovoljene " -"vrednosti ID-ja prednostne skupine so 0–7 ali 15 za skupino brez omejitev." +"Polje z 8 vrednostmi uint, kjer indeks polja ustreza prednostni nalogi " +"uporabnika (0–7), vrednost pa označuje ID prednostne skupine. Dovoljene " +"vrednosti ID-ja prednostne skupine so 0–7 ali 15 za neomejeno skupino." -#: src/libnmc-setting/settings-docs.h.in:146 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:147 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 " "all of the bandwidth allocated to its assigned group." msgstr "" -"Matrika z 8 logičnimi vrednostmi, kjer indeks polja ustreza uporabniški " -"prioriteti (0 - 7) in vrednost označuje, ali lahko prioriteta uporablja vso " -"pasovno širino, dodeljeno dodeljeni skupini." +"Polje 8 logičnih vrednosti, kjer indeks polja ustreza prednostni nalogi " +"uporabnika (0–7) in vrednost označuje, ali lahko prednostna naloga uporabi " +"vso pasovno širino, dodeljeno dodeljeni skupini." -#: src/libnmc-setting/settings-docs.h.in:147 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:148 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 " "the priority is mapped." msgstr "" -"Matrika z 8 uint vrednostmi, kjer indeks matrike ustreza uporabniški " -"prioriteti (0 - 7), vrednost pa označuje prometni razred (0 - 7), na " -"katerega je preslikana prednost." +"Polje z 8 vrednostmi uint, kjer indeks polja ustreza prednostni nalogi " +"uporabnika (0 - 7) in vrednost označuje razred prometa (0 - 7), na katerega " +"je preslikana prednostna naloga." -#: src/libnmc-setting/settings-docs.h.in:148 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:149 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 " @@ -8174,16 +8059,15 @@ msgid "" "will be created at the time the connection is started by invoking the device-" "handler." msgstr "" -"Ime rutine za obravnavo naprav, ki bo priklicana za dodajanje in brisanje " +"Ime rutine za obravnavo naprave, ki bo priklicana za dodajanje in brisanje " "naprave za to povezavo. Ime lahko vsebuje samo alfanumerične znake ASCII in " -"'-', '_', '.'. Ne more se začeti z '.'. Za več podrobnosti o pisanju orodja " -"za obravnavo naprav glejte nagovorno stran NetworkManager-dispatcher(8). Z " -"nastavitvijo te lastnosti postane generična povezava »virtualna«, kar " -"pomeni, da jo je mogoče aktivirati brez obstoječe naprave; Naprava bo " -"ustvarjena ob začetku povezave s klicem upravljavca naprave." +"znake '-', '_', '.'. Ne more se začeti z '.'. Oglejte si manušalno stran " +"NetworkManager-dispatcher(8) za več podrobnosti o tem, kako napisati rutino " +"za obravnavo naprave. Z nastavitvijo te lastnosti postane generična povezava " +"»virtualna«, kar pomeni, da jo je mogoče aktivirati brez obstoječe naprave; " +"Naprava bo ustvarjena ob začetku povezave s klicem upravljavca naprave." -#: src/libnmc-setting/settings-docs.h.in:149 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:150 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 " @@ -8196,39 +8080,52 @@ msgid "" "string to prevent that and use no APN." msgstr "" "Ime dostopne točke GPRS, ki določa APN, ki se uporablja pri vzpostavljanju " -"podatkovne seje z omrežjem, ki temelji na GSM. APN pogosto določa, kako se " -"bo uporabniku zaračunal za uporabo omrežja in ali ima uporabnik dostop do " +"podatkovne seje z omrežjem, ki temelji na GSM. APN pogosto določa, kako bo " +"uporabniku zaračunana uporaba omrežja in ali ima uporabnik dostop do " "interneta ali samo obzidanega vrta, ki je specifičen za ponudnika, zato je " -"pomembno, da uporabite ustrezen APN za uporabnikov načrt mobilne " -"širokopasovne povezave. APN je lahko sestavljen samo iz znakov a-z, 0-9, ., " -"in - na GSM 03.60 Oddelek 14.9. Če APN ni nastavljen (privzeto), ga je " -"mogoče zaznati na podlagi nastavitve »samodejne konfiguracije«. Lastnost je " -"lahko eksplicitno nastavljena na prazen niz, da to preprečite in ne " -"uporabljate APN." +"pomembno, da uporabite pravilen APN za uporabnikov mobilni širokopasovni " +"paket. APN je lahko sestavljen samo iz znakov a-z, 0-9, ., in - na GSM 03.60 " +"oddelek 14.9. Če je APN nastavljen (privzeto), ga lahko zazna na podlagi " +"nastavitve »samodejne konfiguracije«. Lastnost lahko izrecno nastavite na " +"prazen niz, da to preprečite in ne uporabite APN." -#: src/libnmc-setting/settings-docs.h.in:150 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:151 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 " "Broadband Provider database." msgstr "" "Če je TRUE, bodo nastavitve, kot so APN, uporabniško ime ali geslo, privzeto " -"postavljene na vrednosti, ki se ujemajo z omrežjem, v katerega se bo modem " -"registriral v zbirki podatkov ponudnika mobilnih širokopasovnih povezav." +"izbrane na vrednosti, ki se ujemajo z omrežjem, v katerega bo modem " +"registriran v zbirki podatkov ponudnika mobilnih širokopasovnih povezav." -#: src/libnmc-setting/settings-docs.h.in:151 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:152 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 " "specified device." msgstr "" -"Enolični identifikator naprave (kot ga navede storitev upravljanja WWAN), na " -"katerega velja ta povezava. Če je na voljo, bo povezava veljala samo za " +"Enolični identifikator naprave (kot ga dodeli storitev za upravljanje WWAN), " +"za katerega velja ta povezava. Če je podana, bo povezava veljala samo za " "določeno napravo." -#: src/libnmc-setting/settings-docs.h.in:152 +#: src/libnmc-setting/settings-docs.h.in:153 +msgid "" +"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." +msgstr "" +"UID naprave (kot ga zagotavlja storitev upravljanja WWAN), za katerega velja " +"ta povezava. V nasprotju z »device-id«, ki je neločljivo povezana lastnost " +"povezane naprave, se ta nastavitev nanaša na lastnost, ki jo nastavi pravilo " +"UDEV. Oglejte si dokumentacijo »Common udev tags« -> »ID_MM_PHYSDEV_UID« " +"programa ModemManager. Če je podana, bo povezava veljala samo za določeno " +"napravo." + +#: src/libnmc-setting/settings-docs.h.in:154 msgid "" "When TRUE, only connections to the home network will be allowed. Connections " "to roaming networks will not be made." @@ -8236,30 +8133,27 @@ msgstr "" "Če je TRUE, bodo dovoljene samo povezave z domačim omrežjem. Povezave z " "omrežji gostovanja ne bodo vzpostavljene." -#: src/libnmc-setting/settings-docs.h.in:153 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:155 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-" "bearer-configure to be TRUE." msgstr "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Za modeme LTE to nastavi APN za začetni nosilec EPS, ki je nastavljen ob " +"priključitvi na omrežje. Nastavitev tega parametra pomeni, da je initial-" +"eps-bearer-configure TRUE." -#: src/libnmc-setting/settings-docs.h.in:154 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:156 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 " "initial-eps-bearer-apn is set." msgstr "" -"Pri modemih LTE ta nastavitev določa, ali je treba ob vzpostavitvi povezave " -"konfigurirati začetni nosilec EPS. Sklepa se o TRUE, če je nastavljena " -"začetna vrednost eps-bearer-apn." +"Pri modemih LTE ta nastavitev določa, ali je treba pri vzpostavitvi povezave " +"konfigurirati začetni nosilec EPS. Sklepa se TRUE, če je nastavljen initial-" +"eps-bearer-apn." -#: src/libnmc-setting/settings-docs.h.in:155 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:157 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 " @@ -8267,91 +8161,80 @@ msgid "" "authentication from the remote side. In almost all cases, this should be " "TRUE." msgstr "" -"Če je TRUE, ne zahtevajte, da se druga stran (običajno strežnik PPP) preveri " -"pristnost pri odjemalcu. Če je FALSE, zahtevajte preverjanje pristnosti z " -"oddaljene strani. V skoraj vseh primerih bi to moralo biti RES." +"Za modeme LTE to nastavi način preverjanja pristnosti NOAUTH za začetnega " +"nosilca EPS, ki je nastavljen pri priključitvi na omrežje. Če je TRUE, ne " +"zahtevajte, da druga stran preveri pristnost odjemalca. Č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:156 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:158 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 "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Za modeme LTE nastavi geslo za začetni nosilec EPS, ki je nastavljen pri " +"priključitvi na omrežje. Nastavitev tega parametra pomeni, da je initial-" +"eps-bearer-configure TRUE." -#: src/libnmc-setting/settings-docs.h.in:157 +#: src/libnmc-setting/settings-docs.h.in:159 msgid "" "Flags indicating how to handle the \"initial-eps-bearer-password\" property." msgstr "" "Zastavice, ki označujejo, kako ravnati z lastnostjo »initial-eps-bearer-" "password«." -#: src/libnmc-setting/settings-docs.h.in:158 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:160 msgid "" "For LTE modems, this disables CHAP authentication method for the initial EPS " "bearer that is set up when attaching to the network." msgstr "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Pri modemih LTE to onemogoči način preverjanja pristnosti CHAP za začetni " +"nosilec EPS, ki je nastavljen pri priključitvi na omrežje." -#: src/libnmc-setting/settings-docs.h.in:159 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:161 msgid "" "For LTE modems, this disables EAP authentication method for the initial EPS " "bearer that is set up when attaching to the network." msgstr "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Pri modemih LTE to onemogoči način preverjanja pristnosti EAP za začetnega " +"nosilca EPS, ki je nastavljen pri priključitvi na omrežje." -#: src/libnmc-setting/settings-docs.h.in:160 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:162 msgid "" "For LTE modems, this disables MSCHAP authentication method for the initial " "EPS bearer that is set up when attaching to the network." msgstr "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Pri modemih LTE to onemogoči način preverjanja pristnosti MSCHAP za " +"začetnega nosilca EPS, ki je nastavljen pri priključitvi na omrežje." -#: src/libnmc-setting/settings-docs.h.in:161 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:163 msgid "" "For LTE modems, this disables MSCHAPV2 authentication method for the initial " "EPS bearer that is set up when attaching to the network." msgstr "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Pri modemih LTE to onemogoči način preverjanja pristnosti MSCHAPV2 začetnega " +"nosilca EPS, ki je nastavljen pri priključitvi na omrežje." -#: src/libnmc-setting/settings-docs.h.in:162 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:164 msgid "" "For LTE modems, this disables PAP authentication method for the initial EPS " "bearer that is set up when attaching to the network." msgstr "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Pri modemih LTE to onemogoči način preverjanja pristnosti PAP za začetnega " +"nosilca EPS, ki je nastavljen pri priključitvi na omrežje." -#: src/libnmc-setting/settings-docs.h.in:163 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:165 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 "" -"Za modeme LTE nastavite APN za začetnega nosilca EPS, ki je nastavljen pri " -"povezovanju z omrežjem. Nastavitev tega parametra pomeni, da je initial-eps-" -"bearer-configure TRUE." +"Za modeme LTE nastavi uporabniško ime za začetnega nosilca EPS, ki se " +"nastavi ob priključitvi na omrežje. Nastavitev tega parametra pomeni, da je " +"initial-eps-bearer-configure TRUE." -#: src/libnmc-setting/settings-docs.h.in:165 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:167 msgid "" "The Network ID (GSM LAI format, ie MCC-MNC) to force specific network " "registration. If the Network ID is specified, NetworkManager will attempt " @@ -8359,14 +8242,13 @@ msgid "" "used to ensure that the device does not roam when direct roaming control of " "the device is not otherwise possible." msgstr "" -"ID omrežja (format GSM LAI, tj. MCC-MNC) za vsiljevanje določene " -"registracije omrežja. Če je ID omrežja določen, bo NetworkManager poskušal " -"prisiliti napravo, da se registrira le v določenem omrežju. To lahko " -"uporabite za zagotovitev, da naprava ne bo gostovala, ko neposredni nadzor " -"naprave z gostovanjem sicer ni mogoč." +"ID omrežja (format GSM LAI, tj. MCC-MNC) za vsiljevanje posebne registracije " +"omrežja. Če je določen ID omrežja, bo NetworkManager poskušal prisiliti " +"napravo, da se registrira samo v določenem omrežju. To se lahko uporabi za " +"zagotovitev, da naprava ne gostuje, kadar neposreden nadzor naprave sicer ni " +"mogoč." -#: src/libnmc-setting/settings-docs.h.in:166 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:168 msgid "" "Legacy setting that used to help establishing PPP data sessions for GSM-" "based modems." @@ -8374,73 +8256,86 @@ msgstr "" "Podedovana nastavitev, ki je pomagala vzpostaviti podatkovne seje PPP za " "modeme, ki temeljijo na GSM." -#: src/libnmc-setting/settings-docs.h.in:169 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:171 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 " "device." msgstr "" "Če je kartica SIM zaklenjena s kodo PIN, jo je treba odkleniti, preden se " -"zahtevajo kakršne koli druge operacije. Tukaj določite PIN, da omogočite " -"delovanje naprave." +"zahtevajo kakršni koli drugi postopki. Tukaj določite kodo PIN, da " +"omogočite delovanje naprave." -#: src/libnmc-setting/settings-docs.h.in:171 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:173 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 " "any device also allowed by \"device-id\" which contains a SIM card matching " "the given identifier." msgstr "" -"Enolični identifikator kartice SIM (kot ga daje storitev za upravljanje " -"WWAN), na katerega velja ta povezava. Če je povezava zagotovljena, bo " -"veljala za vse naprave, ki jih dovoljuje tudi »ID-naprava«, ki vsebuje " -"kartico SIM, ki ustreza danemu identifikatorju." +"Enolični identifikator kartice SIM (kot ga določi storitev za upravljanje " +"WWAN), na katerega velja ta povezava. Če je vzpostavljena, bo povezava " +"veljala za vse naprave, ki jih dovoljuje tudi »device-id«, ki vsebuje " +"kartico SIM, ki se ujema z danim identifikatorjem." -#: src/libnmc-setting/settings-docs.h.in:172 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:174 msgid "" "A MCC/MNC string like \"310260\" or \"21601\" identifying the specific " "mobile network operator which this connection applies to. If given, the " "connection will apply to any device also allowed by \"device-id\" and \"sim-" "id\" which contains a SIM card provisioned by the given operator." msgstr "" -"Niz MCC/MNC, kot je »310260« ali »21601«, ki označuje določenega operaterja " -"mobilnega omrežja, na katerega velja ta povezava. Če je povezava " -"zagotovljena, bo veljala za vsako napravo, ki jo dovoljujeta tudi »device-" -"id« in »sim-id«, ki vsebuje kartico SIM, ki jo zagotavlja določen operater." +"Niz MCC/MNC, kot je »310260« ali »21601«, ki identificira določenega " +"operaterja mobilnega omrežja, za katerega velja ta povezava. Če je " +"vzpostavljena, bo povezava veljala za katero koli napravo, ki jo dovoljujeta " +"tudi »device-id« in »sim-id«, ki vsebuje kartico SIM, ki jo zagotavlja " +"določen operater." -#: src/libnmc-setting/settings-docs.h.in:174 +#: src/libnmc-setting/settings-docs.h.in:176 +msgid "The optional interlink port name of the HSR interface." +msgstr "Neobvezno ime vrat medsebojne povezave (interlink) vmesnika HSR." + +#: src/libnmc-setting/settings-docs.h.in:177 msgid "The last byte of supervision address." msgstr "Zadnji bajt nadzornega naslova." -#: src/libnmc-setting/settings-docs.h.in:175 +#: src/libnmc-setting/settings-docs.h.in:178 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 +#: src/libnmc-setting/settings-docs.h.in:179 msgid "The port2 interface name of the HSR. This property is mandatory." msgstr "Ime vmesnika vrat2 HSR. Ta nastanitev je obvezna." -#: src/libnmc-setting/settings-docs.h.in:177 +#: src/libnmc-setting/settings-docs.h.in:180 +msgid "" +"Configures the protocol version to be used for the HSR/PRP interface. " +"\"default\" (-1) sets the protocol version to the default version for the " +"protocol. \"hsr-2010\" (0) sets the protocol version to HSRv0 (IEC " +"62439-3:2010). \"hsr-2012\" (1) sets the protocol version to HSRv1 (IEC " +"62439-3:2012)." +msgstr "" +"Prilagodi različico protokola, ki se uporablja za vmesnik HSR/PRP. " +"»default« (-1) nastavi različico protokola na privzeto različico protokola. " +"\"hsr-2010\" (0) nastavi različico protokola na HSRv0 (IEC 62439-3:2010). " +"\"hsr-2012\" (1) nastavi različico protokola na HSRv1 (IEC 62439-3:2012)." + +#: src/libnmc-setting/settings-docs.h.in:181 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." -#: src/libnmc-setting/settings-docs.h.in:178 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:182 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 " "of the device (i.e. MAC spoofing)." msgstr "" -"Če je določeno, bo ta povezava veljala samo za napravo IPoIB, katere trajni " -"naslov MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave (npr. " -"ponarejanje MAC)." +"Če je določeno, bo ta povezava veljala samo za napravo IPoIB, katere stalni " +"naslov MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave (tj. MAC " +"spoofing)." -#: src/libnmc-setting/settings-docs.h.in:180 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:184 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 " @@ -8452,61 +8347,57 @@ msgid "" "reflect that. Usually the user would want to configure a full membership p-" "key with 0x8000 flag set." msgstr "" -"P-ključ InfiniBand, ki ga želite uporabiti za to napravo. Vrednost -1 pomeni " -"uporabo privzetega p-ključa (tj. »p-ključa pri indeksu 0«). V nasprotnem " -"primeru gre za 16-bitno nepodpisano celo število, katerega visoka bitna " -"0x8000 je nastavljena, če gre za p-ključ »polnopravnega članstva«. Vrednosti " -"0 in 0x8000 nista dovoljeni. Ko je nastavljen p-key, je ime vmesnika vedno " -"»$parent.$p_key«. Nastavitev »connection.interface-name« na drugo ime ni " -"podprta. Upoštevajte, da bo jedro interno vedno nastavilo bit polnega " -"članstva, čeprav ime vmesnika tega ne odraža. Običajno bi uporabnik želel " -"konfigurirati p-ključ polnega članstva s 0x8000 zastavico." +"InfiniBand p-tipka, ki jo uporabljate za to napravo. Vrednost -1 pomeni " +"uporabo privzetega p-ključa (znanega tudi kot »p-ključ pri indeksu 0«). V " +"nasprotnem primeru je to 16-bitno celo število brez podpisa, katerega visoka " +"bitna 0x8000 je nastavljena, če gre za p-ključ \"polnopravnega članstva\". " +"Vrednosti 0 in 0x8000 nista dovoljeni. Z nastavljenim p-ključem je ime " +"vmesnika vedno »$parent.$p_key«. Nastavitev »connection.interface-name« na " +"drugo ime ni podprta. Upoštevajte, da bo jedro interno vedno nastavilo polno " +"članstvo, čeprav ime vmesnika tega ne odraža. Običajno bi uporabnik želel " +"konfigurirati p-ključ za polno članstvo z nastavljeno zastavico 0x8000." -#: src/libnmc-setting/settings-docs.h.in:181 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:185 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 " "setting either this property or \"mac-address\"." msgstr "" -"Ime vmesnika nadrejene naprave te naprave. Običajno NULL, če pa je " +"Ime vmesnika nadrejene naprave te naprave. Običajno je NULL, če pa je " "nastavljena lastnost »p_key«, morate določiti osnovno napravo tako, da " "nastavite to lastnost ali »mac-address«." -#: src/libnmc-setting/settings-docs.h.in:182 +#: src/libnmc-setting/settings-docs.h.in:186 msgid "" "The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\"." msgstr "Način prenosa IP-over-InfiniBand. Bodisi »datagram« ali »connected«." -#: src/libnmc-setting/settings-docs.h.in:183 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:187 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 " "addresses are listed in decreasing priority, meaning the first address will " "be the primary address." msgstr "" -"Seznam naslovov IPv4 in dolžina njihovih predpon. Več naslovov je mogoče " -"ločiti z vejico. Na primer »192.168.1.5/24, 10.1.0.5/24«. Naslovi so " +"Seznam naslovov IPv4 in njihova dolžina predpone. Več naslovov je mogoče " +"ločiti z vejico. Na primer \"192.168.1.5/24, 10.1.0.5/24\". Naslovi so " "navedeni v padajoči prioriteti, kar pomeni, da bo prvi naslov primarni " "naslov." -#: src/libnmc-setting/settings-docs.h.in:184 -#: src/libnmc-setting/settings-docs.h.in:222 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:188 +#: src/libnmc-setting/settings-docs.h.in:226 msgid "" "VPN connections will default to add the route automatically unless this " "setting is set to FALSE. For other connection types, adding such an " "automatic route is currently not supported and setting this to TRUE has no " "effect." msgstr "" -"Povezave VPN privzeto dodajo načrtovano pot, razen če je ta nastavitev " -"nastavljena na FALSE. Za druge vrste povezav dodajanje takšne samodejne poti " -"trenutno ni podprto, nastavitev na TRUE pa nima učinka." +"Povezave VPN bodo privzeto samodejno dodale pot, razen če je ta nastavitev " +"nastavljena na FALSE. Pri drugih vrstah povezav dodajanje takšne samodejne " +"poti 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:223 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:189 +#: src/libnmc-setting/settings-docs.h.in:227 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 " @@ -8518,19 +8409,17 @@ msgid "" "and so the actual duration can be between half and the full time specified " "in this property." msgstr "" -"Najdaljša časovna omejitev v milisekundah, ki se uporablja za preverjanje " -"prisotnosti podvojenih naslovov IP v omrežju. Če je zaznan spor naslovov, " -"aktiviranje ne bo uspelo. Lastnost je trenutno implementirana samo za IPv4. " -"Ničelna vrednost pomeni, da se ne izvede nobeno zaznavanje podvojenih " -"naslovov, -1 pa privzeto vrednost (bodisi vrednost, ki je globalno " -"konfigurirana v orodju NetworkManger.conf ali 200ms). Vrednost, večja od " -"nič, je časovna omejitev v milisekundah. Upoštevajte, da so časovni " -"intervali predmet naključnega določanja v skladu z RFC 5227, zato je " -"dejansko trajanje lahko med polovico in polnim časom, določenim v tej " -"lastnosti." +"Največja časovna omejitev v milisekundah, ki se uporablja za preverjanje " +"prisotnosti podvojenih naslovov IP v omrežju. Če je zaznan spor pri " +"naslovih, aktiviranje ne bo uspelo. Lastnost je trenutno implementirana samo " +"za IPv4. Ničelna vrednost pomeni, da se ne izvede zaznavanje podvojenih " +"naslovov, -1 pomeni privzeto vrednost (bodisi vrednost, ki je globalno " +"konfigurirana v NetworkManger.conf ali 200ms). Vrednost, večja od nič, je " +"časovna omejitev v milisekundah. Upoštevajte, da so časovni intervali " +"predmet randomizacije v skladu z RFC 5227, zato je dejansko trajanje lahko " +"med polovico in polnim časom, določenim v tej lastnosti." -#: src/libnmc-setting/settings-docs.h.in:186 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:190 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 " @@ -8559,38 +8448,37 @@ msgid "" "try to use one from its config file if present, or won't sent any client-id " "otherwise." msgstr "" -"Niz, poslan strežniku DHCP za identifikacijo lokalnega računalnika, ki ga " -"strežnik DHCP lahko uporabi za prilagajanje zakupa DHCP in možnosti. Če je " -"lastnost šestnajstni niz ('aa:bb:cc'), se razlaga kot ID binarnega " -"odjemalca, v tem primeru se predpostavi, da je prvi bajt polje 'type' v " -"skladu z RFC 2132, razdelek 9.14, preostali bajti pa so lahko naslov strojne " -"opreme (npr. '01:xx:xx:xx:xx:xx', kjer je 1 tip Ethernet ARP, ostalo pa je " -"naslov MAC). Če lastnost ni šestnajstni niz, se šteje za ID odjemalca, ki ni " -"naslov strojne opreme, polje »type« pa je nastavljeno na 0. Podprti sta " -"posebni vrednosti »mac« in »perm-mac«, ki uporabljata trenutni ali trajni " -"naslov MAC naprave za ustvarjanje identifikatorja odjemalca z vrsto ethernet " -"(01). Trenutno te možnosti delujejo samo za ethernetne povezave. Posebna " -"vrednost »ipv6-duid« uporablja lastnost DUID iz »ipv6.dhcp-duid« kot " -"identifikator odjemalca, ki je skladen s RFC4361. Kot IAID uporablja »ipv4." +"Niz, poslan strežniku DHCP za identifikacijo krajevnega računalnika, ki ga " +"strežnik DHCP lahko uporabi za prilagajanje najema in možnosti DHCP. Kadar " +"je lastnost šestnajstiški niz ('aa:bb:cc'), se razlaga kot binarni ID " +"odjemalca, v tem primeru se predpostavlja, da je prvi bajt polje 'type' v " +"skladu z RFC 2132 oddelek 9.14, preostali bajti pa so lahko naslov strojne " +"opreme (npr. '01:xx:xx:xx:xx:xx:xx', kjer je 1 vrsta Ethernet ARP, ostalo pa " +"je naslov MAC). Če lastnost ni šestnajstiški niz, se šteje za ID odjemalca, " +"ki ni naslov strojne opreme, polje »vrsta« pa je nastavljeno na 0. Podprti " +"sta posebni vrednosti »mac« in »perm-mac«, ki uporabljata trenutni ali " +"trajni naslov MAC naprave za ustvarjanje identifikatorja odjemalca z vrsto " +"ethernet (01). Trenutno te možnosti delujejo samo za ethernetne povezave. " +"Posebna vrednost »ipv6-duid« uporablja DUID iz lastnosti »ipv6.dhcp-duid« " +"kot identifikator odjemalca, skladen s RFC4361. Kot IAID uporablja »ipv4." "dhcp-iaid« in se vrne na »ipv6.dhcp-iaid«, če ni nastavljen. Posebna " -"vrednost »duid« ustvari identifikator odjemalca, skladen z RFC4361, ki " -"temelji na »ipv4.dhcp-iaid« in uporablja DUID, ki ga ustvari zgoščevanje /" -"etc/machine-id. Posebna vrednost »stabilna« je podprta za ustvarjanje " -"identifikatorja odjemalca tipa 0 na podlagi stabilnega ID-ja (glejte " -"connection.stable-id) in ključa za posameznega gostitelja. Če nastavite " -"stabilni ID, boste morda želeli vključiti specifikacijo »${DEVICE}« ali " -"»${MAC}«, da dobite ključ za posamezno napravo. Posebna vrednost »none« " -"preprečuje pošiljanje identifikatorja odjemalca. Upoštevajte, da to običajno " -"ni priporočljivo. Če niste nastavljeni, se uporabi globalno konfigurirana " -"privzeta nastavitev iz NetworkManager.conf. Če nastavitev še vedno ni " -"nastavljena, je privzeta nastavitev odvisna od vtičnika DHCP. Notranji " -"odjemalec dhcp bo privzeto nastavil »mac« in vtičnik dhclient bo poskušal " -"uporabiti enega iz svoje konfiguracijske datoteke, če je prisoten, ali " -"drugače ne bo poslal nobenega ID-ja odjemalca." +"vrednost »duid« ustvari identifikator odjemalca, skladen s RFC4361, ki " +"temelji na »ipv4.dhcp-iaid« in uporabi DUID, ki ga ustvari zgoščevanje /etc/" +"machine-id. Posebna vrednost »stable« je podprta za ustvarjanje " +"identifikatorja odjemalca tipa 0, ki temelji na stable-id (glejte connection." +"stable-id) in ključu na gostitelja. Če nastavite stabilni id, boste morda " +"želeli vključiti specifikacijo »${DEVICE}« ali »${MAC}«, da dobite ključ za " +"posamezno napravo. Posebna vrednost »none« preprečuje pošiljanje " +"identifikatorja odjemalca. Upoštevajte, da to običajno ni priporočljivo. Če " +"ni nastavljena, se uporabi globalno prilagojena privzeta nastavitev iz " +"NetworkManager.conf. Če še vedno ni nastavljena, je privzeta nastavitev " +"odvisna od vtičnika DHCP. Notranji odjemalec dhcp bo privzeto »mac« in " +"vtičnik dhclient bo poskušal uporabiti enega iz svoje prilagoditvene " +"datoteke, če je prisoten, ali pa drugače ne bo poslal nobenega ID-ja " +"odjemalca." -#: src/libnmc-setting/settings-docs.h.in:187 -#: src/libnmc-setting/settings-docs.h.in:224 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:191 +#: src/libnmc-setting/settings-docs.h.in:228 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 " @@ -8598,14 +8486,13 @@ msgid "" "and \"CS6\". The property is currently valid only for IPv4, and it is " "supported only by the \"internal\" DHCP plugin." msgstr "" -"Določa vrednost za polje DSCP (prometni razred) glave IP. Ko je prazna, se " +"Določa vrednost polja DSCP (razred prometa) glave IP. Ko je prazna, se " "uporabi globalna privzeta vrednost; če ni določena globalna privzeta " -"vrednost, se predpostavlja, da je »CS0«. Dovoljene vrednosti so: »CS0«, " -"»CS4« in »CS6«. Lastnost je trenutno veljavna samo za IPv4 in jo podpira " -"samo »notranji« vtičnik DHCP." +"vrednost, se domneva, da je »CS0«. Dovoljene vrednosti so: »CS0«, »CS4« in " +"»CS6«. Lastnost je trenutno veljavna samo za IPv4 in jo podpira samo " +"»notranji« vtičnik DHCP." -#: src/libnmc-setting/settings-docs.h.in:188 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:192 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-" @@ -8615,9 +8502,8 @@ msgstr "" "DHCP ob pridobitvi zakupa. Ta lastnost in »dhcp-hostname« se medsebojno " "izključujeta in ju ni mogoče nastaviti hkrati." -#: src/libnmc-setting/settings-docs.h.in:189 -#: src/libnmc-setting/settings-docs.h.in:226 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:193 +#: src/libnmc-setting/settings-docs.h.in:230 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-" @@ -8627,9 +8513,8 @@ msgstr "" "DHCP ob pridobitvi zakupa. Ta lastnost in »dhcp-fqdn« se medsebojno " "izključujeta in ju ni mogoče nastaviti hkrati." -#: src/libnmc-setting/settings-docs.h.in:190 -#: src/libnmc-setting/settings-docs.h.in:227 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:194 +#: src/libnmc-setting/settings-docs.h.in:231 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 " @@ -8646,19 +8531,18 @@ msgstr "" "Zastavice za ime gostitelja DHCP in FQDN. Trenutno ta lastnost vključuje le " "zastavice za nadzor zastavic FQDN, nastavljenih v možnosti DHCP FQDN. " "Podprte zastavice FQDN so »fqdn-serv-update« (0x1), »fqdn-encoded« (0x2) in " -"»fqdn-no-update« (0x4). Če zastavica FQDN ni nastavljena in je nastavljena " +"»fqdn-no-update« (0x4). Če zastavica FQDN ni nastavljena in je nastavljena " "»fqdn-clear-flags« (0x8), možnost DHCP FQDN ne bo vsebovala zastavice. V " "nasprotnem primeru, če zastavica FQDN ni nastavljena in »fqdn-clear-" "flags« (0x8) ni nastavljena, so v zahtevi nastavljene standardne zastavice " "FQDN: »fqdn-serv-update« (0x1), »fqdn-encoded« (0x2) za IPv4 in »fqdn-serv-" "update« (0x1) za IPv6. Ko je ta lastnost nastavljena na privzeto vrednost " -"»none« (0x0), se v konfiguraciji upravitelja omrežja poišče globalna " -"privzeta vrednost. Če ta vrednost ni nastavljena ali tudi »none« (0x0), se v " -"zahteve DHCP pošljejo standardne zastavice FQDN, opisane zgoraj." +"»none« (0x0), se v prilagoditvi upravitelja omrežja poišče globalna privzeta " +"vrednost. Če ta vrednost ni nastavljena ali je »none« (0x0), se v zahteve " +"DHCP pošljejo standardne zastavice FQDN, opisane zgoraj." -#: src/libnmc-setting/settings-docs.h.in:191 -#: src/libnmc-setting/settings-docs.h.in:228 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:195 +#: src/libnmc-setting/settings-docs.h.in:232 msgid "" "A string containing the \"Identity Association Identifier\" (IAID) used by " "the DHCP client. The string can be a 32-bit number (either decimal, " @@ -8678,26 +8562,25 @@ msgid "" "DHCPv6 IAID for a currently activated interface is exposed in the lease " "information of the device." msgstr "" -"Niz, ki vsebuje »identifikator združenja identitete« (IAID), ki ga uporablja " +"Niz, ki vsebuje »Identity Association Identifier« (IAID), ki ga uporablja " "odjemalec DHCP. Niz je lahko 32-bitno število (decimalno, šestnajstiško ali " "šestnajstiško število, ločeno z dvopičjem). Lahko pa ga nastavite na posebne " -"vrednosti \"mac\", \"perm-mac\", \"ifname\" ali \"stabilno\". Če je " +"vrednosti \"mac\", \"perm-mac\", \"ifname\" ali \"stable\". Če je " "nastavljena na »mac« (ali »perm-mac«), se kot IAID uporabijo zadnji 4 bajti " "trenutnega (ali stalnega) naslova MAC. Ko je nastavljen na »ifname«, se IAID " -"izračuna z zgoščevanjem imena vmesnika. Posebna vrednost »stabilna« se lahko " -"uporabi za ustvarjanje IAID na podlagi stabilnega ID-ja (glejte connection." -"stable-id), ključa na gostitelja in imena vmesnika. Ko lastnost ni " -"nastavljena, se uporabi vrednost iz globalne konfiguracije; če ni " +"izračuna s kontrolno vsoto imena vmesnika. Posebna vrednost »stable« se " +"lahko uporabi za ustvarjanje IAID na podlagi stabilnega ID-ja (glejte " +"connection.stable-id), ključa za gostitelja in imena vmesnika. Ko lastnost " +"ni nastavljena, se uporabi vrednost iz globalne prilagoditve; če ni " "nastavljena nobena globalna privzeta nastavitev, se domneva, da je IAID " "»ifname«. Za DHCPv4 se IAID uporablja samo z vrednostmi »ipv4.dhcp-client-" "id« »duid« in »ipv6-duid« za ustvarjanje ID-ja odjemalca. Za DHCPv6 " -"upoštevajte, da trenutno to lastnost podpira samo »notranji« vtičnik DHCPv6. " +"upoštevajte, da trenutno to lastnost podpira samo »notranji« vstavek DHCPv6. " "Vtičnik DHCPv6 »dhclient« vedno izpelje IAID iz naslova MAC. Dejansko " "uporabljeni DHCPv6 IAID za trenutno aktiviran vmesnik je izpostavljen v " "informacijah o najemu naprave." -#: src/libnmc-setting/settings-docs.h.in:192 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:196 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 " @@ -8711,19 +8594,18 @@ msgid "" "Preferred\" option is always disabled." msgstr "" "Nadzira možnost DHCPv4 »Prednostno samo IPv6« (RFC 8925). Ko je nastavljen " -"na »da« (1), gostitelj doda možnost na seznam zahtev za parametre; če " +"na »yes« (1), gostitelj doda možnost na seznam zahtev za parametre; če " "strežnik DHCP pošlje možnost nazaj, gostitelj ustavi odjemalca DHCP za " "časovni interval, ki je določen v možnosti. Omogočite to funkcijo, če " -"gostitelj podpira način samo za IPv6, tj. Ali vse aplikacije podpirajo samo " -"IPv6 ali pa je uvedena oblika 464XLAT. Če je nastavljena na »privzeto« (-1), " -"se dejanska vrednost poišče v globalni konfiguraciji; Če ni določeno, je " -"privzeto »ne« (0). Če je v povezavi metoda IPv6 nastavljena na " -"»onemogočeno«, ta lastnost ne učinkuje in možnost »Prednostno samo IPv6« je " -"vedno onemogočena." +"gostitelj podpira način samo za IPv6, tj. ali vse aplikacije podpirajo samo " +"IPv6 ali pa je uvedena oblika 464XLAT. Če je nastavljena na »default« (-1), " +"se dejanska vrednost poišče v globalni prilagoditvi; če ni določeno, je " +"privzeto »no« (0). Če je v povezavi metoda IPv6 nastavljena na »disabled«, " +"ta lastnost ne učinkuje in možnost »Prednostno samo IPv6« je vedno " +"onemogočena." -#: src/libnmc-setting/settings-docs.h.in:193 -#: src/libnmc-setting/settings-docs.h.in:230 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:197 +#: src/libnmc-setting/settings-docs.h.in:234 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 " @@ -8731,15 +8613,14 @@ msgid "" "and a prefix length (e.g. \"192.168.122.0/24\"). This property is currently " "not implemented for DHCPv6." msgstr "" -"Niz strežnikov, s katerih DHCP ponuja, je treba zavrniti. Ta lastnost je " -"uporabna, da se izognete najemu napačno konfiguriranih ali goljufivih " +"Polje strežnikov, s katerih DHCP ponuja, je treba zavrniti. Ta lastnost je " +"uporabna, da se izognete najemu napačno prilagojenih ali goljufivih " "strežnikov. Za DHCPv4 mora biti vsak element naslov IPv4, ki mu po želji " "sledita poševnica in dolžina predpone (npr. »192.168.122.0/24«). Ta lastnost " "trenutno ni implementirana za DHCPv6." -#: src/libnmc-setting/settings-docs.h.in:194 -#: src/libnmc-setting/settings-docs.h.in:231 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:198 +#: src/libnmc-setting/settings-docs.h.in:235 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 " @@ -8751,9 +8632,8 @@ msgstr "" "»default« (privzeto). To je storjeno le, da se izognemo okvari obstoječih " "prilagoditev, od zdaj naprej je treba uporabljati novo lastnost." -#: src/libnmc-setting/settings-docs.h.in:195 -#: src/libnmc-setting/settings-docs.h.in:232 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:199 +#: src/libnmc-setting/settings-docs.h.in:236 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 " @@ -8767,13 +8647,12 @@ msgid "" msgstr "" "Če je TRUE, je ime gostitelja poslano strežniku DHCP ob pridobitvi zakupa. " "Nekateri strežniki DHCP uporabljajo to ime gostitelja za posodabljanje zbirk " -"podatkov DNS in v bistvu zagotavljajo statično ime gostitelja za " -"računalnik. Če je lastnost »dhcp-hostname« NULL in je ta lastnost TRUE, je " -"poslano trenutno trajno ime gostitelja računalnika." +"podatkov DNS in v bistvu zagotavljajo statično ime gostitelja za računalnik. " +"Če je lastnost »dhcp-hostname« NULL in je ta lastnost TRUE, je poslano " +"trenutno trajno ime gostitelja računalnika." -#: src/libnmc-setting/settings-docs.h.in:196 -#: src/libnmc-setting/settings-docs.h.in:233 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:200 +#: src/libnmc-setting/settings-docs.h.in:237 msgid "" "Whether the DHCP client will send RELEASE message when bringing the " "connection down. The default value is \"default\" (-1). When the default " @@ -8781,13 +8660,12 @@ msgid "" "is looked up, if not set, it is considered as FALSE." msgstr "" "Ali bo odjemalec DHCP ob prekinitvi povezave poslal sporočilo RELEASE. " -"Privzeta vrednost je »privzeto« (-1). Ko je določena privzeta vrednost, se " -"poišče globalna vrednost iz konfiguracije programa NetworkManager, če ni " +"Privzeta vrednost je »default« (-1). Ko je določena privzeta vrednost, se " +"poišče globalna vrednost iz prilagoditev programa NetworkManager, če ni " "nastavljena, se šteje za FALSE." -#: src/libnmc-setting/settings-docs.h.in:197 -#: src/libnmc-setting/settings-docs.h.in:234 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:201 +#: src/libnmc-setting/settings-docs.h.in:238 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 " @@ -8795,12 +8673,11 @@ msgid "" "infinity." msgstr "" "Časovna omejitev za transakcijo DHCP v sekundah. Če je nič (privzeto), se " -"uporabi globalno konfigurirana privzeta nastavitev. Če še vedno ni določeno, " +"uporabi globalno prilagojena privzeta nastavitev. Če še vedno ni določeno, " "se uporabi časovna omejitev za določeno napravo (običajno 45 sekund). " "Nastavite na 2147483647 (MAXINT32) za neskončnost." -#: src/libnmc-setting/settings-docs.h.in:198 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:202 msgid "" "The Vendor Class Identifier DHCP option (60). Special characters in the data " "string may be escaped using C-style escapes, nevertheless this property " @@ -8808,15 +8685,14 @@ msgid "" "default), a global connection default gets consulted. If still unspecified, " "the DHCP option is not sent to the server." msgstr "" -"Možnost DHCP identifikatorja razreda dobavitelja (60). Posebni znaki v " -"podatkovnem nizu se lahko izognejo z uporabo pobegov v slogu C, vendar ta " -"lastnost ne more vsebovati nul bajtov. Če vrednost za posamezen profil ni " -"določena (privzeta), se poišče privzeta nastavitev globalne povezave. Če še " -"vedno ni določeno, možnost DHCP ni poslana strežniku." +"Možnost DHCP identifikatorja razreda proizvajalca (60). Posebni znaki v " +"podatkovnem nizu se lahko zapišejo z uporabo ubežnic v slogu C, vendar ta " +"lastnost ne more vsebovati ničelnih bajtov. Če vrednost za posamezen profil " +"ni določena (privzeto), se poišče privzeta nastavitev globalne povezave. Če " +"še 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:235 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:203 +#: src/libnmc-setting/settings-docs.h.in:239 msgid "" "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 " @@ -8825,14 +8701,13 @@ msgid "" "[SERVERNAME] . When using the URI syntax, IPv6 addresses must be enclosed in " "square brackets ('[', ']')." msgstr "" -"Niz strežnikov DNS. Vsak strežnik lahko določite kot navaden naslov IP (po " -"želji mu sledi »#« in ime strežnika SNI za DNS prek TLS) ali s sintakso URI. " -"Če je določen kot URI, so podprti naslednji obrazci: dns+udp://ADDRESS[:P " -"ORT], dns+tls://ADDRESS[:P ORT][SERVERNAME] . Pri uporabi sintakse URI " +"Polje strežnikov DNS. Vsak strežnik lahko določite kot navaden naslov IP (po " +"želji mu sledi »#« in ime strežnika SNI za DNS prek TLS) ali s skladnjo URI. " +"Če je določen kot URI, so podprti naslednji obrazci: dns+udp://NASLOV[:" +"VRATA], dns+tls://NASLOV[:VRATA][IMESTREŽNIKA]. Pri uporabi skladnje URI " "morajo biti naslovi IPv6 v oglatih oklepajih (»[', ']')." -#: src/libnmc-setting/settings-docs.h.in:200 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:204 msgid "" "DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The " "currently supported options are \"attempts\", \"debug\", \"edns0\", \"ndots" @@ -8850,23 +8725,22 @@ msgid "" "options\" get merged together." msgstr "" "Možnosti DNS za /etc/resolv.conf, kot je opisano v priročniku resolv." -"conf(5). Trenutno podprte možnosti so »poskusi«, »odpravljanje napak«, " -"»edns0«, »ndots«, »no-aaaa«, »no-check-names«, »no-reload«, »no-tld-query«, " -"»rotate«, »single-request«, »single-request-reopen«, »timeout«, »trust-ad«, " -"»use-vc«. Glejte priročnik resolv.conf(5). Upoštevajte, da obstaja razlika " -"med nenastavljenim (privzetim) seznamom in praznim seznamom. Če želite v " -"nmcli odstraniti nastavitev seznama, nastavite vrednost na »«. Če želite " -"nastaviti prazen seznam, ga nastavite na \" \". Trenutno ima nenastavljeni " -"seznam enak pomen kot prazen seznam. To se lahko v prihodnosti spremeni. " -"Nastavitev »trust-ad« se upošteva le, če profil prispeva imenske strežnike v " -"resolv.conf in če imajo vsi sodelujoči profili omogočeno »trust-ad«. Ko " -"uporabljate vtičnik DNS za predpomnjenje (dnsmasq ali systemd-resolved v " -"NetworkManager.conf), se samodejno dodata \"edns0\" in \"trust-ad\". " -"Veljavni »ipv4.dns-options« in »ipv6.dns-options« se združita." +"conf(5). Trenutno podprte možnosti so »attempts«, »debug«, »edns0«, »ndots«, " +"»no-aaaa«, »no-check-names«, »no-reload«, »no-tld-query«, »rotate«, »single-" +"request«, »single-request-reopen«, »timeout«, »trust-ad«, »use-vc«. Glejte " +"priročnik resolv.conf(5). Upoštevajte, da obstaja razlika med nenastavljenim " +"(privzetim) seznamom in praznim seznamom. Če želite v nmcli odstraniti " +"nastavitev seznama, nastavite vrednost na »«. Če želite nastaviti prazen " +"seznam, ga nastavite na \" \". Trenutno ima nenastavljeni seznam enak pomen " +"kot prazen seznam. To se lahko v prihodnosti spremeni. Nastavitev »trust-ad« " +"se upošteva le, če profil prispeva imenske strežnike v resolv.conf in če " +"imajo vsi sodelujoči profili omogočeno »trust-ad«. Ko uporabljate vtičnik " +"DNS za predpomnjenje (dnsmasq ali systemd-resolved v NetworkManager.conf), " +"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:201 -#: src/libnmc-setting/settings-docs.h.in:237 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:205 +#: src/libnmc-setting/settings-docs.h.in:241 msgid "" "DNS servers priority. The relative priority for DNS servers specified by " "this setting. A lower numerical value is better (higher priority). Negative " @@ -8906,45 +8780,44 @@ msgid "" "of the desired interface are configured." msgstr "" "Prioriteta strežnikov DNS. Relativna prioriteta za strežnike DNS, ki jo " -"določa ta nastavitev. Nižja številčna vrednost je boljša (višja " -"prioriteta). Negativne vrednosti imajo poseben učinek izključitve drugih " -"konfiguracij z večjo številčno prednostno vrednostjo; zato bodo v " -"prisotnosti vsaj ene negativne prioritete uporabljeni samo strežniki DNS iz " -"povezav z najnižjo prioriteto. Če se želite izogniti vsem uhajanjem DNS, " -"nastavite prioriteto profila, ki ga je treba uporabiti, na najbolj negativno " -"vrednost vseh aktivnih profilov povezav. Nič izbere globalno konfigurirano " -"privzeto vrednost. Če slednje manjka ali tudi nič, je privzeto 50 za VPN " -"(vključno z WireGuard) in 100 za druge povezave. Upoštevajte, da je " -"prednostna naloga naročanje nastavitev DNS za več aktivnih povezav. Ne " -"razločuje več strežnikov DNS v istem profilu povezave. Če ima več naprav " -"konfiguracije z enako prednostjo, se najprej upoštevajo VPN-ji, nato naprave " -"z najboljšo privzeto potjo (najnižja meritev) in nato vse druge naprave. Če " -"uporabljate dns=default, bodo strežniki z višjo prioriteto na vrhu resolv." -"conf. Če želite dati prednost določenemu strežniku pred drugim v isti " -"povezavi, jih preprosto določite v želenem vrstnem redu. Upoštevajte, da " -"običajno razreševalnik poskuša imenske strežnike v /etc/resolv.conf v " -"navedenem vrstnem redu, nato pa nadaljuje z naslednjim strežnikom na " -"seznamu, če ne uspe. Glej na primer možnost »vrtenje« nastavitve dns-" -"options. Če obstajajo negativne prioritete DNS, se upoštevajo samo imenski " -"strežniki iz naprav z najnižjo prioriteto. Če uporabljate različico DNS, ki " -"podpira pogojno posredovanje ali razdeljeni DNS (z nastavitvami dns=dnsmasq " -"ali dns=systemd-resolved), se vsaka povezava uporablja za poizvedovanje po " -"domenah na svojem iskalnem seznamu. Iskalne domene določajo, katere imenske " -"strežnike je treba vprašati, prioriteta DNS pa se uporablja za prednostno " -"razvrščanje imenskih strežnikov glede na domeno. Poizvedbe za domene, ki " -"niso na nobenem iskalnem seznamu, so usmerjene prek povezav s posebno domeno " -"z nadomestnim znakom '~., ki se samodejno doda povezavam s privzeto potjo " -"(ali pa jo lahko dodate ročno). Če več povezav določa isto domeno, zmaga " -"tista z najboljšo prioriteto (najnižja številska vrednost). Če je poddomena " -"konfigurirana na drugem vmesniku, bo sprejeta ne glede na prioriteto, razen " -"če ima nadrejena domena na drugem vmesniku negativno prioriteto, zaradi " -"česar je poddomena zasenčena. Z Split DNS se lahko izognete neželenemu " -"uhajanju DNS s pravilno konfiguracijo prioritet DNS in iskalnih domen, tako " -"da so konfigurirani samo imenski strežniki želenega vmesnika." +"določa ta nastavitev. Nižja številčna vrednost je boljša (višja prioriteta). " +"Negativne vrednosti imajo poseben učinek izključitve drugih prilagoditev z " +"večjo številčno prednostno vrednostjo; zato bodo v prisotnosti vsaj ene " +"negativne prioritete uporabljeni samo strežniki DNS iz povezav z najnižjo " +"prioriteto. Če se želite izogniti vsem uhajanjem DNS, nastavite prioriteto " +"profila, ki ga je treba uporabiti, na najbolj negativno vrednost vseh " +"aktivnih profilov povezav. Nič izbere globalno prilagojeno privzeto " +"vrednost. Če slednje manjka ali je tudi nič, je privzeto 50 za VPN (vključno " +"z WireGuard) in 100 za druge povezave. Upoštevajte, da je prednostna naloga " +"naročanje nastavitev DNS za več aktivnih povezav. Ne razločuje več " +"strežnikov DNS v istem profilu povezave. Če ima več naprav prilagoditve z " +"enako prednostjo, se najprej upoštevajo VPN-ji, nato naprave z najboljšo " +"privzeto potjo (najnižja meritev) in nato vse druge naprave. Če uporabljate " +"dns=default, bodo strežniki z višjo prioriteto na vrhu resolv.conf. Če " +"želite dati prednost določenemu strežniku pred drugim v isti povezavi, jih " +"preprosto določite v želenem vrstnem redu. Upoštevajte, da običajno " +"razreševalnik preizkuša imenske strežnike v /etc/resolv.conf v navedenem " +"vrstnem redu, nato pa nadaljuje z naslednjim strežnikom na seznamu, če ne " +"uspe. Glejte npr. možnost »rotate« nastavitve dns-options. Če obstajajo " +"negativne prioritete DNS, se upoštevajo samo imenski strežniki iz naprav z " +"najnižjo prioriteto. Če uporabljate različico DNS, ki podpira pogojno " +"posredovanje ali razdeljeni DNS (z nastavitvami dns=dnsmasq ali dns=systemd-" +"resolved), se vsaka povezava uporablja za poizvedovanje po domenah na svojem " +"iskalnem seznamu. Iskalne domene določajo, katere imenske strežnike je treba " +"vprašati, prioriteta DNS pa se uporablja za prednostno razvrščanje imenskih " +"strežnikov glede na domeno. Poizvedbe za domene, ki niso na nobenem iskalnem " +"seznamu, so usmerjene prek povezav s posebno domeno z nadomestnim znakom " +"'~., ki se samodejno doda povezavam s privzeto potjo (ali pa jo lahko dodate " +"ročno). Če več povezav določa isto domeno, zmaga tista z najboljšo " +"prioriteto (najnižja številska vrednost). Če je poddomena prilagojena na " +"drugem vmesniku, bo sprejeta ne glede na prioriteto, razen če ima nadrejena " +"domena na drugem vmesniku negativno prioriteto, zaradi česar je poddomena v " +"senci. S Split DNS se lahko izognete neželenemu uhajanju DNS s pravilno " +"prilagoditvijo prioritet DNS in iskalnih domen, tako da so prilagojeni samo " +"imenski strežniki želenega vmesnika." -#: src/libnmc-setting/settings-docs.h.in:202 -#: src/libnmc-setting/settings-docs.h.in:238 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:206 +#: src/libnmc-setting/settings-docs.h.in:242 msgid "" "List of DNS search domains. Domains starting with a tilde ('~') are " "considered 'routing' domains and are used only to decide the interface over " @@ -8962,18 +8835,18 @@ msgstr "" "Seznam domen iskanja DNS. Domene, ki se začnejo s tildo ('~'), se štejejo za " "'usmerjajoče' domene in se uporabljajo samo za odločanje o vmesniku, preko " "katerega je treba posredovati poizvedbo; Ne uporabljajo se za dokončanje " -"nekvalificiranih imen gostiteljev. Če uporabljate vtičnik DNS, ki podpira " +"nekvalificiranih imen gostiteljev. Če uporabljate vstavek DNS, ki podpira " "pogojno posredovanje ali razdeljeni DNS, iskalne domene določajo, katere " "imenske strežnike želite poizvedovati. Zaradi tega se vedenje razlikuje od " "zagona z navadnim /etc/resolv.conf. Če želite več informacij, glejte tudi " "nastavitev prioritete dns. Ko je nastavljen na profilu, ki je omogočil tudi " "DHCP, se samodejno prejeti iskalni seznam DNS (možnost 119 za DHCPv4 in " "možnost 24 za DHCPv6) združi z ročnim seznamom. To lahko preprečite z " -"nastavitvijo »ignore-auto-dns«. Upoštevajte, da če ni konfigurirano nobeno " +"nastavitvijo »ignore-auto-dns«. Upoštevajte, da če ni prilagojeno nobeno " "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:239 +#: src/libnmc-setting/settings-docs.h.in:207 +#: src/libnmc-setting/settings-docs.h.in:243 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 " @@ -8997,9 +8870,8 @@ msgstr "" "\" (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 +#: src/libnmc-setting/settings-docs.h.in:208 +#: src/libnmc-setting/settings-docs.h.in:244 msgid "" "The gateway associated with this configuration. This is only meaningful if " "\"addresses\" is also set. Setting the gateway causes NetworkManager to " @@ -9010,18 +8882,17 @@ msgid "" "configures for WireGuard interfaces, so usually it should not be set in that " "case. See \"ip4-auto-default-route\"." msgstr "" -"Prehod, povezan s to konfiguracijo. To je smiselno le, če je nastavljen tudi " -"\"naslovi\". Če nastavite prehod, NetworkManager konfigurira standardno " -"privzeto pot s prehodom kot naslednji skok. To se prezre, če je nastavljena " -"možnost »nikoli privzeto«. Druga možnost je, da privzeto pot konfigurirate " -"eksplicitno z ročno potjo in /0 kot dolžino predpone. Upoštevajte, da je " -"prehod običajno v konfliktu s usmerjanjem, ki ga NetworkManager konfigurira " -"za vmesnike WireGuard, zato ga običajno ne bi smeli nastaviti v tem primeru. " -"Glejte »ip4-auto-default-route«." +"Prehod, povezan s to prilagoditvijo. To je smiselno le, če je nastavljen " +"tudi »addresses«. Če nastavite prehod, NetworkManager prilagodi standardno " +"privzeto pot s prehodom kot naslednji preskok. To se prezre, če je " +"nastavljena možnost »never-default«. Druga možnost je, da privzeto pot " +"prilagodite eksplicitno z ročno potjo in /0 kot dolžino predpone. " +"Upoštevajte, da je prehod običajno v konfliktu s usmerjanjem, ki ga " +"NetworkManager prilagodi 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:205 -#: src/libnmc-setting/settings-docs.h.in:241 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:209 +#: src/libnmc-setting/settings-docs.h.in:245 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 " @@ -9029,24 +8900,22 @@ msgid "" "if any, are used." msgstr "" "Ko je »method« nastavljen na »auto« in ta lastnost na TRUE, se samodejno " -"konfigurirani imenski strežniki in iskalne domene prezrejo in uporabijo se " +"prilagojeni imenski strežniki in iskalne domene prezrejo in uporabijo se " "samo imenski strežniki in iskalne domene, določene v lastnostih »dns« in " "»dns-search«, če obstajajo." -#: src/libnmc-setting/settings-docs.h.in:206 -#: src/libnmc-setting/settings-docs.h.in:242 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:210 +#: src/libnmc-setting/settings-docs.h.in:246 msgid "" "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." msgstr "" -"Ko je »metoda« nastavljena na »samodejno« in ta lastnost na TRUE, se " -"samodejno konfigurirane poti prezrejo in uporabijo se samo poti, določene v " -"lastnosti »routes«, če obstajajo." +"Ko je »method« nastavljena na »auto« in ta lastnost na TRUE, se samodejno " +"prilagojene poti prezrejo in uporabijo se samo poti, določene v lastnosti " +"»routes«, če obstajajo." -#: src/libnmc-setting/settings-docs.h.in:207 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:211 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) " @@ -9058,18 +8927,19 @@ msgid "" "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 "" -"Omogočite in onemogočite lokalno konfiguracijo povezave IPv4 neodvisno od " -"konfiguracije ipv4.method. To omogoča, da se poleg drugih naslovov, kot so " -"naslovi, ki so ročno konfigurirani ali pridobljeni iz strežnika DHCP, " -"pridobi tudi lokalni naslov povezave (169.254.x.y/16). Če je nastavljena na " -"»samodejno«, je vrednost odvisna od »ipv4.method«. Ko je nastavljena na " -"»privzeto«, upošteva privzeto globalno povezavo, preden se vrne na " -"»samodejno«. Upoštevajte, da če je »ipv4.method« »onemogočen«, je tudi " -"lokalno naslavljanje povezave vedno onemogočeno. Privzeto je »privzeto«." +"Omogočite in onemogočite krajevno prilagoditev povezave IPv4 neodvisno od " +"prilagoditve ipv4.method. To omogoča, da se poleg drugih naslovov, kot so " +"naslovi, ki so ročno prilagojeni ali pridobljeni iz strežnika DHCP, pridobi " +"tudi krajevni naslov povezave (169.254.x.y/16). Če je nastavljena na »auto«, " +"je vrednost odvisna od »ipv4.method«. Ko je nastavljena na »default«, " +"upošteva privzeto globalno povezavo, preden se vrne na »auto«. Upoštevajte, " +"da če je »ipv4.method« »disabled«, je tudi krajevno naslavljanje povezave " +"vedno onemogočeno. Privzeto je »default«. Od različice 1.52 naprej, ko je " +"nastavljeno na »fallback«, se krajevni naslov povezave pridobi, če ni " +"nastavljen noben drug naslov IPv4." -#: src/libnmc-setting/settings-docs.h.in:208 -#: src/libnmc-setting/settings-docs.h.in:244 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:212 +#: src/libnmc-setting/settings-docs.h.in:248 msgid "" "If TRUE, allow overall network configuration to proceed even if the " "configuration specified by this property times out. Note that at least one " @@ -9078,21 +8948,20 @@ msgid "" "the NMSettingIP4Config allows the overall network configuration to succeed " "if IPv4 configuration fails but IPv6 configuration completes successfully." msgstr "" -"Če je TRUE, dovolite, da se celotna konfiguracija omrežja nadaljuje, tudi če " -"poteče časovna omejitev konfiguracije, ki jo določa ta lastnost. " -"Upoštevajte, da mora biti vsaj ena konfiguracija IP-ja uspešna, ali pa " -"celotna konfiguracija omrežja še vedno ne bo uspešna. Na primer, v " -"omrežjih, ki uporabljajo samo IPv6, nastavitev te lastnosti na TRUE v " -"NMSettingIP4Config omogoča, da je celotna konfiguracija omrežja uspešna, če " -"konfiguracija IPv4 ne uspe, vendar je konfiguracija IPv6 uspešno dokončana." +"Če je TRUE, dovolite, da se celotna prilagoditev omrežja nadaljuje, tudi če " +"poteče časovna omejitev prilagoditve, ki jo določa ta lastnost. Upoštevajte, " +"da mora biti vsaj ena prilagoditev IP-ja uspešna, ali pa celotna " +"prilagoditev omrežja še vedno ne bo uspešna. Primer: v omrežjih, ki " +"uporabljajo samo IPv6, nastavitev te lastnosti na TRUE v NMSettingIP4Config " +"omogoča, da je celotna prilagoditev omrežja uspešna, če prilagoditev IPv4 ne " +"uspe, vendar je prilagoditev IPv6 uspešno dokončana." -#: src/libnmc-setting/settings-docs.h.in:209 +#: src/libnmc-setting/settings-docs.h.in:213 msgid "The IPv4 connection method." msgstr "Način povezave IPv4." -#: src/libnmc-setting/settings-docs.h.in:210 -#: src/libnmc-setting/settings-docs.h.in:247 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:214 +#: src/libnmc-setting/settings-docs.h.in:251 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." @@ -9100,19 +8969,17 @@ 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:211 -#: src/libnmc-setting/settings-docs.h.in:249 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:215 +#: src/libnmc-setting/settings-docs.h.in:253 msgid "" "Connections will default to keep the autogenerated priority 0 local rule " "unless this setting is set to TRUE." msgstr "" -"Povezave bodo privzeto ohranile samodejno ustvarjeno lokalno pravilo s " +"Povezave bodo privzeto ohranile samodejno ustvarjeno krajevno pravilo s " "prednostjo 0, razen če je ta nastavitev nastavljena na TRUE." -#: src/libnmc-setting/settings-docs.h.in:212 -#: src/libnmc-setting/settings-docs.h.in:250 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:216 +#: src/libnmc-setting/settings-docs.h.in:254 msgid "" "The minimum time interval in milliseconds for which dynamic IP configuration " "should be tried before the connection succeeds. This property is useful for " @@ -9126,21 +8993,20 @@ msgid "" "that no required timeout is present, -1 means the default value (either " "configuration ipvx.required-timeout override or zero)." msgstr "" -"Minimalni časovni interval v milisekundah, v katerem je treba preskusiti " -"konfiguracijo dinamičnega IP-ja, preden je povezava uspešna. Ta lastnost je " -"uporabna, če sta na primer omogočena IPv4 in IPv6 in jima dovoli neuspeh. " +"Najmanjši časovni interval v milisekundah, v katerem je treba preskusiti " +"prilagoditev dinamičnega IP-ja, preden je povezava uspešna. Ta lastnost je " +"uporabna, če sta npr. omogočena IPv4 in IPv6 in jima je dovoljen neuspeh. " "Običajno povezava uspe takoj, ko se ena od dveh družin naslovov zaključi; z " "nastavitvijo zahtevane časovne omejitve za npr. IPv4 lahko zagotovimo, da " "tudi če je IP6 uspešen pred IPv4, NetworkManager počaka nekaj časa na IPv4, " "preden povezava postane aktivna. Če je »may-fail« za isto družino naslovov " "FALSE, ta lastnost nima učinka, saj mora NetworkManager počakati na popolno " "časovno omejitev DHCP. Ničelna vrednost pomeni, da ni zahtevane časovne " -"omejitve, -1 pomeni privzeto vrednost (bodisi konfiguracija ipvx.required-" +"omejitve, -1 pomeni privzeto vrednost (bodisi prilagoditev ipvx.required-" "timeout override ali nič)." -#: src/libnmc-setting/settings-docs.h.in:213 -#: src/libnmc-setting/settings-docs.h.in:251 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:217 +#: src/libnmc-setting/settings-docs.h.in:255 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 " @@ -9159,9 +9025,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:214 -#: src/libnmc-setting/settings-docs.h.in:252 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:218 +#: src/libnmc-setting/settings-docs.h.in:256 msgid "" "Enable policy routing (source routing) and set the routing table used when " "adding routes. This affects all routes, including device-routes, IPv4LL, " @@ -9177,24 +9042,23 @@ msgid "" "This is to preserve backward compatibility for users who manage routing " "tables outside of NetworkManager." msgstr "" -"Omogočite usmerjanje pravilnika (izvorno usmerjanje) in nastavite " +"Omogočite usmerjanje po pravilih (izvorno usmerjanje) in nastavite " "usmerjevalno tabelo, ki se uporablja pri dodajanju poti. To vpliva na vse " "poti, vključno s poti naprav, IPv4LL, DHCP, SLAAC, privzetimi potmi in " "statičnimi potmi. Vendar upoštevajte, da lahko statične poti posamezno " "prepišejo nastavitev tako, da izrecno določijo usmerjevalno tabelo, ki ni " "ničelna. Če nastavitev tabele ostane na nič, jo lahko prepišete prek " -"globalne konfiguracije. Če je lastnost enaka nič tudi po uporabi globalne " -"konfiguracijske vrednosti, je usmerjanje pravilnika onemogočeno za družino " +"globalne prilagoditve. Če je lastnost enaka nič tudi po uporabi globalne " +"prilagoditvene vrednosti, je usmerjanje pravilnika onemogočeno za družino " "naslovov te povezave. Usmerjanje pravilnika onemogočeno pomeni, da bo " "NetworkManager dodal vse poti v glavno tabelo (razen statičnih poti, ki " -"izrecno konfigurirajo drugo tabelo). Poleg tega NetworkManager ne bo " -"izbrisal nobenih tujih poti iz tabel, razen glavne tabele. S tem želite " -"ohraniti združljivost za nazaj za uporabnike, ki upravljajo usmerjevalne " -"tabele zunaj upravitelja omrežja." +"izrecno prilagajajo drugo tabelo). Poleg tega NetworkManager ne bo izbrisal " +"nobenih tujih poti iz tabel, razen glavne tabele. S tem želite ohraniti " +"združljivost za nazaj za uporabnike, ki upravljajo usmerjevalne tabele zunaj " +"upravitelja omrežja." -#: src/libnmc-setting/settings-docs.h.in:215 -#: src/libnmc-setting/settings-docs.h.in:253 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:219 +#: src/libnmc-setting/settings-docs.h.in:257 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 " @@ -9206,14 +9070,13 @@ msgid "" msgstr "" "Ali želite dodati poti za strežnike DNS. Ko je omogočeno, NetworkManager " "doda pot za vsak strežnik DNS, ki je povezan s to povezavo, bodisi statično " -"(določeno v profilu povezave) ali dinamično (na primer pridobljeno prek " -"DHCP). Pot zagotavlja, da je strežnik DNS dosežen prek tega vmesnika. Če je " -"nastavljena na »privzeto« (-1), se uporabi vrednost iz globalne " -"konfiguracije; Če ni določena nobena globalna privzeta nastavitev, je ta " -"funkcija onemogočena." +"(določeno v profilu povezave) ali dinamično (npr. pridobljeno prek DHCP). " +"Pot zagotavlja, da je strežnik DNS dosežen prek tega vmesnika. Če je " +"nastavljeno na »default« (-1), se uporabi vrednost iz globalne prilagoditve; " +"če ni določena nobena globalna privzeta nastavitev, je ta funkcija " +"onemogočena." -#: src/libnmc-setting/settings-docs.h.in:216 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:220 msgid "" "A list of IPv4 destination addresses, prefix length, optional IPv4 next hop " "addresses, optional route metric, optional attribute. The valid syntax is: " @@ -9221,19 +9084,17 @@ msgid "" "example \"192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24\"." msgstr "" "Seznam ciljnih naslovov IPv4, dolžina predpone, izbirni naslovi naslednjega " -"skoka IPv4, izbirna meritev poti, izbirni atribut. Veljavna sintaksa je: " -"\"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\"." +"poskoka IPv4, izbirna meritev poti, izbirni atribut. Veljavna skladnja je: " +"\"ip[/predponna] [naslednji-skok] [metrika] [atribut=vred]... [,ip[/" +"predpona]...]\". Primer: \"192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24\"." -#: src/libnmc-setting/settings-docs.h.in:217 -#: src/libnmc-setting/settings-docs.h.in:255 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:221 +#: src/libnmc-setting/settings-docs.h.in:259 msgid "A comma separated list of routing rules for policy routing." -msgstr "Seznam pravil usmerjanja za usmerjanje, ločen z vejico." +msgstr "Z vejico ločen seznam pravil usmerjanja za pravilnik o usmerjanju." -#: src/libnmc-setting/settings-docs.h.in:218 -#: src/libnmc-setting/settings-docs.h.in:256 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:222 +#: src/libnmc-setting/settings-docs.h.in:260 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 " @@ -9243,13 +9104,12 @@ msgid "" msgstr "" "S to možnostjo lahko določite čas zakupa DHCP po meri za način povezave v " "skupni rabi v sekundah. Vrednost mora biti število med 120 in 31536000 (eno " -"leto) Če ta možnost ni določena, se uporabi 3600 (ena ura). Posebne " +"leto). Če ta možnost ni določena, se uporabi 3600 (ena ura). Posebne " "vrednosti so 0 za privzeto vrednost 1 ure in 2147483647 (MAXINT32) za " -"neskončni čas najema." +"neskončni čas zakupa." -#: src/libnmc-setting/settings-docs.h.in:219 -#: src/libnmc-setting/settings-docs.h.in:257 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:223 +#: src/libnmc-setting/settings-docs.h.in:261 msgid "" "This option allows you to specify a custom DHCP range for the shared " "connection method. The value is expected to be in `," @@ -9264,17 +9124,16 @@ msgid "" "length of 24." msgstr "" "S to možnostjo lahko določite obseg DHCP po meri za način povezave v skupni " -"rabi. Pričakuje se, da bo vrednost v obliki »,«. " -"Obseg mora biti del omrežja, ki ga nastavi možnost ipv4.address, in ne sme " -"vsebovati omrežnega naslova ali naslova oddajanja. Če ta možnost ni " -"določena, bo obseg DHCP samodejno določen na podlagi naslova vmesnika. Obseg " -"bo izbran tako, da bo sosednji naslovu vmesnika, pred ali za njim, pri čemer " -"bo zaželen večji možni razpon. Obseg bo prilagojen tako, da zapolni " -"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." +"rabi. Pričakuje se, da bo vrednost v obliki »," +"«. Obseg mora biti del omrežja, ki ga nastavi možnost ipv4." +"address, in ne sme vsebovati omrežnega naslova ali naslova oddajanja. Če ta " +"možnost ni določena, bo obseg DHCP samodejno določen na podlagi naslova " +"vmesnika. Obseg bo izbran tako, da bo sosednji naslovu vmesnika, pred ali za " +"njim, pri čemer bo zaželen večji možni razpon. Obseg bo prilagojen tako, da " +"zapolni 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:220 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:224 msgid "" "Configure method for creating the IPv6 interface identifier of addresses " "with RFC4862 IPv6 Stateless Address Autoconfiguration and Link Local " @@ -9302,33 +9161,32 @@ msgid "" "property and it does not affect the temporary addresses configured with this " "option." msgstr "" -"Konfigurirajte način za ustvarjanje identifikatorja vmesnika IPv6 naslovov z " -"RFC4862 samokonfiguracijo naslovov brez stanja IPv6 in lokalnimi naslovi " -"povezave. Dovoljene vrednosti so: \"eui64\" (0), \"stabilna zasebnost\" (1), " -"\"privzeto\" (3) ali \"privzeto ali eui64\" (2). Če je lastnost nastavljena " -"na »eui64«, bodo naslovi ustvarjeni z uporabo žetona vmesnika, ki izhaja iz " +"Način prilagajanja za ustvarjanje identifikatorja vmesnika IPv6 naslovov z " +"RFC4862 samonastavitvijo naslovov brez stanja IPv6 in krajevnimi naslovi " +"povezave. Dovoljene vrednosti so: \"eui64\" (0), \"stable-privacy\" (1), " +"\"default\" (3) ali \"default-or-eui64\" (2). Če je lastnost nastavljena na " +"»eui64«, bodo naslovi ustvarjeni z uporabo žetona vmesnika, ki izhaja iz " "naslova strojne opreme. Zaradi tega gostiteljski del naslova ostane " "konstanten, kar omogoča sledenje prisotnosti gostitelja, ko spremeni " "omrežja. Naslov se spremeni, ko zamenjate strojno opremo vmesnika. Če je " "zaznan podvojen naslov, tudi ni nadomestnega naslova za ustvarjanje drugega " -"naslova. Ko je konfiguriran, se namesto naslova MAC uporabi »ipv6.token« za " -"ustvarjanje naslovov za samodejno konfiguracijo brez stanja. Če je lastnost " -"nastavljena na »stabilna zasebnost«, se identifikator vmesnika ustvari, kot " -"je določeno v RFC7217. To deluje tako, da zgoščuje ključ, specifičen za " -"gostitelja (glejte priročnik za NetworkManager(8)), ime vmesnika, lastnost " -"povezave »connection.stable-id« in predpono naslova. To izboljša zasebnost, " -"saj oteži uporabo naslova za sledenje prisotnosti gostitelja, naslov pa je " -"stabilen, ko zamenjate strojno opremo omrežnega vmesnika. Posebni vrednosti " -"»default« in »default-or-eui64« se vrneta na privzeto globalno povezavo, kot " -"je dokumentirano v priročniku NetworkManager.conf(5). Če globalna privzeta " -"vrednost ni določena, je nadomestna vrednost »stabilna zasebnost« oziroma " -"»eui64«. Če ni določeno, je pri ustvarjanju novega profila privzeto " -"»privzeto«. Upoštevajte, da se ta nastavitev razlikuje od razširitev " -"zasebnosti, ki jih konfigurira lastnost »ip6-privacy«, in ne vpliva na " -"začasne naslove, konfigurirane s to možnostjo." +"naslova. Ko je prilagojen, se namesto naslova MAC uporabi »ipv6.token« za " +"ustvarjanje naslovov za samodejno prilagoditev brez stanja. Če je lastnost " +"nastavljena na »stable-privacy«, se identifikator vmesnika ustvari, kot je " +"določeno v RFC7217. To deluje tako, da izdela kontrolno vsoto ključa, " +"specifično za gostitelja (glejte priročnik za NetworkManager(8)), ime " +"vmesnika, lastnost povezave »connection.stable-id« in predpono naslova. To " +"izboljša zasebnost, saj oteži uporabo naslova za sledenje prisotnosti " +"gostitelja, naslov pa je stabilen, ko zamenjate strojno opremo omrežnega " +"vmesnika. Posebni vrednosti »default« in »default-or-eui64« se vrneta na " +"privzeto globalno povezavo, kot je dokumentirano v priročniku NetworkManager." +"conf(5). Če globalna privzeta vrednost ni določena, je nadomestna vrednost " +"»stable-privacy« oziroma »eui64«. Če ni določeno, je pri ustvarjanju novega " +"profila privzeto »default«. Upoštevajte, da se ta nastavitev razlikuje od " +"razširitev zasebnosti, ki jih prilagodi lastnost »ip6-privacy«, in ne vpliva " +"na začasne naslove, prilagojene s to možnostjo." -#: src/libnmc-setting/settings-docs.h.in:221 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:225 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:" @@ -9337,13 +9195,12 @@ msgid "" "with IPv6 source address selection (RFC 6724, section 5)." msgstr "" "Seznam naslovov IPv6 in dolžina njihovih predpon. Več naslovov je mogoče " -"ločiti z vejico. Na primer \"2001:db8:85a3::8a2e:370:7334/64, 2001:" +"ločiti z vejico. Primer: \"2001:db8:85a3::8a2e:370:7334/64, 2001:" "db8:85a3::5/64\". Naslovi so navedeni v padajoči prioriteti, kar pomeni, da " "bo prvi naslov primarni naslov. To lahko spremeni izbiro izvornega naslova " "IPv6 (RFC 6724, razdelek 5)." -#: src/libnmc-setting/settings-docs.h.in:225 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:229 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 " @@ -9373,31 +9230,31 @@ msgid "" msgstr "" "Niz, ki vsebuje edinstveni identifikator DHCPv6 (DUID), ki ga odjemalec dhcp " "uporablja za identifikacijo strežnikov DHCPv6 (RFC 3315). DUID se nahaja v " -"možnosti Identifikator stranke. Če je lastnost šestnajstni niz ('aa:bb:cc'), " -"se interpretira kot binarni DUID in izpolni kot neprozorna vrednost v " -"možnosti Identifikator odjemalca. Posebna vrednost »zakup« bo pridobila " -"DUID, ki je bil prej uporabljen, iz najemne datoteke, ki pripada povezavi. " -"Če ni najden noben DUID in je »dhclient« konfiguriran odjemalec dhcp, se " -"DUID poišče v sistemski datoteki zakupa dhclient. Če še vedno ni mogoče " -"najti DUID ali je uporabljen drug odjemalec dhcp, bo na podlagi ID-ja stroja " -"ustvarjen globalni in trajni DUID-UUID (RFC 6355). Posebni vrednosti »llt« " -"in »ll« bosta ustvarili DUID tipa LLT ali LL (glejte RFC 3315) na podlagi " -"trenutnega naslova MAC naprave. Če želite poskusiti zagotoviti stabilen DUID-" -"LLT, bo časovno polje vsebovalo stalni časovni žig, ki se uporablja globalno " -"(za vse profile) in ostane na disku. Posebne vrednosti »stable-llt«, »stable-" -"ll« in »stable-uuid« bodo ustvarile DUID ustreznega tipa, ki izhaja iz " -"stabilnega ID-ja povezave in edinstvenega ključa za gostitelja. Morda boste " -"želeli vključiti specifikacijo »${DEVICE}« ali »${MAC}« v stable-id, če se " -"ta profil aktivira na več napravah. Torej, naslov povezovalne plasti »stable-" -"ll« in »stable-llt« bo ustvarjen naslov, ki izhaja iz stabilnega id-ja. " -"Časovna vrednost DUID-LLT v možnosti »stable-llt« bo izbrana med statičnim " -"časovnim razponom treh let (zgornja meja intervala je enak konstantni " -"časovni žig, ki se uporablja v »llt«). Ko lastnost ni nastavljena, se " -"uporabi globalna vrednost, ki je na voljo za »ipv6.dhcp-duid«. Če globalna " -"vrednost ni navedena, se predpostavi privzeta vrednost »zakup«." +"možnosti Identifikatorja stranke ( Client Identifier). Če je lastnost " +"šestnajstiški niz ('aa:bb:cc'), se interpretira kot binarni DUID in izpolni " +"kot prekrivna vrednost v možnosti identifikatorja odjemalca. Posebna " +"vrednost »lease« pridobi DUID, ki je bil prej uporabljen, iz najemne " +"datoteke, ki pripada povezavi. Če ni najden noben DUID in je »dhclient« " +"prilagojeni odjemalec dhcp, se DUID poišče v sistemski datoteki zakupa " +"dhclient. Če še vedno ni mogoče najti DUID ali je uporabljen drug odjemalec " +"dhcp, bo na podlagi ID-ja stroja ustvarjen globalni in trajni DUID-UUID (RFC " +"6355). Posebni vrednosti »llt« in »ll« bosta ustvarili DUID vrste LLT ali LL " +"(glejte RFC 3315) na podlagi trenutnega naslova MAC naprave. Če želite " +"poskusiti zagotoviti stabilen DUID-LLT, bo časovno polje vsebovalo stalni " +"časovni žig, ki se uporablja globalno (za vse profile) in ostane na disku. " +"Posebne vrednosti »stable-llt«, »stable-ll« in »stable-uuid« bodo ustvarile " +"DUID ustreznega tipa, ki izhaja iz stabilnega ID-ja povezave in edinstvenega " +"ključa za gostitelja. Morda boste želeli vključiti specifikacijo »${DEVICE}« " +"ali »${MAC}« v stable-id, če se ta profil aktivira na več napravah. Torej, " +"naslov povezovalne plasti »stable-ll« in »stable-llt« bo ustvarjen naslov, " +"ki izhaja iz stabilnega id-ja. Časovna vrednost DUID-LLT v možnosti »stable-" +"llt« bo izbrana med statičnim časovnim razponom treh let (zgornja meja " +"intervala je enak konstantni časovni žig, ki se uporablja v »llt«). Ko " +"lastnost ni nastavljena, se uporabi globalna vrednost, ki je na voljo za " +"»ipv6.dhcp-duid«. Če globalna vrednost ni navedena, se predpostavi privzeta " +"vrednost »lease«." -#: src/libnmc-setting/settings-docs.h.in:229 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:233 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) " @@ -9410,8 +9267,7 @@ msgstr "" "predpone brez predpone, nastavite naslovni del na ničelni naslov (na primer " "»::/60«)." -#: src/libnmc-setting/settings-docs.h.in:236 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:240 msgid "" "DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The " "currently supported options are \"attempts\", \"debug\", \"edns0\", \"ndots" @@ -9430,23 +9286,23 @@ msgid "" "options\" get merged together." msgstr "" "Možnosti DNS za /etc/resolv.conf, kot je opisano v priročniku resolv." -"conf(5). Trenutno podprte možnosti so »poskusi«, »debug«, »edns0«, »ndots«, " -"»no-aaaa«, »no-check-names«, »no-reload«, »no-tld-query«, »rotate«, »single-" -"request«, »single-request-reopen«, »timeout«, »trust-ad«, »use-vc« in " -"»inet6«, »ip6-bytestring«, »ip6-dotint«, »no-ip6-dotint«. Glejte priročnik " -"resolv.conf(5). Upoštevajte, da obstaja razlika med nenastavljenim " -"(privzetim) seznamom in praznim seznamom. Če želite v nmcli odstraniti " -"nastavitev seznama, nastavite vrednost na »«. Če želite nastaviti prazen " -"seznam, ga nastavite na \" \". Trenutno ima nenastavljeni seznam enak pomen " -"kot prazen seznam. To se lahko v prihodnosti spremeni. Nastavitev »trust-ad« " -"se upošteva le, če profil prispeva imenske strežnike v resolv.conf in če " -"imajo vsi sodelujoči profili omogočeno »trust-ad«. Ko uporabljate vtičnik " -"DNS za predpomnjenje (dnsmasq ali systemd-resolved v NetworkManager.conf), " -"se samodejno dodata \"edns0\" in \"trust-ad\". Veljavni »ipv4.dns-options« " -"in »ipv6.dns-options« se združita." +"conf(5). Trenutno podprte možnosti so »poskusi«, \"attempts\", \"debug\", " +"\"edns0\", \"ndots\", \"no-aaaa\", \"no-check-names\", \"no-reload\", \"no-" +"tld-query\", \"rotate\", \"single-request\", \"single-request-reopen\", " +"\"timeout\", \"trust-ad\", \"use-vc\" in \"inet6\", \"ip6-bytestring\", " +"\"ip6-dotint\", \"no-ip6-dotint\". Glejte priročnik resolv.conf(5). " +"Upoštevajte, da obstaja razlika med nenastavljenim (privzetim) seznamom in " +"praznim seznamom. Če želite v nmcli odstraniti nastavitev seznama, nastavite " +"vrednost na \"\". Če želite nastaviti prazen seznam, ga nastavite na \" \". " +"Trenutno ima nenastavljeni seznam enak pomen kot prazen seznam. To se lahko " +"v prihodnosti spremeni. Nastavitev »trust-ad« se upošteva le, če profil " +"prispeva imenske strežnike v resolv.conf in če imajo vsi sodelujoči profili " +"omogočeno »trust-ad«. Ko uporabljate vtičnik DNS za predpomnjenje (dnsmasq " +"ali systemd-resolved v NetworkManager.conf), 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:243 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:247 msgid "" "Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If " "enabled, it makes the kernel generate a temporary IPv6 address in addition " @@ -9461,26 +9317,25 @@ msgid "" "can be enabled with the \"addr-gen-mode\" property's \"stable-privacy\" " "setting as another way of avoiding host tracking with IPv6 addresses." msgstr "" -"Konfigurirajte razširitve zasebnosti IPv6 za SLAAC, kot je opisano v " -"RFC4941. Če je omogočeno, jedro poleg javnega naslova ustvari začasni " -"naslov IPv6, ki ga ustvari naslov MAC prek spremenjenega EUI-64. To " -"povečuje zasebnost, vendar lahko po drugi strani povzroči težave v nekaterih " -"aplikacijah. Dovoljene vrednosti so: -1: neznano, 0: onemogočeno, 1: " -"omogočeno (raje javni naslov), 2: omogočeno (raje začasni naslovi). Če je " -"nastavitev za posamezno povezavo nastavljena na »-1« (privzeto), se vrne na " -"globalno konfiguracijo »ipv6.ip6-privacy«. Če tudi ni določena ali je " -"nastavljena na »-1«, se nadomestno preberete »/proc/sys/net/ipv6/conf/" -"default/use_tempaddr«. Upoštevajte, da se ta nastavitev razlikuje od " -"naslovov stabilne zasebnosti, ki jih lahko omogočite z nastavitvijo " -"»stabilne zasebnosti« lastnosti »addr-gen-mode« kot še en način za " -"izogibanje sledenju gostiteljev z naslovi IPv6." +"Prilagodite razširitve zasebnosti IPv6 za SLAAC, kot je opisano v RFC4941. " +"Če je omogočeno, jedro poleg javnega naslova ustvari začasni naslov IPv6, ki " +"ga ustvari naslov MAC prek spremenjenega EUI-64. To povečuje zasebnost, " +"vendar lahko po drugi strani povzroči težave v nekaterih aplikacijah. " +"Dovoljene vrednosti so: -1: neznano, 0: onemogočeno, 1: omogočeno (raje " +"javni naslov), 2: omogočeno (raje začasni naslovi). Če je nastavitev za " +"posamezno povezavo nastavljena na »-1« (privzeto), se vrne na globalno " +"prilagoditev »ipv6.ip6-privacy«. Če tudi ni določena ali je nastavljena na " +"»-1«, se nadomestno preberete »/proc/sys/net/ipv6/conf/default/" +"use_tempaddr«. Upoštevajte, da se ta nastavitev razlikuje od naslovov " +"stabilne zasebnosti, ki jih lahko omogočite z nastavitvijo »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:245 +#: src/libnmc-setting/settings-docs.h.in:249 msgid "The IPv6 connection method." msgstr "Način povezave IPv6." -#: src/libnmc-setting/settings-docs.h.in:246 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:250 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-" @@ -9492,25 +9347,24 @@ 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:248 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:252 msgid "" "A timeout for waiting Router Advertisements in seconds. If zero (the " "default), a globally configured default is used. If still unspecified, the " "timeout depends on the sysctl settings of the device. Set to 2147483647 " "(MAXINT32) for infinity." msgstr "" -"Časovna omejitev za čakanje oglasov usmerjevalnika v nekaj sekundah. Če je " -"nič (privzeto), se uporabi globalno konfigurirana privzeta nastavitev. Če še " -"vedno ni določeno, je časovna omejitev odvisna od nastavitev sysctl naprave. " -"Nastavite na 2147483647 (MAXINT32) za neskončnost." +"Časovna omejitev za čakanje oglasov usmerjevalnika (angl. Router " +"Advertisements) v sekundah. Če je nič (privzeto), se uporabi globalno " +"prilagojena privzeta nastavitev. Če še 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:254 +#: src/libnmc-setting/settings-docs.h.in:258 msgid "Array of IP routes." msgstr "Polje poti IP." -#: src/libnmc-setting/settings-docs.h.in:258 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:262 msgid "" "The preferred lifetime of autogenerated temporary addresses, in seconds. " "Having a per-connection setting set to \"0\" (default) means fallback to " @@ -9520,12 +9374,11 @@ msgid "" msgstr "" "Prednostna življenjska doba samodejno ustvarjenih začasnih naslovov v " "sekundah. Če je nastavitev na povezavo nastavljena na »0« (privzeto), se " -"vrne na nastavitev globalne konfiguracije »ipv6.temp-preferred-lifetime«\". " -"Če tudi ni določena ali je nastavljena na »0«, se nadomestno prebere »/proc/" -"sys/net/ipv6/conf/default/temp_prefered_lft«." +"vrne na nastavitev globalne prilagoditve »ipv6.temp-preferred-lifetime«. Č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:259 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:263 msgid "" "The valid lifetime of autogenerated temporary addresses, in seconds. Having " "a per-connection setting set to \"0\" (default) means fallback to global " @@ -9534,13 +9387,12 @@ msgid "" "default/temp_valid_lft\"." msgstr "" "Veljavna življenjska doba samodejno ustvarjenih začasnih naslovov v " -"sekundah. Če je nastavitev za povezavo nastavljena na »0« (privzeto), se " -"vrne na nastavitev »ipv6.temp-valid-lifetime« globalne konfiguracije. Če " +"sekundah. Če je nastavitev na povezavo nastavljena na »0« (privzeto), se " +"vrne na nastavitev »ipv6.temp-valid-lifetime« globalnih prilagoditev. Če " "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:260 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:264 msgid "" "Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 " "tokenized interface identifiers. Useful with eui64 addr-gen-mode. When set, " @@ -9548,14 +9400,13 @@ msgid "" "address. This only applies to addresses from stateless autoconfiguration, " "not to IPv6 link local addresses." msgstr "" -"Konfigurirajte žeton za identifikatorje tokeniziranega vmesnika IPv6 draft-" -"chown-6man-tokenised-ipv6-identifiers-02. Uporabno z eui64 addr-gen-mode. Ko " -"je nastavljen, se žeton uporablja kot identifikator vmesnika IPv6 namesto " -"naslova strojne opreme. To velja samo za naslove iz samodejne konfiguracije " -"brez stanja in ne za lokalne naslove povezave IPv6." +"Prilagodite žeton za identifikatorje žetonskega vmesnika draft-chown-6man-" +"tokenised-ipv6-identifiers-02 IPv6. Uporabno z eui64 addr-gen-mode. Ko je " +"nastavljeno, se žeton uporablja kot identifikator vmesnika IPv6 namesto " +"naslova strojne opreme. To velja samo za naslove iz samodejne prilagoditve " +"brez stanja in ne za krajevne naslove povezave IPv6." -#: src/libnmc-setting/settings-docs.h.in:261 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:265 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, " @@ -9565,8 +9416,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:262 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:266 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 " @@ -9578,8 +9428,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:263 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:267 msgid "" "The flow label to assign to tunnel packets. This property applies only to " "IPv6 tunnels." @@ -9587,8 +9436,7 @@ msgstr "" "Oznaka poteka, ki jo želite dodeliti paketom tunela. Ta lastnost velja samo " "za tunele IPv6." -#: src/libnmc-setting/settings-docs.h.in:264 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:268 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." @@ -9596,7 +9444,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:265 +#: src/libnmc-setting/settings-docs.h.in:269 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." @@ -9605,7 +9453,7 @@ msgstr "" "določene načine tunela (GRE, IP6GRE). Če je prazen, se ne uporabi noben " "ključ." -#: src/libnmc-setting/settings-docs.h.in:266 +#: src/libnmc-setting/settings-docs.h.in:270 msgid "" "The local endpoint of the tunnel; the value can be empty, otherwise it must " "contain an IPv4 or IPv6 address." @@ -9613,8 +9461,7 @@ msgstr "" "Krajevna končna točka tunela; vrednost je lahko prazna, sicer mora vsebovati " "naslov IPv4 ali IPv6." -#: src/libnmc-setting/settings-docs.h.in:267 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:271 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 " @@ -9624,16 +9471,15 @@ msgstr "" "(4), vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap (10) in " "ip6gretap (11)" -#: src/libnmc-setting/settings-docs.h.in:268 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:272 msgid "" "If non-zero, only transmit packets of the specified size or smaller, " "breaking larger packets up into multiple fragments." msgstr "" -"Če ni nič, prenašajte samo pakete določene velikosti ali manjše, večje " -"pakete pa razdelite na več fragmentov." +"Če ni nič, prenaša samo pakete določene velikosti ali manjše, večje pakete " +"pa razdeli na več fragmentov." -#: src/libnmc-setting/settings-docs.h.in:269 +#: src/libnmc-setting/settings-docs.h.in:273 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." @@ -9642,8 +9488,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:270 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:274 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 " @@ -9653,42 +9498,38 @@ msgstr "" "na katerega bo nova naprava vezana, tako da bodo tunelirani paketi usmerjeni " "samo prek tega vmesnika." -#: src/libnmc-setting/settings-docs.h.in:271 +#: src/libnmc-setting/settings-docs.h.in:275 msgid "Whether to enable Path MTU Discovery on this tunnel." msgstr "Ali želite omogočiti odkrivanje poti MTU v tem tunelu." -#: src/libnmc-setting/settings-docs.h.in:272 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:276 msgid "" "The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 " "address." msgstr "" "Oddaljena končna točka predora; vrednost mora vsebovati naslov IPv4 ali IPv6." -#: src/libnmc-setting/settings-docs.h.in:273 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:277 msgid "" "The type of service (IPv4) or traffic class (IPv6) field to be set on " "tunneled packets." msgstr "" -"Polje »Vrsta storitve (IPv4) ali »Prometni razred« (IPv6), ki ga je treba " -"nastaviti za pakete s tuneliranim tunelom." +"Polje vrste storitve (IPv4) ali prometnega razreda (IPv6), ki ga je treba " +"nastaviti za tunelske pakete." -#: src/libnmc-setting/settings-docs.h.in:274 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:278 msgid "" "The TTL to assign to tunneled packets. 0 is a special value meaning that " "packets inherit the TTL value." msgstr "" -"Življenjska doba, ki jo želite dodeliti tuneliranim paketom. 0 je posebna " -"vrednost, kar pomeni, da paketi podedujejo vrednost življenjske dobe." +"TTL, ki jo želite dodeliti tunelskim paketom. 0 je posebna vrednost, kar " +"pomeni, da paketi podedujejo vrednost TTL." -#: src/libnmc-setting/settings-docs.h.in:275 +#: src/libnmc-setting/settings-docs.h.in:279 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:276 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:280 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 " @@ -9696,48 +9537,44 @@ msgid "" "\"mac-address\" property." msgstr "" "Če je navedeno, določa ime nadrejenega vmesnika ali UUID nadrejene povezave, " -"iz katerega naj se ustvari ta vmesnik VLAN. Če ta lastnost ni določena, " -"mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-" -"address«." +"iz katerega naj se ustvari ta vmesnik VLAN. Če ta lastnost ni določena, mora " +"povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-address«." -#: src/libnmc-setting/settings-docs.h.in:277 +#: src/libnmc-setting/settings-docs.h.in:281 msgid "Whether the interface should be put in private mode." msgstr "Ali je treba vmesnik postaviti v zasebni način." -#: src/libnmc-setting/settings-docs.h.in:278 +#: src/libnmc-setting/settings-docs.h.in:282 msgid "Whether the interface should be put in VEPA mode." msgstr "Ali je treba vmesnik postaviti v način VEPA." -#: src/libnmc-setting/settings-docs.h.in:279 +#: src/libnmc-setting/settings-docs.h.in:283 msgid "Whether the transmitted traffic must be encrypted." msgstr "Ali mora biti preneseni promet šifriran." -#: src/libnmc-setting/settings-docs.h.in:280 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:284 msgid "" "The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement. " "Must be a string of 32 hexadecimal characters." msgstr "" -"CAK (ključ za povezovanje povezljivosti) za sporazum o ključu MACsec. Mora " -"biti niz 32 šestnajstiških znakov." +"Vnaprej deljeni CAK (Connectivity Association Key) za sporazum o ključu " +"MACsec. Mora biti niz 32 šestnajstiških znakov." -#: src/libnmc-setting/settings-docs.h.in:281 +#: src/libnmc-setting/settings-docs.h.in:285 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:282 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:286 msgid "" "The pre-shared CKN (Connectivity-association Key Name) for MACsec Key " "Agreement. Must be a string of hexadecimal characters with a even length " "between 2 and 64." msgstr "" -"Predhodno deljeni CKN (Connectivity-association Key Name) za sporazum o " +"Vnnaprej deljeni CKN (Connectivity-association Key Name) za sporazum o " "ključu MACsec. Mora biti niz šestnajstiških znakov s sodo dolžino med 2 in " "64." -#: src/libnmc-setting/settings-docs.h.in:283 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:287 msgid "" "Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key " "Agreement) is obtained." @@ -9745,8 +9582,7 @@ msgstr "" "Določa, kako se pridobi CAK (Connectivity Association Key) za MKA (MACsec " "Key Agreement)." -#: src/libnmc-setting/settings-docs.h.in:284 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:288 msgid "" "Specifies the MACsec offload mode. \"off\" (0) disables MACsec offload. \"phy" "\" (1) and \"mac\" (2) request offload respectively to the PHY or to the " @@ -9756,14 +9592,13 @@ msgid "" "\" (0)." msgstr "" "Določa način razbremenitve MACsec. »off« (0) onemogoči razbremenitev MACsec. " -"\"PHY\" (1) in \"MAC\" (2) zahtevata preklop na PHY oziroma MAC; Če izbrani " -"način ni na voljo, povezava ne bo uspela. »privzeto« (-1) uporablja globalno " -"privzeto vrednost, določeno v konfiguraciji NetworkManagerja; Če ni določena " +"»phy« (1) in »mac« (2) zahtevata preklop na PHY oziroma MAC; če izbrani " +"način ni na voljo, povezava ne bo uspela. »default« (-1) uporablja globalno " +"privzeto vrednost, določeno v prilagoditvi NetworkManager; če ni določena " "nobena globalna privzeta nastavitev, je vgrajena privzeta nastavitev " -"»IZKLOPLJENO« (0)." +"»off« (0)." -#: src/libnmc-setting/settings-docs.h.in:285 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:289 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 " @@ -9771,31 +9606,31 @@ msgid "" "\"mac-address\" property." msgstr "" "Če je navedeno, določa ime nadrejenega vmesnika ali UUID nadrejene povezave, " -"iz katerega naj se ustvari ta vmesnik MACSEC. Če ta lastnost ni določena, " +"iz katerega naj se ustvari ta vmesnik MACSEC. Če ta lastnost ni določena, " "mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-" "address«." -#: src/libnmc-setting/settings-docs.h.in:286 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:290 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." +msgstr "" +"Komponenta vrat SCI (identifikator varnega kanala, angl. Secure Channel " +"Identifier), med 1 in 65534." -#: src/libnmc-setting/settings-docs.h.in:287 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:291 msgid "" "Specifies whether the SCI (Secure Channel Identifier) is included in every " "packet." msgstr "" -"Določa, ali je SCI (identifikator varnega kanala) vključen v vsak paket." +"Določa, ali je SCI (identifikator varnega kanala, angl. Secure Channel " +"Identifier) vključen v vsak paket." -#: src/libnmc-setting/settings-docs.h.in:288 +#: src/libnmc-setting/settings-docs.h.in:292 msgid "Specifies the validation mode for incoming frames." msgstr "Določa način preverjanja veljavnosti za dohodne okvirje." -#: src/libnmc-setting/settings-docs.h.in:289 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:293 msgid "" "The macvlan mode, which specifies the communication mechanism between " "multiple macvlans on the same lower device." @@ -9803,8 +9638,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:290 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:294 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 " @@ -9812,23 +9646,22 @@ msgid "" "\"mac-address\" property." msgstr "" "Če je navedeno, določa ime nadrejenega vmesnika ali UUID nadrejene povezave, " -"iz katerega naj se ustvari ta vmesnik MAC-VLAN. Če ta lastnost ni določena, " +"iz katere naj se ustvari ta vmesnik MAC-VLAN. Če ta lastnost ni določena, " "mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-" "address«." -#: src/libnmc-setting/settings-docs.h.in:291 +#: src/libnmc-setting/settings-docs.h.in:295 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:292 +#: src/libnmc-setting/settings-docs.h.in:296 msgid "Whether the interface should be a MACVTAP." msgstr "Ali naj bo vmesnik MACVTAP." -#: src/libnmc-setting/settings-docs.h.in:293 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:297 msgid "" "A list of driver names to match. Each element is a shell wildcard pattern. " "See NMSettingMatch:interface-name for how special characters '|', '&', '!' " @@ -9836,11 +9669,11 @@ msgid "" "pattern." msgstr "" "Seznam imen gonilnikov, ki se ujemajo. Vsak element je vzorec nadomestnega " -"znaka lupine. Glej NMSettingMatch:interface-name za uporabo posebnih znakov " -"'|', '&', '!' in '\\' za izbirne in obvezne ujemanja in obrnitev vzorca." +"znaka lupine. Glejte NMSettingMatch:interface-name za uporabo posebnih " +"znakov '|', '&', '!' in '\\' za izbirne in obvezna ujemanja in preobrnitev " +"vzorca." -#: src/libnmc-setting/settings-docs.h.in:294 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:298 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 " @@ -9866,11 +9699,10 @@ msgstr "" "obrne tudi s klicajem (!) med simbolom cevi (ali ampersandom) in pred " "vzorcem. Upoštevajte, da je \"!foo\" bližnjica za obvezno ujemanje \"&!foo" "\". Končno lahko na začetku elementa (za izbirnimi posebnimi znaki) " -"uporabite poševnico, da se izognete začetku vzorca. Na primer, \"&\\!a\" je " +"uporabite poševnico, da se izognete začetku vzorca. Primer: \"&\\!a\" je " "obvezno ujemanje za dobesedno \"!a\"." -#: src/libnmc-setting/settings-docs.h.in:295 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:299 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 " @@ -9888,12 +9720,11 @@ msgstr "" "beseda ali dodelitev (tj. dve besedi, ki ju združuje »=«). V prvem primeru " "se v ukazni vrstici jedra išče beseda, ki je prikazana takšna, kot je, ali " "kot leva stran naloge. V slednjem primeru se natančna dodelitev išče z " -"ujemanjem desne in leve strani. Vzorci nadomestnih znakov niso podprti. Glej " -"NMSettingMatch:interface-name za uporabo posebnih znakov '|', '&', '!' in " -"'\\' za izbirne in obvezne ujemanja in obrnitev ujemanja." +"ujemanjem desne in leve strani. Vzorci nadomestnih znakov niso podprti. " +"Glejte NMSettingMatch:interface-name za uporabo posebnih znakov '|', '&', " +"'!' in '\\' za izbirne in obvezne ujemanja in obrnitev ujemanja." -#: src/libnmc-setting/settings-docs.h.in:296 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:300 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 " @@ -9911,63 +9742,60 @@ msgstr "" "predstavlja topološko trajno pot naprave. Običajno vsebuje niz podsistema " "(pci, usb, platforma itd.) in identifikator, specifičen za podsistem. Za " "naprave PCI ima pot obliko »pci-$domain:$bus:$device.$function«, kjer je " -"vsaka spremenljivka šestnajstiška vrednost; Na primer \"PCI-0000:0A:00.0\". " +"vsaka spremenljivka šestnajstiška vrednost; primer: \"PCI-0000:0A:00.0\". " "Pot naprave lahko dobite z »udevadm info /sys/class/net/$dev | grep ID_PATH=" "\" ali s pogledom na lastnost »path«, ki jo izvozi NetworkManager (»nmcli -f " "general.path device show $dev«). Vsak element seznama je vzorec nadomestnega " -"znaka lupine. Glej NMSettingMatch:interface-name za uporabo posebnih znakov " -"'|', '&', '!' in '\\' za izbirne in obvezne ujemanja in obrnitev vzorca." +"znaka lupine. Glejte NMSettingMatch:interface-name za uporabo posebnih " +"znakov '|', '&', '!' in '\\' za izbirne in obvezne ujemanja in obrnitev " +"vzorca." -#: src/libnmc-setting/settings-docs.h.in:297 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:301 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." +"Kanal, na katerem se nahaja omrežje mreževine, ki se mu je treba pridružiti." -#: src/libnmc-setting/settings-docs.h.in:298 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:302 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 " "request. This is currently only implemented by dhclient DHCP plugin." msgstr "" -"Anycast DHCP MAC naslov, ki se uporablja pri zahtevi za naslov IP prek DHCP. " +"Naslov MAC Anycast DHCP, ki se uporablja pri zahtevi za naslov IP prek DHCP. " "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:299 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:303 msgid "SSID of the mesh network to join." -msgstr "SSID mrežnega omrežja, ki se mu želite pridružiti." +msgstr "SSID omrežja omreževine, ki se mu želite pridružiti." -#: src/libnmc-setting/settings-docs.h.in:300 +#: src/libnmc-setting/settings-docs.h.in:304 msgid "The data path type. One of \"system\", \"netdev\" or empty." msgstr "Vrsta podatkovne poti. Ena izmed \"sistem\", \"netdev\" ali prazno." -#: src/libnmc-setting/settings-docs.h.in:301 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:305 msgid "The bridge failure mode. One of \"secure\", \"standalone\" or empty." -msgstr "Način okvare mostu. Eden od \"varnih\", \"samostojnih\" ali praznih." +msgstr "" +"Način okvare mostu. Eden izmed \"secure\", \"standalone\" ali prazna " +"vrednost." -#: src/libnmc-setting/settings-docs.h.in:302 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:306 msgid "Enable or disable multicast snooping." -msgstr "Omogočite ali onemogočite vohljanje z več oddajami." +msgstr "Omogočite ali onemogočite vohljanje za večvrstno oddajanje." -#: src/libnmc-setting/settings-docs.h.in:303 +#: src/libnmc-setting/settings-docs.h.in:307 msgid "Enable or disable RSTP." msgstr "Omogočite ali onemogočite RSTP." -#: src/libnmc-setting/settings-docs.h.in:304 +#: src/libnmc-setting/settings-docs.h.in:308 msgid "Enable or disable STP." msgstr "Omogočite ali onemogočite STP." -#: src/libnmc-setting/settings-docs.h.in:305 +#: src/libnmc-setting/settings-docs.h.in:309 msgid "Open vSwitch DPDK device arguments." msgstr "Odprite argumente naprave vSwitch DPDK." -#: src/libnmc-setting/settings-docs.h.in:306 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:310 msgid "" "Configures the Link State Change (LSC) detection mode for the OVS DPDK " "interface. When set to \"ignore\" (-1), NetworkManager doesn't change the " @@ -9976,23 +9804,20 @@ msgid "" "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), " +"Change) za vmesnik OVS DPDK. Če je nastavljen na »ignore« (-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." +"»enabled« (1) omogoča prekinitve. »disabled« (0) onemogoči prekinitve in " +"tako nastavi vmesnik v način anketiranja." -#: src/libnmc-setting/settings-docs.h.in:307 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:311 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." msgstr "" -"Odprite vSwitch DPDK število čakalnih vrst rx. Privzeto je nič, kar pomeni, " -"da parameter v OVS ostane nedoločen in učinkovito konfigurira eno čakalno " -"vrsto." +"Število čakalnih vrst rx Open vSwitch DPDK. Privzeto je nič, kar pomeni, da " +"parameter v OVS ostane nedoločen in učinkovito prilagodi eno čakalno vrsto." -#: src/libnmc-setting/settings-docs.h.in:308 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:312 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 " @@ -10001,11 +9826,10 @@ msgid "" msgstr "" "Velikost čakalne vrste rx (število deskriptorjev rx) za vrata DPDK. Med 1 in " "4096 mora biti nič ali moč 2 in jo podpira strojna oprema. Privzeto je nič, " -"kar pomeni, da parameter v OVS ostane nedoločen in učinkovito konfigurira " -"2048 deskriptorjev." +"kar pomeni, da parameter v OVS ostane nedoločen in učinkovito prilagodi 2048 " +"deskriptorjev." -#: src/libnmc-setting/settings-docs.h.in:309 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:313 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 " @@ -10014,11 +9838,10 @@ msgid "" msgstr "" "Velikost čakalne vrste tx (število deskriptorjev tx) za vrata DPDK. Med 1 in " "4096 mora biti nič ali moč 2 in jo podpira strojna oprema. Privzeto je nič, " -"kar pomeni, da parameter v OVS ostane nedoločen in učinkovito konfigurira " -"2048 deskriptorjev." +"kar pomeni, da parameter v OVS ostane nedoločen in učinkovito prilagodi 2048 " +"deskriptorjev." -#: src/libnmc-setting/settings-docs.h.in:310 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:314 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 " @@ -10026,208 +9849,191 @@ msgid "" "processing and the rest of the network. OpenFlow switches connect logically " "to each other via their OpenFlow ports." msgstr "" -"Odprite številko vrat vSwitch openflow. Privzeto je nič, kar pomeni, da " -"številka vrat ne bo določena in jo bodo naključno izbrali ovs. Vrata " -"OpenFlow so omrežni vmesniki za prenos paketov med obdelavo OpenFlow in " -"preostalim omrežjem. Stikala OpenFlow se med seboj logično povezujejo prek " -"svojih vrat OpenFlow." +"Številka oprtih vrat vSwitch openflow. Privzeto je nič, kar pomeni, da " +"številka vrat ne bo določena in jo bodo naključno izbral ovs. Vrata OpenFlow " +"so omrežni vmesniki za prenos paketov med obdelavo OpenFlow in preostalim " +"omrežjem. Stikala OpenFlow se med seboj logično povezujejo prek svojih vrat " +"OpenFlow." -#: src/libnmc-setting/settings-docs.h.in:311 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:315 msgid "" "The interface type. Either \"internal\", \"system\", \"patch\", \"dpdk\", or " "empty." msgstr "" -"Vrsta vmesnika. Ali \"notranji\", \"sistem\", \"popravek\", \"dpdk\" ali " -"prazen." +"Vrsta vmesnika. Ima vrednost »internal«, »system«, »patch«, »dpdk« ali je " +"prazna." -#: src/libnmc-setting/settings-docs.h.in:312 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:316 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." msgstr "" -"Določa ime vmesnika za drugo stran popravka. Popravek na drugi strani mora " -"tudi nastaviti ta vmesnik kot enakovreden." +"Določa ime vmesnika za drugo stran pretičnega polja. Pretik na drugi strani " +"mora tudi nastaviti ta vmesnik kot enakovreden." -#: src/libnmc-setting/settings-docs.h.in:313 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:317 msgid "The time port must be inactive in order to be considered down." -msgstr "Časovna vrata morajo biti neaktivna, da se štejejo za navzdol." +msgstr "Časovna vrata morajo biti neaktivna, da se štejejo zaprta." -#: src/libnmc-setting/settings-docs.h.in:314 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:318 msgid "" "Bonding mode. One of \"active-backup\", \"balance-slb\", or \"balance-tcp\"." msgstr "" -"Način lepljenja. Ena od \"active-backup\", \"balance-slb\" ali \"balance-tcp" +"Način vezave. Ena izmed \"active-backup\", \"balance-slb\" ali \"balance-tcp" "\"." -#: src/libnmc-setting/settings-docs.h.in:315 +#: src/libnmc-setting/settings-docs.h.in:319 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:316 +#: src/libnmc-setting/settings-docs.h.in:320 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:317 +#: src/libnmc-setting/settings-docs.h.in:321 msgid "The VLAN tag in the range 0-4095." msgstr "Oznaka VLAN v območju 0-4095." -#: src/libnmc-setting/settings-docs.h.in:318 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:322 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\". " "If it is empty, the port trunks all VLANs." msgstr "" -"Seznam obsegov VLAN, ki jih ta vrata dežujejo. Lastnost je veljavna samo za " -"vrata z načinom »trunk«, »native-tagged« ali »native-untagged port«. Če je " -"prazen, vrata premaknejo vse VLAN-ove." +"Seznam obsegov VLAN, ki jih ta vrata zaobjamejo. Lastnost je veljavna samo " +"za vrata z načinom »trunk«, »native-tagged« ali »native-untagged port«. Če " +"je prazen, vrata zaobjamejo vse VLAN-ove." -#: src/libnmc-setting/settings-docs.h.in:319 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:323 msgid "" "The VLAN mode. One of \"access\", \"native-tagged\", \"native-untagged\", " "\"trunk\", \"dot1q-tunnel\" or unset." msgstr "" -"Način VLAN. Eden od »dostop«, »izvorno-označen«, »izvorno-neoznačen«, " -"»prtljažnik«, »dot1q-tunnel« ali unset." +"Način VLAN. Eden izmed »access«, »native-tagged«, »native-untagged«, " +"»trunk«, »dot1q-tunnel« ali ni nastavljen." -#: src/libnmc-setting/settings-docs.h.in:320 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:324 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 " "the speed." msgstr "" -"Če ni nič, naročite pppd, da nastavi serijska vrata na določeno hitrost " -"prenosa. Ta vrednost mora biti običajno enaka 0, da samodejno izberete " -"hitrost." +"Če ni nič, naroči pppd, da nastavi serijska vrata na določeno hitrost " +"prenosa. Ta vrednost mora biti običajno enaka 0, da samodejno izbere hitrost." -#: src/libnmc-setting/settings-docs.h.in:321 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:325 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 " "FALSE." msgstr "" -"Če je TRUE, določite, da mora pppd nastaviti serijska vrata za uporabo " -"strojnega nadzora pretoka s signali RTS in CTS. Ta vrednost mora biti " +"Če je TRUE, določi, da mora pppd nastaviti serijska vrata za uporabo " +"strojnega nadzora pretoka s signali RTS in CTS. Ta vrednost mora biti " "običajno nastavljena na FALSE." -#: src/libnmc-setting/settings-docs.h.in:322 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:326 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 " "\"lcp-echo-interval\" property must also be set to a non-zero value if this " "property is used." msgstr "" -"Če ni nič, naročite pppd, da domneva, da povezava z enakovrednim ni uspela, " -"če enakovrednik ne odgovori na določeno število odmevnih zahtev LCP. " -"Lastnost »lcp-echo-interval« mora biti prav tako nastavljena na vrednost, ki " -"ni nič, če je uporabljena ta lastnost." +"Če ni nič, naroči pppd, da domneva, da povezava z enakovrednim ni uspela, če " +"vrstnik ne odgovori na določeno število odmevnih zahtev LCP. 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:323 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:327 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 " "will respond to echo requests and some will not, and it is not possible to " "autodetect this." msgstr "" -"Če ni nič, naročite pppd, da vsakih n sekund pošlje LCP echo-request frame " -"peeru (kjer je n določena vrednost). Upoštevajte, da se bodo nekateri člani " -"PPP odzvali na zahteve odmeva, nekateri pa ne, in tega ni mogoče samodejno " -"zaznati." +"Če ni nič, naročite pppd, da vsakih n sekund pošlje okvir LCP echo-request " +"vrstniku (kjer je n določena vrednost). Upoštevajte, da se bodo nekateri " +"člani PPP odzvali na zahteve odziva, nekateri pa ne, in tega ni mogoče " +"samodejno zaznati." -#: src/libnmc-setting/settings-docs.h.in:324 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:328 msgid "" "If TRUE, stateful MPPE is used. See pppd documentation for more information " "on stateful MPPE." msgstr "" -"Če je TRUE, se uporabi stateful MPPE. Za več informacij o stanju MPPE " -"glejte dokumentacijo pppd." +"Če je TRUE, se uporabi stanjski MPPE. Za več informacij o stanju MPPE glejte " +"dokumentacijo pppd." -#: src/libnmc-setting/settings-docs.h.in:325 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:329 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 " "16384." 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." +"Če ni nič, naroči 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:326 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:330 msgid "" "If non-zero, instruct pppd to send packets no larger than the specified size." msgstr "" -"Če ni nič, naročite pppd, da pošlje pakete, ki niso večji od določene " +"Če ni nič, naroči pppd, da pošlje pakete, ki niso večji od določene " "velikosti." -#: src/libnmc-setting/settings-docs.h.in:327 +#: src/libnmc-setting/settings-docs.h.in:331 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:328 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:332 msgid "" "If TRUE, do not require the other side (usually the PPP server) to " "authenticate itself to the client. If FALSE, require authentication from " "the remote side. In almost all cases, this should be TRUE." msgstr "" -"Če je TRUE, ne zahtevajte, da se druga stran (običajno strežnik PPP) preveri " -"pristnost pri odjemalcu. Če je FALSE, zahtevajte preverjanje pristnosti z " -"oddaljene strani. V skoraj vseh primerih bi to moralo biti RES." +"Če je TRUE, ne zahteva, da druga stran (običajno strežnik PPP) preveri " +"pristnost pri odjemalcu. Če je FALSE, zahtevaj preverjanje pristnosti z " +"oddaljene strani. V skoraj vseh primerih bi to moralo biti TRUE." -#: src/libnmc-setting/settings-docs.h.in:329 +#: src/libnmc-setting/settings-docs.h.in:333 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:330 +#: src/libnmc-setting/settings-docs.h.in:334 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:331 +#: src/libnmc-setting/settings-docs.h.in:335 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:332 +#: src/libnmc-setting/settings-docs.h.in:336 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:333 +#: src/libnmc-setting/settings-docs.h.in:337 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:334 +#: src/libnmc-setting/settings-docs.h.in:338 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:335 +#: src/libnmc-setting/settings-docs.h.in:339 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:336 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:340 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 " "will fail. Note that MPPE is not used on mobile broadband connections." msgstr "" "Če je TRUE, bo za sejo PPP zahtevano šifriranje MPPE (Microsoftovo " -"šifriranje od točke do točke). Če 64-bitni ali 128-bitni MPPE ni na voljo, " -"seja ne bo uspela. Upoštevajte, da se MPPE ne uporablja za mobilne " +"šifriranje od točke do točke). Če 64-bitni ali 128-bitni MPPE ni na voljo, " +"seja ne bo uspela. Upoštevajte, da se MPPE ne uporablja za mobilne " "širokopasovne povezave." -#: src/libnmc-setting/settings-docs.h.in:337 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:341 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 " @@ -10237,24 +10043,22 @@ 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:338 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:342 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 " "activated on the interface specified in \"interface-name\" of " "NMSettingConnection." msgstr "" -"Če je navedeno, določa ime nadrejenega vmesnika, na katerem naj se ustvari " -"ta povezava PPPoE. Če ta lastnost ni določena, se povezava aktivira na " +"Če je podano, določa ime nadrejenega vmesnika, na katerem naj se ustvari 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:339 +#: src/libnmc-setting/settings-docs.h.in:343 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:341 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:345 msgid "" "If specified, instruct PPPoE to only initiate sessions with access " "concentrators that provide the specified service. For most providers, this " @@ -10262,28 +10066,25 @@ msgid "" "concentrators or a specific service is known to be required." msgstr "" "Če je določeno, naročite PPPoE, da sproži seje samo s koncentratorji " -"dostopa, ki zagotavljajo določeno storitev. Za večino ponudnikov je treba " -"to pustiti prazno. Zahteva se le, če obstaja več koncentratorjev dostopa " -"ali če je znano, da je potrebna določena storitev." +"dostopa, ki zagotavljajo določeno storitev. Za večino ponudnikov je treba 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:342 +#: src/libnmc-setting/settings-docs.h.in:346 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:343 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:347 msgid "Whether the proxy configuration is for browser only." -msgstr "Ali je konfiguracija strežnika proxy samo za brskalnik." +msgstr "Ali je prilagoditev posrednega strežnika samo za brskalnik." -#: src/libnmc-setting/settings-docs.h.in:344 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:348 msgid "Method for proxy configuration, Default is \"none\" (0)" -msgstr "Metoda za konfiguracijo proxyja, privzeta vrednost je »none« (0)" +msgstr "Metoda za prilagoditev posredovanja, privzeta vrednost je »none« (0)" -#: src/libnmc-setting/settings-docs.h.in:345 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:349 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 " @@ -10291,51 +10092,47 @@ msgid "" "of the file and set the script. The prefixes \"file://\" and \"js://\" are " "supported to explicitly differentiate between the two." msgstr "" -"Scenarij PAC. V profilu mora biti to koda JavaScript, kodirana z UTF-8, ki " +"Skript PAC. V profilu mora biti to koda JavaScript, kodirana z UTF-8, ki " "določa funkcijo FindProxyForURL(). Pri nastavitvi lastnosti v nmcli je " "sprejeto tudi ime datoteke. V tem primeru bo nmcli prebral vsebino datoteke " "in nastavil skript. Predponi \"file://\" in \"js://\" sta podprti za izrecno " "razlikovanje med obema." -#: src/libnmc-setting/settings-docs.h.in:346 +#: src/libnmc-setting/settings-docs.h.in:350 msgid "PAC URL for obtaining PAC file." msgstr "URL PAC za pridobitev datoteke PAC." -#: src/libnmc-setting/settings-docs.h.in:347 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:351 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 " "speed settings and use the highest available speed." msgstr "" -"Hitrost za komunikacijo prek serijskih vrat. Upoštevajte, da ta vrednost " +"Hitrost za komunikacijo prek serijskih vrat. Upoštevajte, da ta vrednost " "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:348 +#: src/libnmc-setting/settings-docs.h.in:352 msgid "Byte-width of the serial communication. The 8 in \"8n1\" for example." msgstr "Bajtna širina serijske komunikacije. Primer: 8 v »8n1«." -#: src/libnmc-setting/settings-docs.h.in:349 +#: src/libnmc-setting/settings-docs.h.in:353 msgid "Parity setting of the serial port." msgstr "Nastavitev paritete serijskih vrat." -#: src/libnmc-setting/settings-docs.h.in:350 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:354 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:351 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:355 msgid "" "Number of stop bits for communication on the serial port. Either 1 or 2. " "The 1 in \"8n1\" for example." msgstr "" -"Število stop bitov za komunikacijo na serijskih vratih. Bodisi 1 ali 2. Na " -"primer 1 v \"8n1\"." +"Število stop bitov za komunikacijo na serijskih vratih. Bodisi 1 ali 2. " +"Primer 1 v \"8n1\"." -#: src/libnmc-setting/settings-docs.h.in:352 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:356 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 " @@ -10350,11 +10147,10 @@ msgstr "" "združljiv gonilnik in če bo to uspelo, bo za vsak VF ustvarjen nov omrežni " "vmesnik. Če je nastavljena na »false« (0), VF-ji ne bodo zahtevani in zanje " "ne bodo ustvarjeni nobeni omrežni vmesniki. Če je nastavljena na " -"»privzeto« (-1), se uporabi globalna privzeta vrednost; v primeru, da " -"globalna privzeta vrednost ni določena, se domneva, da je »resnična« (1)." +"»default« (-1), se uporabi globalna privzeta vrednost; v primeru, da " +"globalna privzeta vrednost ni določena, se domneva, da je »true« (1)." -#: src/libnmc-setting/settings-docs.h.in:353 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:357 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 " @@ -10366,8 +10162,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:354 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:358 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 " @@ -10376,15 +10171,14 @@ msgid "" "than the PF. If set to \"preserve\" (-1) (default) the eswitch inline-mode " "won't be modified by NetworkManager." msgstr "" -"Izberite način eswitch v vrstici naprave. Nekateri HW potrebujejo gonilnik " -"VF, da del glav paketov postavi na deskriptor TX, tako da lahko e-stikalo " -"pravilno ujema in krmiljo. Trenutno je podprt samo za naprave PCI PF in " -"samo, če se naprava eswitch upravlja z istega naslova PCI kot PF. Če je " -"nastavljena na »ohrani« (-1) (privzeto), NetworkManager ne bo spremenil " +"Izberite vrstični način eswitch naprave. Nekateri HW potrebujejo gonilnik " +"VF, da del glav paketov postavi na deskriptor TX, tako da se lahko e-stikalo " +"pravilno ujema in krmili. Trenutno je podprt samo za naprave PCI PF in samo, " +"če se naprava eswitch upravlja z istega naslova PCI kot PF. Če je " +"nastavljena na »preserve« (-1) (privzeto), NetworkManager ne bo spremenil " "načina vključenega stikala eswitch." -#: src/libnmc-setting/settings-docs.h.in:355 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:359 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 " @@ -10393,10 +10187,10 @@ msgid "" msgstr "" "Izberite način eswitch naprave. Trenutno je podprt samo za naprave PCI PF in " "samo, če se naprava eswitch upravlja z istega naslova PCI kot PF. Če je " -"nastavljena na »ohrani« (-1) (privzeto), NetworkManager ne bo spremenil " +"nastavljena na »preserve« (-1) (privzeto), NetworkManager ne bo spremenil " "načina eswitch." -#: src/libnmc-setting/settings-docs.h.in:356 +#: src/libnmc-setting/settings-docs.h.in:360 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 " @@ -10420,8 +10214,7 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:361 msgid "" "The total number of virtual functions to create. Note that when the sriov " "setting is present NetworkManager enforces the number of virtual functions " @@ -10435,8 +10228,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:358 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:362 msgid "" "Array of virtual function descriptors. Each VF descriptor is a dictionary " "mapping attribute names to GVariant values. The 'index' entry is mandatory " @@ -10449,18 +10241,17 @@ msgid "" "form \"ID[.PRIORITY[.PROTO]]\". PROTO can be either 'q' for 802.1Q (the " "default) or 'ad' for 802.1ad." msgstr "" -"Niz deskriptorjev navideznih funkcij. Vsak deskriptor VF je slovar " -"preslikava imen atributov na vrednosti GVariant. Vnos \"indeksa\" je obvezen " -"za vsak VF. Ko je VF predstavljen kot niz, je v obliki: \"INDEX " -"[ATTR=VALUE[ ATTR=VALUE]...]\". Na primer: »2 mac=00:11:22:33:44:55 spoof-" +"Polje deskriptorjev navideznih funkcij. Vsak deskriptor VF je slovar " +"preslikav imen atributov na vrednosti GVariant. Vnos \"index\" je obvezen za " +"vsak VF. Ko je VF predstavljen kot niz, je v obliki: \"INDEX " +"[ATR=VREDNOST[ ATR=VREDNOST]…]«. Primer: »2 mac=00:11:22:33:44:55 spoof-" "check=true«. Več VF je mogoče določiti z vejico kot ločilom. Trenutno so " "podprti naslednji atributi: mac, spoof-check, trust, min-tx-rate, max-tx-" "rate, vlans. Atribut »vlans« je predstavljen kot seznam deskriptorjev VLAN, " -"ločen s podpičjem, kjer ima vsak deskriptor obliko »ID[. PREDNOSTNA NALOGA[. " +"ločen s podpičjem, kjer ima vsak deskriptor obliko »ID[.PREDNOST[. " "PROTO]]\". PROTO je lahko 'q' za 802.1Q (privzeto) ali 'ad' za 802.1ad." -#: src/libnmc-setting/settings-docs.h.in:359 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:363 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, " @@ -10476,8 +10267,7 @@ msgstr "" "\"tc\" ni prisotna, se NetworkManager ne dotakne qdiskov, ki so prisotni na " "vmesniku." -#: src/libnmc-setting/settings-docs.h.in:360 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:364 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, " @@ -10489,22 +10279,20 @@ 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:361 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:365 msgid "" "The JSON configuration for the team network interface. The property should " "contain raw JSON configuration data suitable for teamd, because the value is " "passed directly to teamd. If not specified, the default configuration is " "used. See man teamd.conf for the format details." msgstr "" -"Konfiguracija JSON za omrežni vmesnik skupine. Lastnost mora vsebovati " -"neobdelane konfiguracijske podatke JSON, primerne za skupino, ker se " -"vrednost posreduje neposredno skupini. Če ni določeno, se uporabi privzeta " -"konfiguracija. Za podrobnosti o formatu glejte man teamd.conf." +"Prilagoditev JSON za omrežni vmesnik skupine Lastnost mora vsebovati " +"neobdelane prilagoditvene podatke JSON, primerne za skupino, ker se vrednost " +"posreduje neposredno skupini. Če ni določeno, se uporabi privzeta " +"prilagoditev. Za podrobnosti o zapisu glejte man teamd.conf." -#: src/libnmc-setting/settings-docs.h.in:362 -#: src/libnmc-setting/settings-docs.h.in:380 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:366 +#: src/libnmc-setting/settings-docs.h.in:384 msgid "" "Link watchers configuration for the connection: each link watcher is defined " "by a dictionary, whose keys depend upon the selected link watcher. Available " @@ -10515,32 +10303,32 @@ msgid "" "'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man " "for more details." msgstr "" -"Konfiguracija opazovalcev povezav za povezavo: vsak opazovalnik povezav je " -"določen s slovarjem, katerega ključi so odvisni od izbranega opazovalca " -"povezave. Razpoložljivi opazovalci povezav so 'ethtool', 'nsna_ping' in " +"Prilagoditev opazovalnikov povezav za povezavo: vsak opazovalnik povezav je " +"določen s slovarjem, katerega ključi so odvisni od izbranega opazovalnika " +"povezav. Razpoložljivi opazovalniki povezav so 'ethtool', 'nsna_ping' in " "'arp_ping', v slovarju pa je določen s ključem 'name'. Razpoložljivi ključi " -"so: ethtool: 'zakasnitev', 'zakasnitev', 'init-wait'; nsna_ping: 'init-" -"wait', 'interval', 'missed-max', 'target-host'; arp_ping: vse tiste v " -"nsna_ping in 'source-host', 'validate-active', 'validate-inactive', 'send-" -"always'. Za več podrobnosti glejte teamd.conf man." +"so: ethtool: ‘delay-up’, ‘delay-down‘, 'init-wait'; nsna_ping: 'init-wait', " +"'interval', 'missed-max', 'target-host'; arp_ping: vse tiste v 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:363 +#: src/libnmc-setting/settings-docs.h.in:367 msgid "Corresponds to the teamd mcast_rejoin.count." msgstr "Ustreza teamd mcast_rejoin.count." -#: src/libnmc-setting/settings-docs.h.in:364 +#: src/libnmc-setting/settings-docs.h.in:368 msgid "Corresponds to the teamd mcast_rejoin.interval." msgstr "Ustreza teamd mcast_rejoin.interval." -#: src/libnmc-setting/settings-docs.h.in:365 +#: src/libnmc-setting/settings-docs.h.in:369 msgid "Corresponds to the teamd notify_peers.count." msgstr "Ustreza teamd notify_peers.count." -#: src/libnmc-setting/settings-docs.h.in:366 +#: src/libnmc-setting/settings-docs.h.in:370 msgid "Corresponds to the teamd notify_peers.interval." msgstr "Ustreza teamd notify_peers.interval." -#: src/libnmc-setting/settings-docs.h.in:367 +#: src/libnmc-setting/settings-docs.h.in:371 msgid "" "Corresponds to the teamd runner.name. Permitted values are: \"roundrobin\", " "\"broadcast\", \"activebackup\", \"loadbalance\", \"lacp\", \"random\"." @@ -10548,44 +10336,43 @@ msgstr "" "Ustreza teamd runner.name. Dovoljene vrednosti so: »roundrobin«, " "»broadcast«, »activebackup«, »loadbalance«, »lacp«, »random«." -#: src/libnmc-setting/settings-docs.h.in:368 +#: src/libnmc-setting/settings-docs.h.in:372 msgid "Corresponds to the teamd runner.active." msgstr "Ustreza teamd runner.active." -#: src/libnmc-setting/settings-docs.h.in:369 +#: src/libnmc-setting/settings-docs.h.in:373 msgid "Corresponds to the teamd runner.agg_select_policy." msgstr "Ustreza teamd runner.agg_select_policy." -#: src/libnmc-setting/settings-docs.h.in:370 +#: src/libnmc-setting/settings-docs.h.in:374 msgid "Corresponds to the teamd runner.fast_rate." msgstr "Ustreza teamd runner.fast_rate." -#: src/libnmc-setting/settings-docs.h.in:371 +#: src/libnmc-setting/settings-docs.h.in:375 msgid "Corresponds to the teamd runner.hwaddr_policy." msgstr "Ustreza teamd runner.hwaddr_policy." -#: src/libnmc-setting/settings-docs.h.in:372 +#: src/libnmc-setting/settings-docs.h.in:376 msgid "Corresponds to the teamd runner.min_ports." msgstr "Ustreza teamd runner.min_ports." -#: src/libnmc-setting/settings-docs.h.in:373 +#: src/libnmc-setting/settings-docs.h.in:377 msgid "Corresponds to the teamd runner.sys_prio." msgstr "Ustreza teamd runner.sys_prio." -#: src/libnmc-setting/settings-docs.h.in:374 +#: src/libnmc-setting/settings-docs.h.in:378 msgid "Corresponds to the teamd runner.tx_balancer.name." msgstr "Ustreza teamd runner.tx_balancer.name." -#: src/libnmc-setting/settings-docs.h.in:375 +#: src/libnmc-setting/settings-docs.h.in:379 msgid "Corresponds to the teamd runner.tx_balancer.interval." msgstr "Ustreza teamd runner.tx_balancer.interval." -#: src/libnmc-setting/settings-docs.h.in:376 +#: src/libnmc-setting/settings-docs.h.in:380 msgid "Corresponds to the teamd runner.tx_hash." msgstr "Ustreza teamd runner.tx_hash." -#: src/libnmc-setting/settings-docs.h.in:377 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:381 msgid "" "The JSON configuration for the team port. The property should contain raw " "JSON configuration data suitable for teamd, because the value is passed " @@ -10593,23 +10380,23 @@ msgid "" "man teamd.conf for the format details." msgstr "" "Konfiguracija JSON za vrata ekipe. Lastnost mora vsebovati neobdelane " -"konfiguracijske podatke JSON, primerne za skupino, ker se vrednost posreduje " -"neposredno skupini. Če ni določeno, se uporabi privzeta konfiguracija. Za " -"podrobnosti o formatu glejte man teamd.conf." +"prilagoditvene podatke JSON, primerne za skupino, ker se vrednost posreduje " +"neposredno skupini. Če ni določeno, se uporabi privzeta prilagoditev. Za " +"podrobnosti o zapise glejte man teamd.conf." -#: src/libnmc-setting/settings-docs.h.in:378 +#: src/libnmc-setting/settings-docs.h.in:382 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_key." msgstr "Ustreza teamd ports.PORTIFNAME.lacp_key." -#: src/libnmc-setting/settings-docs.h.in:379 +#: src/libnmc-setting/settings-docs.h.in:383 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_prio." msgstr "Ustreza teamd ports.PORTIFNAME.lacp_prio." -#: src/libnmc-setting/settings-docs.h.in:381 +#: src/libnmc-setting/settings-docs.h.in:385 msgid "Corresponds to the teamd ports.PORTIFNAME.prio." msgstr "Ustreza teamd ports.PORTIFNAME.prio." -#: src/libnmc-setting/settings-docs.h.in:382 +#: src/libnmc-setting/settings-docs.h.in:386 msgid "" "Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the " "parameter is skipped from the json config." @@ -10617,12 +10404,11 @@ msgstr "" "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:383 +#: src/libnmc-setting/settings-docs.h.in:387 msgid "Corresponds to the teamd ports.PORTIFNAME.sticky." msgstr "Ustreza ports.PORTIFNAME.sticky za teamd." -#: src/libnmc-setting/settings-docs.h.in:384 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:388 msgid "" "The group ID which will own the device. If set to NULL everyone will be able " "to use the device." @@ -10630,8 +10416,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:385 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:389 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 " @@ -10639,10 +10424,9 @@ msgid "" msgstr "" "Način delovanja navidezne naprave. Dovoljene vrednosti so »tun« (1) za " "ustvarjanje naprave plasti 3 in »tap« (2) za ustvarjanje plasti 2, podobne " -"Ethernetu." +"eternetu." -#: src/libnmc-setting/settings-docs.h.in:386 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:390 msgid "" "If the property is set to TRUE, the interface will support multiple file " "descriptors (queues) to parallelize packet sending or receiving. Otherwise, " @@ -10652,8 +10436,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:387 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:391 msgid "" "The user ID which will own the device. If set to NULL everyone will be able " "to use the device." @@ -10661,8 +10444,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:388 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:392 msgid "" "If TRUE the interface will prepend a 4 byte header describing the physical " "interface to the packets." @@ -10670,16 +10452,14 @@ msgstr "" "Če je TRUE, bo vmesnik paketom dodal 4-bajtno glavo, ki opisuje fizični " "vmesnik." -#: src/libnmc-setting/settings-docs.h.in:389 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:393 msgid "" "If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network " "header." msgstr "" "Če je TRUE, bo IFF_VNET_HDR paketov tunela vseboval glavo omrežja virtio." -#: src/libnmc-setting/settings-docs.h.in:390 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:394 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 " @@ -10687,12 +10467,11 @@ msgid "" "up to a certain length." msgstr "" "Slovar parov ključ/vrednost z uporabniškimi podatki. NetworkManager te " -"podatke ignorira in jih je mogoče uporabiti po presoji uporabnika. Tipke " +"podatke prezre in jih je mogoče uporabiti po presoji uporabnika. Ključi " "podpirajo samo strogo obliko ascii, vendar so vrednosti lahko poljubni nizi " "UTF8 do določene dolžine." -#: src/libnmc-setting/settings-docs.h.in:391 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:395 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 \"from" @@ -10702,8 +10481,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:392 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:396 msgid "" "One or more flags which control the behavior and features of the VLAN " "interface. Flags include \"reorder-headers\" (0x1) (reordering of output " @@ -10714,7 +10492,7 @@ msgid "" "To preserve backward compatibility, the default-value in the D-Bus API " "continues to be 0 and a missing property on D-Bus is still considered as 0." msgstr "" -"Ena ali več zastavic, ki nadzorujejo obnašanje in funkcije vmesnika VLAN. " +"Ena ali več zastavic, ki nadzorujejo vedenje in funkcije vmesnika VLAN. " "Zastavice vključujejo »reorder-headers« (0x1) (preurejanje glav izhodnih " "paketov), »gvrp« (0x2) (uporaba protokola GVRP) in »loose-binding« (0x4) " "(ohlapna vezava vmesnika na delovno stanje glavne naprave). \"mvrp\" (0x8) " @@ -10723,8 +10501,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:393 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:397 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." @@ -10732,19 +10509,17 @@ 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:394 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:398 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 \"from" "\" and \"to\" are unsigned integers, ie \"7:3\"." msgstr "" "Za dohodne pakete seznam preslikav iz prednostnih nalog 802.1p v prioritete " -"Linux SKB. Preslikava je podana v obliki \"from:to\", kjer sta \"from\" in " +"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:395 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:399 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 " @@ -10752,12 +10527,10 @@ msgid "" "\"mac-address\" property." msgstr "" "Če je navedeno, določa ime nadrejenega vmesnika ali UUID nadrejene povezave, " -"iz katerega naj se ustvari ta vmesnik VLAN. Če ta lastnost ni določena, " -"mora povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-" -"address«." +"iz katerega naj se ustvari ta vmesnik VLAN. Če ta lastnost ni določena, mora " +"povezava vsebovati nastavitev »802-3-ethernet« z lastnostjo »mac-address«." -#: src/libnmc-setting/settings-docs.h.in:396 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:400 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'." @@ -10765,17 +10538,15 @@ 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:397 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:401 msgid "" "Dictionary of key/value pairs of VPN plugin specific data. Both keys and " "values must be strings." msgstr "" -"Slovar parov ključ / vrednost podatkov, specifičnih za vtičnik VPN. Ključi " +"Slovar parov ključ / vrednost podatkov, specifičnih za vstavek VPN. Ključi " "in vrednosti morajo biti nizi." -#: src/libnmc-setting/settings-docs.h.in:398 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:402 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 " @@ -10785,27 +10556,24 @@ msgstr "" "ostati povezan med spremembami povezav in izpadi, dokler se povezava izrecno " "ne prekine." -#: src/libnmc-setting/settings-docs.h.in:399 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:403 msgid "" "Dictionary of key/value pairs of VPN plugin specific secrets like passwords " "or private keys. Both keys and values must be strings." msgstr "" -"Slovar parov ključ/vrednost posebnih skrivnosti vtičnikov VPN, kot so gesla " -"ali zasebni ključi. Ključi in vrednosti morajo biti nizi." +"Slovar parov ključ/vrednost posebnih skrivnosti vstavkov VPN, kot so gesla " +"ali zasebni ključi. Ključi in vrednosti morajo biti nizi." -#: src/libnmc-setting/settings-docs.h.in:400 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:404 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." msgstr "" -"Ime storitve D-Bus vtičnika VPN, ki ga ta nastavitev uporablja za " -"vzpostavljanje povezave z omrežjem. tj. org.freedesktop.NetworkManager.vpnc " -"za vtičnik vpnc." +"Ime storitve D-Bus vstavka VPN, ki ga ta nastavitev uporablja za " +"vzpostavljanje povezave z omrežjem, tj. org.freedesktop.NetworkManager.vpnc " +"za vstavek vpnc." -#: src/libnmc-setting/settings-docs.h.in:401 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:405 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 " @@ -10815,11 +10583,10 @@ msgstr "" "Časovna omejitev za storitev VPN, da vzpostavi povezavo. Nekatere storitve " "lahko trajajo precej dolgo, da se povežejo. Vrednost 0 pomeni privzeto " "časovno omejitev, ki je 60 sekund (razen če jo preglasi vpn.timeout v " -"konfiguracijski datoteki). Vrednosti, večje od nič, pomenijo časovno " -"omejitev v sekundah." +"prilagoditveni datoteki). Vrednosti, večje od nič, pomenijo časovno omejitev " +"v sekundah." -#: src/libnmc-setting/settings-docs.h.in:402 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:406 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 " @@ -10829,21 +10596,21 @@ msgid "" "connection." msgstr "" "Če povezava VPN zahteva uporabniško ime za preverjanje pristnosti, je treba " -"to ime navesti tukaj. Če je povezava na voljo več kot enemu uporabniku in " +"to ime navesti tukaj. Če je povezava na voljo več kot enemu uporabniku in " "VPN zahteva, da vsak uporabnik vnese drugačno ime, pustite to lastnost " -"prazno. Če je ta lastnost prazna, bo NetworkManager samodejno vnesel " +"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:403 +#: src/libnmc-setting/settings-docs.h.in:407 msgid "The routing table for this VRF." msgstr "Usmerjevalna tabela za ta VRF." -#: src/libnmc-setting/settings-docs.h.in:404 +#: src/libnmc-setting/settings-docs.h.in:408 msgid "Specifies the lifetime in seconds of FDB entries learnt by the kernel." msgstr "" "Določa življenjsko dobo v sekundah vnosov FDB, ki se jih je naučilo jedro." -#: src/libnmc-setting/settings-docs.h.in:405 +#: src/libnmc-setting/settings-docs.h.in:409 msgid "" "Specifies the UDP destination port to communicate to the remote VXLAN tunnel " "endpoint." @@ -10851,34 +10618,30 @@ msgstr "" "Določa ciljna vrata UDP za komunikacijo z oddaljeno končno točko tunela " "VXLAN." -#: src/libnmc-setting/settings-docs.h.in:406 +#: src/libnmc-setting/settings-docs.h.in:410 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:407 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:411 msgid "Specifies whether netlink LL ADDR miss notifications are generated." -msgstr "Določa, ali se ustvarijo zgrešena obvestila netlink LL ADDR." +msgstr "Določa, ali se ustvarijo obvestila netlink o zgrešenih LL ADDR." -#: src/libnmc-setting/settings-docs.h.in:408 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:412 msgid "Specifies whether netlink IP ADDR miss notifications are generated." -msgstr "Določa, ali se ustvarijo zgrešena obvestila netlink IP ADDR." +msgstr "Določa, ali se ustvarijo obvestila netlink o zgrešenih IP ADDR." -#: src/libnmc-setting/settings-docs.h.in:409 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:413 msgid "" "Specifies whether unknown source link layer addresses and IP addresses are " "entered into the VXLAN device forwarding database." msgstr "" "Določa, ali se v zbirko podatkov za posredovanje naprav VXLAN vnesejo " -"neznani naslovi plasti izvorne povezave in naslovi IP." +"neznani naslovi sloja izvorne povezave in naslovi IP." -#: src/libnmc-setting/settings-docs.h.in:410 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:414 msgid "" "Specifies the maximum number of FDB entries. A value of zero means that the " "kernel will store unlimited entries." @@ -10886,40 +10649,37 @@ 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:411 +#: src/libnmc-setting/settings-docs.h.in:415 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:412 +#: src/libnmc-setting/settings-docs.h.in:416 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:413 +#: src/libnmc-setting/settings-docs.h.in:417 msgid "Specifies whether ARP proxy is turned on." msgstr "Določa, ali je posredovalni strežnik ARP vklopljen." -#: src/libnmc-setting/settings-docs.h.in:414 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:418 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 " "forwarding database, or the multicast IP address to join." msgstr "" -"Določa ciljni naslov IP oddajanja v oddaji, ki se uporablja v odhodnih " +"Določa ciljni naslov IP enovrstnega oddajanja, ki se uporablja v odhodnih " "paketih, če naslov ciljne plasti povezave ni znan v zbirki podatkov za " -"posredovanje naprav VXLAN ali naslov IP za večoddajanje, ki se mu želite " -"pridružiti." +"posredovanje naprav VXLAN ali naslov IP za večvrstno oddajanje, ki se mu " +"želite pridružiti." -#: src/libnmc-setting/settings-docs.h.in:415 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:419 msgid "Specifies whether route short circuit is turned on." -msgstr "Določa, ali je kratek stik poti vklopljen." +msgstr "Določa, ali je kratek krogotok poti vklopljen." -#: src/libnmc-setting/settings-docs.h.in:416 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:420 msgid "" "Specifies the maximum UDP source port to communicate to the remote VXLAN " "tunnel endpoint." @@ -10927,8 +10687,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:417 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:421 msgid "" "Specifies the minimum UDP source port to communicate to the remote VXLAN " "tunnel endpoint." @@ -10936,26 +10695,23 @@ 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:418 +#: src/libnmc-setting/settings-docs.h.in:422 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:419 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:423 msgid "Specifies the time-to-live value to use in outgoing packets." -msgstr "Določa vrednost časa življenja, ki se uporabi v odhodnih paketih." +msgstr "Določa vrednost življenjske dobe, ki se uporabi v odhodnih paketih." -#: src/libnmc-setting/settings-docs.h.in:420 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:424 msgid "" "The P2P device that should be connected to. Currently, this is the only way " "to create or join a group." msgstr "" -"Naprava P2P, s katero je treba priključiti. Trenutno je to edini način za " +"Naprava P2P, na katero se želite priključiti. Trenutno je to edini način za " "ustvarjanje skupine ali pridružitev skupini." -#: src/libnmc-setting/settings-docs.h.in:421 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:425 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 " @@ -10969,8 +10725,7 @@ msgstr "" "vzpostavitev povezave. Ta nastavitev je uporabna le pri implementaciji " "odjemalca Wi-Fi Display." -#: src/libnmc-setting/settings-docs.h.in:422 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:426 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 " @@ -10980,8 +10735,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:423 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:427 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 " @@ -10991,8 +10745,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:424 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:428 msgid "" "Network Service Provider (NSP) name of the WiMAX network this connection " "should use." @@ -11000,8 +10753,7 @@ msgstr "" "Ime ponudnika omrežnih storitev (NSP) omrežja WiMAX, ki ga mora uporabljati " "ta povezava." -#: src/libnmc-setting/settings-docs.h.in:425 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:429 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 " @@ -11010,10 +10762,9 @@ msgid "" msgstr "" "Ko je TRUE, nastavite vmesnik tako, da sprejema pakete za vse naslove MAC. S " "tem omogočite zastavico vmesnika jedra IFF_PROMISC. Če je FALSE, vmesnik " -"sprejme samo pakete s ciljnim naslovom vmesnika mac ali oddajanjem." +"sprejme samo pakete s ciljnim naslovom mac vmesnika ali oddajanjem." -#: src/libnmc-setting/settings-docs.h.in:426 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:430 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 " @@ -11024,15 +10775,14 @@ msgid "" "be skipped." msgstr "" "Ko je TRUE, uveljavite samodejno pogajanje o hitrosti in dupleksnem načinu. " -"Če sta določeni lastnosti »hitrost« in »dupleks«, bo med postopkom " -"samodejnega pogajanja o povezavi oglašen in sprejet samo ta enotni način: to " -"deluje samo za specifikacije BASE-T 802.3 in je uporabno za uveljavljanje " +"Če sta določeni lastnosti »speed« in »duplex«, bo med postopkom samodejnega " +"pogajanja o povezavi oglaševan in sprejet samo ta enotni način: to deluje " +"samo za specifikacije BASE-T 802.3 in je uporabno za uveljavljanje " "gigabitnih načinov, saj je v teh primerih pogajanje o povezavi obvezno. Ko " "je treba nastaviti FALSE, lastnosti »speed« in »duplex« ali pa bo " -"konfiguracija povezave preskočena." +"prilagoditev povezave preskočena." -#: src/libnmc-setting/settings-docs.h.in:427 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:431 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 " @@ -11050,20 +10800,19 @@ msgid "" msgstr "" "Če je navedeno, zahtevajte, da naprava namesto tega uporabi ta naslov MAC. " "To je znano kot kloniranje ali ponarejanje MAC. Poleg eksplicitnega " -"določanja naslova MAC so podprte posebne vrednosti »ohrani«, »trajno«, " -"»naključno« in »stabilno«. \"ohraniti\" pomeni, da se ob aktivaciji ne " -"dotaknete naslova MAC. »Stalni« pomeni uporabo stalnega naslova strojne " +"določanja naslova MAC so podprte posebne vrednosti \"preserve\", \"permanent" +"\", \"random\" in \"stable\". »preserve« pomeni, da se ob aktivaciji ne " +"dotaknete naslova MAC. »permanent« pomeni uporabo stalnega naslova strojne " "opreme, če ga ima naprava (v nasprotnem primeru se to obravnava kot " -"»ohrani«). \"random\" ustvari naključni naslov MAC pri vsaki povezavi. " +"»preserve«). \"random\" ustvari naključni naslov MAC pri vsaki povezavi. " "»stable« ustvari zgoščen naslov MAC, ki temelji na connection.stable-id in " "strojno odvisnem ključu. Če ni določena, lahko vrednost prepišete prek " "globalnih privzetih nastavitev, glejte priročnik NetworkManager.conf. Če še " "vedno ni določeno, je privzeto »ohrani« (starejše različice NetworkManagerja " "morda uporabljajo drugačno privzeto vrednost). Na D-Bus je to polje izraženo " -"kot »dodeljeni-mac-naslov« ali zastareli »klonirani-mac-naslov«." +"kot \"assigned-mac-address\" ali zastareli \"cloned-mac-address\"." -#: src/libnmc-setting/settings-docs.h.in:428 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:432 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 " @@ -11077,21 +10826,20 @@ msgid "" "\"speed\" property if specified. Before specifying a duplex mode be sure " "your device supports it." msgstr "" -"Ko je nastavljena vrednost »polovica« ali »polna«, naprava konfigurira tako, " -"da uporablja določen način obojestranskega tiska. Če je »samodejna " -"pogajanja« »da«, bo določen dvostranski način edini, ki se oglašuje med " -"pogajanji o povezavi: to deluje samo za specifikacije BASE-T 802.3 in je " -"uporabno za uveljavljanje gigabitnih načinov, saj je v teh primerih " -"pogajanje o povezavi obvezno. Če vrednost ni nastavljena (privzeta), bo " -"konfiguracija povezave bodisi preskočena (če je »samodejna pogajanja« »ne«, " -"privzeto) ali pa se bo samodejno pogajala (če je »samodejna pogajanja« »da«) " -"in lokalna naprava bo oglaševala vse podprte načine obojestranskega tiska. " -"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." +"Ko je nastavljena vrednost »half« ali »full«, napravo prilagodi tako, da " +"uporablja določen način dupleksa. Če ima »auto-negotiate« vrednost »yes«, bo " +"določen način dupleksa edini, ki se oglašuje med pogajanji o povezavi: to " +"deluje samo za specifikacije BASE-T 802.3 in je uporabno za uveljavljanje " +"gigabitnih načinov, saj je v teh primerih pogajanje o povezavi obvezno. Če " +"vrednost ni nastavljena (privzeta), bo prilagoditev povezave bodisi " +"preskočena (če je »auto-negotiate« »no«, kar je privzeto) ali pa se bo " +"samodejno pogajala (če je »auto-negotiate« »yes«) in krajevna naprava bo " +"oglaševala vse podprte načine dupleksa. Nastavitev mora biti skupaj z " +"lastnostjo »speed«, če je določena. Preden določite dupleks način, se " +"prepričajte, da ga vaša naprava podpira." -#: src/libnmc-setting/settings-docs.h.in:429 -#: src/libnmc-setting/settings-docs.h.in:456 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:433 +#: src/libnmc-setting/settings-docs.h.in:460 msgid "" "With \"cloned-mac-address\" setting \"random\" or \"stable\", by default all " "bits of the MAC address are scrambled and a locally-administered, unicast " @@ -11117,66 +10865,62 @@ msgid "" "create a fully scrambled MAC address, randomly locally or globally " "administered." msgstr "" -"Če je »klonirani-mac-naslov« nastavljen »naključno« ali »stabilno«, so " -"privzeto vsi biti naslova MAC kodirani in ustvarjen je lokalno upravljan " -"enosmerni naslov MAC. Ta lastnost omogoča, da določite, da so določeni biti " -"fiksni. Upoštevajte, da najmanj pomemben del prvega naslova MAC vedno ne bo " -"nastavljen, da se ustvari enooddajni naslov MAC. Če je lastnost NULL, jo " -"lahko prepišete s privzeto nastavitvijo povezave. Če je vrednost še vedno " -"NULL ali prazen niz, je privzeto ustvariti lokalno upravljan naslov MAC z " -"enim oddajanjem. Če vrednost vsebuje en naslov MAC, se ta naslov uporabi kot " -"maska. Nastavljene bite maske je treba napolniti s trenutnim MAC naslovom " -"naprave, medtem ko so nenastavljeni biti predmet naključnega odločanja. " -"Nastavitev »FE:FF:FF:00:00:00« pomeni, da ohranite OUI trenutnega naslova " -"MAC in naključno izberete samo spodnje 3 bajte z uporabo »naključnega« ali " -"»stabilnega« algoritma. Če vrednost vsebuje en dodaten naslov MAC za masko, " -"se ta naslov uporabi namesto trenutnega naslova MAC za zapolnitev bitov, ki " -"ne bodo naključno razvrščeni. Na primer, vrednost »FE:FF:FF:00:00:00 68:" -"F7:28:00:00:00« bo nastavila OUI naslova MAC na 68:F7:28, medtem ko so " -"spodnji biti naključni. Vrednost »02:00:00:00:00:00:00 00:00:00:00:00« bo " -"ustvarila popolnoma kodiran globalno upravljan in vžgan naslov MAC. Če " -"vrednost vsebuje več kot en dodatni naslov MAC, je eden od njih izbran " -"naključno. Na primer »02:00:00:00:00:00 00:00:00:00:00:00:00 " +"Če je \"cloned-mac-address\" nastavljen »random« ali »stable«, so privzeto " +"vsi biti naslova MAC kodirani in ustvarjen je krajevno upravljan enosmerni " +"naslov MAC. Ta lastnost omogoča, da določite, da so določeni biti fiksni. " +"Upoštevajte, da najmanj pomemben del prvega naslova MAC vedno ne bo " +"nastavljen, da se ustvari naslov MAC enovrstnega oddajanja. Če je lastnost " +"NULL, jo lahko prepišete s privzeto nastavitvijo povezave. Če je vrednost še " +"vedno NULL ali prazen niz, je privzeto ustvariti krajevno upravljan naslov " +"MAC za enovrstno oddajanje. Če vrednost vsebuje en naslov MAC, se ta naslov " +"uporabi kot maska. Nastavljene bite maske je treba napolniti s trenutnim MAC " +"naslovom naprave, medtem ko so nenastavljeni biti predmet naključnega " +"odločanja. Nastavitev »FE:FF:FF:00:00:00« pomeni, da ohranite OUI trenutnega " +"naslova MAC in naključno izberete samo spodnje 3 bajte z uporabo naključnega " +"(»random«) ali stabilnega (»stable«) algoritma. Če vrednost vsebuje en " +"dodaten naslov MAC za masko, se ta naslov uporabi namesto trenutnega naslova " +"MAC za zapolnitev bitov, ki ne bodo naključno razvrščeni. Primer: vrednost " +"»FE:FF:FF:00:00:00 68:F7:28:00:00:00« bo nastavila OUI naslova MAC na 68:" +"F7:28, medtem ko so spodnji biti naključni. Vrednost »02:00:00:00:00:00:00 " +"00:00:00:00:00« bo ustvarila popolnoma kodiran globalno upravljan in vdelan " +"naslov MAC. Če vrednost vsebuje več kot en dodatni naslov MAC, je eden od " +"njih izbran naključno. Primer: »02:00:00:00:00:00 00:00:00:00:00:00:00 " "02:00:00:00:00:00« bo ustvaril popolnoma kodiran naslov MAC, ki se naključno " -"upravlja lokalno ali globalno." +"upravlja krajevno ali globalno." -#: src/libnmc-setting/settings-docs.h.in:430 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:434 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 " "of the device (i.e. MAC spoofing)." msgstr "" -"Če je določeno, bo ta povezava veljala samo za napravo Ethernet, katere " +"Če je določeno, bo ta povezava veljala samo za napravo eternet, katere " "trajni naslov MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave " "(npr. ponarejanje MAC)." -#: src/libnmc-setting/settings-docs.h.in:431 -#: src/libnmc-setting/settings-docs.h.in:432 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:435 +#: src/libnmc-setting/settings-docs.h.in:436 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 " "in the standard hex-digits-and-colons notation (00:11:22:33:44:55)." msgstr "" -"Če je določeno, ta povezava ne bo nikoli veljala za napravo Ethernet, katere " -"stalni naslov MAC se ujema z naslovom na seznamu. Vsak naslov MAC je v " -"standardnem zapisu s šestnajstkimi številkami in dvopičji " +"Če je določeno, ta povezava ne bo nikoli veljala za napravo eternet, katere " +"stalni naslov MAC se ujema z naslovom na seznamu. Vsak naslov MAC je v " +"standardnem zapisu s šestnajstiškimi števkami in dvopičji " "(00:11:22:33:44:55)." -#: 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 +#: src/libnmc-setting/settings-docs.h.in:437 +#: src/libnmc-setting/settings-docs.h.in:467 +#: src/libnmc-setting/settings-docs.h.in:509 msgid "" "If non-zero, only transmit packets of the specified size or smaller, " "breaking larger packets up into multiple Ethernet frames." msgstr "" -"Če ni nič, prenašajte samo pakete določene velikosti ali manjše, pri čemer " -"razbijte večje pakete v več ethernetnih okvirjev." +"Če ni nič, prenaša samo pakete določene velikosti ali manjše, pri čemer " +"razbije večje pakete v več ethernetnih okvirjev." -#: src/libnmc-setting/settings-docs.h.in:434 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:438 msgid "" "Specific port type to use if the device supports multiple attachment " "methods. One of \"tp\" (Twisted Pair), \"aui\" (Attachment Unit Interface), " @@ -11184,22 +10928,20 @@ msgid "" "device supports only one port type, this setting is ignored." msgstr "" "Določena vrsta vrat, ki jo je treba uporabiti, če naprava podpira več " -"načinov pritrditve. Eden od \"tp\" (Twisted Pair), \"aui\" (vmesnik " +"načinov pritrditve. Ena izmed \"tp\" (Twisted Pair), \"aui\" (vmesnik " "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:435 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:439 msgid "" "s390 network device type; one of \"qeth\", \"lcs\", or \"ctc\", representing " "the different types of virtual network devices available on s390 systems." msgstr "" -"vrsta omrežne naprave S390; Eden od \"QETH\", \"LCS\" ali \"CTC\", ki " +"Vrsta omrežne naprave S390; ena izmed \"QETH\", \"LCS\" ali \"CTC\", ki " "predstavlja različne vrste navideznih omrežnih naprav, ki so na voljo v " -"sistemih S390." +"sistemih s390." -#: src/libnmc-setting/settings-docs.h.in:436 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:440 msgid "" "Dictionary of key/value pairs of s390-specific device options. Both keys " "and values must be strings. Allowed keys include \"portno\", \"layer2\", " @@ -11208,15 +10950,14 @@ msgid "" "does nothing with this information. However, s390utils ships a udev rule " "which parses this information and applies it to the interface." msgstr "" -"Slovar parov ključ/vrednost možnosti naprave, specifičnih za s390. Ključi " -"in vrednosti morajo biti nizi. Dovoljeni ključi med drugim vključujejo " -"»portno«, »layer2«, »portname«, »protocol«. Imena ključev morajo vsebovati " +"Slovar parov ključ/vrednost možnosti naprave, specifičnih za s390. Ključi in " +"vrednosti morajo biti nizi. Dovoljeni ključi med drugim vključujejo " +"»portno«, »layer2«, »portname«, »protocol«. Imena ključev morajo vsebovati " "samo alfanumerične znake (npr. [a-zA-Z0-9]). Trenutno NetworkManager sam ne " "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:437 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:441 msgid "" "Identifies specific subchannels that this network device uses for " "communication with z/VM or s390 host. Like the \"mac-address\" property for " @@ -11226,14 +10967,13 @@ msgid "" "hexadecimal characters and the period (.) character." msgstr "" "Prepozna določene podkanale, ki jih ta omrežna naprava uporablja za " -"komunikacijo z gostiteljem z/VM ali s390. Tako kot lastnost »mac-address« " -"za naprave, ki niso z/VM, lahko to lastnost uporabite za zagotovitev, da ta " -"povezava velja samo za omrežno napravo, ki uporablja te podkanale. Seznam " +"komunikacijo z gostiteljem z/VM ali s390. Tako kot lastnost »mac-address« za " +"naprave, ki niso z/VM, lahko to lastnost uporabite za zagotovitev, da ta " +"povezava velja samo za omrežno napravo, ki uporablja te podkanale. Seznam " "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:438 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:442 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 " @@ -11247,20 +10987,19 @@ msgid "" "property when non-zero. Before specifying a speed value be sure your device " "supports it." msgstr "" -"Ko je nastavljena vrednost, večja od 0, konfigurira napravo tako, da " -"uporablja določeno hitrost. Če je \"samodejna pogajanja\" \"da\", bo " -"določena hitrost edina, ki se oglašuje med pogajanji o povezavi: to deluje " -"samo za specifikacije BASE-T 802.3 in je uporabno za uveljavljanje " -"gigabitnih hitrosti, saj je v tem primeru pogajanje o povezavi obvezno. Če " -"vrednost ni nastavljena (0, privzeta), bo konfiguracija povezave bodisi " -"preskočena (če je »samodejna pogajanja« »ne«, privzeto) ali pa se bo " -"samodejno pogajala (če je »samodejna pogajanja« »da«) in lokalna naprava bo " -"oglaševala vse podprte hitrosti. V Mbit/s, tj. 100 == 100Mbit/s. Nastaviti " -"ga je treba skupaj z lastnostjo »duplex«, če ni nič. Preden določite " -"vrednost hitrosti, se prepričajte, da jo vaša naprava podpira." +"Ko je nastavljena vrednost, večja od 0, prilagodi napravo tako, da uporablja " +"določeno hitrost. Če je »auto-negotiate« »yes«, bo določena hitrost edina, " +"ki se oglašuje med pogajanji o povezavi: to deluje samo za specifikacije " +"BASE-T 802.3 in je uporabno za uveljavljanje gigabitnih hitrosti, saj je v " +"tem primeru pogajanje o povezavi obvezno. Če vrednost ni nastavljena (0, " +"privzeta), bo prilagoditev povezave bodisi preskočena (če je »auto-" +"negotiate« »no«, kar je privzeto) ali pa se bo samodejno pogajala (če je " +"»auto-negotiate« »yes«) in krajevna naprava bo oglaševala vse podprte " +"hitrosti. V Mbit/s, tj. 100 == 100Mbit/s. Nastaviti ga je treba skupaj z " +"lastnostjo »duplex«, če ni ničelno. Preden določite vrednost hitrosti, se " +"prepričajte, da jo vaša naprava podpira." -#: src/libnmc-setting/settings-docs.h.in:439 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:443 msgid "" "The NMSettingWiredWakeOnLan options to enable. Not all devices support all " "options. May be any combination of \"phy\" (0x2), \"unicast\" (0x4), " @@ -11275,8 +11014,7 @@ msgstr "" "nastavitev) in »ignore« (0x8000) (za onemogočanje upravljanja funkcije Wake-" "on-LAN v programu NetworkManager)." -#: src/libnmc-setting/settings-docs.h.in:440 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:444 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 " @@ -11286,8 +11024,7 @@ msgstr "" "čarobnih paketih, predstavljeno kot ethernetni naslov MAC. Če je NULL, " "geslo ne bo potrebno." -#: src/libnmc-setting/settings-docs.h.in:441 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:445 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 " @@ -11296,11 +11033,10 @@ msgid "" msgstr "" "Uporaba fwmark je izbirna in je privzeto izklopljena. Če ga nastavite na 0, " "ga onemogočite. V nasprotnem primeru je to 32-bitni fwmark za odhodne " -"pakete. Upoštevajte, da »ip4-auto-default-route« ali »ip6-auto-default-" +"pakete. Upoštevajte, da je »ip4-auto-default-route« ali »ip6-auto-default-" "route« omogočeno, pomeni, da samodejno izberete fwmark." -#: src/libnmc-setting/settings-docs.h.in:442 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:446 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 " @@ -11323,21 +11059,20 @@ msgstr "" "pravilnika. Številka fwmark se uporablja tudi kot usmerjevalna tabela za " "privzeto pot, in če je fwmark enak nič, se samodejno izbere neuporabljena " "fwmark/tabela. To ustreza temu, kar wg-quick počne s Table=auto in kar " -"WireGuard imenuje \"Izboljšano usmerjanje na podlagi pravil\". Upoštevajte, " -"da za delovanje tega avtomatizma običajno ne želite nastaviti ipv4.gateway, " -"ker bo to povzročilo sporno privzeto pot. Če pustite to privzeto nastavitev, " -"boste to možnost samodejno omogočili, če ipv4.never-default ni nastavljen in " -"obstajajo enakovredniki, ki uporabljajo privzeto pot kot dovoljene ips. Ker " -"je ta avtomatizem smiseln le, če imate tudi vrstnika z /0 dovoljenim ips, " -"tega običajno ni treba izrecno omogočiti. Lahko pa ga onemogočite, če želite " -"konfigurirati lastno usmerjanje in pravila." +"WireGuard imenuje izboljšano usmerjanje na podlagi pravil (\"Improved Rule-" +"based Routing\"). Upoštevajte, da za delovanje tega avtomatizma običajno ne " +"želite nastaviti ipv4.gateway, ker bo to povzročilo sporno privzeto pot. Če " +"pustite to privzeto nastavitev, boste to možnost samodejno omogočili, če " +"ipv4.never-default ni nastavljen in obstajajo vrstniki, ki uporabljajo " +"privzeto pot kot dovoljene ips. Ker je ta avtomatizem smiseln le, če imate " +"tudi vrstnika z /0 dovoljenim ips, tega običajno ni treba izrecno omogočiti. " +"Lahko pa ga onemogočite, če želite prilagoditi lastno usmerjanje in pravila." -#: src/libnmc-setting/settings-docs.h.in:443 +#: src/libnmc-setting/settings-docs.h.in:447 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:444 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:448 msgid "" "The listen-port. If listen-port is not specified, the port will be chosen " "randomly when the interface comes up." @@ -11345,21 +11080,19 @@ 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:445 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:449 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 " "used. Note that contrary to wg-quick's MTU setting, this does not take into " "account the current routes at the time of activation." msgstr "" -"Če ni nič, prenašajte samo pakete določene velikosti ali manjše, večje " -"pakete pa razdelite na več fragmentov. Če je nič, se uporabi privzeti MTU. " +"Če ni nič, prenaša samo pakete določene velikosti ali manjše, večje pakete " +"pa razdeli na več fragmentov. Če je nič, se uporabi privzeti MTU. " "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:446 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:450 msgid "" "Whether to automatically add routes for the AllowedIPs ranges of the peers. " "If TRUE (the default), NetworkManager will automatically add routes in the " @@ -11371,17 +11104,17 @@ msgid "" "or ipv6.never-default setting is enabled, the peer route for this peer won't " "be added automatically." msgstr "" -"Ali naj se samodejno dodajo poti za obsege AllowedIPS enakovrednikov. Če je " -"TRUE (privzeto), bo NetworkManager samodejno dodal poti v usmerjevalne " -"tabele v skladu z ipv4.route-table in ipv6.route-table. Običajno želite, da " -"je ta avtomatizem omogočen. Če je FALSE, se takšne poti ne dodajo samodejno. " -"V tem primeru bo uporabnik morda želel konfigurirati statične poti v ipv4." -"routes oziroma ipv6.routes. Upoštevajte, da če je dovoljeni IP-ji " -"enakovrednika »0.0.0.0/0« ali »::/0« in je omogočena nastavitev ipv4.never-" -"default ali ipv6.never-default profila, pot enakovrednika za tega " -"enakovrednika ne bo dodana samodejno." +"Ali naj se samodejno dodajo poti za obsege AllowedIPS vrstnikov. Če je TRUE " +"(privzeto), bo NetworkManager samodejno dodal poti v usmerjevalne tabele v " +"skladu z ipv4.route-table in ipv6.route-table. Običajno želite, da je ta " +"avtomatizem omogočen. Če je FALSE, se takšne poti ne dodajo samodejno. V tem " +"primeru bo uporabnik morda želel prilagoditi statične poti v ipv4.routes " +"oziroma ipv6.routes. Upoštevajte, da če je dovoljeni IP-ji vrstnika " +"»0.0.0.0/0« ali »::/0« in je omogočena nastavitev ipv4.never-default ali " +"ipv6.never-default profila, pot vrstnika za tega vrstnika ne bo dodana " +"samodejno." -#: src/libnmc-setting/settings-docs.h.in:447 +#: src/libnmc-setting/settings-docs.h.in:451 msgid "" "A comma-separated list of WireGuard peers. Each peer has the following " "syntax: PUBLIC_KEY [ATTRIBUTE=VALUE [ATTRIBUTE=VALUE]...] The supported " @@ -11393,16 +11126,15 @@ msgstr "" "atributi so: endpoint, allowed-ips, persistent-keepalive, preshared-key, " "preshared-key-flags." -#: src/libnmc-setting/settings-docs.h.in:448 +#: src/libnmc-setting/settings-docs.h.in:452 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:449 +#: src/libnmc-setting/settings-docs.h.in:453 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:450 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:454 msgid "" "Configures AP isolation, which prevents communication between wireless " "devices connected to this AP. This property can be set to a value different " @@ -11415,19 +11147,19 @@ msgid "" "\"default\" (-1), the global default is used; in case the global default is " "unspecified it is assumed to be \"false\" (0)." msgstr "" -"Konfigurira izolacijo dostopne točke, ki preprečuje komunikacijo med " -"brezžičnimi napravami, povezanimi s tem dostopnim točkom. To lastnost lahko " -"nastavite na vrednost, ki se razlikuje od »privzete« (-1) samo, če je " -"vmesnik konfiguriran v načinu AP. Če je nastavljena na »true« (1), naprave " -"ne morejo komunicirati med seboj. To poveča varnost, saj ščiti naprave pred " -"napadi drugih odjemalcev v omrežju. Hkrati napravam preprečuje dostop do " -"virov v istih brezžičnih omrežjih kot skupne rabe datotek, tiskalniki itd. " -"Če je nastavljena na »false« (0), se lahko naprave med seboj pogovarjajo. Če " -"je nastavljena na »privzeto« (-1), se uporabi globalna privzeta vrednost; Če " -"globalno privzeto stanje ni določeno, se domneva, da je »napačno« (0)." +"Prilagodi izolacijo dostopne točke, ki preprečuje komunikacijo med " +"brezžičnimi napravami, povezanimi s to dostopno točko. To lastnost lahko " +"nastavite na vrednost, ki se razlikuje od »default« (-1) samo, če je vmesnik " +"prilagojen v načinu dostopne točke (AP). Če je nastavljena na »true« (1), " +"naprave ne morejo komunicirati med seboj. To poveča varnost, saj ščiti " +"naprave pred napadi drugih odjemalcev v omrežju. Hkrati napravam preprečuje " +"dostop do virov v istih brezžičnih omrežjih, kot je skupna raba datotek, " +"tiskalniki itn. Če je nastavljena na »false« (0), se lahko naprave med seboj " +"pogovarjajo. Če je nastavljena na »default« (-1), se uporabi globalna " +"privzeta vrednost; Če globalno privzeto stanje ni določeno, se domneva, da " +"je »false« (0)." -#: src/libnmc-setting/settings-docs.h.in:451 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:455 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 to " @@ -11436,15 +11168,14 @@ msgid "" "compatible. This setting depends on specific driver capability and may not " "work with all drivers." msgstr "" -"802.11 frekvenčni pas omrežja. Ena od \"a\" za 5GHz 802.11a ali \"bg\" za " -"2.4GHz 802.11. S tem se povezave z omrežjem Wi-Fi zaklenejo na določen pas, " -"tj. če je določena »a«, se naprava ne bo povezala z istim omrežjem v pasu " -"2.4 GHz, tudi če so nastavitve omrežja združljive. Ta nastavitev je odvisna " -"od določenih zmogljivosti gonilnika in morda ne bo delovala z vsemi " -"gonilniki." +"802.11 frekvenčni pas omrežja. Ena izmed vrednost \"a\" (za 5GHz 802.11a) " +"ali \"bg\" (za 2.4GHz 802.11). S tem se povezave z omrežjem Wi-Fi zaklenejo " +"na določen pas, tj. če je določena »a«, se naprava ne bo povezala z istim " +"omrežjem v pasu 2.4 GHz, tudi če so nastavitve omrežja združljive. Ta " +"nastavitev je odvisna od določenih zmogljivosti gonilnika in morda ne bo " +"delovala z vsemi gonilniki." -#: src/libnmc-setting/settings-docs.h.in:452 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:456 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 " @@ -11453,29 +11184,27 @@ msgid "" "to a certain BSSID will prevent roaming and also disable background " "scanning. That can be useful, if there is only one access point for the SSID." msgstr "" -"Če je določeno, napravo usmeri, da se poveže le z dano dostopno točko. Ta " -"zmogljivost je močno odvisna od gonilnika in je ne podpirajo vse naprave. " +"Če je določeno, napravo usmeri, da se poveže le z dano dostopno točko. Ta " +"zmogljivost je močno odvisna od gonilnika in je ne podpirajo vse naprave. " "Opomba: ta lastnost ne nadzoruje indeksa BSSID, ki se uporablja pri " "ustvarjanju omrežja Ad-Hoc, in verjetno ne bo v prihodnosti. Če profil " "odjemalca zaklenete na določen BSSID, boste preprečili gostovanje in " "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:453 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:457 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. " "Because channel numbers overlap between bands, this property also requires " "the \"band\" property to be set." msgstr "" -"Brezžični kanal za povezavo Wi-Fi. Naprava se bo pridružila (ali ustvarila " -"za Ad-Hoc omrežja) samo omrežje Wi-Fi na določenem kanalu. Ker se številke " +"Brezžični kanal za povezavo Wi-Fi. Naprava se bo pridružila (ali ustvarila " +"za ad-hoc omrežja) samo omrežje Wi-Fi na določenem kanalu. Ker se številke " "kanalov med pasovi prekrivajo, ta lastnost zahteva tudi nastavitev lastnosti " -"»pas«." +"»band«." -#: src/libnmc-setting/settings-docs.h.in:454 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:458 msgid "" "Specifies width of the wireless channel in Access Point (AP) mode. When set " "to \"auto\" (0) (the default), the channel width is automatically " @@ -11486,15 +11215,13 @@ msgid "" "the interface is configured in AP mode." msgstr "" "Določa širino brezžičnega kanala v načinu dostopne točke. Če je nastavljena " -"na »samodejno« (0) (privzeto), se širina kanala določi samodejno. Trenutno " -"to pomeni, da je izbrana najvarnejša (najmanjša) širina. Če vrednost ni " -"»samodejno« (0), je treba nastaviti tudi lastnost »kanal«. Pri uporabi pasu " -"2.4 GHz je lahko širina največ 40 MHz. To lastnost lahko nastavite na " -"vrednost, ki se razlikuje od »samodejno« (0) samo, če je vmesnik " -"konfiguriran v načinu AP." +"na »auto« (0) (privzeto), se širina kanala določi samodejno. Trenutno to " +"pomeni, da je izbrana najvarnejša (najmanjša) širina. Če vrednost ni " +"»auto« (0), je treba nastaviti tudi lastnost »channel«. Pri uporabi pasu 2.4 " +"GHz je lahko širina največ 40 MHz. To lastnost lahko nastavite na vrednost, " +"ki se razlikuje od »auto« (0) samo, če je vmesnik prilagojen v načinu AP." -#: src/libnmc-setting/settings-docs.h.in:455 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:459 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 " @@ -11514,20 +11241,19 @@ msgstr "" "Če je navedeno, zahtevajte, da naprava namesto tega uporabi ta naslov MAC. " "To je znano kot kloniranje ali ponarejanje MAC. Poleg eksplicitnega " "določanja naslova MAC so podprte posebne vrednosti »preserve«, »permanent«, " -"»random«, »stable« in »stable-ssid«. \"ohraniti\" pomeni, da se ob " -"aktivaciji ne dotaknete naslova MAC. \"stalen\" pomeni uporabo stalnega " -"naslova strojne opreme naprave. \"random\" ustvari naključni naslov MAC pri " -"vsaki povezavi. »stable« ustvari zgoščen naslov MAC, ki temelji na " -"connection.stable-id in strojno odvisnem ključu. »stable-ssid« ustvari " -"zgoščen naslov MAC na podlagi SSID-ja, enako kot nastavitev stabilnega ID-ja " -"na »${NETWORK_SSID}«. Če ni določena, lahko vrednost prepišete prek " -"globalnih privzetih nastavitev, glejte priročnik NetworkManager.conf. Če še " -"vedno ni določeno, je privzeto »ohrani« (starejše različice NetworkManagerja " -"morda uporabljajo drugačno privzeto vrednost). Na D-Bus je to polje izraženo " -"kot »dodeljeni-mac-naslov« ali zastareli »klonirani-mac-naslov«." +"»random«, »stable« in »stable-ssid«. »Preserve« pomeni, da se ob aktivaciji " +"ne dotaknete naslova MAC. »permanent« pomeni uporabo stalnega naslova " +"strojne opreme naprave. \"random\" ustvari naključni naslov MAC pri vsaki " +"povezavi. »stable« ustvari zgoščen naslov MAC, ki temelji na connection." +"stable-id in strojno odvisnem ključu. »stable-ssid« ustvari zgoščen naslov " +"MAC na podlagi SSID-ja, enako kot nastavitev stabilnega ID-ja na " +"»${NETWORK_SSID}«. Če ni določena, lahko vrednost prepišete prek globalnih " +"privzetih nastavitev, glejte priročnik NetworkManager.conf. Če še vedno ni " +"določeno, je privzeto »preserve« (starejše različice NetworkManagerja morda " +"uporabljajo drugačno privzeto vrednost). Na D-Bus je to polje izraženo kot " +"\"assigned-mac-address\" ali zastareli \"cloned-mac-address\"." -#: src/libnmc-setting/settings-docs.h.in:457 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:461 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 " @@ -11539,9 +11265,9 @@ msgid "" "privacy issue for you (in infrastructure mode) or client stations (in AP " "mode), as the explicit probe-scans are distinctly recognizable on the air." msgstr "" -"Če je TRUE, pomeni, da je omrežje omrežje, ki ne oddaja in skriva svoj SSID. " -"To deluje tako v infrastrukturnem kot v načinu AP. V infrastrukturnem načinu " -"se uporabljajo različne rešitve za zanesljivejše odkrivanje skritih omrežij, " +"Če je TRUE, pomeni, da je omrežje, ki ne oddaja in ki skriva svoj SSID. To " +"deluje tako v infrastrukturnem kot v načinu AP. V infrastrukturnem načinu se " +"uporabljajo različne rešitve za zanesljivejše odkrivanje skritih omrežij, " "kot je skeniranje SSID-ja. Vendar pa te rešitve razkrivajo inherentne " "negotovosti s skritimi omrežji SSID, zato je treba skrita omrežja SSID " "uporabljati previdno. V načinu AP ustvarjeno omrežje ne oddaja svojega SSID-" @@ -11549,8 +11275,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:458 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:462 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 " @@ -11560,60 +11285,55 @@ msgstr "" "naslov MAC se ujema. Ta lastnost ne spremeni naslova MAC naprave (npr. " "ponarejanje MAC)." -#: src/libnmc-setting/settings-docs.h.in:459 -#: src/libnmc-setting/settings-docs.h.in:460 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:463 +#: src/libnmc-setting/settings-docs.h.in:464 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-" "digits-and-colons notation (eg \"00:11:22:33:44:55\")." msgstr "" "Seznam stalnih naslovov MAC naprav Wi-Fi, za katere ta povezava nikoli ne bi " -"smela veljati. Vsak naslov MAC mora biti naveden v standardnem zapisu " -"šestnajstih števk in dvopičja (npr. »00:11:22:33:44:55«)." +"smela veljati. Vsak naslov MAC mora biti naveden v standardnem zapisu " +"šestnajstiških števk in dvopičij (npr. »00:11:22:33:44:55«)." -#: src/libnmc-setting/settings-docs.h.in:461 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:465 msgid "" "One of \"default\" (0) (never randomize unless the user has set a global " "default to randomize and the supplicant supports randomization), \"never" "\" (1) (never randomize the MAC address), or \"always\" (2) (always " "randomize the MAC address)." msgstr "" -"Ena od \"privzetih\" (0) (nikoli ne naključno, razen če je uporabnik " -"nastavil globalno privzeto nastavitev za naključno in prosilec podpira " -"naključno naključjenje), \"nikoli\" (1) (nikoli ne naključno naključno " -"namesti naslova MAC) ali \"vedno\" (2) (vedno naključno izberite naslov MAC)." +"Ena izmed »default« (0) (nikoli ne naključno, razen če je uporabnik nastavil " +"globalno privzeto nastavitev za naključno določitev in prosilec podpira " +"naključnost), »never« (1) (nikoli ne naključno določi naslova MAC) ali " +"»always« (2) (vedno naključno izbere naslov MAC)." -#: src/libnmc-setting/settings-docs.h.in:462 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:466 msgid "" "Wi-Fi network mode; one of \"infrastructure\", \"mesh\", \"adhoc\" or \"ap" "\". If blank, infrastructure is assumed." msgstr "" -"Način omrežja Wi-Fi; eden od \"infrastrukture\", \"mreže\", \"adhoc\" ali " -"\"ap\". Če je prazno, se predpostavlja infrastruktura." +"Način omrežja Wi-Fi; eden od \"infrastructure\", »mesh«, \"adhoc\" ali \"ap" +"\". Če je prazno, se predpostavlja infrastructure." -#: src/libnmc-setting/settings-docs.h.in:464 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:468 msgid "" "One of \"disable\" (2) (disable Wi-Fi power saving), \"enable\" (3) (enable " "Wi-Fi power saving), \"ignore\" (1) (don't touch currently configure " "setting) or \"default\" (0) (use the globally configured value). All other " "values are reserved." msgstr "" -"Eden od »onemogoči« (2) (onemogoči varčevanje z energijo Wi-Fi), " -"»omogoči« (3) (omogoči varčevanje z energijo Wi-Fi), »ignoriraj« (1) (ne " -"dotikajte se trenutno konfigurirne nastavitve) ali »privzeto« (0) (uporabite " -"globalno konfigurirano vrednost). Vse druge vrednosti so pridržane." +"Eden od »disable« (2) (onemogoči varčevanje z energijo Wi-Fi), »enable« (3) " +"(omogoči varčevanje z energijo Wi-Fi), »ignore« (1) (ne dotikajte se " +"trenutno prilagojene nastavitve) ali »default« (0) (uporabite globalno " +"prilagojeno vrednost). Vse druge vrednosti so rezervirane." -#: src/libnmc-setting/settings-docs.h.in:465 -#: src/libnmc-setting/settings-docs.h.in:468 +#: src/libnmc-setting/settings-docs.h.in:469 +#: src/libnmc-setting/settings-docs.h.in:472 msgid "This property is not implemented and has no effect." msgstr "Ta lastnost ni implementirana in nima učinka." -#: src/libnmc-setting/settings-docs.h.in:466 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:470 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 " @@ -11624,21 +11344,20 @@ msgid "" "NetworkManager automatically sets the seen BSSIDs and tracks them internally " "in \"/var/lib/NetworkManager/seen-bssids\" file." msgstr "" -"Seznam BSSID-jev (vsak BSSID je oblikovan kot naslov MAC, na primer " +"Seznam BSSID-jev (vsak BSSID je oblikovan kot naslov MAC, npr. " "»00:11:22:33:44:55«), ki so bili zaznani kot del omrežja Wi-Fi. " "NetworkManager interno spremlja prej videne BSSID-je. Lastnost je namenjena " "samo branju in odraža seznam BSSID upravitelja omrežja. Spremembe, ki jih " "naredite v tej lastnosti, ne bodo ohranjene. To ni običajna lastnost, ki bi " -"jo uporabnik konfiguriral. Namesto tega NetworkManager samodejno nastavi " -"vidne BSSID-je in jim interno sledi v datoteki »/var/lib/NetworkManager/seen-" +"jo uporabnik prilagodil. Namesto tega NetworkManager samodejno nastavi vidne " +"BSSID-je in jim interno sledi v datoteki »/var/lib/NetworkManager/seen-" "bssids«." -#: src/libnmc-setting/settings-docs.h.in:467 +#: src/libnmc-setting/settings-docs.h.in:471 msgid "SSID of the Wi-Fi network. Must be specified." msgstr "SSID omrežja Wi-Fi. Mora biti naveden." -#: src/libnmc-setting/settings-docs.h.in:469 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:473 msgid "" "The NMSettingWirelessWakeOnWLan options to enable. Not all devices support " "all options. May be any combination of \"any\" (0x2), \"disconnect\" (0x4), " @@ -11656,8 +11375,7 @@ msgstr "" "nastavitev) in »ignore« (0x8000) (za onemogočanje upravljanja Wake-on-LAN v " "NetworkManagerju)." -#: src/libnmc-setting/settings-docs.h.in:470 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:474 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\" " @@ -11666,14 +11384,12 @@ msgid "" "the \"leap-username\" and \"leap-password\" properties must be specified." msgstr "" "Ko je uporabljen WEP (tj. key-mgmt = »none« ali »ieee8021x«), tukaj navedite " -"algoritem za preverjanje pristnosti 802.11, ki ga zahteva AP. Eden od " -"»odprtih« za odprti sistem, »v skupni rabi« za ključ v skupni rabi ali " -"»preskok« za Cisco LEAP. Pri uporabi Cisco LEAP (tj. key-mgmt = \"ieee8021x" -"\" in auth-alg = \"leap\") je treba določiti lastnosti \"leap-username\" in " -"\"leap-password\"." +"algoritem za preverjanje pristnosti 802.11, ki ga zahteva AP. Eden izmed " +"»open« za odprti sistem, »shared« za ključ v skupni rabi ali »leap« za Cisco " +"LEAP. Pri uporabi Cisco LEAP (tj. key-mgmt = \"ieee8021x\" in auth-alg = " +"\"leap\") je treba določiti lastnosti \"leap-username\" in \"leap-password\"." -#: src/libnmc-setting/settings-docs.h.in:471 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:475 msgid "" "Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the " "connection. One of \"default\" (0) (use global default value), \"disable" @@ -11683,15 +11399,14 @@ msgid "" "FILS will be optionally enabled." msgstr "" "Označuje, ali mora biti za povezavo omogočena hitra nastavitev začetne " -"povezave (802.11ai). Eden od »privzetih« (0) (uporabite globalno privzeto " -"vrednost), »onemogoči« (1) (onemogoči FILS), »neobvezno« (2) (omogoči FILS, " -"če ga prosilec in dostopna točka podpirata) ali »obvezno« (3) (omogoči FILS " -"in ne uspe, če ni podprto). Če je nastavljena možnost »privzeto« (0) in ni " +"povezave (802.11ai). Eden od »default« (0) (uporabite globalno privzeto " +"vrednost), »disable« (1) (onemogoči FILS), »optional« (2) (omogoči FILS, če " +"ga prosilec in dostopna točka podpirata) ali »required« (3) (omogoči FILS in " +"ne uspe, če ni podprto). Če je nastavljena možnost »default« (0) in ni " "nastavljena nobena globalna privzeta nastavitev, bo sistem FILS izbirno " "omogočen." -#: src/libnmc-setting/settings-docs.h.in:472 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:476 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. " @@ -11699,12 +11414,11 @@ msgid "" "be one of \"wep40\", \"wep104\", \"tkip\", or \"ccmp\"." msgstr "" "Seznam algoritmov za šifriranje skupine/oddajanja, ki preprečujejo povezave " -"z omrežji Wi-Fi, ki ne uporabljajo enega od algoritmov na seznamu. Za " -"največjo združljivost pustite to lastnost prazno. Vsak element seznama je " -"lahko eden od »wep40«, »wep104«, »tkip« ali »ccmp«." +"z omrežji Wi-Fi, ki ne uporabljajo enega od algoritmov na seznamu. Za " +"največjo združljivost pustite to lastnost prazno. Vsak element seznama je " +"lahko eden izmed »wep40«, »wep104«, »tkip« ali »ccmp«." -#: src/libnmc-setting/settings-docs.h.in:473 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:477 msgid "" "Key management used for the connection. One of \"none\" (WEP or no password " "protection), \"ieee8021x\" (Dynamic WEP), \"owe\" (Opportunistic Wireless " @@ -11713,15 +11427,14 @@ msgid "" "enterprise only). This property must be set for any Wi-Fi connection that " "uses security." msgstr "" -"Upravljanje ključev, ki se uporablja za povezavo. Eno od »none« (WEP ali " +"Upravljanje ključev, ki se uporablja za povezavo. Ena izmed »none« (WEP ali " "brez zaščite z geslom), »ieee8021x« (dinamični WEP), »dolg« (oportunistično " "brezžično šifriranje), »wpa-psk« (WPA2 + WPA3 osebno), »sae« (samo WPA3 " "osebno), »wpa-eap« (WPA2 + WPA3 enterprise) ali »wpa-eap-suite-b-192« (samo " "WPA3 enterprise). Ta lastnost mora biti nastavljena za vsako povezavo Wi-Fi, " "ki uporablja varnost." -#: src/libnmc-setting/settings-docs.h.in:474 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:478 msgid "" "The login password for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" " "and auth-alg = \"leap\")." @@ -11729,23 +11442,19 @@ msgstr "" "Geslo za prijavo za podedovane povezave LEAP (tj. key-mgmt = »ieee8021x« in " "auth-alg = »leap«)." -#: src/libnmc-setting/settings-docs.h.in:475 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:479 msgid "Flags indicating how to handle the \"leap-password\" property." -msgstr "" -"Zastavice, ki označujejo, kako ravnati z lastnostjo »preskočiti geslo«." +msgstr "Zastavice, ki označujejo, kako ravnati z lastnostjo »leap-password«." -#: src/libnmc-setting/settings-docs.h.in:476 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:480 msgid "" "The login username for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" " "and auth-alg = \"leap\")." msgstr "" -"Uporabniško ime za prijavo za podedovane povezave LEAP (tj. key-mgmt = " +"Uporabniško ime za prijavo za zastarele povezave LEAP (tj. key-mgmt = " "\"ieee8021x\" in auth-alg = \"leap\")." -#: src/libnmc-setting/settings-docs.h.in:477 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:481 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 " @@ -11754,11 +11463,10 @@ msgid "" msgstr "" "Seznam algoritmov za šifriranje v paru, ki preprečujejo povezave z omrežji " "Wi-Fi, ki ne uporabljajo enega od algoritmov na seznamu. Za največjo " -"združljivost pustite to lastnost prazno. Vsak element seznama je lahko eden " -"od elementov »tkip« ali »ccmp«." +"združljivost pustite to lastnost prazno. Vsak element seznama je lahko " +"»tkip« ali »ccmp«." -#: src/libnmc-setting/settings-docs.h.in:478 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:482 msgid "" "Indicates whether Protected Management Frames (802.11w) must be enabled for " "the connection. One of \"default\" (0) (use global default value), \"disable" @@ -11768,14 +11476,13 @@ msgid "" "will be optionally enabled." msgstr "" "Označuje, ali morajo biti za povezavo omogočeni zaščiteni okvirji za " -"upravljanje (802.11w). Ena od »privzetih« (0) (uporabi globalno privzeto " -"vrednost), »onemogoči« (1) (onemogoči PMF), »neobvezna« (2) (omogoči PMF, če " -"jo prosilec in dostopna točka podpirata) ali »zahtevana« (3) (omogoči PMF in " -"ne uspe, če ni podprta). Če je nastavljena na »privzeto« (0) in ni " -"nastavljena nobena globalna privzeta nastavitev, bo PMF izbirno omogočen." +"upravljanje (802.11w). Ena izmed »default« (0) (uporabi globalno privzeto " +"vrednost), »disable« (1) (onemogoči PMF), »optional« (2) (omogoči PMF, če jo " +"prosilec in dostopna točka podpirata) ali »required« (3) (omogoči PMF in ne " +"uspe, če ni podprta). Če je nastavljena na »default« (0) in ni nastavljena " +"nobena globalna privzeta nastavitev, bo PMF izbirno omogočen." -#: src/libnmc-setting/settings-docs.h.in:479 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:483 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 " @@ -11783,10 +11490,9 @@ msgid "" msgstr "" "Seznam nizov, ki določajo dovoljene različice protokola WPA, ki jih je treba " "uporabiti. Vsak element je lahko en »wpa« (dovoli WPA) ali »rsn« (dovoli " -"WPA2/RSN). Če ni navedeno, so dovoljene povezave WPA in RSN." +"WPA2/RSN). Če ni navedeno, so dovoljene povezave WPA in RSN." -#: src/libnmc-setting/settings-docs.h.in:480 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:484 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 " @@ -11794,16 +11500,16 @@ msgid "" "hexadecimal character. The WPA3-Personal networks use a passphrase of any " "length for SAE authentication." msgstr "" -"Vnaprej skupni ključ za omrežja WPA. Za WPA-PSK je to geslo ASCII z 8 do 63 " +"Vnaprej deljeni ključ za omrežja WPA. Za WPA-PSK je to geslo ASCII z 8 do 63 " "znaki, ki je (kot je določeno v standardu 802.11i) zgoščeno, da se izpelje " "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:481 +#: src/libnmc-setting/settings-docs.h.in:485 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:482 +#: src/libnmc-setting/settings-docs.h.in:486 msgid "" "Flags indicating how to handle the \"wep-key0\", \"wep-key1\", \"wep-key2\", " "and \"wep-key3\" properties." @@ -11811,7 +11517,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:483 +#: src/libnmc-setting/settings-docs.h.in:487 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 " @@ -11825,44 +11531,39 @@ msgstr "" "in bo razpršeno z uporabo de facto metode MD5, da se izpelje dejanski ključ " "WEP." -#: src/libnmc-setting/settings-docs.h.in:484 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:488 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." msgstr "" -"Tipka WEP indeksa 0. To je ključ WEP, ki se uporablja v večini omrežij. " +"Ključ WEP z indeksom 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:485 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:489 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." msgstr "" -"Indeks 1 Ključ WEP. Tega indeksa WEP ne uporablja večina omrežij. Oglejte " +"Indeks 1 ključa 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:486 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:490 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." msgstr "" -"Indeks 2 Ključ WEP. Tega indeksa WEP ne uporablja večina omrežij. Oglejte " +"Indeks 2 ključa 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:487 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:491 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." msgstr "" -"Indeks 3 Ključ WEP. Tega indeksa WEP ne uporablja večina omrežij. Oglejte " +"Indeks 3 ključa 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:488 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:492 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 " @@ -11870,13 +11571,12 @@ msgid "" "Linksys WRT54G) number the keys 1 - 4." msgstr "" "Ko je uporabljen statični WEP (tj. key-mgmt = »none«) in AP uporablja " -"neprivzeti indeks ključa WEP, vstavite ta indeks ključa WEP sem. Veljavne " -"vrednosti so od 0 (privzeti ključ) do 3. Upoštevajte, da nekatere " -"potrošniške dostopne točke (kot je Linksys WRT54G) oštevilčijo tipke od 1 do " -"4." +"neprivzeti indeks ključa WEP, vstavite ta indeks ključa WEP sem. Veljavne " +"vrednosti so od 0 (privzeti ključ) do 3. Upoštevajte, da nekatere " +"potrošniške dostopne točke (kot je Linksys WRT54G) oštevilčijo ključe od 1 " +"do 4." -#: src/libnmc-setting/settings-docs.h.in:489 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:493 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 " @@ -11889,7 +11589,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:490 +#: src/libnmc-setting/settings-docs.h.in:494 msgid "" "IEEE 802.15.4 channel. A positive integer or -1, meaning \"do not set, use " "whatever the device is already set to\"." @@ -11897,7 +11597,7 @@ 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:491 +#: src/libnmc-setting/settings-docs.h.in:495 msgid "" "If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) " "MAC layer device whose permanent MAC address matches." @@ -11905,7 +11605,7 @@ msgstr "" "Č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:492 +#: src/libnmc-setting/settings-docs.h.in:496 msgid "" "IEEE 802.15.4 channel page. A positive integer or -1, meaning \"do not set, " "use whatever the device is already set to\"." @@ -11913,17 +11613,15 @@ 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:493 +#: src/libnmc-setting/settings-docs.h.in:497 msgid "IEEE 802.15.4 Personal Area Network (PAN) identifier." msgstr "Identifikator osebnega omrežja IEEE 802.15.4 (PAN)." -#: src/libnmc-setting/settings-docs.h.in:494 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:498 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:495 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:499 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 " @@ -11935,8 +11633,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:496 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:500 msgid "" "The queue ID of this bond port. The maximum value of queue ID is the number " "of TX queues currently active in device." @@ -11944,8 +11641,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:497 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:501 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. " @@ -11953,12 +11649,11 @@ msgid "" "NetworkManager assumes the value to be \"true\" (1)." msgstr "" "Ali je ime gostitelja sistema mogoče določiti iz DHCP v tej povezavi. Če je " -"nastavljena na »privzeto« (-1), se uporabi vrednost iz globalne " -"konfiguracije. Če lastnost nima vrednosti v globalni konfiguraciji, " -"NetworkManager predpostavi, da je vrednost »true« (1)." +"nastavljena na »default« (-1), se uporabi vrednost iz globalne prilagoditve. " +"Če lastnost nima vrednosti v globalni prilagoditvi, NetworkManager " +"predpostavi, da je vrednost »true« (1)." -#: src/libnmc-setting/settings-docs.h.in:498 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:502 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 " @@ -11966,12 +11661,11 @@ msgid "" "global configuration, NetworkManager assumes the value to be \"true\" (1)." msgstr "" "Ali je ime gostitelja sistema mogoče določiti z obratnim iskanjem naslovov " -"DNS v tej napravi. Če je nastavljena na »privzeto« (-1), se uporabi vrednost " -"iz globalne konfiguracije. Če lastnost nima vrednosti v globalni " -"konfiguraciji, NetworkManager predpostavi, da je vrednost »true« (1)." +"DNS v tej napravi. Če je nastavljena na »default« (-1), se uporabi vrednost " +"iz globalne prilagoditve. Če lastnost nima vrednosti v globalni " +"prilagoditvi, NetworkManager predpostavi, da je vrednost »true« (1)." -#: src/libnmc-setting/settings-docs.h.in:499 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:503 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 " @@ -11981,16 +11675,15 @@ msgid "" "configuration is used. If the property doesn't have a value in the global " "configuration, NetworkManager assumes the value to be \"false\" (0)." msgstr "" -"Če je nastavljena na »true« (1), NetworkManager poskuša pridobiti ime " +"Če je nastavljeno na »true« (1), NetworkManager poskuša pridobiti ime " "gostitelja prek DHCPv4/DHCPv6 ali obratnega iskanja DNS v tej napravi le, če " "ima naprava privzeto pot za dano družino naslovov (IPv4/IPv6). Če je " "nastavljena na »false« (0), lahko ime gostitelja nastavite iz te naprave, " -"tudi če nima privzete poti. Če je nastavljena na »privzeto« (-1), se uporabi " -"vrednost iz globalne konfiguracije. Če lastnost nima vrednosti v globalni " -"konfiguraciji, NetworkManager predpostavi, da je vrednost »false« (0)." +"tudi če nima privzete poti. Če je nastavljena na »default« (-1), se uporabi " +"vrednost iz globalne prilagoditve. Če lastnost nima vrednosti v globalni " +"prilagoditvi, NetworkManager predpostavi, da je vrednost »false« (0)." -#: src/libnmc-setting/settings-docs.h.in:500 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:504 msgid "" "The relative priority of this connection to determine the system hostname. A " "lower numerical value is better (higher priority). A connection with higher " @@ -12004,18 +11697,16 @@ msgid "" "hostname." msgstr "" "Relativna prioriteta te povezave za določitev imena gostitelja sistema. " -"Nižja številčna vrednost je boljša (višja prioriteta). Povezava z višjo " +"Nižja številčna vrednost je boljša (višja prioriteta). Povezava z višjo " "prioriteto se upošteva pred povezavami z nižjo prioriteto. Če je vrednost " -"enaka nič, jo lahko preglasite z globalno vrednostjo iz konfiguracije " -"programa NetworkManager. Če lastnost nima vrednosti v globalni " -"konfiguraciji, se predpostavlja, da je vrednost 100. Negativne vrednosti " -"imajo poseben učinek izključitve drugih povezav z večjo številčno prednostno " -"vrednostjo; Torej, v prisotnosti vsaj ene negativne prioritete, bodo za " -"določitev imena gostitelja uporabljene samo povezave z najnižjo prioritetno " -"vrednostjo." +"enaka nič, jo lahko preglasite z globalno vrednostjo iz prilagoditve " +"programa NetworkManager. Če lastnost nima vrednosti v globalni prilagoditvi, " +"se predpostavlja, da je vrednost 100. Negativne vrednosti imajo poseben " +"učinek izključitve drugih povezav z večjo številčno prednostno vrednostjo; " +"Torej, v prisotnosti vsaj ene negativne prioritete, bodo za določitev imena " +"gostitelja uporabljene samo povezave z najnižjo prioritetno vrednostjo." -#: src/libnmc-setting/settings-docs.h.in:501 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:505 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 " @@ -12025,8 +11716,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:502 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:506 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 " @@ -12036,8 +11726,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:503 -#, fuzzy +#: src/libnmc-setting/settings-docs.h.in:507 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 " @@ -12047,7 +11736,7 @@ 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:504 +#: src/libnmc-setting/settings-docs.h.in:508 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 " @@ -12057,11 +11746,11 @@ msgstr "" "biti med 0 in 4294967295. Če je nastavljena na -1, se obstoječa vrednost " "ohrani." -#: src/libnmc-setting/settings-docs.h.in:506 +#: src/libnmc-setting/settings-docs.h.in:510 msgid "A dictionary of key/value pairs with external-ids for OVS." msgstr "Slovar parov ključ/vrednost z external-id-ji za OVS." -#: src/libnmc-setting/settings-docs.h.in:507 +#: src/libnmc-setting/settings-docs.h.in:511 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 " @@ -12071,7 +11760,7 @@ msgstr "" "»other_config« v priročniku »ovs-vswitchd.conf.db« za ključe, ki jih podpira " "OVS." -#: src/libnmc-setting/settings-docs.h.in:508 +#: src/libnmc-setting/settings-docs.h.in:512 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 - " @@ -12083,7 +11772,7 @@ msgstr "" "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 +#: src/libnmc-setting/settings-docs.h.in:513 msgid "" "This property specifies the peer interface name of the veth. This property " "is mandatory." @@ -12162,20 +11851,18 @@ msgid "Invalid option. Please use --help to see a list of valid options." msgstr "Neveljavna možnost. Uporabite --help za seznam veljavnih možnosti." #: src/nmcli/agent.c:25 -#, fuzzy msgid "" "Usage: nmcli agent { COMMAND | help }\n" "\n" "COMMAND := { secret | polkit | all }\n" "\n" msgstr "" -"Uporaba: nmcli agent { UKAZ | pomoč }\n" +"Uporaba: nmcli agent { UKAZ | help }\n" "\n" -"UKAZ := { tajno | polkit | vse }\n" +"UKAZ := { secert | polkit | all }\n" "\n" #: src/nmcli/agent.c:32 -#, fuzzy msgid "" "Usage: nmcli agent secret { help }\n" "\n" @@ -12188,12 +11875,11 @@ msgstr "" "Uporaba: nmcli agent secret { help }\n" "\n" "Zažene nmcli kot skrivnega agenta NetworkManager. Ko NetworkManager zahteva\n" -"geslo, ki ga prosi za registrirane agente. Ta ukaz omogoča delovanje nmcli\n" +"geslo, zanj prosi registrirane agente. Ta ukaz omogoča delovanje nmcli\n" "in če je potrebno geslo, prosi uporabnika zanj.\n" "\n" #: src/nmcli/agent.c:42 -#, fuzzy msgid "" "Usage: nmcli agent polkit { help }\n" "\n" @@ -12206,12 +11892,11 @@ msgstr "" "Uporaba: nmcli agent polkit { help }\n" "\n" "Registrira nmcli kot dejanje polkit za uporabniško sejo.\n" -"Ko demon polkit zahteva dovoljenje, nmcli vpraša uporabnika in da\n" -"Odgovor nazaj na Polkit.\n" +"Ko prikriti proces polkit zahteva dovoljenje, nmcli vpraša uporabnika in\n" +"vrne odgovor polkit.\n" "\n" #: src/nmcli/agent.c:52 -#, fuzzy msgid "" "Usage: nmcli agent all { help }\n" "\n" @@ -12220,16 +11905,15 @@ msgid "" msgstr "" "Uporaba: nmcli agent all { help }\n" "\n" -"Izvaja nmcli kot skrivnost NetworkManager in polkit agent.\n" +"Izvaja nmcli kot skrivnost NetworkManager in kot agenta polkit.\n" "\n" #: src/nmcli/agent.c:141 -#, fuzzy msgid "nmcli successfully registered as a NetworkManager's secret agent.\n" -msgstr "nmcli se je uspešno registriral kot tajni agent NetworkManagerja.\n" +msgstr "" +"nmcli se je uspešno registriral kot tajni agent programa NetworkManager.\n" #: src/nmcli/agent.c:143 -#, fuzzy msgid "Error: secret agent initialization failed" msgstr "Napaka: inicializacija tajnega agenta ni uspela" @@ -12396,7 +12080,6 @@ msgid "never" msgstr "nikoli" #: src/nmcli/connections.c:1116 -#, fuzzy msgid "" "Usage: nmcli connection { COMMAND | help }\n" "\n" @@ -12437,46 +12120,42 @@ msgid "" msgstr "" "Uporaba: nmcli povezava { UKAZ | pomoč }\n" "\n" -"UKAZ := { prikaži | gor | navzdol | dodaj | spremeni | kloniraj | uredi | " -"izbriši | spremljaj | ponovno naloži | naloži | uvozi | izvozi }\n" +"UKAZ := { show | up | down | add | modify | clone | edit | delete | monitor " +"| reload | load | import | export }\n" "\n" -"pokaži [--active] [--order ]\n" -" pokaži [--active] [id | uuid | pot | apath] ...\n" +" show [--active] [--order ]\n" +" show [--active] [id | uuid | path | apath] ...\n" "\n" -"up [[id | uuid | pot] ] [ifname ] [ap ] [passwd-datoteka " -"]\n" +" up [[id | uuid | path] ] [ifname ] [ap ] [passwd-file " +"]\n" "\n" -"navzdol [id | uuid | pot | apath] ...\n" +" down [id | uuid | path | apath] ...\n" "\n" -"Dodajte COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- " -"([+|-]. )+]\n" +" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS [-- " +"([+|-]. )+]\n" "\n" -"Spremeni [--začasno] [id | uuid | pot] ([+|-]. " -")+\n" +" modify [--temporary] [id | uuid | path] ([+|-]. " +")+\n" "\n" -"klon [--začasno] [id | uuid | pot ] \n" +" clone [--temporary] [id | uuid | path ] \n" "\n" -"uredi [id | uuid | pot] \n" -" edit [vrsta ] [con-name ]\n" +" edit [id | uuid | path] \n" +" edit [type ] [con-name ]\n" "\n" -"izbriši [id | uuid | pot] \n" +" delete [id | uuid | path] \n" "\n" -"monitor [id | uuid | pot] ...\n" +" monitor [id | uuid | path] ...\n" "\n" -"Reload\n" +" reload\n" "\n" -"naloži [ ... ]\n" +" load [ ... ]\n" "\n" -"Uvoz datoteke tipa [--temporary] \n" +" import [--temporary] type \n" "\n" -"izvoz [id | uuid | pot] []\n" +" export [id | uuid | path] []\n" "\n" -"" #: src/nmcli/connections.c:1142 -#, fuzzy msgid "" "Usage: nmcli connection show { ARGUMENTS | help }\n" "\n" @@ -12501,32 +12180,29 @@ msgid "" "account. Use global --show-secrets option to reveal associated secrets as " "well.\n" msgstr "" -"Uporaba: nmcli connection show { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection show { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [--aktiven] [--vrstni red ]\n" +"ARGUMENTI := [--active] [--order ]\n" "\n" "Navedite profile povezave v pomnilniku in na disku, od katerih so nekateri " "lahko tudi\n" -"Aktivno, če naprava uporablja ta profil povezave. Brez parametra, vse\n" -"Profili so navedeni. Če je določena možnost --active, je določena samo " -"aktivna možnost\n" -"prikazani so profili. --order omogoča naročanje povezav po meri (glejte " -"stran z navodili).\n" +"aktivni, če naprava uporablja ta profil povezave. Brez parametra, so " +"navedeni\n" +"vsi profili. Če je določena možnost --active, so prikazani samo aktivni\n" +"profili. --order omogoča naročanje povezav po meri (glejte stran z " +"navodili).\n" "\n" -"ARGUMENTI := [--active] [id | uuid | pot | apath] ...\n" +"ARGUMENTI := [--active] [id | uuid | path | apath] ...\n" "\n" -"Pokaži podrobnosti za določene povezave. Privzeto sta statična " -"konfiguracija\n" -"in se prikažejo aktivni podatki o povezavi. Možno je filtrirati izhod\n" +"Pokaže podrobnosti za določene povezave. Privzeto sta prikazani statična\n" +"prilagoditev in aktivna povezava. Možno je filtrirati izhod\n" "z uporabo globalne možnosti '--fields'. Za več informacij glejte stran " "priročnika.\n" -"Če je določena možnost --active, se vzamejo samo aktivni profili\n" -"račun. Uporabite možnost global --show-secrets, da razkrijete tudi povezane " +"Če je določena možnost --active, se upoštevajo samo aktivni profili.\n" +"Uporabite možnost global --show-secrets, da razkrijete tudi povezane " "skrivnosti.\n" -"" #: src/nmcli/connections.c:1164 -#, fuzzy msgid "" "Usage: nmcli connection up { ARGUMENTS | help }\n" "\n" @@ -12549,19 +12225,19 @@ msgid "" "passwd-file - file with password(s) required to activate the connection\n" "\n" msgstr "" -"Uporaba: nmcli povezava navzgor { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection up { ARGUMENTI | help }\n" "\n" "ARGUMENTI := [id | uuid | pot] [ifname ] [ap ] [nsp " -"] [passwd-datoteka ]\n" +"] [passwd-file ]\n" "\n" "Aktivirajte povezavo v napravi. Profil, ki ga je treba aktivirati, je " "označen z njegovim\n" -"ime, pot UUID ali D-Bus.\n" +"imenom, UUID-jem ali potjo D-Bus.\n" "\n" -"ARGUMENTI := ifname [ap ] [nsp ] [passwd-datoteka " -"]\n" +"ARGUMENTI := ifname [ap ] [nsp ] [passwd-file ]\n" "\n" -"Aktivirajte napravo s povezavo. Izbran je profil povezave\n" +"Aktivirajte napravo s povezavo. Profil povezave je izbran\n" "samodejno s strani NetworkManagerja.\n" "\n" "ifname - določa napravo, na kateri se bo povezava aktivirala\n" @@ -12569,10 +12245,8 @@ msgstr "" "nsp - določa NSP za povezavo (velja samo za WiMAX)\n" "passwd-file - datoteka z geslom, potrebnim za aktiviranje povezave\n" "\n" -"" #: src/nmcli/connections.c:1188 -#, fuzzy msgid "" "Usage: nmcli connection down { ARGUMENTS | help }\n" "\n" @@ -12584,19 +12258,17 @@ msgid "" "UUID or D-Bus path.\n" "\n" msgstr "" -"Uporaba: nmcli povezava navzdol { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection down { ARGUMENTI | help }\n" "\n" "ARGUMENTI := [id | uuid | pot | apath] ...\n" "\n" "Deaktivirajte povezavo z napravo (ne da bi preprečili napravi\n" -"nadaljnja samodejna aktivacija). Profil, ki ga je treba deaktivirati, je " -"označen z njegovim imenom,\n" -"Pot UUID ali D-Bus.\n" +"nadaljnjo samodejno aktivacijo). Profil, ki ga je treba deaktivirati, je " +"označen\n" +"s svojim imenom, UUIID-jem ali potjo D-Bus.\n" "\n" -"" #: src/nmcli/connections.c:1201 -#, fuzzy msgid "" "Usage: nmcli connection add { ARGUMENTS | help }\n" "\n" @@ -12760,60 +12432,174 @@ msgid "" " [ip6 ] [gw6 ]\n" "\n" msgstr "" -"Uporaba: povezava nmcli add { ARGUMENTS | pomoč } ARGUMENTI := " -"COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- " -"([+|-] . )+] COMMON_OPTIONS: vrsta [če " -"ime | \"*\"] [con-name ] [samodejna " -"povezava da|ne] [shrani da|ne] [master ] [suženjski tip ] SPECIFIČNE_MOŽNOSTI VRSTE: " -"ethernet: [mac ] [klonirano-mac ] " -"[mtu ] wifi: ssid [mac ] [klonirano-mac ] [mtu ] [infrastruktura načina|ap|adhoc] wimax: [mac ] [nsp ] pppoe: uporabniško ime [geslo ] [storitev ] [mtu ] [mac ] " -"gsm: apn [uporabnik ] [geslo ] cdma: " -"[uporabnik ] [geslo ] infiniband: [mac ] " -"[mtu ] [datagram transportnega načina | povezan] [starš ] [p-" -"tipka ] bluetooth: [naslov ] [bt-type panu|" -"nap|dun-gsm|dun-cdma] vlan: dev id [zastave ] [vhod ] " -"[izhod ] [mtu ] vez: [mode balance-rr (0) | " -"aktivna varnostna kopija (1) | ravnovesje-xor (2) | oddaja (3) | 802.3ad (4) " -"| ravnovesje-tlb (5) | ravnovesje-alb (6)] [prim ] [miimon ] " -"[zakasnitev ] [posodobitev ] [arp-interval ] [arp-ip-" -"target ] [lap-hitrost počasna (0) | hitro (1)] obveznik-suženj: " -"gospodar [id čakalne vrste " -"<0-65535>] ekipa: [konfig | ] team-slave: " -"gospodar [konfig | ] most: [stp da|ne] [prednost ] [zakasnitev posredovanja " -"<2-30>] [čas zdravja <1-10>] [največja starost <6-40>] [čas staranja " -"<0-1000000>] [vohljanje več oddaj da|ne] [ mac ] bridge-slave: " -"gospodar [priority <0-63>] " -"[path-cost <1-65535>] [hairpin yes|ne] vpn: vpn-type vpnc|openvpn|pptp|" -"openconnect|openswan|libreswan|ssh|l2tp|iodine|... [uporabnik ] " -"olpc-mreža: ssid [kanal <1-13>] [dhcp-anycast ] adsl: " -"uporabniško ime protokol pppoa|pppoe|ipoatm [geslo ] " -"[inkapsulacija vcmux|llc] tun: način tun|tap [lastnik ] [skupina ] " -"[pi da|ne] [vnet-hdr da|ne] [več čakalnih vrst da|ne] ip-tunnel: način ipip|" -"gre|sit|isatap|vti|ip6ip6|ipip6|ip6gre|vti6 oddaljeno " -"[lokalno ] [razv ] macsec: razv " -"način [cak ckn ] [šifriraj da|ne] [vrata 1-65534] " -"macvlan: dev način vepa|" -"most|zasebno|passthru|vir [tapnite da|ne] vxlan: id [daljinski ] [lokalno ] [razv ] [izvorna-vrata-min <0-65535>] [izvorna-" -"največja-vrata <0-65535>] [ciljna-vrata <0-65535>] wpan: [kratki naslov " -"<0x0000-0xffff>] [pan- id <0x0000-0xffff>] [stran ] " -"[kanal ] [mac ] 6lowpan: razv dummy: SLAVE_OPTIONS: most: [prioriteta " -"<0-63>] [strošek-poti <1-65535>] [lasnica da|ne] ekipa: [konfig | ] vez: [id-čakalne vrste <0-65535>] IP_MOŽNOSTI: [ip4 ] [gw4 ] [ip6 ] [gw6 ]\n" +"Uporaba: nmcli connection add { ARGUMENTI | help }\n" +"\n" +"ARGUMENTI := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS " +"[-- ([+|-]. )+]\n" +"\n" +" COMMON_OPTIONS:\n" +" type \n" +" [ifname | \"*\"]\n" +" [con-name ]\n" +" [autoconnect yes|no]\n" +" [save yes|no]\n" +" [controller ]\n" +" [port-type ]\n" +"\n" +" TYPE_SPECIFIC_OPTIONS:\n" +" ethernet: [mac ]\n" +" [cloned-mac ]\n" +" [mtu ]\n" +"\n" +" wifi: ssid \n" +" [mac ]\n" +" [cloned-mac ]\n" +" [mtu ]\n" +" [mode infrastructure|ap|adhoc]\n" +"\n" +" wimax: [mac ]\n" +" [nsp ]\n" +"\n" +" pppoe: username \n" +" [password ]\n" +" [service ]\n" +" [mtu ]\n" +" [mac ]\n" +"\n" +" gsm: apn \n" +" [user ]\n" +" [password ]\n" +"\n" +" cdma: [user ]\n" +" [password ]\n" +"\n" +" infiniband: [mac ]\n" +" [mtu ]\n" +" [transport-mode datagram | connected]\n" +" [parent ]\n" +" [p-key ]\n" +"\n" +" bluetooth: [addr ]\n" +" [bt-type panu|nap|dun-gsm|dun-cdma]\n" +"\n" +" vlan: dev \n" +" id \n" +" [flags ]\n" +" [ingress ]\n" +" [egress ]\n" +" [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 ]\n" +" [miimon ]\n" +" [downdelay ]\n" +" [updelay ]\n" +" [arp-interval ]\n" +" [arp-ip-target ]\n" +" [lacp-rate slow (0) | fast (1)]\n" +"\n" +" bond-slave: controller \n" +" [queue-id <0-65535>]\n" +"\n" +" team: [config |]\n" +"\n" +" team-slave: controller \n" +" [config |]\n" +"\n" +" bridge: [stp yes|no]\n" +" [priority ]\n" +" [forward-delay <2-30>]\n" +" [hello-time <1-10>]\n" +" [max-age <6-40>]\n" +" [ageing-time <0-1000000>]\n" +" [multicast-snooping yes|no]\n" +" [mac ]\n" +"\n" +" bridge-slave: controller \n" +" [priority <0-63>]\n" +" [path-cost <1-65535>]\n" +" [hairpin yes|no]\n" +"\n" +" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|" +"ssh|l2tp|iodine|...\n" +" [user ]\n" +"\n" +" olpc-mesh: ssid \n" +" [channel <1-13>]\n" +" [dhcp-anycast ]\n" +"\n" +" adsl: username \n" +" protocol pppoa|pppoe|ipoatm\n" +" [password ]\n" +" [encapsulation vcmux|llc]\n" +"\n" +" tun: mode tun|tap\n" +" [owner ]\n" +" [group ]\n" +" [pi yes|no]\n" +" [vnet-hdr yes|no]\n" +" [multi-queue yes|no]\n" +"\n" +" ip-tunnel: mode ipip|gre|sit|isatap|vti|ip6ip6|ipip6|ip6gre|vti6\n" +" remote \n" +" [local ]\n" +" [dev ]\n" +"\n" +" macsec: dev \n" +" mode \n" +" [cak ckn ]\n" +" [encrypt yes|no]\n" +" [port 1-65534]\n" +"\n" +"\n" +" macvlan: dev \n" +" mode vepa|bridge|private|passthru|source\n" +" [tap yes|no]\n" +"\n" +" vxlan: id \n" +" [remote ]\n" +" [local ]\n" +" [dev ]\n" +" [source-port-min <0-65535>]\n" +" [source-port-max <0-65535>]\n" +" [destination-port <0-65535>]\n" +"\n" +" wpan: [short-addr <0x0000-0xffff>]\n" +" [pan-id <0x0000-0xffff>]\n" +" [page ]\n" +" [channel ]\n" +" [mac ]\n" +"\n" +" 6lowpan: dev \n" +" dummy:\n" +"\n" +" PORT_OPTIONS:\n" +" bridge: [priority <0-63>]\n" +" [path-cost <1-65535>]\n" +" [hairpin yes|no]\n" +"\n" +" team: [config |]\n" +"\n" +" bond: [queue-id <0-65535>]\n" +"\n" +" IP_OPTIONS:\n" +" [ip4 ] [gw4 ]\n" +" [ip6 ] [gw6 ]\n" "\n" #: src/nmcli/connections.c:1331 -#, fuzzy msgid "" "Usage: nmcli connection modify { ARGUMENTS | help }\n" "\n" @@ -12841,19 +12627,20 @@ msgid "" "nmcli con mod em1-1 remove sriov\n" "\n" msgstr "" -"Uporaba: nmcli povezava modify { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection modify { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [id | uuid | pot] ([+|-]. )+\n" +"ARGUMENTI := [id | uuid | pot] ([+|-]. " +")+\n" "\n" "Spremenite eno ali več lastnosti profila povezave.\n" -"Profil je označen z imenom, UUID ali D-Bus potjo. Za več vrednosti\n" -"Lastnosti: Za ime nastanitve lahko uporabite izbirno predpono »+« ali »-«.\n" +"Profil je označen z imenom, UUID ali potjo D-Bus. Za več vrednostne\n" +"lastnosti: za ime nastanitve lahko uporabite izbirno predpono »+« ali »-«.\n" "Znak \"+\" omogoča dodajanje elementov namesto prepisovanja celotne " "vrednosti.\n" "Znak '-' omogoča odstranjevanje izbranih elementov namesto celotne " "vrednosti.\n" "\n" -"ARGUMENTI := odstraniti \n" +"ARGUMENTI := remove \n" "\n" "Odstranite nastavitev iz profila povezave.\n" "\n" @@ -12866,12 +12653,10 @@ msgstr "" "nmcli con mod em1-1 -ipv6.addr \"abbe::café/56\"\n" "nmcli con mod bond0 +bond.options mii=500\n" "nmcli con mod bond0 -bond.options downdelay\n" -"nmcli con mod em1-1 odstrani sriov\n" +"nmcli con mod em1-1 remove sriov\n" "\n" -"" #: src/nmcli/connections.c:1359 -#, fuzzy msgid "" "Usage: nmcli connection clone { ARGUMENTS | help }\n" "\n" @@ -12883,18 +12668,16 @@ msgid "" "id (provided as argument).\n" "\n" msgstr "" -"Uporaba: nmcli klon povezave { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection clone { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [--začasno] [id | uuid | pot] \n" +"ARGUMENTI := [--temporary] [id | uuid | path] \n" "\n" "Klonirajte obstoječi profil povezave. Novo ustvarjena povezava bo\n" -"natančno kopijo lastnosti , razen lastnosti UUID (bo ustvarjena) in\n" -"id (zagotovljeno kot argument).\n" +"natančna kopija , razen lastnosti UUID (bo ustvarjena) in\n" +"id (zagotovljeno kot argument ).\n" "\n" -"" #: src/nmcli/connections.c:1371 -#, fuzzy msgid "" "Usage: nmcli connection edit { ARGUMENTS | help }\n" "\n" @@ -12908,21 +12691,19 @@ msgid "" "Add a new connection profile in an interactive editor.\n" "\n" msgstr "" -"Uporaba: nmcli povezava uredi { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection edit { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [id | uuid | pot] \n" +"ARGUMENTI := [id | uuid | path] \n" "\n" "Urejanje obstoječega profila povezave v interaktivnem urejevalniku.\n" -"Profil je označen z imenom, UUID ali D-Bus potjo\n" +"Profil se identificira z imenom, UUID ali potjo D-Bus\n" "\n" -"ARGUMENTI := [vrsta ] [con-name ]\n" +"ARGUMENTI := [type ] [con-name ]\n" "\n" "Dodajte nov profil povezave v interaktivnem urejevalniku.\n" "\n" -"" #: src/nmcli/connections.c:1386 -#, fuzzy msgid "" "Usage: nmcli connection delete { ARGUMENTS | help }\n" "\n" @@ -12932,17 +12713,15 @@ msgid "" "The profiles are identified by their name, UUID or D-Bus path.\n" "\n" msgstr "" -"Uporaba: nmcli povezava delete { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection delete { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [id | uuid | pot] , ...\n" +"ARGUMENTI := [id | uuid | path] , ...\n" "\n" "Izbrišite profile povezave.\n" -"Profili so označeni z imenom, UUID ali D-Bus potjo.\n" +"Profili so označeni z imenom, UUID ali potjo D-Bus.\n" "\n" -"" #: src/nmcli/connections.c:1397 -#, fuzzy msgid "" "Usage: nmcli connection monitor { ARGUMENTS | help }\n" "\n" @@ -12953,31 +12732,28 @@ msgid "" "Monitors all connection profiles in case none is specified.\n" "\n" msgstr "" -"Uporaba: nmcli nadzor povezave { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection monitor { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [id | uuid | pot] ...\n" +"ARGUMENTI := [id | uuid | path] ...\n" "\n" "Spremljanje dejavnosti profila povezave.\n" "Ta ukaz natisne vrstico vsakič, ko se spremeni določena povezava.\n" "Spremlja vse profile povezave, če noben ni določen.\n" "\n" -"" #: src/nmcli/connections.c:1409 -#, fuzzy msgid "" "Usage: nmcli connection reload { help }\n" "\n" "Reload all connection files from disk.\n" "\n" msgstr "" -"Uporaba: nmcli povezava reload { help }\n" +"Uporaba: nmcli connection reload { help }\n" "\n" "Znova naložite vse datoteke za povezavo z diska.\n" "\n" #: src/nmcli/connections.c:1418 -#, fuzzy msgid "" "Usage: nmcli connection load { ARGUMENTS | help }\n" "\n" @@ -12989,7 +12765,7 @@ msgid "" "state.\n" "\n" msgstr "" -"Uporaba: nmcli povezava load { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection load { ARGUMENTI | pomoč }\n" "\n" "ARGUMENTI := [...]\n" "\n" @@ -12997,12 +12773,10 @@ msgstr "" "uporabite po ročnem\n" "urejanje datoteke za povezavo, da zagotovi, da je NetworkManager seznanjen z " "najnovejšimi\n" -"država.\n" +"stanjem.\n" "\n" -"" #: src/nmcli/connections.c:1431 -#, fuzzy msgid "" "Usage: nmcli connection import { ARGUMENTS | help }\n" "\n" @@ -13015,19 +12789,17 @@ msgid "" "is imported by NetworkManager VPN plugins.\n" "\n" msgstr "" -"Uporaba: nmcli connection import { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection import { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [--temporary] vrsta datoteke \n" +"ARGUMENTI := [--temporary] type file \n" "\n" -"Uvozite zunanjo/tujo konfiguracijo kot profil povezave NetworkManager.\n" +"Uvozite zunanjo/tujo prilagoditev kot profil povezave NetworkManager.\n" "Vrsta vhodne datoteke je določena z možnostjo vrste.\n" -"Trenutno so podprte samo konfiguracije VPN. Konfiguracija\n" -"je uvožen z vtičniki NetworkManager VPN.\n" +"Trenutno so podprte samo prilagoditve VPN. Prilagoditev\n" +"se uvozi z vstavki VPN NetworkManager.\n" "\n" -"" #: src/nmcli/connections.c:1445 -#, fuzzy msgid "" "Usage: nmcli connection export { ARGUMENTS | help }\n" "\n" @@ -13037,17 +12809,15 @@ msgid "" "The data are directed to standard output or to a file if a name is given.\n" "\n" msgstr "" -"Uporaba: nmcli povezava izvoz { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection export { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [id | uuid | pot] []\n" +"ARGUMENTI := [id | uuid | path] []\n" "\n" "Izvoz povezave. Trenutno so podprte samo povezave VPN.\n" "Podatki so usmerjeni v standardni izhod ali v datoteko, če je navedeno ime.\n" "\n" -"" #: src/nmcli/connections.c:1456 -#, fuzzy msgid "" "Usage: nmcli connection migrate { ARGUMENTS | help }\n" "\n" @@ -13057,14 +12827,13 @@ msgid "" "such as \"keyfile\" (default) or \"ifcfg-rh\".\n" "\n" msgstr "" -"Uporaba: nmcli povezava migrate { ARGUMENTI | pomoč }\n" +"Uporaba: nmcli connection migrate { ARGUMENTI | help }\n" "\n" -"ARGUMENTI := [--plugin ] [id | uuid | pot] , ...\n" +"ARGUMENTI := [--plugin ] [id | uuid | path] , ...\n" "\n" -"Preselite profile povezav v drug vtičnik z nastavitvami,\n" -"na primer »keyfile« (privzeto) ali »ifcfg-rh«.\n" +"Preselite profile povezav v drug vstavek z nastavitvami,\n" +"npr. »keyfile« (privzeto) ali »ifcfg-rh«.\n" "\n" -"" #: src/nmcli/connections.c:1539 #, c-format @@ -13329,9 +13098,9 @@ msgid "Error: controller is required" msgstr "Napaka: zahtevan je krmilnik" #: src/nmcli/connections.c:4816 -#, fuzzy, c-format +#, c-format msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n" -msgstr "Napaka: »%s« ni veljaven način spremljanja; Uporabite »%s« ali »%s«.\n" +msgstr "Napaka: »%s« ni veljaven način spremljanja; uporabite »%s« ali »%s«.\n" #: src/nmcli/connections.c:4856 #, c-format @@ -13422,7 +13191,6 @@ msgid "Connection '%s' (%s) successfully added.\n" msgstr "Povezava '%s' (%s) je bila uspešno dodana.\n" #: src/nmcli/connections.c:5851 -#, fuzzy msgid "" "You can specify this option more than once. Press when you're done.\n" msgstr "To možnost lahko določite večkrat. Pritisnite , ko končate.\n" @@ -13458,15 +13226,14 @@ msgid "Error: '%s' argument is required." msgstr "Napaka: argument »%s« je obvezen." #: src/nmcli/connections.c:7199 -#, fuzzy, c-format +#, c-format msgid "['%s' setting values]\n" -msgstr "[Nastavitvene vrednosti '%s']\n" +msgstr "['%s' nastavlja vrednosti]\n" #. TRANSLATORS: do not translate command names and keywords before :: #. * However, you should translate terms enclosed in <>. #. #: src/nmcli/connections.c:7310 -#, fuzzy msgid "" "---[ Main menu ]---\n" "goto [ | ] :: go to a setting or property\n" @@ -13484,25 +13251,21 @@ msgid "" "quit :: exit nmcli\n" msgstr "" "---[Glavni meni ]---\n" -"pojdi [ | ] :: Pojdi na nastavitev ali znamko\n" -"Odstrani [.] | :: odstranite nastavitev ali " +"goto [ | ] :: pojdi na nastavitev ali lastnost\n" +"remove [.] | :: odstranite nastavitev ali " "ponastavite vrednost lastnosti\n" -"nastavi [. ] :: nastavi vrednost lastnosti\n" -"opišite [.] :: Opis lastnosti\n" -"natisni [vse | [.]] :: natisnite povezavo\n" -"Preverite [vse | popravek] :: Preverite povezavo\n" -"Shrani [trajno|začasno] :: Shrani povezavo\n" -"aktivirati [] [/|] :: aktivirajte povezavo\n" -"nazaj :: pojdi eno raven navzgor (nazaj)\n" -"pomoč/? [] :: Natisni to pomoč\n" -"NMCLI :: Konfiguracija NMCLI\n" -"Quit :: Izhod iz NMCLI\n" -"" +"set [. ] :: nastavi vrednost lastnosti\n" +"describe [.] :: opiše lastnost\n" +"print [all | [.]] : izpiše povezavo\n" +"verify [all | fix] :: preveri povezavo\n" +"save [persistent|temporary] :: shrani povezavo\n" +"activate [] [/|] :: aktivirapovezavo\n" +"back :: pojdi eno raven navzgor (nazaj)\n" +"help/? [] :: izpiše to pomoč\n" +"NMCLI :: prilagoditev NMCLI\n" +"quit :: izhod iz nmcli\n" #: src/nmcli/connections.c:7338 -#, fuzzy msgid "" "goto [.] | :: enter setting/property for editing\n" "\n" @@ -13512,18 +13275,16 @@ msgid "" " nmcli connection> goto secondaries\n" " nmcli> goto ipv4.addresses\n" msgstr "" -"pojdi na [.] | :: vnesite nastavitev/lastnost za " +"goto [.] | :: vnesite nastavitev/lastnost za " "urejanje\n" "\n" "Ta ukaz vstopi v nastavitev ali lastnost za urejanje.\n" "\n" -"Primeri: nmcli> povezava goto\n" -" Povezava NMCLI> Goto sekundarne\n" +"Primeri: nmcli> goto connection\n" +" nmcli connection> goto secondaries\n" " nmcli> goto ipv4.addresses\n" -"" #: src/nmcli/connections.c:7346 -#, fuzzy msgid "" "remove [.] :: remove setting or reset property value\n" "\n" @@ -13534,18 +13295,16 @@ msgid "" "Examples: nmcli> remove wifi-sec\n" " nmcli> remove eth.mtu\n" msgstr "" -"odstraniti [.] :: odstranite nastavitev ali ponastavite " -"vrednost lastnosti\n" +"remove [.] :: odstranite nastavitev ali ponastavite vrednost " +"lastnosti\n" "\n" -"Ta ukaz odstrani celotno nastavitev iz povezave ali če je lastnost\n" -", ponastavi to lastnost na privzeto vrednost.\n" +"Ta ukaz odstrani celotno nastavitev iz povezave ali če je lastnost,\n" +"ponastavi to lastnost na privzeto vrednost.\n" "\n" -"Primeri: nmcli> odstranitev wifi-sec\n" -" nmcli> odstrani eth.mtu\n" -"" +"Primeri: nmcli> remove wifi-sec\n" +" nmcli> remove eth.mtu\n" #: src/nmcli/connections.c:7353 -#, fuzzy msgid "" "set [. ] :: set property value\n" "\n" @@ -13553,15 +13312,13 @@ msgid "" "\n" "Example: nmcli> set con.id My connection\n" msgstr "" -"nastavi [. ] :: nastavi vrednost lastnosti\n" +"set [. ] :: nastavi vrednost lastnosti\n" "\n" "Ta ukaz nastavi vrednost lastnosti.\n" "\n" -"Primer: nmcli> nastavi con.id Moja povezava\n" -"" +"Primer: nmcli> set con.id Moja povezava\n" #: src/nmcli/connections.c:7358 -#, fuzzy msgid "" "add [. ] :: add property value\n" "\n" @@ -13569,29 +13326,25 @@ msgid "" "\n" "Example: nmcli> add ipv4.addresses 192.168.1.1/24\n" msgstr "" -"dodaj [. ] :: dodajanje vrednosti lastnosti\n" +"add [. ] :: dodajanje vrednosti lastnosti\n" "\n" "Ta ukaz doda vrednost lastnosti.\n" "\n" -"Primer: nmcli> dodajte ipv4.addresses 192.168.1.1/24\n" -"" +"Primer: nmcli> add ipv4.addresses 192.168.1.1/24\n" #: src/nmcli/connections.c:7363 -#, fuzzy msgid "" "describe [.] :: describe property\n" "\n" "Shows property description. You can consult nm-settings(5) manual page to " "see all NM settings and properties.\n" msgstr "" -"opišite [.] :: Opis lastnosti\n" +"describe [.] :: opišite lastnosti\n" "\n" "Prikaže opis nastanitve. Na strani priročnika nm-settings(5) si lahko " "ogledate vse nastavitve in lastnosti NM.\n" -"" #: src/nmcli/connections.c:7368 -#, fuzzy msgid "" "print [all] :: print setting or connection values\n" "\n" @@ -13599,14 +13352,13 @@ msgid "" "\n" "Example: nmcli ipv4> print all\n" msgstr "" -"Natisni [vse] :: Nastavitev tiskanja ali vrednosti povezave\n" +"print [all] :: izpiši vrednosti nastavitve ali povezave\n" "\n" "Prikaže trenutno lastnost ali celotno povezavo.\n" "\n" -"Primer: nmcli ipv4> natisni vse\n" +"Primer: nmcli ipv4> print all\n" #: src/nmcli/connections.c:7374 -#, fuzzy msgid "" "verify [all | fix] :: verify setting or connection validity\n" "\n" @@ -13619,21 +13371,19 @@ msgid "" " nmcli> verify fix\n" " nmcli bond> verify\n" msgstr "" -"Preverjanje [vse | popravek] :: Preverjanje nastavitve ali veljavnosti " -"povezave\n" +"verify [all | fix] :: preverjanje nastavitve ali veljavnosti povezave\n" "\n" "Preveri, ali je nastavitev ali povezava veljavna in jo je mogoče shraniti " "pozneje.\n" "Označuje neveljavne vrednosti ob napaki. Nekatere napake se lahko samodejno " "odpravijo\n" -"z možnostjo »popravi«.\n" +"z možnostjo »fix«.\n" "\n" -"Primeri: nmcli> preverjanje\n" -" nmcli> preveri popravek\n" -" Obveznica NMCLI> Preveri\n" +"Primeri: nmcli> verify\n" +" nmcli> verify fix\n" +" nmcli bond> verify\n" #: src/nmcli/connections.c:7384 -#, fuzzy msgid "" "save [persistent|temporary] :: save the connection\n" "\n" @@ -13647,21 +13397,21 @@ msgid "" "connection\n" "profile must be deleted.\n" msgstr "" -"Shrani [trajno|začasno] :: Shrani povezavo\n" +"save [persistent|temporary] :: shrani povezavo\n" "\n" "Pošlje profil povezave v NetworkManager, ki ga bo shranil\n" -"vztrajno ali pa ga bo samo hranil v spominu. \"Shrani\" brez argumenta\n" -"pomeni \"varčevati vztrajno\".\n" +"vztrajno ali pa ga bo samo hranil v spominu. »save« brez argumenta\n" +"pomeni »shrani persistent«.\n" "Upoštevajte, da ko profil trajno shranite, se te nastavitve shranijo\n" -"med ponovnim zagonom ali ponovnim zagonom. Naknadne spremembe so lahko tudi " +"prek ponovni zagon ali ponovni vklop. Naknadne spremembe so lahko tudi " "začasne ali\n" -"vztrajna, vendar začasne spremembe ne bodo ohranjene med vnovičnim zagonom " +"vztrajne, vendar začasne spremembe ne bodo ohranjene med vnovičnim zagonom " "ali\n" -"Ponovno zagnati. Če želite trajno povezavo v celoti odstraniti, se povezava\n" -"Profil je treba izbrisati.\n" +"ponovnim vklopom. Če želite trajno povezavo v celoti odstraniti, je profil " +"povezava\n" +"treba izbrisati.\n" #: src/nmcli/connections.c:7395 -#, fuzzy msgid "" "activate [] [/|] :: activate the connection\n" "\n" @@ -13672,7 +13422,7 @@ msgid "" "/| - AP (Wi-Fi) or NSP (WiMAX) (prepend with / when is not " "specified)\n" msgstr "" -"aktivirati [] [/|] :: Aktivirajte povezavo\n" +"activate [] [/|] :: aktivirajte povezavo\n" "\n" "Aktivira povezavo.\n" "\n" @@ -13680,7 +13430,6 @@ msgstr "" " - naprava, na kateri se bo povezava aktivirala\n" "/| - AP (Wi-Fi) ali NSP (WiMAX) (na začetku / ko ni " "določeno)\n" -"" #: src/nmcli/connections.c:7403 src/nmcli/connections.c:7562 msgid "" @@ -13697,7 +13446,7 @@ msgid "" msgstr "help/? [] :: Pomoč za ukaze nmcli\n" #: src/nmcli/connections.c:7409 -#, fuzzy, c-format +#, c-format msgid "" "nmcli [ ] :: nmcli configuration\n" "\n" @@ -13711,28 +13460,26 @@ msgid "" " nmcli> nmcli save-confirmation no\n" " nmcli> nmcli prompt-color 3\n" msgstr "" -"nmcli [ ] :: konfiguracija nmcli\n" +"nmcli [ ] :: prilagoditev nmcli\n" "\n" -"Konfigurira nmcli. Na voljo so naslednje možnosti:\n" -"statusna vrstica da | Ne [privzeto: ne]\n" -"shrani-potrditev da | Ne [privzeto: da]\n" -"Razstavi skrivnosti da | Ne [privzeto: ne]\n" -"prompt-barva | <0-8> [privzeto: 0]\n" +"Prilagodi nmcli. Na voljo so naslednje možnosti:\n" +"status-line yes | no [privzeto: no]\n" +"save-confirmation yes | no [privzeto: yes]\n" +"show-secrets yes | no [privzeto: no]\n" +"prompt-color | <0-8> [privzeto: 0]\n" "%s\n" -"Primeri: nmcli> nmcli status-line da\n" -" nmcli> nmcli potrditev shranjevanja ne\n" -" nmcli> nmcli promptna barva 3\n" -"" +"Primeri: nmcli> nmcli status-line yes\n" +" nmcli> nmcli save-confirmation no\n" +" nmcli> nmcli prompt-color 3\n" #: src/nmcli/connections.c:7431 src/nmcli/connections.c:7568 -#, fuzzy msgid "" "quit :: exit nmcli\n" "\n" "This command exits nmcli. When the connection being edited is not saved, the " "user is asked to confirm the action.\n" msgstr "" -"Quit :: Izhod iz NMCLI\n" +"quit :: Izhod iz nmcli\n" "\n" "Ta ukaz zapusti nmcli. Ko povezava, ki jo urejate, ni shranjena, je " "uporabnik pozvan, da potrdi dejanje.\n" @@ -13747,7 +13494,6 @@ msgstr "Neznan ukaz: »%s«\n" #. * However, you should translate terms enclosed in <>. #. #: src/nmcli/connections.c:7501 -#, fuzzy msgid "" "---[ Property menu ]---\n" "set [] :: set new value\n" @@ -13762,31 +13508,28 @@ msgid "" "quit :: exit nmcli\n" msgstr "" "---[ Meni lastnosti ]---\n" -"set [] :: nastavi novo vrednost\n" -"add [] :: dodajanje nove možnosti v znamko\n" -"Spremeni :: Spremeni trenutno vrednost\n" -"Odstrani [ | " +"back :: pojdi na zgornjo raven\n" +"help/? [] :: izpiše to pomoč ali opis ukaza\n" +"quit :: Izhod iz nmcli\n" #: src/nmcli/connections.c:7525 -#, fuzzy msgid "" "set [] :: set new value\n" "\n" "This command sets provided to this property\n" msgstr "" -"set [] :: nastavi novo vrednost\n" +"set [] :: nastavi novo vrednost\n" "\n" -"Ta ukaz nabori za to lastnost\n" -"" +"Ta ukaz nastavi tej lastnosti\n" #: src/nmcli/connections.c:7529 -#, fuzzy msgid "" "add [] :: append new value to the property\n" "\n" @@ -13794,26 +13537,23 @@ msgid "" "container type. For single-valued properties the property value is replaced " "(same as 'set').\n" msgstr "" -"dodajanje [] :: dodajanje nove vrednosti lastnosti\n" +"add [] :: dodajanje nove vrednosti lastnosti\n" "\n" -"Ta ukaz doda navedeni lastnosti, če je lastnost vsebnika. Pri " -"nepremičninah z enojno vrednostjo se vrednost lastnosti nadomesti (enako kot " +"Ta ukaz doda navedeni lastnosti, če je lastnost vsebnika. Pri " +"lastnostih z enojno vrednostjo se vrednost lastnosti nadomesti (enako kot " "\"set\").\n" -"" #: src/nmcli/connections.c:7535 -#, fuzzy msgid "" "change :: change current value\n" "\n" "Displays current value and allows editing it.\n" msgstr "" -"Spremeni :: Spremeni trenutno vrednost\n" +"change :: spremeni trenutno vrednost\n" "\n" "Prikaže trenutno vrednost in omogoča njeno urejanje.\n" #: src/nmcli/connections.c:7540 -#, fuzzy msgid "" "remove [|| @@ -1324,8 +1330,12 @@ managed=1 - keep-configuration + keep-configuration + + A boolean value indicating whether the existing device + configuration is kept at startup. + On startup, NetworkManager tries to not interfere with interfaces that are already configured. It does so by @@ -1422,16 +1432,16 @@ managed=1 wifi.iwd.autoconnect - If wifi.backend is iwd, setting this to - false forces IWD's autoconnect mechanism to be disabled for - this device and connections will only be initiated by NetworkManager whether - commanded by a client or automatically. Leaving it true (default) - stops NetworkManager from automatically initiating connections and allows - IWD to use its network ranking and scanning logic to decide the best networks - to autoconnect to next. Connections' autoconnect-priority, - autoconnect-retries settings will be ignored. Other settings - like permissions or multi-connect may interfere - with IWD connection attempts. + A boolean value. If wifi.backend is iwd, + setting this to false forces IWD's autoconnect mechanism to be + disabled for this device and connections will only be initiated by NetworkManager + whether commanded by a client or automatically. Leaving it true + (default) stops NetworkManager from automatically initiating connections and allows + IWD to use its network ranking and scanning logic to decide the best networks to + autoconnect to next. Connections' autoconnect-priority, + autoconnect-retries settings will be ignored. Other settings like + permissions or multi-connect may interfere with + IWD connection attempts. @@ -1490,7 +1500,7 @@ managed=1 enabled - Whether connectivity check is enabled. + A boolean indicating whether connectivity check is enabled. Note that to enable connectivity check, a valid uri must also be configured. The value defaults to true, but since the uri is unset by default, connectivity check may be disabled. From 8b5a61458ba7158062e8fe9433cb410050909718 Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Sun, 9 Nov 2025 22:51:00 -0300 Subject: [PATCH 012/153] Update Brazilian Portuguese translation Co-authored-by: Matheus Barbosa Co-authored-by: Samuel Schlemper Co-authored-by: Juliano de Souza Camargo --- po/pt_BR.po | 9522 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 5701 insertions(+), 3821 deletions(-) diff --git a/po/pt_BR.po b/po/pt_BR.po index c60244e94a..b2eefe7776 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,5 +1,5 @@ # Brazilian Portuguese translation of NetworkManager. -# Copyright (C) 2020 Free Software Foundation, Inc. +# Copyright (C) 2025 Free Software Foundation, Inc. # This file is distributed under the same license as the NetworkManager package. # Raphael Higino , 2004-2007 # Luiz Armesto , 2007. @@ -14,23 +14,26 @@ # ljanda , 2018. #zanata # lrintel , 2018. #zanata # tchuang , 2018. #zanata -# Rafael Fontenelle , 2013-2020. +# Matheus Barbosa , 2022. +# Rafael Fontenelle , 2013-2023. +# Samuel Schlemper , 2025. +# Juliano de Souza Camargo , 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: 2020-03-10 04:12-0300\n" -"Last-Translator: Rafael Fontenelle \n" -"Language-Team: Brazilian Portuguese \n" +"POT-Creation-Date: 2025-10-24 15:34+0000\n" +"PO-Revision-Date: 2025-09-19 11:04-0300\n" +"Last-Translator: Juliano de Souza Camargo \n" +"Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"X-Generator: Gtranslator 3.32.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Gtranslator 49.0\n" "X-Project-Style: gnome\n" #: data/org.freedesktop.NetworkManager.policy.in.in:13 @@ -211,81 +214,77 @@ msgstr "" #. * as "Wired Connection" or "VPN Connection". The %d is a number #. * that is combined with the first argument to create a unique #. * connection id. -#: src/core/NetworkManagerUtils.c:119 +#: src/core/NetworkManagerUtils.c:121 #, c-format msgctxt "connection id fallback" msgid "%s %u" msgstr "%s %u" -#: src/core/devices/adsl/nm-device-adsl.c:115 -#: src/libnmc-setting/nm-meta-setting-desc.c:8265 +#: src/core/devices/adsl/nm-device-adsl.c:118 +#: src/libnmc-setting/nm-meta-setting-desc.c:9005 msgid "ADSL connection" msgstr "Conexão ADSL" -#: src/core/devices/bluetooth/nm-bluez-manager.c:1315 +#: src/core/devices/bluetooth/nm-bluez-manager.c:1316 #, c-format msgid "%s Network" msgstr "Rede %s" -#: src/core/devices/bluetooth/nm-device-bt.c:300 -#, fuzzy -#| msgid "PAN requested, but Bluetooth device does not support NAP" +#: src/core/devices/bluetooth/nm-device-bt.c:303 msgid "NAP requested, but Bluetooth device does not support NAP" -msgstr "PAN requisitado, mas dispositivo Bluetooth não oferece suporte a NAP" +msgstr "NAP requisitado, mas dispositivo Bluetooth não suporta o NAP" -#: src/core/devices/bluetooth/nm-device-bt.c:313 -#, fuzzy -#| msgid "PAN connection" +#: src/core/devices/bluetooth/nm-device-bt.c:316 msgid "NAP connection" -msgstr "Conexão PAN" +msgstr "Conexão NAP" -#: src/core/devices/bluetooth/nm-device-bt.c:320 +#: src/core/devices/bluetooth/nm-device-bt.c:323 msgid "PAN requested, but Bluetooth device does not support NAP" msgstr "PAN requisitado, mas dispositivo Bluetooth não oferece suporte a NAP" -#: src/core/devices/bluetooth/nm-device-bt.c:333 +#: src/core/devices/bluetooth/nm-device-bt.c:336 msgid "PAN connections cannot specify GSM, CDMA, or serial settings" msgstr "Conexões PAN não podem especificar definições GSM, CDMA ou serial" -#: src/core/devices/bluetooth/nm-device-bt.c:348 +#: src/core/devices/bluetooth/nm-device-bt.c:351 msgid "PAN connection" msgstr "Conexão PAN" -#: src/core/devices/bluetooth/nm-device-bt.c:355 +#: src/core/devices/bluetooth/nm-device-bt.c:358 msgid "DUN requested, but Bluetooth device does not support DUN" msgstr "DUN requisitado, mas dispositivo Bluetooth não oferece suporte a DUN" -#: src/core/devices/bluetooth/nm-device-bt.c:368 +#: src/core/devices/bluetooth/nm-device-bt.c:371 msgid "DUN connection must include a GSM or CDMA setting" msgstr "Conexão DUN deve incluir uma definição GSM ou CDMA" -#: src/core/devices/bluetooth/nm-device-bt.c:379 -#: src/core/devices/wwan/nm-modem-broadband.c:814 +#: src/core/devices/bluetooth/nm-device-bt.c:382 +#: src/core/devices/wwan/nm-modem-broadband.c:920 msgid "GSM connection" msgstr "Conexão GSM" -#: src/core/devices/bluetooth/nm-device-bt.c:381 -#: src/core/devices/wwan/nm-modem-broadband.c:835 +#: src/core/devices/bluetooth/nm-device-bt.c:384 +#: src/core/devices/wwan/nm-modem-broadband.c:940 msgid "CDMA connection" msgstr "Conexão CDMA" -#: src/core/devices/bluetooth/nm-device-bt.c:389 +#: src/core/devices/bluetooth/nm-device-bt.c:392 msgid "Unknown/unhandled Bluetooth connection type" msgstr "Tipo de conexão Bluetooth desconhecida/não manipulada" -#: src/core/devices/bluetooth/nm-device-bt.c:414 +#: src/core/devices/bluetooth/nm-device-bt.c:416 msgid "connection does not match device" msgstr "conexão não corresponde ao dispositivo" -#: src/core/devices/nm-device-6lowpan.c:191 +#: src/core/devices/nm-device-6lowpan.c:154 msgid "6LOWPAN connection" msgstr "Conexão 6LOWPAN" -#: src/core/devices/nm-device-bond.c:91 +#: src/core/devices/nm-device-bond.c:94 msgid "Bond connection" msgstr "Conexão vinculada" -#: src/core/devices/nm-device-bridge.c:161 +#: src/core/devices/nm-device-bridge.c:165 msgid "Bridge connection" msgstr "Conexão de ponte" @@ -298,30 +297,33 @@ msgstr "Conexão dummy" msgid "Wired connection %d" msgstr "Conexão cabeada %d" -#: src/core/devices/nm-device-ethernet.c:1628 -#: src/libnmc-setting/nm-meta-setting-desc.c:8303 -#, fuzzy +#: src/core/devices/nm-device-ethernet.c:1653 +#: src/libnmc-setting/nm-meta-setting-desc.c:9049 msgid "Veth connection" -msgstr "Conexão VPN" +msgstr "Conexão Veth" -#: src/core/devices/nm-device-ethernet.c:1686 +#: src/core/devices/nm-device-ethernet.c:1710 msgid "PPPoE connection" msgstr "Conexão PPPoE" -#: src/core/devices/nm-device-ethernet.c:1686 +#: src/core/devices/nm-device-ethernet.c:1710 msgid "Wired connection" msgstr "Conexão cabeada" -#: src/core/devices/nm-device-infiniband.c:157 -#: src/libnmc-setting/nm-meta-setting-desc.c:8279 +#: src/core/devices/nm-device-infiniband.c:160 +#: src/libnmc-setting/nm-meta-setting-desc.c:9020 msgid "InfiniBand connection" msgstr "Conexão InfiniBand" -#: src/core/devices/nm-device-ip-tunnel.c:399 +#: src/core/devices/nm-device-ip-tunnel.c:403 msgid "IP tunnel connection" msgstr "Conexão túnel IP" -#: src/core/devices/nm-device-macvlan.c:389 +#: src/core/devices/nm-device-loopback.c:67 +msgid "Loopback connection" +msgstr "Conexão loopback" + +#: src/core/devices/nm-device-macvlan.c:355 msgid "MACVLAN connection" msgstr "Conexão MACVLAN" @@ -329,18 +331,18 @@ msgstr "Conexão MACVLAN" msgid "TUN connection" msgstr "Conexão TUN" -#: src/core/devices/nm-device-vlan.c:398 -#: src/libnmc-setting/nm-meta-setting-desc.c:8304 +#: src/core/devices/nm-device-vlan.c:370 +#: src/libnmc-setting/nm-meta-setting-desc.c:9050 msgid "VLAN connection" msgstr "Conexão VLAN" -#: src/core/devices/nm-device-vrf.c:182 -#: src/libnmc-setting/nm-meta-setting-desc.c:8306 +#: src/core/devices/nm-device-vrf.c:185 +#: src/libnmc-setting/nm-meta-setting-desc.c:9052 msgid "VRF connection" msgstr "Conexão VRF" -#: src/core/devices/nm-device-vxlan.c:382 -#: src/libnmc-setting/nm-meta-setting-desc.c:8307 +#: src/core/devices/nm-device-vxlan.c:385 +#: src/libnmc-setting/nm-meta-setting-desc.c:9053 msgid "VXLAN connection" msgstr "Conexão VXLAN" @@ -348,155 +350,155 @@ msgstr "Conexão VXLAN" msgid "WPAN connection" msgstr "Conexão WPAN" -#: src/core/devices/team/nm-device-team.c:130 +#: src/core/devices/team/nm-device-team.c:131 msgid "Team connection" msgstr "Conexão de união" -#: src/core/devices/wifi/nm-device-olpc-mesh.c:112 src/nmcli/devices.c:1397 +#: src/core/devices/wifi/nm-device-olpc-mesh.c:112 src/nmcli/devices.c:1415 msgid "Mesh" msgstr "Mesh" -#: src/core/devices/wifi/nm-wifi-utils.c:33 +#: src/core/devices/wifi/nm-wifi-utils.c:34 #, c-format msgid "%s is incompatible with static WEP keys" msgstr "%s é incompatível com chaves WEP estáticas" -#: src/core/devices/wifi/nm-wifi-utils.c:68 +#: src/core/devices/wifi/nm-wifi-utils.c:69 msgid "LEAP authentication requires a LEAP username" msgstr "Autenticação LEAP requer um nome de usuário LEAP" -#: src/core/devices/wifi/nm-wifi-utils.c:80 +#: src/core/devices/wifi/nm-wifi-utils.c:81 msgid "LEAP username requires 'leap' authentication" msgstr "Nome de usuário LEAP requer autenticação “leap”" -#: src/core/devices/wifi/nm-wifi-utils.c:95 +#: src/core/devices/wifi/nm-wifi-utils.c:96 msgid "LEAP authentication requires IEEE 802.1x key management" msgstr "Autenticação LEAP requer gerenciamento de chaves IEEE 802.1x" -#: src/core/devices/wifi/nm-wifi-utils.c:117 +#: src/core/devices/wifi/nm-wifi-utils.c:118 msgid "LEAP authentication is incompatible with Ad-Hoc mode" msgstr "Autenticação LEAP é incompatível com modo Ad-Hoc" -#: src/core/devices/wifi/nm-wifi-utils.c:129 +#: src/core/devices/wifi/nm-wifi-utils.c:130 msgid "LEAP authentication is incompatible with 802.1x setting" msgstr "Autenticação LEAP é incompatível com definição 802.1x" -#: src/core/devices/wifi/nm-wifi-utils.c:149 +#: src/core/devices/wifi/nm-wifi-utils.c:150 #, c-format msgid "a connection using '%s' authentication cannot use WPA key management" msgstr "" "uma conexão usando autenticação “%s” não pode usar gerenciamento de chaves " "WPA" -#: src/core/devices/wifi/nm-wifi-utils.c:162 +#: src/core/devices/wifi/nm-wifi-utils.c:163 #, c-format msgid "a connection using '%s' authentication cannot specify WPA protocols" msgstr "" "uma conexão usando autenticação “%s” não pode especificar protocolos WPA" -#: src/core/devices/wifi/nm-wifi-utils.c:180 -#: src/core/devices/wifi/nm-wifi-utils.c:199 +#: src/core/devices/wifi/nm-wifi-utils.c:181 +#: src/core/devices/wifi/nm-wifi-utils.c:200 #, c-format msgid "a connection using '%s' authentication cannot specify WPA ciphers" msgstr "uma conexão usando autenticação “%s” não pode especificar cifras WPA" -#: src/core/devices/wifi/nm-wifi-utils.c:213 +#: src/core/devices/wifi/nm-wifi-utils.c:214 #, c-format msgid "a connection using '%s' authentication cannot specify a WPA password" msgstr "" "uma conexão usando autenticação “%s” não pode especificar uma senha WPA" -#: src/core/devices/wifi/nm-wifi-utils.c:246 +#: src/core/devices/wifi/nm-wifi-utils.c:247 msgid "Dynamic WEP requires an 802.1x setting" msgstr "WEP dinâmico requer uma definição 802.1x" -#: src/core/devices/wifi/nm-wifi-utils.c:256 -#: src/core/devices/wifi/nm-wifi-utils.c:288 +#: src/core/devices/wifi/nm-wifi-utils.c:257 +#: src/core/devices/wifi/nm-wifi-utils.c:289 msgid "Dynamic WEP requires 'open' authentication" msgstr "WEP dinâmico requer autenticação “open”" -#: src/core/devices/wifi/nm-wifi-utils.c:273 +#: src/core/devices/wifi/nm-wifi-utils.c:274 msgid "Dynamic WEP requires 'ieee8021x' key management" msgstr "WEP dinâmico requer gerenciamento de chaves “ieee8021x”" -#: src/core/devices/wifi/nm-wifi-utils.c:324 +#: src/core/devices/wifi/nm-wifi-utils.c:325 msgid "WPA-PSK authentication is incompatible with 802.1x" msgstr "Autenticação WPA-PSK é incompatível com 802.1x" -#: src/core/devices/wifi/nm-wifi-utils.c:334 +#: src/core/devices/wifi/nm-wifi-utils.c:335 msgid "WPA-PSK requires 'open' authentication" msgstr "Autenticação WPA-PSK requer autenticação “open”" -#: src/core/devices/wifi/nm-wifi-utils.c:348 +#: src/core/devices/wifi/nm-wifi-utils.c:349 msgid "Access point does not support PSK but setting requires it" msgstr "Ponto de acesso não oferece suporte a PSK, mas definição requer" -#: src/core/devices/wifi/nm-wifi-utils.c:363 +#: src/core/devices/wifi/nm-wifi-utils.c:364 msgid "WPA Ad-Hoc authentication requires 'rsn' protocol" msgstr "Autenticação Ad-Hoc WPA requer protocolo “rsn”" -#: src/core/devices/wifi/nm-wifi-utils.c:376 +#: src/core/devices/wifi/nm-wifi-utils.c:377 msgid "WPA Ad-Hoc authentication requires 'ccmp' pairwise cipher" msgstr "Autenticação Ad-Hoc WPA requer cifra em pares “ccmp”" -#: src/core/devices/wifi/nm-wifi-utils.c:389 +#: src/core/devices/wifi/nm-wifi-utils.c:390 msgid "WPA Ad-Hoc requires 'ccmp' group cipher" msgstr "Ad-Hoc WPA requer cifra de grupo “ccmp”" -#: src/core/devices/wifi/nm-wifi-utils.c:420 +#: src/core/devices/wifi/nm-wifi-utils.c:421 msgid "WPA-EAP authentication requires an 802.1x setting" msgstr "Autenticação WPA-EAP requer uma definição 802.1x" -#: src/core/devices/wifi/nm-wifi-utils.c:430 +#: src/core/devices/wifi/nm-wifi-utils.c:431 msgid "WPA-EAP requires 'open' authentication" msgstr "WPA-EAP requer autenticação “open”" -#: src/core/devices/wifi/nm-wifi-utils.c:443 +#: src/core/devices/wifi/nm-wifi-utils.c:444 msgid "802.1x setting requires 'wpa-eap' key management" msgstr "Definição 802.1x requer gerenciamento de chave “wpa-eap”" -#: src/core/devices/wifi/nm-wifi-utils.c:457 +#: src/core/devices/wifi/nm-wifi-utils.c:458 msgid "Access point does not support 802.1x but setting requires it" msgstr "Ponto de acesso não oferece suporte a 802.1x, mas definição requer" -#: src/core/devices/wifi/nm-wifi-utils.c:487 +#: src/core/devices/wifi/nm-wifi-utils.c:488 msgid "Ad-Hoc mode requires 'none' or 'wpa-psk' key management" msgstr "Modo Ad-Hoc requer gerenciamento de chave “none” ou “wpa-psk”" -#: src/core/devices/wifi/nm-wifi-utils.c:499 +#: src/core/devices/wifi/nm-wifi-utils.c:500 msgid "Ad-Hoc mode is incompatible with 802.1x security" msgstr "Modo Ad-Hoc é incompatível com segurança 802.1x" -#: src/core/devices/wifi/nm-wifi-utils.c:508 +#: src/core/devices/wifi/nm-wifi-utils.c:509 msgid "Ad-Hoc mode is incompatible with LEAP security" msgstr "Modo Ad-Hoc é incompatível com segurança LEAP" -#: src/core/devices/wifi/nm-wifi-utils.c:520 +#: src/core/devices/wifi/nm-wifi-utils.c:521 msgid "Ad-Hoc mode requires 'open' authentication" msgstr "Modo Ad-Hoc requer autenticação “open”" -#: src/core/devices/wifi/nm-wifi-utils.c:564 -#: src/core/devices/wifi/nm-wifi-utils.c:599 +#: src/core/devices/wifi/nm-wifi-utils.c:565 +#: src/core/devices/wifi/nm-wifi-utils.c:600 msgid "connection does not match access point" msgstr "conexão não correspondente ao ponto de acesso" -#: src/core/devices/wifi/nm-wifi-utils.c:653 +#: src/core/devices/wifi/nm-wifi-utils.c:654 msgid "connection does not match mesh point" msgstr "conexão não correspondente ao ponto de mesh" -#: src/core/devices/wifi/nm-wifi-utils.c:672 +#: src/core/devices/wifi/nm-wifi-utils.c:673 msgid "Access point is unencrypted but setting specifies security" msgstr "" "Ponto de acesso está descriptografado, mas definição especifica segurança" -#: src/core/devices/wifi/nm-wifi-utils.c:760 +#: src/core/devices/wifi/nm-wifi-utils.c:761 msgid "" "WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic " "WEP" msgstr "" "Autenticação WPA é incompatível com WEP dinâmico ou LEAP não EAP (original)" -#: src/core/devices/wifi/nm-wifi-utils.c:773 +#: src/core/devices/wifi/nm-wifi-utils.c:774 msgid "WPA authentication is incompatible with Shared Key authentication" msgstr "" "Autenticação WPA é incompatível com autenticação Shared Key (chave " @@ -506,11 +508,11 @@ msgstr "" msgid "Failed to determine AP security information" msgstr "Falha ao determinar informação de segurança do AP" -#: src/core/dhcp/nm-dhcp-dhclient-utils.c:319 +#: src/core/dhcp/nm-dhcp-dhclient-utils.c:323 msgid "# Created by NetworkManager\n" msgstr "# Criado pelo NetworkManager\n" -#: src/core/dhcp/nm-dhcp-dhclient-utils.c:332 +#: src/core/dhcp/nm-dhcp-dhclient-utils.c:336 #, c-format msgid "" "# Merged from %s\n" @@ -519,37 +521,27 @@ msgstr "" "# Mesclado de %s\n" "\n" -#: src/core/main-utils.c:86 -#, c-format -msgid "Opening %s failed: %s\n" -msgstr "Abertura de %s falhou: %s\n" - -#: src/core/main-utils.c:93 +#: src/core/main-utils.c:85 #, c-format msgid "Writing to %s failed: %s\n" msgstr "Escrita para %s falhou: %s\n" -#: src/core/main-utils.c:99 -#, c-format -msgid "Closing %s failed: %s\n" -msgstr "Fechamento de %s falhou: %s\n" - -#: src/core/main-utils.c:139 src/core/main-utils.c:151 +#: src/core/main-utils.c:126 src/core/main-utils.c:138 #, c-format msgid "Cannot create '%s': %s" msgstr "Não foi possível criar “%s”: %s" -#: src/core/main-utils.c:206 +#: src/core/main-utils.c:195 #, c-format -msgid "%s is already running (pid %ld)\n" -msgstr "%s já está em execução (pid %ld)\n" +msgid "%s is already running (pid %lld)\n" +msgstr "%s já está em execução (pid %lld)\n" -#: src/core/main-utils.c:274 src/core/main.c:367 +#: src/core/main-utils.c:263 src/core/main.c:368 #, c-format msgid "%s. Please use --help to see a list of valid options.\n" msgstr "%s. Por favor, use --help para ver uma lista de opções válidas.\n" -#: src/core/main.c:164 src/core/main.c:378 +#: src/core/main.c:164 src/core/main.c:379 #, c-format msgid "Failed to read configuration: %s\n" msgstr "Falha ao ler configuração: %s\n" @@ -596,123 +588,123 @@ msgstr "" "especifique pontos de acesso sem fio os quais cartões sem fio no\n" "computador podem ser associados." -#: src/core/main.c:401 +#: src/core/main.c:402 #, c-format msgid "Could not daemonize: %s [error %u]\n" msgstr "Não foi possível tornar um daemon: %s [erro %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:2204 -#: src/libnmc-setting/nm-meta-setting-desc.c:4265 +#: 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” não é válido" -#: src/core/nm-config.c:566 +#: src/core/nm-config.c:567 #, c-format msgid "Bad '%s' option: " msgstr "opção “%s” inválida: " -#: src/core/nm-config.c:583 +#: src/core/nm-config.c:584 msgid "Config file location" msgstr "Localização do arquivo de configuração" -#: src/core/nm-config.c:590 +#: src/core/nm-config.c:591 msgid "Config directory location" msgstr "Localização do diretório de configuração" -#: src/core/nm-config.c:597 +#: src/core/nm-config.c:598 msgid "System config directory location" msgstr "Localização do diretório de configuração do sistema" -#: src/core/nm-config.c:604 +#: src/core/nm-config.c:605 msgid "Internal config file location" msgstr "Localização do arquivo de configuração interna" -#: src/core/nm-config.c:611 +#: src/core/nm-config.c:612 msgid "State file location" msgstr "Localização do arquivo de estado" -#: src/core/nm-config.c:618 +#: src/core/nm-config.c:619 msgid "State file for no-auto-default devices" msgstr "Arquivo de estado para dispositivos no-auto-default" -#: src/core/nm-config.c:625 +#: src/core/nm-config.c:626 msgid "List of plugins separated by ','" msgstr "Lista de plug-ins separada por “,”" -#: src/core/nm-config.c:632 +#: src/core/nm-config.c:633 msgid "Quit after initial configuration" msgstr "Sai após configuração inicial" -#: src/core/nm-config.c:639 +#: src/core/nm-config.c:640 msgid "Don't become a daemon, and log to stderr" msgstr "Não se tornar um daemon e registrar à saída padrão de erro (stderr)" -#: src/core/nm-config.c:648 +#: src/core/nm-config.c:649 msgid "An http(s) address for checking internet connectivity" msgstr "Um endereço http(s) para verificar a conectividade com a internet" -#: src/core/nm-config.c:655 +#: src/core/nm-config.c:656 msgid "The interval between connectivity checks (in seconds)" msgstr "O intervalo de tempo entre verificações de conectividade (em segundos)" -#: src/core/nm-config.c:662 +#: src/core/nm-config.c:663 msgid "The expected start of the response" msgstr "O início esperado da resposta" -#: src/core/nm-config.c:671 +#: src/core/nm-config.c:672 msgid "NetworkManager options" msgstr "Opções do NetworkManager" -#: src/core/nm-config.c:672 +#: src/core/nm-config.c:673 msgid "Show NetworkManager options" msgstr "Mostra as opções do NetworkManager" -#: src/core/nm-manager.c:6162 src/libnmc-setting/nm-meta-setting-desc.c:8305 +#: src/core/nm-manager.c:7001 src/libnmc-setting/nm-meta-setting-desc.c:9051 msgid "VPN connection" msgstr "Conexão VPN" -#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5612 -#: src/libnm-client-impl/nm-device.c:1779 -#: src/libnm-core-impl/nm-connection.c:3172 src/nmtui/nm-editor-utils.c:196 +#: 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:204 msgid "Bond" msgstr "Vínculo" -#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5683 -#: src/libnm-client-impl/nm-device.c:1781 -#: src/libnm-core-impl/nm-connection.c:3174 src/nmtui/nm-editor-utils.c:214 +#: 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:222 msgid "Team" msgstr "União" -#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:6020 -#: src/libnm-client-impl/nm-device.c:1783 -#: src/libnm-core-impl/nm-connection.c:3176 src/nmtui/nm-editor-utils.c:205 +#: 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:213 msgid "Bridge" msgstr "Ponte" -#: src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:8755 -#: src/libnm-core-impl/nm-team-utils.c:2391 +#: 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 inválido" -#: src/libnm-client-impl/nm-client.c:3801 +#: src/libnm-client-impl/nm-client.c:3818 #, c-format msgid "request succeeded with %s but object is in an unsuitable state" msgstr "" "solicitação bem-sucedida com %s, mas o objeto está em um estado inadequado" -#: src/libnm-client-impl/nm-client.c:3893 +#: src/libnm-client-impl/nm-client.c:3910 #, c-format msgid "operation succeeded but object %s does not exist" msgstr "operação bem-sucedida, mas o objeto %s não existe" -#: src/libnm-client-impl/nm-conn-utils.c:33 +#: src/libnm-client-impl/nm-conn-utils.c:40 #, c-format msgid "Invalid peer starting at %s:%zu: %s" msgstr "Par inválido iniciando em %s:%zu: %s" -#: src/libnm-client-impl/nm-conn-utils.c:164 +#: src/libnm-client-impl/nm-conn-utils.c:171 msgid "" "The name of the WireGuard config must be a valid interface name followed by " "\".conf\"" @@ -720,22 +712,22 @@ msgstr "" "O nome da configuração de WireGuard deve ser um nome de interface válido " "seguido por “.conf”" -#: src/libnm-client-impl/nm-conn-utils.c:448 +#: src/libnm-client-impl/nm-conn-utils.c:454 #, c-format msgid "unrecognized line at %s:%zu" msgstr "linha não reconhecida em %s:%zu" -#: src/libnm-client-impl/nm-conn-utils.c:455 +#: src/libnm-client-impl/nm-conn-utils.c:461 #, c-format msgid "invalid value for '%s' at %s:%zu" msgstr "valor inválido para “%s” em %s:%zu" -#: src/libnm-client-impl/nm-conn-utils.c:463 +#: src/libnm-client-impl/nm-conn-utils.c:469 #, c-format msgid "invalid secret '%s' at %s:%zu" msgstr "segredo inválido “%s” em %s:%zu" -#: src/libnm-client-impl/nm-conn-utils.c:587 +#: src/libnm-client-impl/nm-conn-utils.c:593 #, c-format msgid "Failed to create WireGuard connection: %s" msgstr "Falha ao criar conexão WireGuard: %s" @@ -773,12 +765,13 @@ msgid "" "The device is lacking Bluetooth capabilities required by the connection." msgstr "O dispositivo não possui capacidades Bluetooth exigidas pela conexão." -#: src/libnm-client-impl/nm-device-dummy.c:65 +#: src/libnm-client-impl/nm-device-dummy.c:62 msgid "The connection was not a dummy connection." msgstr "A conexão não era uma conexão dummy." -#: src/libnm-client-impl/nm-device-dummy.c:74 +#: src/libnm-client-impl/nm-device-dummy.c:71 #: src/libnm-client-impl/nm-device-generic.c:89 +#: src/libnm-client-impl/nm-device-loopback.c:50 #: src/libnm-client-impl/nm-device-ovs-bridge.c:83 #: src/libnm-client-impl/nm-device-ovs-interface.c:57 #: src/libnm-client-impl/nm-device-ovs-port.c:83 @@ -830,23 +823,27 @@ msgstr "Endereço MAC de dispositivo inválido." msgid "The MACs of the device and the connection didn't match." msgstr "Os MACs do dispositivo e a conexão não correspondem." -#: src/libnm-client-impl/nm-device-ip-tunnel.c:266 +#: src/libnm-client-impl/nm-device-ip-tunnel.c:285 msgid "The connection was not an IP tunnel connection." msgstr "A conexão não era túnel de IP." +#: src/libnm-client-impl/nm-device-loopback.c:41 +msgid "The connection was not a loopback connection." +msgstr "A conexão não era loopback." + #: src/libnm-client-impl/nm-device-macvlan.c:151 msgid "The connection was not a MAC-VLAN connection." msgstr "A conexão não era MAC-VLAN." -#: src/libnm-client-impl/nm-device-modem.c:179 +#: src/libnm-client-impl/nm-device-modem.c:181 msgid "The connection was not a modem connection." msgstr "A conexão não era de modem." -#: src/libnm-client-impl/nm-device-modem.c:189 +#: src/libnm-client-impl/nm-device-modem.c:191 msgid "The connection was not a valid modem connection." msgstr "A conexão não era uma conexão modem válida." -#: src/libnm-client-impl/nm-device-modem.c:198 +#: src/libnm-client-impl/nm-device-modem.c:200 msgid "The device is lacking capabilities required by the connection." msgstr "O dispositivo não possui capacidades exigidas pela conexão." @@ -924,131 +921,148 @@ msgstr "O dispositivo não possui capacidades WPA exigidas pela conexão." msgid "The device is lacking WPA2/RSN capabilities required by the connection." msgstr "O dispositivo não possui capacidades WPA2/RSN exigidas pela conexão." -#: src/libnm-client-impl/nm-device-wpan.c:57 +#: src/libnm-client-impl/nm-device-wpan.c:38 msgid "The connection was not a wpan connection." msgstr "A conexão não era wpan." -#: src/libnm-client-impl/nm-device.c:1759 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:1761 src/nmtui/nm-editor-utils.c:160 +# "Sem Fio (Wi-Fi)" alterado para "Wi-Fi" por questões de sair para fora da tela +#: 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 "Sem fio (Wi-Fi)" +msgstr "Wi-Fi" -#: src/libnm-client-impl/nm-device.c:1763 +#: src/libnm-client-impl/nm-device.c:1766 msgid "Bluetooth" msgstr "Bluetooth" -#: src/libnm-client-impl/nm-device.c:1765 +#: src/libnm-client-impl/nm-device.c:1768 msgid "OLPC Mesh" msgstr "OLPC Mesh" -#: src/libnm-client-impl/nm-device.c:1767 +#: src/libnm-client-impl/nm-device.c:1770 msgid "Open vSwitch Interface" msgstr "Interface Open vSwitch" -#: src/libnm-client-impl/nm-device.c:1769 +#: src/libnm-client-impl/nm-device.c:1772 msgid "Open vSwitch Port" msgstr "Porta Open vSwitch" -#: src/libnm-client-impl/nm-device.c:1771 +#: src/libnm-client-impl/nm-device.c:1774 msgid "Open vSwitch Bridge" msgstr "Ponte Open vSwitch" -#: src/libnm-client-impl/nm-device.c:1773 +#: src/libnm-client-impl/nm-device.c:1776 msgid "WiMAX" msgstr "WiMAX" -#: src/libnm-client-impl/nm-device.c:1775 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 "Banda Larga Móvel" -#: src/libnm-client-impl/nm-device.c:1777 -#: src/libnm-core-impl/nm-connection.c:3180 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:1785 -#: src/libnm-core-impl/nm-connection.c:3178 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:1787 +#: src/libnm-client-impl/nm-device.c:1790 msgid "ADSL" msgstr "ADSL" -#: src/libnm-client-impl/nm-device.c:1789 +#: src/libnm-client-impl/nm-device.c:1792 msgid "MACVLAN" msgstr "MACVLAN" -#: src/libnm-client-impl/nm-device.c:1791 +#: src/libnm-client-impl/nm-device.c:1794 msgid "VXLAN" msgstr "VXLAN" -#: src/libnm-client-impl/nm-device.c:1793 +#: src/libnm-client-impl/nm-device.c:1796 msgid "IPTunnel" msgstr "IPTunnel" -#: src/libnm-client-impl/nm-device.c:1795 +#: src/libnm-client-impl/nm-device.c:1798 msgid "Tun" msgstr "Tun" -#: src/libnm-client-impl/nm-device.c:1797 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:1799 +#: 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:1801 +#: src/libnm-client-impl/nm-device.c:1804 msgid "Dummy" msgstr "Dummy" -#: src/libnm-client-impl/nm-device.c:1803 +#: src/libnm-client-impl/nm-device.c:1806 msgid "PPP" msgstr "PPP" -#: src/libnm-client-impl/nm-device.c:1805 +#: 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:1807 +#: src/libnm-client-impl/nm-device.c:1810 msgid "6LoWPAN" msgstr "6LoWPAN" -#: src/libnm-client-impl/nm-device.c:1809 -#: src/libnm-core-impl/nm-connection.c:3186 src/nmtui/nm-editor-utils.c:263 +#: 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:1811 +#: src/libnm-client-impl/nm-device.c:1814 msgid "Wi-Fi P2P" msgstr "Wi-Fi P2P" -#: src/libnm-client-impl/nm-device.c:1813 +#: src/libnm-client-impl/nm-device.c:1816 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 "Loopback" + +#: 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:1820 src/libnmc-base/nm-client-utils.c:352 -#: src/libnmc-base/nm-client-utils.c:473 +#: src/libnm-client-impl/nm-device.c:1829 src/libnmc-base/nm-client-utils.c:352 +#: src/libnmc-base/nm-client-utils.c:505 src/nmcli/utils.c:1852 msgid "Unknown" msgstr "Desconhecido" -#: src/libnm-client-impl/nm-device.c:1845 +#: src/libnm-client-impl/nm-device.c:1854 msgid "Wired" msgstr "Cabeada" -#: src/libnm-client-impl/nm-device.c:1877 +#: src/libnm-client-impl/nm-device.c:1886 msgid "PCI" msgstr "PCI" -#: src/libnm-client-impl/nm-device.c:1879 +#: src/libnm-client-impl/nm-device.c:1888 msgid "USB" msgstr "USB" @@ -1058,19 +1072,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:2178 -#: src/libnm-client-impl/nm-device.c:2197 +#: 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:2857 +#: src/libnm-client-impl/nm-device.c:2866 #, c-format msgid "The connection was not valid: %s" msgstr "A conexão não era válida: %s" -#: src/libnm-client-impl/nm-device.c:2869 +#: src/libnm-client-impl/nm-device.c:2878 msgid "The interface names of the device and the connection didn't match" msgstr "Os nomes de interface do dispositivo e a conexão não correspondem." @@ -1078,939 +1092,1185 @@ msgstr "Os nomes de interface do dispositivo e a conexão não correspondem." msgid "registration failed" msgstr "registro falhou" -#: src/libnm-client-impl/nm-vpn-plugin-old.c:817 -#: src/libnm-client-impl/nm-vpn-service-plugin.c:1025 +#: src/libnm-client-impl/nm-vpn-plugin-old.c:807 +#: src/libnm-client-impl/nm-vpn-service-plugin.c:1075 msgid "No service name specified" msgstr "Nome do serviço não especificado" -#: 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” não é válido; as propriedades devem ser especificadas como “chave=valor”" -#: 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” não é uma chave válida" -#: 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 "chave duplicada “%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 "número para “%s” está fora da faixa" -#: 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 "o valor para “%s” deve ser um número" -#: 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 "o valor para “%s” deve ser um booleano" -#: 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 "faltando atributo “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” inválido “%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 "o atributo “%s” é inválido para “%s”" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:410 -#, fuzzy +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:425 msgid "property cannot be an empty string" -msgstr "esta propriedade não pode estar vazia para “%s=%s”" +msgstr "propriedade não pode estar vazia" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:427 -#, fuzzy +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:442 msgid "property cannot be longer than 255 bytes" -msgstr "a propriedade não pode ser definida quando “%s” está desabilita" +msgstr "propriedade não pode ser mais longa que 255 bytes" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:438 -#, fuzzy +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:453 msgid "property cannot contain any nul bytes" -msgstr "a propriedade deve conter apenas dígitos" +msgstr "propriedade não pode conter caracteres nulos" -#: src/libnm-core-impl/nm-connection.c:455 +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:474 +msgid "invalid DSCP value; allowed values are: 'CS0', 'CS4', 'CS6'" +msgstr "" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:508 +msgid "NULL DHCP range; it should be provided as ,." +msgstr "" + +#: 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 ,." +msgstr "" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:538 +msgid "Start IP has invalid length." +msgstr "IP inicial tem tamanho inválido" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:549 +msgid "Start IP is invalid." +msgstr "IP inicial é inválido" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:557 +msgid "End IP is invalid." +msgstr "IP final é inválido" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:565 +msgid "Start IP should be lower than the end IP." +msgstr "" + +#: 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 "" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:754 +#, fuzzy +#| msgid "the key is empty" +msgid "the string is empty" +msgstr "a chave está vazia" + +#: 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 "" + +#: 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” não é um endereço IP válido ou um URI suportado" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:822 +#, fuzzy +#| msgid "unterminated escape sequence" +msgid "unterminated square bracket" +msgstr "sequência de escape não terminada" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:836 +#, fuzzy +#| msgid "interface name is too short" +msgid "the interface name is too long" +msgstr "o nome da interface é pequeno demais" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:850 +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:871 +#, fuzzy, c-format +#| msgid "'%s' is not a valid number" +msgid "\"%s\" is not a valid port number" +msgstr "“%s” não é um número válido" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:880 +msgid "IPv6 addresses must be enclosed in square brackets" +msgstr "" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:888 +#, fuzzy, c-format +#| msgid "'%s' is not a valid IP address" +msgid "\"%s\" is not a valid IP address" +msgstr "“%s” não é um endereço IP válido" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:897 +msgid "the server name is only supported for DNS-over-TLS" +msgstr "o nome do servidor só é suportado para 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 "" + +#: 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 "faltando chave" + +#: 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 "a chave é longa demais" + +#: 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 "a chave deve ser UTF8" + +#: 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 "a chave contém caracteres inválidos" + +#: 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 "valor está faltando" + +#: 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 "o valor é grande demais" + +#: 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" +msgstr "o valor não é um UTF8 válido" + +#: src/libnm-core-impl/nm-connection.c:424 msgid "wrong type; should be a list of strings." msgstr "tipo incorreto; deveria ser uma lista de strings." -#: src/libnm-core-impl/nm-connection.c:544 +#: src/libnm-core-impl/nm-connection.c:513 msgid "unknown setting name" msgstr "nome de definição desconhecido" -#: src/libnm-core-impl/nm-connection.c:556 +#: src/libnm-core-impl/nm-connection.c:525 msgid "duplicate setting name" msgstr "nome de definição duplicado" -#: src/libnm-core-impl/nm-connection.c:957 -#, fuzzy +#: src/libnm-core-impl/nm-connection.c:941 msgid "has an invalid UUID" -msgstr "DUID inválido" +msgstr "Tem UUID inválido" -#: src/libnm-core-impl/nm-connection.c:962 +#: src/libnm-core-impl/nm-connection.c:946 msgid "has a UUID that requires normalization" -msgstr "" +msgstr "tem um UUID que requer normalização" -#: src/libnm-core-impl/nm-connection.c:967 -#, fuzzy +#: src/libnm-core-impl/nm-connection.c:951 msgid "has duplicate UUIDs" -msgstr "chave duplicada %s" +msgstr "Tem UUIDs duplicados" -#: src/libnm-core-impl/nm-connection.c:1805 +#: src/libnm-core-impl/nm-connection.c:1936 msgid "setting not found" msgstr "definição não localizada" -#: src/libnm-core-impl/nm-connection.c:1859 -#: src/libnm-core-impl/nm-connection.c:1884 -#: src/libnm-core-impl/nm-connection.c:1909 -msgid "setting is required for non-slave connections" -msgstr "definição é exigida para conexões não escravas" +#: 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 "definição é exigida para conexões sem porta" -#: src/libnm-core-impl/nm-connection.c:1872 -#: src/libnm-core-impl/nm-connection.c:1897 -#: src/libnm-core-impl/nm-connection.c:1922 -msgid "setting not allowed in slave connection" -msgstr "definição não permitida para conexão escrava" +#: 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 "definição não permitida na conexão de porta" -#: src/libnm-core-impl/nm-connection.c:2032 +#: src/libnm-core-impl/nm-connection.c:2166 msgid "Unexpected failure to normalize the connection" msgstr "Falha inesperada ao normalizar a conexão" -#: src/libnm-core-impl/nm-connection.c:2093 +#: src/libnm-core-impl/nm-connection.c:2227 msgid "Unexpected failure to verify the connection" msgstr "Falha inesperada ao verificar a conexão" -#: src/libnm-core-impl/nm-connection.c:2130 +#: src/libnm-core-impl/nm-connection.c:2264 #, c-format msgid "unexpected uuid %s instead of %s" msgstr "uuid %s inesperado em vez de %s" -#: src/libnm-core-impl/nm-connection.c:3031 -#: src/libnm-core-impl/nm-setting-8021x.c:2607 -#: src/libnm-core-impl/nm-setting-8021x.c:2644 -#: src/libnm-core-impl/nm-setting-8021x.c:2662 -#: src/libnm-core-impl/nm-setting-8021x.c:2797 -#: src/libnm-core-impl/nm-setting-adsl.c:173 -#: src/libnm-core-impl/nm-setting-bluetooth.c:128 -#: src/libnm-core-impl/nm-setting-bluetooth.c:192 -#: src/libnm-core-impl/nm-setting-bluetooth.c:209 -#: src/libnm-core-impl/nm-setting-cdma.c:144 -#: src/libnm-core-impl/nm-setting-connection.c:1149 -#: src/libnm-core-impl/nm-setting-connection.c:1187 -#: src/libnm-core-impl/nm-setting-connection.c:1530 -#: src/libnm-core-impl/nm-setting-ip-config.c:5423 -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:387 -#: src/libnm-core-impl/nm-setting-olpc-mesh.c:99 +#: 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 +#: src/libnm-core-impl/nm-setting-8021x.c:2834 +#: src/libnm-core-impl/nm-setting-adsl.c:171 +#: src/libnm-core-impl/nm-setting-bluetooth.c:126 +#: 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:1442 +#: src/libnm-core-impl/nm-setting-connection.c:1480 +#: src/libnm-core-impl/nm-setting-connection.c:1979 +#: 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 -#: src/libnm-core-impl/nm-setting-pppoe.c:146 -#: src/libnm-core-impl/nm-setting-vpn.c:546 +#: src/libnm-core-impl/nm-setting-pppoe.c:144 +#: src/libnm-core-impl/nm-setting-vpn.c:545 #: src/libnm-core-impl/nm-setting-wifi-p2p.c:119 -#: src/libnm-core-impl/nm-setting-wimax.c:108 -#: src/libnm-core-impl/nm-setting-wireless-security.c:916 -#: src/libnm-core-impl/nm-setting-wireless.c:841 +#: src/libnm-core-impl/nm-setting-wimax.c:106 +#: src/libnm-core-impl/nm-setting-wireless-security.c:912 +#: src/libnm-core-impl/nm-setting-wireless.c:1100 msgid "property is missing" msgstr "propriedade está faltando" -#: src/libnm-core-impl/nm-connection.c:3184 +#: src/libnm-core-impl/nm-connection.c:3355 msgid "IP Tunnel" msgstr "Túnel IP" -#: src/libnm-core-impl/nm-connection.c:3188 +#: src/libnm-core-impl/nm-connection.c:3359 msgid "TUN/TAP" -msgstr "" - -#: src/libnm-core-impl/nm-dbus-utils.c:181 -#, c-format -msgid "Method returned type '%s', but expected '%s'" -msgstr "O método retornou o tipo “%s”, mas esperava-se “%s”" +msgstr "TUN/TAP" #: src/libnm-core-impl/nm-keyfile-utils.c:174 -#, fuzzy msgid "Value cannot be interpreted as a list of numbers." -msgstr "o valor não pôde ser interpretado como um inteiro" +msgstr "Valor não pode ser interpretado como uma lista de números" #: src/libnm-core-impl/nm-keyfile-utils.c:303 #, c-format msgid "value is not an integer in range [%lld, %lld]" msgstr "o valor não é um inteiro na faixa [%lld, %lld]" -#: src/libnm-core-impl/nm-keyfile.c:331 +#: src/libnm-core-impl/nm-keyfile.c:334 msgid "ignoring missing number" msgstr "ignorando número faltante" -#: src/libnm-core-impl/nm-keyfile.c:343 +#: src/libnm-core-impl/nm-keyfile.c:346 #, c-format msgid "ignoring invalid number '%s'" msgstr "ignorando número inválido “%s”" -#: src/libnm-core-impl/nm-keyfile.c:372 +#: src/libnm-core-impl/nm-keyfile.c:375 #, c-format msgid "ignoring invalid %s address: %s" msgstr "ignorando endereço %s inválido: %s" -#: src/libnm-core-impl/nm-keyfile.c:418 +#: src/libnm-core-impl/nm-keyfile.c:421 #, c-format msgid "ignoring invalid gateway '%s' for %s route" msgstr "ignorando gateway “%s” inválido para rota %s" -#: src/libnm-core-impl/nm-keyfile.c:440 +#: src/libnm-core-impl/nm-keyfile.c:443 #, c-format msgid "ignoring invalid %s route: %s" msgstr "ignorando rota %s inválido: %s" -#: src/libnm-core-impl/nm-keyfile.c:618 +#: src/libnm-core-impl/nm-keyfile.c:621 #, c-format msgid "unexpected character '%c' for address %s: '%s' (position %td)" msgstr "caractere “%c” inesperado para endereço %s: “%s” (posição %td)" -#: src/libnm-core-impl/nm-keyfile.c:634 +#: src/libnm-core-impl/nm-keyfile.c:637 #, c-format msgid "unexpected character '%c' for %s: '%s' (position %td)" msgstr "caractere “%c” inesperado para %s: “%s” (posição %td)" -#: src/libnm-core-impl/nm-keyfile.c:650 +#: src/libnm-core-impl/nm-keyfile.c:653 #, c-format msgid "unexpected character '%c' in prefix length for %s: '%s' (position %td)" msgstr "" "caractere “%c” inesperado no tamanho do prefixo para %s: “%s” (posição %td)" -#: src/libnm-core-impl/nm-keyfile.c:667 +#: src/libnm-core-impl/nm-keyfile.c:670 #, c-format msgid "garbage at the end of value %s: '%s'" msgstr "lixo ao final do valor %s: “%s”" -#: src/libnm-core-impl/nm-keyfile.c:677 +#: src/libnm-core-impl/nm-keyfile.c:680 #, c-format msgid "deprecated semicolon at the end of value %s: '%s'" msgstr "ponto-e-vírgula obsoleta ao final do valor %s: “%s”" -#: src/libnm-core-impl/nm-keyfile.c:696 +#: src/libnm-core-impl/nm-keyfile.c:699 #, c-format msgid "invalid prefix length for %s '%s', defaulting to %d" msgstr "tamanho de prefixo inválido para %s “%s”, usando o padrão %d" -#: src/libnm-core-impl/nm-keyfile.c:708 +#: src/libnm-core-impl/nm-keyfile.c:711 #, c-format msgid "missing prefix length for %s '%s', defaulting to %d" msgstr "faltando tamanho de prefixo para %s “%s”, usando o padrão %d" -#: src/libnm-core-impl/nm-keyfile.c:1051 -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:320 -#: src/libnm-core-impl/nm-setting-user.c:364 +#: src/libnm-core-impl/nm-keyfile.c:959 +#, c-format +msgid "" +"ignoring gateway \"%s\" from \"address*\" keys because the \"gateway\" key " +"is set" +msgstr "" + +#: 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 #, c-format msgid "invalid value for \"%s\": %s" msgstr "valor inválido para “%s”: %s" -#: src/libnm-core-impl/nm-keyfile.c:1129 -#, c-format -msgid "ignoring invalid DNS server IPv%c address '%s'" +#: src/libnm-core-impl/nm-keyfile.c:1168 +#, fuzzy, c-format +#| msgid "ignoring invalid DNS server IPv%c address '%s'" +msgid "ignoring invalid DNS server IPv%c address '%s': %s" msgstr "ignorando endereço DNS inválido para endereços IPv%c “%s”" -#: src/libnm-core-impl/nm-keyfile.c:1166 -#: src/libnmc-setting/nm-meta-setting-desc.c:1669 +#: 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 "" + +#: 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 "opção inválida “%s”, use um de [%s]" -#: src/libnm-core-impl/nm-keyfile.c:1241 +#: src/libnm-core-impl/nm-keyfile.c:1326 msgid "ignoring invalid MAC address" msgstr "ignorando endereço MAC inválido" -#: src/libnm-core-impl/nm-keyfile.c:1317 -#, 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 "ignorando endereço %s inválido: %s" +msgstr "ignorando opção de ligação inválida %s%s%s = %s%s%s: %s" -#: src/libnm-core-impl/nm-keyfile.c:1507 +#: src/libnm-core-impl/nm-keyfile.c:1592 msgid "ignoring invalid SSID" msgstr "ignorando SSID inválido" -#: src/libnm-core-impl/nm-keyfile.c:1525 +#: src/libnm-core-impl/nm-keyfile.c:1610 msgid "ignoring invalid raw password" msgstr "ignorando senha não tratada inválida" -#: src/libnm-core-impl/nm-keyfile.c:1670 +#: src/libnm-core-impl/nm-keyfile.c:1755 msgid "invalid key/cert value" msgstr "valor de certificado/chave inválido" -#: src/libnm-core-impl/nm-keyfile.c:1685 +#: src/libnm-core-impl/nm-keyfile.c:1770 #, c-format msgid "invalid key/cert value path \"%s\"" msgstr "valor de certificado/chave com caminho inválido “%s”" -#: src/libnm-core-impl/nm-keyfile.c:1710 src/libnm-core-impl/nm-keyfile.c:1807 +#: 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 "certificado ou arquivo de chave “%s” não existe" -#: src/libnm-core-impl/nm-keyfile.c:1723 +#: src/libnm-core-impl/nm-keyfile.c:1808 #, c-format msgid "invalid PKCS#11 URI \"%s\"" msgstr "URI de PKCS#11 inválida “%s”" -#: src/libnm-core-impl/nm-keyfile.c:1769 +#: src/libnm-core-impl/nm-keyfile.c:1854 msgid "invalid key/cert value data:;base64, is not base64" msgstr "valor data:;base64 de chave/certificado inválido, não é base64" -#: src/libnm-core-impl/nm-keyfile.c:1782 +#: src/libnm-core-impl/nm-keyfile.c:1867 msgid "invalid key/cert value data:;base64,file://" msgstr "valor data:;base64 de chave/certificado inválido, file://" -#: src/libnm-core-impl/nm-keyfile.c:1823 +#: src/libnm-core-impl/nm-keyfile.c:1908 msgid "invalid key/cert value is not a valid blob" msgstr "valor de certificado/chave inválido não é um blob válido" -#: src/libnm-core-impl/nm-keyfile.c:1925 +#: src/libnm-core-impl/nm-keyfile.c:2010 #, c-format msgid "invalid parity value '%s'" msgstr "valor de paridade inválido “%s”" -#: src/libnm-core-impl/nm-keyfile.c:1947 src/libnm-core-impl/nm-keyfile.c:3441 +#: src/libnm-core-impl/nm-keyfile.c:2032 src/libnm-core-impl/nm-keyfile.c:3611 #, c-format msgid "invalid setting: %s" msgstr "definição inválida: %s" -#: src/libnm-core-impl/nm-keyfile.c:1967 +#: src/libnm-core-impl/nm-keyfile.c:2052 #, c-format msgid "ignoring invalid team configuration: %s" msgstr "ignorando configuração de união inválida: %s" -#: src/libnm-core-impl/nm-keyfile.c:2050 +#: src/libnm-core-impl/nm-keyfile.c:2173 #, c-format msgid "invalid qdisc: %s" msgstr "qdisc inválido: %s" -#: src/libnm-core-impl/nm-keyfile.c:2100 +#: src/libnm-core-impl/nm-keyfile.c:2223 #, c-format msgid "invalid tfilter: %s" msgstr "tfilter inválido: %s" -#: src/libnm-core-impl/nm-keyfile.c:3266 +#: src/libnm-core-impl/nm-keyfile.c:3436 #, c-format msgid "error loading setting value: %s" msgstr "erro ao carregar valor de definição %s" -#: src/libnm-core-impl/nm-keyfile.c:3297 src/libnm-core-impl/nm-keyfile.c:3309 -#: src/libnm-core-impl/nm-keyfile.c:3328 src/libnm-core-impl/nm-keyfile.c:3340 -#: src/libnm-core-impl/nm-keyfile.c:3352 src/libnm-core-impl/nm-keyfile.c:3414 -#: src/libnm-core-impl/nm-keyfile.c:3426 +#: 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 "o valor não pôde ser interpretado como um inteiro" -#: src/libnm-core-impl/nm-keyfile.c:3382 -#, 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 "" -"ignorando elemento byte “%d” inválido (não está entre 0 e 255 inclusivo)" +"ignorando elemento byte '%u' inválido (não está entre 0 e 255 inclusive)" -#: src/libnm-core-impl/nm-keyfile.c:3466 +#: src/libnm-core-impl/nm-keyfile.c:3646 +#, c-format +msgid "invalid value for '%s.dhcp-send-hostname'" +msgstr "valor inválido para “%s.dhcp-send-hostname”" + +#: src/libnm-core-impl/nm-keyfile.c:3667 +#, c-format +msgid "invalid value for '%s.dhcp-send-hostname-deprecated'" +msgstr "" + +#: src/libnm-core-impl/nm-keyfile.c:3692 #, c-format msgid "invalid setting name '%s'" msgstr "nome de definição “%s” inválido" -#: src/libnm-core-impl/nm-keyfile.c:3513 +#: src/libnm-core-impl/nm-keyfile.c:3741 #, c-format msgid "invalid key '%s.%s'" msgstr "chave inválida “%s.%s”" -#: src/libnm-core-impl/nm-keyfile.c:3529 +#: src/libnm-core-impl/nm-keyfile.c:3757 #, c-format msgid "key '%s.%s' is not boolean" msgstr "a chave “%s.%s” não é um booleano" -#: src/libnm-core-impl/nm-keyfile.c:3546 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3774 +#, c-format msgid "key '%s.%s' is not a uint32" -msgstr "a chave “%s.%s” não é um booleano" +msgstr "a chave “%s.%s” não é um uint32 (natural de 32 bits)" -#: src/libnm-core-impl/nm-keyfile.c:3603 +#: src/libnm-core-impl/nm-keyfile.c:3831 #, c-format msgid "invalid peer public key in section '%s'" msgstr "chave pública de par inválida na seção “%s”" -#: src/libnm-core-impl/nm-keyfile.c:3618 +#: 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 "" "a chave “%s.%s” não é uma chave válida de 256 bits na codificação base64" -#: src/libnm-core-impl/nm-keyfile.c:3641 +#: src/libnm-core-impl/nm-keyfile.c:3869 #, c-format msgid "key '%s.%s' is not a valid secret flag" msgstr "a chave “%s.%s” não é uma opção de segredo válida" -#: src/libnm-core-impl/nm-keyfile.c:3664 +#: 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 "A chave “%s.%s” não é um número inteiro no intervalo de 0 a 2^32" -#: src/libnm-core-impl/nm-keyfile.c:3680 +#: src/libnm-core-impl/nm-keyfile.c:3908 #, c-format msgid "key '%s.%s' is not a valid endpoint" msgstr "a chave “%s.%s” não é um ponto de extremidade válido" -#: src/libnm-core-impl/nm-keyfile.c:3706 +#: src/libnm-core-impl/nm-keyfile.c:3934 #, c-format msgid "key '%s.%s' has invalid allowed-ips" msgstr "a chave “%s.%s” possui ips permitidos inválidos" -#: src/libnm-core-impl/nm-keyfile.c:3721 +#: src/libnm-core-impl/nm-keyfile.c:3949 #, c-format msgid "peer '%s' is invalid: %s" msgstr "o par “%s” é inválido: %s" -#: src/libnm-core-impl/nm-keyfile.c:4249 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:4499 +#, c-format msgid "unsupported option \"%s.%s\" of variant type %s" -msgstr "atributo sem suporte “%s” de tipo “%s”" +msgstr "não suportada opção “%s.%s” de tipo variante %s" -#: src/libnm-core-impl/nm-setting-6lowpan.c:78 +#: src/libnm-core-impl/nm-setting-6lowpan.c:81 +#: src/libnm-core-impl/nm-setting-hsr.c:171 +#: src/libnm-core-impl/nm-setting-hsr.c:189 #: src/libnm-core-impl/nm-setting-veth.c:81 msgid "property is not specified" msgstr "a propriedade não foi especificada" -#: src/libnm-core-impl/nm-setting-6lowpan.c:101 -#: src/libnm-core-impl/nm-setting-macsec.c:306 -#: src/libnm-core-impl/nm-setting-vlan.c:609 +#: src/libnm-core-impl/nm-setting-6lowpan.c:104 +#: src/libnm-core-impl/nm-setting-macsec.c:333 +#: src/libnm-core-impl/nm-setting-vlan.c:625 #, c-format msgid "'%s' value doesn't match '%s=%s'" msgstr "valor “%s” não corresponde “%s=%s”" -#: src/libnm-core-impl/nm-setting-6lowpan.c:117 -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:360 -#: src/libnm-core-impl/nm-setting-macsec.c:322 -#: src/libnm-core-impl/nm-setting-macvlan.c:140 -#: src/libnm-core-impl/nm-setting-vlan.c:625 -#: src/libnm-core-impl/nm-setting-vxlan.c:379 +#: 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 #, c-format msgid "'%s' is neither an UUID nor an interface name" msgstr "“%s” não é um UUID nem um nome de interface" -#: src/libnm-core-impl/nm-setting-8021x.c:234 +#: src/libnm-core-impl/nm-setting-8021x.c:237 msgid "binary data missing" msgstr "faltando dados de binário" -#: src/libnm-core-impl/nm-setting-8021x.c:266 +#: src/libnm-core-impl/nm-setting-8021x.c:269 msgid "URI not NUL terminated" msgstr "URL não terminada com NUL" -#: src/libnm-core-impl/nm-setting-8021x.c:275 +#: src/libnm-core-impl/nm-setting-8021x.c:278 msgid "URI is empty" msgstr "URI está vazia" -#: src/libnm-core-impl/nm-setting-8021x.c:283 +#: src/libnm-core-impl/nm-setting-8021x.c:286 msgid "URI is not valid UTF-8" msgstr "URI não é um UTF-8 válido" -#: src/libnm-core-impl/nm-setting-8021x.c:301 +#: src/libnm-core-impl/nm-setting-8021x.c:304 msgid "data missing" msgstr "faltando dados" -#: src/libnm-core-impl/nm-setting-8021x.c:322 -#: src/libnm-core-impl/nm-setting-8021x.c:690 +#: src/libnm-core-impl/nm-setting-8021x.c:325 +#: src/libnm-core-impl/nm-setting-8021x.c:693 #, c-format msgid "certificate is invalid: %s" msgstr "certificado é inválido: %s" -#: src/libnm-core-impl/nm-setting-8021x.c:331 +#: src/libnm-core-impl/nm-setting-8021x.c:334 msgid "certificate detected as invalid scheme" msgstr "certificado detectado como esquema inválido" -#: src/libnm-core-impl/nm-setting-8021x.c:557 +#: src/libnm-core-impl/nm-setting-8021x.c:560 msgid "CA certificate must be in X.509 format" msgstr "Certificado de AC deve estar em um formato X.509" -#: src/libnm-core-impl/nm-setting-8021x.c:569 +#: src/libnm-core-impl/nm-setting-8021x.c:572 msgid "invalid certificate format" msgstr "formato de certificado inválido" -#: src/libnm-core-impl/nm-setting-8021x.c:701 +#: src/libnm-core-impl/nm-setting-8021x.c:704 msgid "password is not supported when certificate is not on a PKCS#11 token" msgstr "" "não há suporte a senha quando o certificado não está em um token PKCS#11" -#: src/libnm-core-impl/nm-setting-8021x.c:2612 -#: src/libnm-core-impl/nm-setting-8021x.c:2652 -#: src/libnm-core-impl/nm-setting-8021x.c:2671 -#: src/libnm-core-impl/nm-setting-8021x.c:2838 -#: src/libnm-core-impl/nm-setting-8021x.c:2858 -#: src/libnm-core-impl/nm-setting-8021x.c:2878 -#: src/libnm-core-impl/nm-setting-8021x.c:2919 -#: src/libnm-core-impl/nm-setting-8021x.c:2939 -#: src/libnm-core-impl/nm-setting-8021x.c:2993 -#: src/libnm-core-impl/nm-setting-adsl.c:181 -#: src/libnm-core-impl/nm-setting-cdma.c:149 -#: src/libnm-core-impl/nm-setting-cdma.c:159 -#: src/libnm-core-impl/nm-setting-connection.c:1159 -#: src/libnm-core-impl/nm-setting-connection.c:1202 -#: src/libnm-core-impl/nm-setting-connection.c:1468 -#: src/libnm-core-impl/nm-setting-gsm.c:298 -#: src/libnm-core-impl/nm-setting-gsm.c:353 -#: src/libnm-core-impl/nm-setting-gsm.c:396 -#: src/libnm-core-impl/nm-setting-gsm.c:405 -#: src/libnm-core-impl/nm-setting-ip-config.c:5432 -#: src/libnm-core-impl/nm-setting-ip4-config.c:286 -#: src/libnm-core-impl/nm-setting-ip4-config.c:298 -#: src/libnm-core-impl/nm-setting-pppoe.c:151 -#: src/libnm-core-impl/nm-setting-pppoe.c:161 -#: src/libnm-core-impl/nm-setting-vpn.c:554 -#: src/libnm-core-impl/nm-setting-vpn.c:564 -#: src/libnm-core-impl/nm-setting-wimax.c:109 -#: src/libnm-core-impl/nm-setting-wireless-security.c:972 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1000 -#: src/libnm-core-impl/nm-setting.c:2396 +#: src/libnm-core-impl/nm-setting-8021x.c:2646 +#: src/libnm-core-impl/nm-setting-8021x.c:2686 +#: src/libnm-core-impl/nm-setting-8021x.c:2705 +#: src/libnm-core-impl/nm-setting-8021x.c:2875 +#: src/libnm-core-impl/nm-setting-8021x.c:2895 +#: src/libnm-core-impl/nm-setting-8021x.c:2915 +#: src/libnm-core-impl/nm-setting-8021x.c:2981 +#: src/libnm-core-impl/nm-setting-8021x.c:3001 +#: src/libnm-core-impl/nm-setting-8021x.c:3055 +#: 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:1452 +#: src/libnm-core-impl/nm-setting-connection.c:1495 +#: src/libnm-core-impl/nm-setting-connection.c:1747 +#: src/libnm-core-impl/nm-setting-gsm.c:560 +#: src/libnm-core-impl/nm-setting-gsm.c:575 +#: src/libnm-core-impl/nm-setting-gsm.c:618 +#: src/libnm-core-impl/nm-setting-gsm.c:627 +#: 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 +#: src/libnm-core-impl/nm-setting-pppoe.c:159 +#: src/libnm-core-impl/nm-setting-vpn.c:553 +#: src/libnm-core-impl/nm-setting-vpn.c:563 +#: 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:2626 msgid "property is empty" msgstr "propriedade está vazia" -#: src/libnm-core-impl/nm-setting-8021x.c:2685 +#: src/libnm-core-impl/nm-setting-8021x.c:2719 #, c-format msgid "has to match '%s' property for PKCS#12" msgstr "tem que corresponder à propriedade “%s” para PKCS#12" -#: src/libnm-core-impl/nm-setting-8021x.c:2708 +#: src/libnm-core-impl/nm-setting-8021x.c:2742 msgid "exactly one property must be set" -msgstr "" +msgstr "exatamente uma propriedade deve ser definida" -#: src/libnm-core-impl/nm-setting-8021x.c:2785 +#: src/libnm-core-impl/nm-setting-8021x.c:2822 msgid "can be enabled only on Ethernet connections" msgstr "pode ser habilitado apenas em conexões Ethernet" -#: src/libnm-core-impl/nm-setting-8021x.c:2806 -#: src/libnm-core-impl/nm-setting-bluetooth.c:110 -#: src/libnm-core-impl/nm-setting-infiniband.c:191 -#: src/libnm-core-impl/nm-setting-infiniband.c:203 -#: src/libnm-core-impl/nm-setting-ip4-config.c:234 -#: src/libnm-core-impl/nm-setting-ip4-config.c:250 -#: src/libnm-core-impl/nm-setting-ip6-config.c:281 -#: src/libnm-core-impl/nm-setting-ip6-config.c:297 -#: src/libnm-core-impl/nm-setting-olpc-mesh.c:137 +#: src/libnm-core-impl/nm-setting-8021x.c:2843 +#: src/libnm-core-impl/nm-setting-bluetooth.c:108 +#: 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: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 #: src/libnm-core-impl/nm-setting-wifi-p2p.c:131 -#: src/libnm-core-impl/nm-setting-wimax.c:121 -#: src/libnm-core-impl/nm-setting-wired.c:836 -#: src/libnm-core-impl/nm-setting-wired.c:849 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1012 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1024 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1036 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1049 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1062 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1093 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1160 -#: src/libnm-core-impl/nm-setting-wireless-security.c:1209 -#: src/libnm-core-impl/nm-setting-wireless.c:937 -#: src/libnm-core-impl/nm-setting-wireless.c:949 -#: src/libnm-core-impl/nm-setting-wireless.c:962 -#: src/libnm-core-impl/nm-setting-wpan.c:161 -#: src/libnm-core-impl/nm-utils.c:4155 +#: src/libnm-core-impl/nm-setting-wimax.c:119 +#: src/libnm-core-impl/nm-setting-wired.c:1028 +#: src/libnm-core-impl/nm-setting-wired.c:1041 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1008 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1020 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1032 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1045 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1058 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1089 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1156 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1205 +#: src/libnm-core-impl/nm-setting-wireless.c:1196 +#: src/libnm-core-impl/nm-setting-wireless.c:1208 +#: 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 msgid "property is invalid" msgstr "propriedade é inválida" -#: src/libnm-core-impl/nm-setting-8021x.c:2832 -#: src/libnm-core-impl/nm-setting-8021x.c:2852 -#: src/libnm-core-impl/nm-setting-8021x.c:2872 -#: src/libnm-core-impl/nm-setting-8021x.c:2913 -#: src/libnm-core-impl/nm-setting-8021x.c:2933 -#: src/libnm-core-impl/nm-setting-adsl.c:193 -#: src/libnm-core-impl/nm-setting-adsl.c:206 -#: src/libnm-core-impl/nm-setting-bluetooth.c:145 -#: src/libnm-core-impl/nm-setting-wireless-security.c:928 +#: src/libnm-core-impl/nm-setting-8021x.c:2869 +#: src/libnm-core-impl/nm-setting-8021x.c:2889 +#: src/libnm-core-impl/nm-setting-8021x.c:2909 +#: src/libnm-core-impl/nm-setting-8021x.c:2975 +#: src/libnm-core-impl/nm-setting-8021x.c:2995 +#: src/libnm-core-impl/nm-setting-adsl.c:191 +#: 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 #, c-format msgid "'%s' is not a valid value for the property" msgstr "valor “%s” não é válido para a propriedade" -#: src/libnm-core-impl/nm-setting-8021x.c:2891 -msgid "invalid auth flags" -msgstr "sinalizadores inválido de autenticação" +#: src/libnm-core-impl/nm-setting-8021x.c:2928 +#, c-format +msgid "invalid auth flags: '%d' contains unknown flags" +msgstr "" +"sinalizadores inválidos de autenticação: '%d' contém sinalizadores " +"desconhecidos" -#: src/libnm-core-impl/nm-setting-bluetooth.c:169 +#: src/libnm-core-impl/nm-setting-8021x.c:2953 +msgid "" +"invalid auth flags: both enable and disable are set for the same TLS version" +msgstr "" +"sinalizadores de autenticação inválidos: tanto habilitar quanto desabilitar " +"estão definidos para a mesma versão TLS" + +#: src/libnm-core-impl/nm-setting-bluetooth.c:167 #, c-format msgid "'%s' connection requires '%s' or '%s' setting" msgstr "a conexão “%s” requer a definição “%s” ou “%s”" -#: src/libnm-core-impl/nm-setting-bluetooth.c:221 +#: src/libnm-core-impl/nm-setting-bluetooth.c:219 #, c-format msgid "'%s' connection requires '%s' setting" msgstr "a conexão “%s” requer a definição “%s”" -#: src/libnm-core-impl/nm-setting-bond-port.c:82 -#: src/libnm-core-impl/nm-setting-bridge-port.c:328 +#: src/libnm-core-impl/nm-setting-bond-port.c:99 +#: src/libnm-core-impl/nm-setting-bridge-port.c:326 +#: src/libnm-core-impl/nm-setting-generic.c:100 #: src/libnm-core-impl/nm-setting-ovs-bridge.c:151 -#: src/libnm-core-impl/nm-setting-ovs-interface.c:289 -#: src/libnm-core-impl/nm-setting-ovs-port.c:170 -#: src/libnm-core-impl/nm-setting-team-port.c:323 +#: 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 msgid "missing setting" msgstr "faltando definição" -#: src/libnm-core-impl/nm-setting-bond-port.c:92 -#, fuzzy, c-format -msgid "A connection with a '%s' setting must have the slave-type set to '%s'" +#: 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 port-type set to '%s'. " +"Instead it is '%s'" msgstr "" -"Uma conexão com uma definição “%s” deve ter um tipo escravo definido para " -"“%s”. Em vez disso, ela é “%s”" +"Uma conexão com a definição '%s' deve ter o tipo de porta definido como " +"'%s'. No entanto, ela é '%s'" -#: src/libnm-core-impl/nm-setting-bond.c:504 +#: src/libnm-core-impl/nm-setting-bond.c:524 #, c-format msgid "'%s' option is empty" msgstr "opção “%s” está vazia" -#: src/libnm-core-impl/nm-setting-bond.c:513 +#: src/libnm-core-impl/nm-setting-bond.c:537 #, c-format -msgid "'%s' is not a valid IPv4 address for '%s' option" -msgstr "“%s” não é um endereço IPv4 válido para a opção “%s”" +msgid "'%s' is not a valid %s address for '%s' option" +msgstr "'%s' não é um endereço %s válido para a opção '%s'" -#: src/libnm-core-impl/nm-setting-bond.c:540 -#, fuzzy +#: src/libnm-core-impl/nm-setting-bond.c:565 msgid "missing option name" -msgstr "faltando uma opção" +msgstr "faltando a opção nome" -#: src/libnm-core-impl/nm-setting-bond.c:545 +#: src/libnm-core-impl/nm-setting-bond.c:570 #, c-format msgid "invalid option '%s'" msgstr "opção “%s” inválida" -#: src/libnm-core-impl/nm-setting-bond.c:581 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-bond.c:609 +#, c-format msgid "invalid value '%s' for option '%s'" -msgstr "valor uint8 inválido “%s” para o atributo “%s”" +msgstr "valor '%s' inválido para a opção '%s'" -#: src/libnm-core-impl/nm-setting-bond.c:861 +#: src/libnm-core-impl/nm-setting-bond.c:923 #, c-format msgid "mandatory option '%s' is missing" msgstr "opção obrigatória “%s” está faltando" -#: src/libnm-core-impl/nm-setting-bond.c:871 +#: src/libnm-core-impl/nm-setting-bond.c:933 #, c-format msgid "'%s' is not a valid value for '%s'" msgstr "“%s” não é um valor válido para “%s”" -#: src/libnm-core-impl/nm-setting-bond.c:884 +#: src/libnm-core-impl/nm-setting-bond.c:946 +#: src/libnm-core-impl/nm-setting-bond.c:957 #, c-format msgid "'%s=%s' is incompatible with '%s > 0'" msgstr "“%s=%s” é incompatível com “%s > 0”" -#: src/libnm-core-impl/nm-setting-bond.c:901 +#: src/libnm-core-impl/nm-setting-bond.c:974 #, c-format msgid "'%s' is not valid for the '%s' option: %s" msgstr "“%s” não é válido para a opção “%s”: %s" -#: src/libnm-core-impl/nm-setting-bond.c:913 +#: src/libnm-core-impl/nm-setting-bond.c:986 #, c-format msgid "'%s' option is only valid for '%s=%s'" msgstr "opção “%s” é válida apenas para “%s=%s”" -#: src/libnm-core-impl/nm-setting-bond.c:926 +#: src/libnm-core-impl/nm-setting-bond.c:999 #, c-format msgid "'%s=%s' is not a valid configuration for '%s'" msgstr "“%s=%s” não é uma configuração válida para “%s”" -#: src/libnm-core-impl/nm-setting-bond.c:941 -#: src/libnm-core-impl/nm-setting-bond.c:952 -#: src/libnm-core-impl/nm-setting-bond.c:965 +#: 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 #, c-format msgid "'%s' option requires '%s' option to be enabled" msgstr "opção “%s” requer que a opção “%s” seja habilitada" -#: src/libnm-core-impl/nm-setting-bond.c:982 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-bond.c:1055 +#, c-format msgid "'%s' option needs to be a value multiple of '%s' value" -msgstr "opção “%s” está vazia" +msgstr "opção '%s' precisa ser um valor múltiplo do valor '%s'" -#: src/libnm-core-impl/nm-setting-bond.c:999 -#: src/libnm-core-impl/nm-setting-bond.c:1010 +#: src/libnm-core-impl/nm-setting-bond.c:1073 +#, c-format +msgid "'%s' option requires '%s' or '%s'option to be set" +msgstr "opção '%s' requer que a opção '%s' ou '%s' para ser definida" + +#: src/libnm-core-impl/nm-setting-bond.c:1085 +#: src/libnm-core-impl/nm-setting-bond.c:1095 #, c-format msgid "'%s' option requires '%s' option to be set" msgstr "opção “%s” requer que a opção “%s” seja definida" -#: src/libnm-core-impl/nm-setting-bond.c:1023 +#: src/libnm-core-impl/nm-setting-bond.c:1108 +#: src/libnm-core-impl/nm-setting-bond.c:1120 #, c-format msgid "'%s' option is only valid with mode '%s'" msgstr "opção “%s” é válida apenas para “%s”" -#: src/libnm-core-impl/nm-setting-bond.c:1036 +#: src/libnm-core-impl/nm-setting-bond.c:1133 #, c-format msgid "'%s' and '%s' cannot have different values" msgstr "“%s” e “%s” não podem ter valores diferentes" -#: src/libnm-core-impl/nm-setting-bond.c:1059 +#: src/libnm-core-impl/nm-setting-bond.c:1146 +#, c-format +msgid "%s requires bond mode \"%s\"" +msgstr "%s requer modo de vínculo “%s”" + +#: src/libnm-core-impl/nm-setting-bond.c:1159 +#, c-format +msgid "%s requires xmit_hash_policy \"vlan+srcmac\"" +msgstr "%s requer xmit_hash_policy “vlan+srcmac”" + +#: src/libnm-core-impl/nm-setting-bond.c:1182 #, c-format msgid "'%s' option should be string" msgstr "opção “%s” deveria ser string" -#: src/libnm-core-impl/nm-setting-bond.c:1072 +#: src/libnm-core-impl/nm-setting-bond.c:1195 #, c-format msgid "'%s' option is not valid with mode '%s'" msgstr "a opção “%s” não é válida com o modo “%s”" -#: src/libnm-core-impl/nm-setting-bridge-port.c:338 -#: src/libnm-core-impl/nm-setting-ovs-interface.c:312 -#: src/libnm-core-impl/nm-setting-ovs-port.c:193 -#: src/libnm-core-impl/nm-setting-team-port.c:333 -#, c-format -msgid "" -"A connection with a '%s' setting must have the slave-type set to '%s'. " -"Instead it is '%s'" -msgstr "" -"Uma conexão com uma definição “%s” deve ter um tipo escravo definido para " -"“%s”. Em vez disso, ela é “%s”" - -#: src/libnm-core-impl/nm-setting-bridge.c:1175 +#: src/libnm-core-impl/nm-setting-bridge.c:1182 #, c-format msgid "value '%d' is out of range <%d-%d>" msgstr "valor “%d” está fora da faixa <%d-%d>" -#: src/libnm-core-impl/nm-setting-bridge.c:1194 +#: src/libnm-core-impl/nm-setting-bridge.c:1201 msgid "is not a valid MAC address" msgstr "não é um endereço MAC válido" -#: src/libnm-core-impl/nm-setting-bridge.c:1238 +#: src/libnm-core-impl/nm-setting-bridge.c:1245 msgid "the mask can't contain bits 0 (STP), 1 (MAC) or 2 (LACP)" msgstr "a máscara não pode conter bits 0 (STP), 1 (MAC) ou 2 (LACP)" -#: src/libnm-core-impl/nm-setting-bridge.c:1260 -#, fuzzy +#: src/libnm-core-impl/nm-setting-bridge.c:1267 msgid "is not a valid link local MAC address" -msgstr "não é um endereço MAC válido" +msgstr "não é um endereço MAC de link local válido" -#: src/libnm-core-impl/nm-setting-bridge.c:1272 -#, fuzzy +#: src/libnm-core-impl/nm-setting-bridge.c:1279 msgid "is not a valid VLAN filtering protocol" -msgstr "“%s” não é um valor válido de porta Ethernet" +msgstr "não é um protocolo de filtragem de VLAN válido" -#: src/libnm-core-impl/nm-setting-bridge.c:1284 -#, fuzzy +#: src/libnm-core-impl/nm-setting-bridge.c:1291 msgid "is not a valid option" -msgstr "o valor não é um token válido" +msgstr "não é uma opção válida" -#: src/libnm-core-impl/nm-setting-bridge.c:1296 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-bridge.c:1303 +#, c-format msgid "'%s' option must be a power of 2" -msgstr "opção “%s” está vazia" +msgstr "opção '%s' deve ser uma potência de 2" -#: src/libnm-core-impl/nm-setting-bridge.c:1318 -#, fuzzy -#| msgid "vlan setting should have a ethernet setting as well" +#: src/libnm-core-impl/nm-setting-bridge.c:1325 msgid "bridge connection should have a ethernet setting as well" -msgstr "a definição de vlan deve ter uma definição de ethernet também" +msgstr "a conexão de ponte deve ter uma definição de ethernet também" -#: src/libnm-core-impl/nm-setting-connection.c:1042 +#: src/libnm-core-impl/nm-setting-connection.c:1336 #, c-format msgid "setting required for connection of type '%s'" msgstr "definição requerida para a conexão do tipo “%s”" -#: src/libnm-core-impl/nm-setting-connection.c:1073 +#: src/libnm-core-impl/nm-setting-connection.c:1367 #, c-format -msgid "Unknown slave type '%s'" -msgstr "Tipo de escravo “%s” desconhecido" +msgid "Unknown port type '%s'" +msgstr "Tipo da porta '%s' desconhecida" -#: src/libnm-core-impl/nm-setting-connection.c:1088 +#: src/libnm-core-impl/nm-setting-connection.c:1382 #, c-format msgid "Slave connections need a valid '%s' property" msgstr "Conexões escravas precisam de uma propriedade “%s” válida" -#: src/libnm-core-impl/nm-setting-connection.c:1112 +#: src/libnm-core-impl/nm-setting-connection.c:1405 #, c-format msgid "Cannot set '%s' without '%s'" msgstr "Não é possível definir “%s” sem “%s”" -#: src/libnm-core-impl/nm-setting-connection.c:1171 +#: src/libnm-core-impl/nm-setting-connection.c:1464 #, c-format msgid "'%s' is not a valid UUID" msgstr "“%s” não é um UUID válido" -#: src/libnm-core-impl/nm-setting-connection.c:1216 +#: src/libnm-core-impl/nm-setting-connection.c:1509 #, c-format msgid "connection type '%s' is not valid" msgstr "tipo de conexão “%s” não é válida" -#: src/libnm-core-impl/nm-setting-connection.c:1322 +#: src/libnm-core-impl/nm-setting-connection.c:1615 #, c-format -msgid "'%s' connections must be enslaved to '%s', not '%s'" -msgstr "conexões “%s” podem ser escravizadas para “%s”, não “%s”" +msgid "'%s' connections must be attached as port to '%s', not '%s'" +msgstr "conexões '%s' devem ser anexadas como porta a '%s', não '%s'" -#: src/libnm-core-impl/nm-setting-connection.c:1337 +#: src/libnm-core-impl/nm-setting-connection.c:1630 #, c-format msgid "metered value %d is not valid" msgstr "valor metrado %d não é válido" -#: src/libnm-core-impl/nm-setting-connection.c:1351 -#: src/libnm-core-impl/nm-setting-connection.c:1365 -#: src/libnm-core-impl/nm-setting-connection.c:1379 -#: src/libnm-core-impl/nm-setting-connection.c:1454 +#: src/libnm-core-impl/nm-setting-connection.c:1644 +#: src/libnm-core-impl/nm-setting-connection.c:1658 +#: src/libnm-core-impl/nm-setting-connection.c:1672 +#: src/libnm-core-impl/nm-setting-connection.c:1733 #, c-format msgid "value %d is not valid" msgstr "valor %d não é válido" -#: src/libnm-core-impl/nm-setting-connection.c:1395 +#: src/libnm-core-impl/nm-setting-connection.c:1688 msgid "\"disabled\" flag cannot be combined with other MPTCP flags" msgstr "" +"o sinalizador \"desativado\" não pode ser combinada com outros sinalizadores " +"MPTCP" -#: src/libnm-core-impl/nm-setting-connection.c:1411 -msgid "\"enabled\" and \"enabled-on-global-iface\" flag cannot be set together" -msgstr "" - -#: src/libnm-core-impl/nm-setting-connection.c:1422 +#: src/libnm-core-impl/nm-setting-connection.c:1702 msgid "cannot set both \"signal\" and \"fullmesh\" MPTCP flags" msgstr "" +"não é possível definir os sinalizadores de MPTCP “signal” junto com " +"“fullmesh”" -#: src/libnm-core-impl/nm-setting-connection.c:1435 -#, fuzzy, c-format -#| msgid "'%u' flags are not valid; use combination of %s" +#: src/libnm-core-impl/nm-setting-connection.c:1714 +#, c-format msgid "value %u is not a valid combination of MPTCP flags" -msgstr "“%u” não são sinalizadores válidos; use a combinação de %s" +msgstr "valor %u não é uma combinação válida de sinalizador de MPTCP" -#: src/libnm-core-impl/nm-setting-connection.c:1482 -#, fuzzy +#: src/libnm-core-impl/nm-setting-connection.c:1761 msgid "DHCP option cannot be longer than 255 characters" -msgstr "o nome da interface é maior que 15 caracteres" +msgstr "a opção DHCP não pode ser maior que 255 caracteres" -#: src/libnm-core-impl/nm-setting-connection.c:1493 -#, fuzzy +#: src/libnm-core-impl/nm-setting-connection.c:1772 msgid "MUD URL is not a valid URL" -msgstr "URI não é um UTF-8 válido" +msgstr "MUD URL não é uma URL válida" -#: src/libnm-core-impl/nm-setting-connection.c:1513 -#, fuzzy +#: src/libnm-core-impl/nm-setting-connection.c:1792 msgid "invalid permissions not in format \"user:$UNAME[:]\"" -msgstr "permissão inválida “%s”" +msgstr "permissões não-válidas fora do formato \"user:$UNAME[:]\"" -#: src/libnm-core-impl/nm-setting-connection.c:1542 +#: src/libnm-core-impl/nm-setting-connection.c:1808 +#: src/libnm-core-impl/nm-setting-connection.c:1825 +#, c-format +msgid "can only be set if %s.%s is set" +msgstr "pode ser definido apenas se %s.%s está definido" + +#: src/libnm-core-impl/nm-setting-connection.c:1839 +#, c-format +msgid "is incompatible with '%s'" +msgstr "é incompatível com '%s'" + +#: src/libnm-core-impl/nm-setting-connection.c:1864 +#, c-format +msgid "contains IPv4 address '%s', %s.%s cannot be 'disabled'" +msgstr "" + +#: src/libnm-core-impl/nm-setting-connection.c:1878 +#, c-format +msgid "contains IPv4 address '%s', %s.%s cannot be 'true'" +msgstr "" + +#: src/libnm-core-impl/nm-setting-connection.c:1892 +#, c-format +msgid "contains IPv4 address '%s', %s.%s must be set to 'false' explicitly" +msgstr "" + +#: src/libnm-core-impl/nm-setting-connection.c:1917 +#, c-format +msgid "contains IPv6 address '%s', %s.%s cannot be '%s'" +msgstr "" + +#: src/libnm-core-impl/nm-setting-connection.c:1932 +#, c-format +msgid "contains IPv6 address '%s', %s.%s cannot be 'true'" +msgstr "" + +#: src/libnm-core-impl/nm-setting-connection.c:1946 +#, c-format +msgid "contains IPv6 address '%s', %s.%s must be set to 'false' explicitly" +msgstr "" + +#: src/libnm-core-impl/nm-setting-connection.c:1962 +#, c-format +msgid "has an invalid IP address '%s'" +msgstr "tem um endereço de IP inválido “%s”" + +#: src/libnm-core-impl/nm-setting-connection.c:1991 #, c-format msgid "property type should be set to '%s'" msgstr "tipo de propriedade deveria ser definida para “%s”" -#: src/libnm-core-impl/nm-setting-connection.c:1560 +#: src/libnm-core-impl/nm-setting-connection.c:2009 #, c-format -msgid "slave-type '%s' requires a '%s' setting in the connection" -msgstr "tipo escravo “%s” requer uma definição “%s” na conexão" +msgid "port-type '%s' requires a '%s' setting in the connection" +msgstr "tipo da porta '%s' requer uma definição '%s' na conexão" -#: src/libnm-core-impl/nm-setting-connection.c:1571 +#: src/libnm-core-impl/nm-setting-connection.c:2020 #, 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 "" -"Detecta uma conexão escrava com “%s” definido e um tipo de porta “%s”. “%s” " -"deveria ser definida para “%s”" +"Detecta uma porta de conexão com '%s' definido e um tipo de porta '%s'. '%s' " +"deveria ser definida para '%s'" -#: src/libnm-core-impl/nm-setting-connection.c:1597 +#: src/libnm-core-impl/nm-setting-connection.c:2046 #, 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 "" -"Uma conexão escrava com “%s” definido com “%s” não pode ter uma definição " +"Uma conexão de porta com “%s” definido como “%s” não pode ter uma definição " "“%s”" -#: src/libnm-core-impl/nm-setting-connection.c:1614 +#: src/libnm-core-impl/nm-setting-connection.c:2063 msgid "UUID needs normalization" -msgstr "" +msgstr "UUID precisa de normalização" -#: src/libnm-core-impl/nm-setting-dcb.c:499 +#: src/libnm-core-impl/nm-setting-connection.c:2080 +msgid "has duplicate addresses" +msgstr "têm endereços duplicados" + +#: src/libnm-core-impl/nm-setting-connection.c:2092 +msgid "read-only is deprecated and not settable for the user" +msgstr "somente leitura foi descontinuado e não pode ser definido pelo usuário" + +#: src/libnm-core-impl/nm-setting-dcb.c:496 msgid "flags invalid" msgstr "sinalizadores inválidos" -#: src/libnm-core-impl/nm-setting-dcb.c:508 +#: src/libnm-core-impl/nm-setting-dcb.c:505 msgid "flags invalid - disabled" msgstr "sinalizadores inválidos – desabilitados" -#: src/libnm-core-impl/nm-setting-dcb.c:534 -#: src/libnm-core-impl/nm-setting-dcb.c:580 +#: src/libnm-core-impl/nm-setting-dcb.c:531 +#: src/libnm-core-impl/nm-setting-dcb.c:577 msgid "property invalid (not enabled)" msgstr "propriedade inválida (não habilitado)" -#: src/libnm-core-impl/nm-setting-dcb.c:543 +#: src/libnm-core-impl/nm-setting-dcb.c:540 msgid "element invalid" msgstr "elemento inválido" -#: src/libnm-core-impl/nm-setting-dcb.c:558 +#: src/libnm-core-impl/nm-setting-dcb.c:555 msgid "sum not 100%" msgstr "soma não é 100%" -#: src/libnm-core-impl/nm-setting-dcb.c:589 -#: src/libnm-core-impl/nm-setting-dcb.c:617 +#: src/libnm-core-impl/nm-setting-dcb.c:586 +#: src/libnm-core-impl/nm-setting-dcb.c:614 msgid "property invalid" msgstr "propriedade inválida" -#: src/libnm-core-impl/nm-setting-ethtool.c:311 -#, fuzzy +# Ao que parece ethtool é uma ferramenta para manejar coisas ligadas a rede por linha de comando / terminal +#: src/libnm-core-impl/nm-setting-ethtool.c:345 msgid "unsupported ethtool setting" -msgstr "Configurações de ethtoool" +msgstr "Definições de ethtool não suportadas" -#: src/libnm-core-impl/nm-setting-ethtool.c:320 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ethtool.c:354 msgid "setting has invalid variant type" -msgstr "o recurso de offload tem um tipo de variante inválida" +msgstr "a configuração tem um tipo de variável inválido" -#: src/libnm-core-impl/nm-setting-ethtool.c:332 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ethtool.c:366 msgid "coalesce option must be either 0 or 1" -msgstr "deve ser psk (0) ou eap (1)" +msgstr "opção coalesce deve ser 0 ou 1" -#: src/libnm-core-impl/nm-setting-ethtool.c:349 +#: src/libnm-core-impl/nm-setting-ethtool.c:385 msgid "pause-autoneg cannot be enabled when setting rx/tx options" -msgstr "" +msgstr "pause-autoneg não pode ser habilitado ao definir as opções de rx/tx" -#: src/libnm-core-impl/nm-setting-ethtool.c:374 +#: 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” não é um modo FEC válido; modos válidos são uma combinação de %s" + +#: src/libnm-core-impl/nm-setting-ethtool.c:436 #, c-format msgid "unknown ethtool option '%s'" msgstr "opção ethtool desconhecida “%s”" -#: src/libnm-core-impl/nm-setting-gsm.c:311 +#: src/libnm-core-impl/nm-setting-generic.c:109 #, c-format -msgid "property value '%s' is empty or too long (>64)" -msgstr "valor da propriedade “%s” está vazio ou é muito longo (>64)" +msgid "the property is required when %s.%s is set" +msgstr "a propriedade é requerida quando %s.%s está definida" -#: src/libnm-core-impl/nm-setting-gsm.c:341 +#: src/libnm-core-impl/nm-setting-gsm.c:501 +msgid "property value is empty" +msgstr "valor da propriedade está vazia" + +#: src/libnm-core-impl/nm-setting-gsm.c:510 +msgid "property value is too long (>64)" +msgstr "valor da propriedade é muito longo (>64)" + +#: src/libnm-core-impl/nm-setting-gsm.c:542 #, c-format msgid "'%s' contains invalid char(s) (use [A-Za-z._-])" msgstr "“%s” contém caractere(s) inválido(s) (use [A-Za-z._-])" -#: src/libnm-core-impl/nm-setting-gsm.c:367 +#: src/libnm-core-impl/nm-setting-gsm.c:589 #, c-format msgid "'%s' length is invalid (should be 5 or 6 digits)" msgstr "tamanho “%s” é inválido (deveria ser 5 ou 6 dígitos)" -#: src/libnm-core-impl/nm-setting-gsm.c:381 +#: src/libnm-core-impl/nm-setting-gsm.c:603 #, c-format msgid "'%s' is not a number" msgstr "%s não é um número" -#: src/libnm-core-impl/nm-setting-gsm.c:418 +#: src/libnm-core-impl/nm-setting-gsm.c:640 msgid "property is empty or wrong size" msgstr "propriedade está vazia ou tem tamanho errado" -#: src/libnm-core-impl/nm-setting-gsm.c:431 +#: src/libnm-core-impl/nm-setting-gsm.c:653 msgid "property must contain only digits" msgstr "a propriedade deve conter apenas dígitos" -#: src/libnm-core-impl/nm-setting-gsm.c:445 +#: src/libnm-core-impl/nm-setting-gsm.c:667 msgid "can't be enabled when manual configuration is present" msgstr "não pode ser habilitado quando uma configuração manual está presente" -#: src/libnm-core-impl/nm-setting-infiniband.c:229 +#: src/libnm-core-impl/nm-setting-hsr.c:179 +#: src/libnm-core-impl/nm-setting-hsr.c:197 +#: src/libnm-core-impl/nm-setting-veth.c:90 +#, c-format +msgid "'%s' is not a valid interface name" +msgstr "“%s” não é um nome de interface válido" + +#: src/libnm-core-impl/nm-setting-hsr.c:207 +msgid "HSR protocol cannot be configured for PRP interfaces" +msgstr "" + +#: src/libnm-core-impl/nm-setting-infiniband.c:213 msgid "Must specify a P_Key if specifying parent" msgstr "Uma P_Key deve ser especificada se especificar um principal" -#: src/libnm-core-impl/nm-setting-infiniband.c:240 +#: src/libnm-core-impl/nm-setting-infiniband.c:225 msgid "InfiniBand P_Key connection did not specify parent interface name" msgstr "" "A conexão P_Key InfiniBand não especifica um nome de interface principal" -#: src/libnm-core-impl/nm-setting-infiniband.c:248 +#: src/libnm-core-impl/nm-setting-infiniband.c:233 msgid "the values 0 and 0x8000 are not allowed" -msgstr "" +msgstr "os valores 0 e 0x8000 não são permitidos" -#: src/libnm-core-impl/nm-setting-infiniband.c:274 +#: src/libnm-core-impl/nm-setting-infiniband.c:261 #, c-format msgid "" "interface name of software infiniband device must be '%s' or unset (instead " @@ -2019,598 +2279,634 @@ msgstr "" "nome da interface de dispositivo de software de infiniband deve ser “%s” ou " "desconfigurada (mas está “%s”)" -#: src/libnm-core-impl/nm-setting-infiniband.c:282 -#, fuzzy, c-format -#| msgid "" -#| "interface name of software infiniband device must be '%s' or unset " -#| "(instead it is '%s')" +#: 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 "" -"nome da interface de dispositivo de software de infiniband deve ser “%s” ou " -"desconfigurada (mas está “%s”)" +"nome da interface de dispositivo de software de infiniband com endereço MAC " +"deve não estar configurada (mas está “%s”)" -#: src/libnm-core-impl/nm-setting-infiniband.c:310 +#: src/libnm-core-impl/nm-setting-infiniband.c:295 #, c-format msgid "mtu can be at most %u but it is %u" msgstr "mtu pode ser no máximo até %u, mas é %u" -#: src/libnm-core-impl/nm-setting-ip-config.c:80 +#: src/libnm-core-impl/nm-setting-ip-config.c:83 msgid "Missing IPv4 address" msgstr "Endereço IPv4 faltando" -#: src/libnm-core-impl/nm-setting-ip-config.c:80 +#: src/libnm-core-impl/nm-setting-ip-config.c:83 msgid "Missing IPv6 address" msgstr "Endereço IPv6 faltando" -#: src/libnm-core-impl/nm-setting-ip-config.c:87 +#: src/libnm-core-impl/nm-setting-ip-config.c:90 #, c-format msgid "Invalid IPv4 address '%s'" msgstr "Endereço IPv4 inválido “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:88 +#: src/libnm-core-impl/nm-setting-ip-config.c:91 #, c-format msgid "Invalid IPv6 address '%s'" msgstr "Endereço IPv6 inválido “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:105 +#: src/libnm-core-impl/nm-setting-ip-config.c:108 #, c-format msgid "Invalid IPv4 address prefix '%u'" msgstr "Endereço IPv4 com prefixo inválido “%u”" -#: src/libnm-core-impl/nm-setting-ip-config.c:106 +#: src/libnm-core-impl/nm-setting-ip-config.c:109 #, c-format msgid "Invalid IPv6 address prefix '%u'" msgstr "Endereço IPv6 com prefixo inválido “%u”" -#: src/libnm-core-impl/nm-setting-ip-config.c:123 +#: src/libnm-core-impl/nm-setting-ip-config.c:126 #, c-format msgid "Invalid routing metric '%s'" msgstr "Métrica roteamento inválida “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:1328 -#: src/libnm-core-impl/nm-setting-sriov.c:400 +#: src/libnm-core-impl/nm-setting-ip-config.c:1339 +#: src/libnm-core-impl/nm-setting-sriov.c:412 msgid "unknown attribute" msgstr "atributo desconhecido" -#: src/libnm-core-impl/nm-setting-ip-config.c:1338 -#: src/libnm-core-impl/nm-setting-sriov.c:410 +#: src/libnm-core-impl/nm-setting-ip-config.c:1349 +#: src/libnm-core-impl/nm-setting-sriov.c:422 #, c-format msgid "invalid attribute type '%s'" msgstr "valor de atributo inválido “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:1347 +#: src/libnm-core-impl/nm-setting-ip-config.c:1358 msgid "attribute is not valid for a IPv4 route" msgstr "o atributo não é válido para uma rota IPv4" -#: src/libnm-core-impl/nm-setting-ip-config.c:1348 +#: src/libnm-core-impl/nm-setting-ip-config.c:1359 msgid "attribute is not valid for a IPv6 route" msgstr "o atributo não é válido para uma rota IPv6" -#: src/libnm-core-impl/nm-setting-ip-config.c:1359 -#: src/libnm-core-impl/nm-setting-ip-config.c:1391 +#: src/libnm-core-impl/nm-setting-ip-config.c:1370 +#: src/libnm-core-impl/nm-setting-ip-config.c:1402 #, c-format msgid "'%s' is not a valid IPv4 address" msgstr "“%s” não é um endereço IPv4 válido" -#: src/libnm-core-impl/nm-setting-ip-config.c:1360 -#: src/libnm-core-impl/nm-setting-ip-config.c:1392 +#: src/libnm-core-impl/nm-setting-ip-config.c:1371 +#: src/libnm-core-impl/nm-setting-ip-config.c:1403 #, c-format msgid "'%s' is not a valid IPv6 address" msgstr "“%s” não é um endereço IPv6 válido" -#: src/libnm-core-impl/nm-setting-ip-config.c:1382 +#: src/libnm-core-impl/nm-setting-ip-config.c:1393 #, c-format msgid "invalid prefix %s" msgstr "prefixo inválido %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:1414 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-ip-config.c:1425 +#, c-format msgid "%s is not a valid route type" -msgstr "“%s” não é um tipo de interface válido" +msgstr "%s não é um tipo de rota válido" -#: src/libnm-core-impl/nm-setting-ip-config.c:1507 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ip-config.c:1444 +msgid "route weight cannot be larger than 256" +msgstr "o peso da rota não pode ser maior que 256" + +#: src/libnm-core-impl/nm-setting-ip-config.c:1531 msgid "route scope is invalid for local route" -msgstr "%d: rota é inválida" +msgstr "o escopo de rota é inválido para rota local" -#: src/libnm-core-impl/nm-setting-ip-config.c:1519 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-ip-config.c:1543 +#, c-format msgid "a %s route cannot have a next-hop" -msgstr "%d. rota não pode ser uma rota padrão" +msgstr "uma rota %s não pode ter um próximo salto (next-hop)" -#: src/libnm-core-impl/nm-setting-ip-config.c:2705 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ip-config.c:1555 +#, c-format +msgid "a %s route cannot have a ECMP multi-hop \"weight\"" +msgstr "uma rota %s não pode ter um “weight” ECMP de multissalto" + +#: src/libnm-core-impl/nm-setting-ip-config.c:2743 msgid "missing priority" -msgstr "prioridade inválido" +msgstr "faltando prioridade" -#: src/libnm-core-impl/nm-setting-ip-config.c:2718 +#: src/libnm-core-impl/nm-setting-ip-config.c:2756 msgid "missing table" msgstr "faltando tabela" -#: src/libnm-core-impl/nm-setting-ip-config.c:2728 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ip-config.c:2766 msgid "invalid action type" -msgstr "ação inválida: " +msgstr "tipo de ação inválida" -#: src/libnm-core-impl/nm-setting-ip-config.c:2737 +#: src/libnm-core-impl/nm-setting-ip-config.c:2775 msgid "has from/src but the prefix-length is zero" msgstr "tem from/origem, mas o tamanho de prefixo é zero" -#: src/libnm-core-impl/nm-setting-ip-config.c:2745 +#: src/libnm-core-impl/nm-setting-ip-config.c:2783 msgid "missing from/src for a non zero prefix-length" msgstr "faltando from/origem para um tamanho de prefixo diferente de zero" -#: src/libnm-core-impl/nm-setting-ip-config.c:2752 +#: src/libnm-core-impl/nm-setting-ip-config.c:2790 msgid "invalid from/src" msgstr "from/origem inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:2759 +#: src/libnm-core-impl/nm-setting-ip-config.c:2797 msgid "invalid prefix length for from/src" msgstr "tamanho de prefixo inválido para from/origem" -#: src/libnm-core-impl/nm-setting-ip-config.c:2768 +#: src/libnm-core-impl/nm-setting-ip-config.c:2806 msgid "has to/dst but the prefix-length is zero" msgstr "tem to/destino, mas o tamanho de prefixo é zero" -#: src/libnm-core-impl/nm-setting-ip-config.c:2776 +#: src/libnm-core-impl/nm-setting-ip-config.c:2814 msgid "missing to/dst for a non zero prefix-length" msgstr "faltando to/destino para um tamanho de prefixo diferente de zero" -#: src/libnm-core-impl/nm-setting-ip-config.c:2783 +#: src/libnm-core-impl/nm-setting-ip-config.c:2821 msgid "invalid to/dst" msgstr "to/destino inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:2790 +#: src/libnm-core-impl/nm-setting-ip-config.c:2828 msgid "invalid prefix length for to/dst" msgstr "tamanho de prefixo inválido para to/destino" -#: src/libnm-core-impl/nm-setting-ip-config.c:2800 +#: src/libnm-core-impl/nm-setting-ip-config.c:2838 msgid "invalid iifname" msgstr "iifname inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:2810 +#: src/libnm-core-impl/nm-setting-ip-config.c:2848 msgid "invalid oifname" msgstr "oifname inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:2818 +#: src/libnm-core-impl/nm-setting-ip-config.c:2856 msgid "invalid source port range" msgstr "intervalo de porta de origem inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:2826 +#: src/libnm-core-impl/nm-setting-ip-config.c:2864 msgid "invalid destination port range" msgstr "intervalo de porta de destino inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:2836 +#: src/libnm-core-impl/nm-setting-ip-config.c:2874 msgid "suppress_prefixlength out of range" msgstr "suppress_prefixlength fora da faixa" -#: src/libnm-core-impl/nm-setting-ip-config.c:2844 +#: src/libnm-core-impl/nm-setting-ip-config.c:2882 msgid "suppress_prefixlength is only allowed with the to-table action" msgstr "suppress_prefixlength é permitido apenas com a ação to-table" -#: src/libnm-core-impl/nm-setting-ip-config.c:2987 +#: src/libnm-core-impl/nm-setting-ip-config.c:3025 #, c-format msgid "invalid key \"%s\"" msgstr "chave inválida “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:2999 +#: src/libnm-core-impl/nm-setting-ip-config.c:3037 #, c-format msgid "duplicate key %s" msgstr "chave duplicada %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:3015 +#: src/libnm-core-impl/nm-setting-ip-config.c:3053 #, c-format msgid "invalid variant type '%s' for \"%s\"" msgstr "tipo de variante inválido “%s” para “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:3026 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ip-config.c:3064 msgid "missing \"family\"" -msgstr "faltando \"" +msgstr "faltando \"família\"" -#: src/libnm-core-impl/nm-setting-ip-config.c:3034 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ip-config.c:3072 msgid "invalid \"family\"" -msgstr "família de endereço inválida" +msgstr "\"família\" inválida" -#: src/libnm-core-impl/nm-setting-ip-config.c:3091 +#: src/libnm-core-impl/nm-setting-ip-config.c:3129 msgid "\"uid-range-start\" is greater than \"uid-range-end\"" -msgstr "" +msgstr "\"uid-range-start\" é maior que \"uid-range-end\"" -#: src/libnm-core-impl/nm-setting-ip-config.c:3285 +#: src/libnm-core-impl/nm-setting-ip-config.c:3323 msgid "Unsupported to-string-flags argument" msgstr "Argumento de sinalizadores de string “to” sem suporte" -#: src/libnm-core-impl/nm-setting-ip-config.c:3293 +#: src/libnm-core-impl/nm-setting-ip-config.c:3331 msgid "Unsupported extra-argument" msgstr "Argumento extra sem suporte" -#: src/libnm-core-impl/nm-setting-ip-config.c:3595 +#: src/libnm-core-impl/nm-setting-ip-config.c:3633 #, c-format msgid "unsupported key \"%s\"" msgstr "chave “%s” sem suporte" -#: src/libnm-core-impl/nm-setting-ip-config.c:3602 +#: src/libnm-core-impl/nm-setting-ip-config.c:3640 #, c-format msgid "duplicate key \"%s\"" msgstr "chave duplicada “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:3609 +#: src/libnm-core-impl/nm-setting-ip-config.c:3647 #, c-format msgid "invalid value for \"%s\"" msgstr "valor inválido para “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:3621 +#: src/libnm-core-impl/nm-setting-ip-config.c:3659 msgid "empty text does not describe a rule" msgstr "texto vazio não descreve uma regra" -#: src/libnm-core-impl/nm-setting-ip-config.c:3629 +#: src/libnm-core-impl/nm-setting-ip-config.c:3667 #, c-format msgid "missing argument for \"%s\"" msgstr "faltando argumento para “%s”" -#: src/libnm-core-impl/nm-setting-ip-config.c:3643 +#: src/libnm-core-impl/nm-setting-ip-config.c:3681 msgid "invalid \"from\" part" msgstr "parte “from” inválida" -#: src/libnm-core-impl/nm-setting-ip-config.c:3659 +#: src/libnm-core-impl/nm-setting-ip-config.c:3697 msgid "invalid \"to\" part" msgstr "parte “to” inválida" -#: src/libnm-core-impl/nm-setting-ip-config.c:3670 +#: src/libnm-core-impl/nm-setting-ip-config.c:3708 msgid "cannot detect address family for rule" msgstr "não foi possível detectar família de endereço para regra" -#: src/libnm-core-impl/nm-setting-ip-config.c:3737 -#: src/libnm-core-impl/nm-setting-ip-config.c:3827 +#: src/libnm-core-impl/nm-setting-ip-config.c:3775 +#: src/libnm-core-impl/nm-setting-ip-config.c:3865 #, c-format msgid "rule is invalid: %s" msgstr "a regra é inválida: %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:3808 +#: src/libnm-core-impl/nm-setting-ip-config.c:3846 msgid "invalid address family" msgstr "família de endereço inválida" -#: src/libnm-core-impl/nm-setting-ip-config.c:5080 +#: src/libnm-core-impl/nm-setting-ip-config.c:5134 #, c-format msgid "rule #%u is invalid: %s" msgstr "a regra nº %u é inválida: %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:5448 +#: src/libnm-core-impl/nm-setting-ip-config.c:5662 #, c-format -msgid "%d. DNS server address is invalid" -msgstr "%d. Endereço de servidor DNS é inválido" +msgid "%u. DNS server address is invalid: %s" +msgstr "%u. endereço do servidor DNS é inválido:%s" -#: src/libnm-core-impl/nm-setting-ip-config.c:5467 +#: src/libnm-core-impl/nm-setting-ip-config.c:5685 +#, c-format +msgid "DNS search domain '%s' is invalid" +msgstr "O domínio de busca do DNS '%s' é inválido" + +#: src/libnm-core-impl/nm-setting-ip-config.c:5705 #, c-format msgid "%d. IP address is invalid" msgstr "%d. Endereço IP é inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:5482 +#: src/libnm-core-impl/nm-setting-ip-config.c:5720 #, c-format msgid "%d. IP address has 'label' property with invalid type" msgstr "%d. Endereço IP possui a propriedade “label” com tipo inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:5494 +#: src/libnm-core-impl/nm-setting-ip-config.c:5732 #, c-format msgid "%d. IP address has invalid label '%s'" msgstr "%d. Endereço IPv4 possui um rótulo “%s” inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:5512 +#: src/libnm-core-impl/nm-setting-ip-config.c:5750 msgid "gateway cannot be set if there are no addresses configured" msgstr "gateway não pode ser definido se não houver endereços configurados" -#: src/libnm-core-impl/nm-setting-ip-config.c:5524 +#: src/libnm-core-impl/nm-setting-ip-config.c:5762 msgid "gateway is invalid" msgstr "gateway é inválido" -#: src/libnm-core-impl/nm-setting-ip-config.c:5542 +#: src/libnm-core-impl/nm-setting-ip-config.c:5780 #, c-format msgid "%d. route is invalid" msgstr "%d: rota é inválida" -#: src/libnm-core-impl/nm-setting-ip-config.c:5555 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-ip-config.c:5793 +#, c-format msgid "invalid attribute: %s" -msgstr "valor de atributo inválido “%s”" +msgstr "atributo inválido: %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:5575 +#: src/libnm-core-impl/nm-setting-ip-config.c:5813 #, c-format msgid "%u. rule has wrong address-family" msgstr "%u. regra com família de endereço errada" -#: src/libnm-core-impl/nm-setting-ip-config.c:5587 +#: src/libnm-core-impl/nm-setting-ip-config.c:5825 #, c-format msgid "%u. rule is invalid: %s" msgstr "%u. regra é inválida: %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:5603 +#: src/libnm-core-impl/nm-setting-ip-config.c:5841 #, c-format msgid "'%s' is not a valid IAID" msgstr "“%s” não é um IAID válido" -#: src/libnm-core-impl/nm-setting-ip-config.c:5617 +#: src/libnm-core-impl/nm-setting-ip-config.c:5855 #, c-format msgid "the property cannot be set when '%s' is disabled" msgstr "a propriedade não pode ser definida quando “%s” está desabilita" -#: src/libnm-core-impl/nm-setting-ip-config.c:5643 +#: src/libnm-core-impl/nm-setting-ip-config.c:5881 msgid "the property is currently supported only for DHCPv4" -msgstr "" +msgstr "atualmente a propriedade é suportada somente para DHCPv4" -#: src/libnm-core-impl/nm-setting-ip-config.c:5660 -#, 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 "“%s” não é um endereço IP válido" +msgstr "'%s' não é um IP válido ou sub-rede" -#: src/libnm-core-impl/nm-setting-ip-config.c:5676 +#: src/libnm-core-impl/nm-setting-ip-config.c:5942 #, c-format msgid "a gateway is incompatible with '%s'" msgstr "um gateway é incompatível com “%s”" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:346 +#: src/libnm-core-impl/nm-setting-ip-config.c:5956 +#, c-format +msgid "the value is inconsistent with '%s'" +msgstr "o valor é inconsistente com “%s”" + +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:364 #, c-format msgid "'%d' is not a valid tunnel mode" msgstr "“%d” não é um modo túnel válido" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:373 -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:399 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:391 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:417 #, c-format msgid "'%s' is not a valid IPv%c address" msgstr "“%s” não é um endereço IPv%c válido" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:418 -msgid "tunnel keys can only be specified for GRE tunnels" -msgstr "chaves de túnel podem ser especificadas apenas para túneis GRE" +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:438 +msgid "tunnel keys can only be specified for GRE and VTI tunnels" +msgstr "chaves de túnel podem ser especificadas apenas para túneis GRE e VTI" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:431 -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:449 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:451 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:469 #, c-format msgid "'%s' is not a valid tunnel key" msgstr "“%s” não é uma chave de túnel válido" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:463 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:483 msgid "a fixed TTL is allowed only when path MTU discovery is enabled" msgstr "" "um TTL fixo é permitida apenas quando a descoberta de MTU de caminho estiver " "habilitada" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:478 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:502 #, c-format msgid "some flags are invalid for the select mode: %s" msgstr "alguns sinalizadores são inválido para o modo de seleção: %s" -#: src/libnm-core-impl/nm-setting-ip-tunnel.c:491 +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:515 +msgid "can be set only on VTI tunnels" +msgstr "pode ser definido apenas em túneis VTI" + +#: src/libnm-core-impl/nm-setting-ip-tunnel.c:527 #, c-format msgid "wired setting not allowed for mode %s" msgstr "esta propriedade não é permitida para método %s" -#: src/libnm-core-impl/nm-setting-ip4-config.c:172 -#: src/libnm-core-impl/nm-setting-ip6-config.c:215 +#: 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 "this property cannot be empty for '%s=%s'" -msgstr "esta propriedade não pode estar vazia para “%s=%s”" +msgid "property is not specified and neither is '%s:%s'" +msgstr "propriedade não está especificada nem é “%s=%s”" -#: src/libnm-core-impl/nm-setting-ip4-config.c:188 -#: src/libnm-core-impl/nm-setting-ip4-config.c:202 -#: src/libnm-core-impl/nm-setting-ip4-config.c:218 -#: src/libnm-core-impl/nm-setting-ip6-config.c:235 -#: src/libnm-core-impl/nm-setting-ip6-config.c:249 -#: src/libnm-core-impl/nm-setting-ip6-config.c:263 +#: src/libnm-core-impl/nm-setting-ipvlan.c:166 +#, fuzzy, c-format +#| msgid "unsupported key \"%s\"" +msgid "unsupported mode %u" +msgstr "chave “%s” sem suporte" + +#: src/libnm-core-impl/nm-setting-ipvlan.c:176 +msgid "private and VEPA cannot be enabled at the same time" +msgstr "" + +#: 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 "" + +#: 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 #, c-format msgid "this property is not allowed for '%s=%s'" msgstr "esta propriedade não é permitida para “%s=%s”" -#: src/libnm-core-impl/nm-setting-ip4-config.c:262 +#: src/libnm-core-impl/nm-setting-ip4-config.c:283 msgid "cannot enable ipv4.link-local with ipv4.method=disabled" -msgstr "" +msgstr "não foi possível habilitar ipv4.link-local com ipv4.method=disabled" -#: src/libnm-core-impl/nm-setting-ip4-config.c:274 +#: src/libnm-core-impl/nm-setting-ip4-config.c:295 msgid "cannot disable ipv4.link-local with ipv4.method=link-local" msgstr "" +"não foi possível desabilitar ipv4.link-local com ipv4.method=link-local" -#: src/libnm-core-impl/nm-setting-ip4-config.c:310 +#: src/libnm-core-impl/nm-setting-ip4-config.c:331 #, c-format msgid "'%s' is not a valid FQDN" msgstr "“%s” não é um FQDN válido" -#: src/libnm-core-impl/nm-setting-ip4-config.c:323 +#: src/libnm-core-impl/nm-setting-ip4-config.c:344 msgid "property cannot be set when dhcp-hostname is also set" msgstr "" "propriedade não pode ser definida quando dhcp-hostname também foi definido" -#: src/libnm-core-impl/nm-setting-ip4-config.c:338 +#: src/libnm-core-impl/nm-setting-ip4-config.c:359 msgid "FQDN flags requires a FQDN set" msgstr "Sinalizadores FQDN exigem um FQDN definido" -#: src/libnm-core-impl/nm-setting-ip4-config.c:357 +#: src/libnm-core-impl/nm-setting-ip4-config.c:378 #, c-format msgid "multiple addresses are not allowed for '%s=%s'" msgstr "endereços múltiplos não são permitidos por “%s=%s”" -#: src/libnm-core-impl/nm-setting-ip4-config.c:374 +#: src/libnm-core-impl/nm-setting-ip4-config.c:395 msgid "property should be TRUE when method is set to disabled" msgstr "" "a propriedade deve ser VERDADEIRO quando o método está definido para " "desabilitado" -#: src/libnm-core-impl/nm-setting-ip6-config.c:315 +#: src/libnm-core-impl/nm-setting-ip6-config.c:377 msgid "value is not a valid token" msgstr "o valor não é um token válido" -#: src/libnm-core-impl/nm-setting-ip6-config.c:329 +#: src/libnm-core-impl/nm-setting-ip6-config.c:391 msgid "only makes sense with EUI64 address generation mode" msgstr "só faz sentido com o modo de geração de endereço EUI64" -#: src/libnm-core-impl/nm-setting-ip6-config.c:343 +#: src/libnm-core-impl/nm-setting-ip6-config.c:405 msgid "invalid DUID" msgstr "DUID inválido" -#: src/libnm-core-impl/nm-setting-ip6-config.c:358 +#: src/libnm-core-impl/nm-setting-ip6-config.c:422 +msgid "must be a valid IPv6 address with prefix" +msgstr "deve ser um endereço IPv6 válido com prefixo" + +#: src/libnm-core-impl/nm-setting-ip6-config.c:435 +msgid "DHCP DSCP is not supported for IPv6" +msgstr "" + +#: src/libnm-core-impl/nm-setting-ip6-config.c:447 +msgid "Shared DHCP range is not supported for IPv6" +msgstr "" + +#: src/libnm-core-impl/nm-setting-ip6-config.c:459 +msgid "Shared DHCP lease time is not supported for IPv6" +msgstr "" + +#: src/libnm-core-impl/nm-setting-ip6-config.c:473 msgid "token is not in canonical form" msgstr "o token não está na forma canônica" -#: src/libnm-core-impl/nm-setting-ip6-config.c:375 +#: src/libnm-core-impl/nm-setting-ip6-config.c:490 msgid "property should be TRUE when method is set to ignore or disabled" msgstr "" "a propriedade deve ser VERDADEIRO quando o método está definido para ignorar " "ou desabilitado" -#: src/libnm-core-impl/nm-setting-macsec.c:251 +#: src/libnm-core-impl/nm-setting-loopback.c:86 +#, c-format +msgid "ipv4 method \"%s\" is not supported for loopback" +msgstr "não há suporte ao método IPv4 “%s” para loopback" + +#: src/libnm-core-impl/nm-setting-loopback.c:101 +msgid "ipv4.link-local cannot be enabled for loopback" +msgstr "ipv4.link-local não pode ser habilitado para loopback" + +#: src/libnm-core-impl/nm-setting-loopback.c:117 +#, c-format +msgid "ipv6 method \"%s\" is not supported for loopback" +msgstr "não há suporte ao método IPv6 “%s” para loopback" + +#: src/libnm-core-impl/nm-setting-loopback.c:133 +msgid "a loopback profile cannot be a port" +msgstr "um perfil loopback não pode ser uma porta" + +#: src/libnm-core-impl/nm-setting-macsec.c:267 msgid "the key is empty" msgstr "a chave está vazia" -#: src/libnm-core-impl/nm-setting-macsec.c:260 +#: src/libnm-core-impl/nm-setting-macsec.c:277 #, c-format msgid "the key must be %d characters" msgstr "a chave deve ter %d caracteres" -#: src/libnm-core-impl/nm-setting-macsec.c:269 +#: src/libnm-core-impl/nm-setting-macsec.c:287 +msgid "the key must have an even number of characters between 2 and 64" +msgstr "a chave deve ser um número par de caracteres entre 2 e 64" + +#: src/libnm-core-impl/nm-setting-macsec.c:296 msgid "the key contains non-hexadecimal characters" msgstr "a chave contém caracteres não hexadecimais" -#: src/libnm-core-impl/nm-setting-macsec.c:338 -#: src/libnm-core-impl/nm-setting-macvlan.c:156 -#: src/libnm-core-impl/nm-setting-vlan.c:638 -#, c-format -msgid "property is not specified and neither is '%s:%s'" -msgstr "propriedade não está especificada nem é “%s=%s”" - -#: src/libnm-core-impl/nm-setting-macsec.c:369 +#: src/libnm-core-impl/nm-setting-macsec.c:396 #, c-format msgid "EAP key management requires '%s' setting presence" msgstr "o gerenciamento de chaves EAP exige a presença da definição “%s”" -#: src/libnm-core-impl/nm-setting-macsec.c:378 +#: src/libnm-core-impl/nm-setting-macsec.c:405 msgid "must be either psk (0) or eap (1)" msgstr "deve ser psk (0) ou eap (1)" -#: src/libnm-core-impl/nm-setting-macsec.c:389 +#: src/libnm-core-impl/nm-setting-macsec.c:416 msgid "only valid for psk mode" msgstr "válido apenas para o modo psk" -#: src/libnm-core-impl/nm-setting-macvlan.c:171 +#: src/libnm-core-impl/nm-setting-macvlan.c:169 msgid "non promiscuous operation is allowed only in passthru mode" msgstr "operação não promíscua é permitida apenas em modo passthru" -#: 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:708 -#, fuzzy +#: 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 "URI está vazia" +msgstr "está vazio" -#: src/libnm-core-impl/nm-setting-olpc-mesh.c:112 -#: src/libnm-core-impl/nm-setting-wireless.c:854 +#: src/libnm-core-impl/nm-setting-olpc-mesh.c:110 +#: src/libnm-core-impl/nm-setting-wireless.c:1113 msgid "SSID length is out of range <1-32> bytes" msgstr "tamanho do SSID está fora da faixa <1-32> bytes" -#: src/libnm-core-impl/nm-setting-olpc-mesh.c:124 -#: src/libnm-core-impl/nm-setting-wireless.c:907 +#: src/libnm-core-impl/nm-setting-olpc-mesh.c:122 +#: src/libnm-core-impl/nm-setting-wireless.c:1166 #, c-format msgid "'%d' is not a valid channel" msgstr "“%d” não é um canal válido" #: 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 "Uma conexão com uma configuração “%s” não pode ter um mestre." +msgid "A connection with a '%s' setting must not have a controller." +msgstr "Uma conexão com uma definição “%s” não pode ter um controlador." #: src/libnm-core-impl/nm-setting-ovs-bridge.c:174 #, c-format msgid "'%s' is not allowed in fail_mode" msgstr "“%s” não é permitido em fail_mode" -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:90 -#: src/libnm-core-impl/nm-setting-user.c:91 -msgid "missing key" -msgstr "faltando chave" +#: 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 "deve ser uma potência de 2" -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:98 -#: src/libnm-core-impl/nm-setting-user.c:99 -msgid "key is too long" -msgstr "a chave é longa demais" - -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:105 -#: src/libnm-core-impl/nm-setting-user.c:106 -msgid "key must be UTF8" -msgstr "a chave deve ser UTF8" - -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:114 -#: src/libnm-core-impl/nm-setting-user.c:153 -msgid "key contains invalid characters" -msgstr "a chave contém caracteres inválidos" - -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:123 -#, fuzzy +#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:115 msgid "key cannot start with \"NM.\"" -msgstr "a chave não pode conter “..”" +msgstr "a chave não pode começar com \"NM.\"" -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:153 -#: src/libnm-core-impl/nm-setting-user.c:180 -msgid "value is missing" -msgstr "valor está faltando" +#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:166 +#, c-format +msgid "" +"OVS %s can only be added to a profile of type OVS bridge/port/interface or " +"to OVS system interface" +msgstr "" +"OVS %s pode somente ser adicionado a um perfil de tipo OVS ponte/porta/" +"interface ou ao OVS de interface do sistema" -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:162 -#: src/libnm-core-impl/nm-setting-user.c:189 -msgid "value is too large" -msgstr "o valor é grande demais" - -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:170 -#: src/libnm-core-impl/nm-setting-user.c:197 -msgid "value is not valid UTF8" -msgstr "o valor não é um UTF8 válido" - -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:313 -#: src/libnm-core-impl/nm-setting-user.c:357 +#: 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 #, c-format msgid "invalid key \"%s\": %s" msgstr "chave inválida “%s”: %s" -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:337 -#: src/libnm-core-impl/nm-setting-user.c:381 +#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:387 +#: src/libnm-core-impl/nm-setting-ovs-other-config.c:225 #, c-format -msgid "maximum number of user data entries reached (%u instead of %u)" -msgstr "" -"o número máximo de entradas de dados de usuário atingido (%u em vez de %u)" +msgid "maximum number of entries reached (%u instead of %u)" +msgstr "número máximo de entradas atingido (%u em vez de %u)" -#: src/libnm-core-impl/nm-setting-ovs-external-ids.c:380 -msgid "" -"OVS external IDs can only be added to a profile of type OVS bridge/port/" -"interface or to OVS system interface" -msgstr "" - -#: src/libnm-core-impl/nm-setting-ovs-interface.c:93 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:110 #, c-format msgid "'%s' is not a valid interface type" msgstr "“%s” não é um tipo de interface válido" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:120 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:137 #, c-format msgid "A connection with a '%s' setting needs connection.type explicitly set" msgstr "" "Uma conexão com uma configuração “%s” precisa de connection.type definida " "explicitamente" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:134 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:151 #, c-format msgid "A connection of type '%s' cannot have ovs-interface.type \"system\"" msgstr "Uma conexão do tipo “%s” não pode ter ovs-interface.type “system”" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:148 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:165 #, c-format msgid "A connection of type '%s' cannot have an ovs-interface.type \"%s\"" msgstr "Uma conexão do tipo “%s” não pode ter um ovs-interface.type “%s”" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:170 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:187 #, c-format msgid "A connection can not have both '%s' and '%s' settings at the same time" msgstr "Uma conexão não pode ter as configurações “%s” e “%s” ao mesmo tempo" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:184 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:201 #, c-format msgid "" "A connection with '%s' setting must be of connection.type \"ovs-interface\" " @@ -2619,7 +2915,7 @@ msgstr "" "Uma conexão com a configuração “%s” deve ser de connection.type “ovs-" "interface”, mas é “%s”" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:200 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:217 #, c-format msgid "" "A connection with '%s' setting needs to be of '%s' interface type, not '%s'" @@ -2627,106 +2923,120 @@ msgstr "" "Uma conexão com a configuração “%s” precisa ser do tipo de interface “%s”, e " "não “%s”" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:222 +#: 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 "" "Uma conexão com ovs-interface.type “%s” configurando uma configuração 'ovs-" "patch'" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:250 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:267 msgid "Missing ovs interface setting" msgstr "Faltando configuração de interface ovs" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:256 +#: src/libnm-core-impl/nm-setting-ovs-interface.c:273 msgid "Missing ovs interface type" msgstr "Faltando tipo de interface ovs" -#: src/libnm-core-impl/nm-setting-ovs-interface.c:298 -#: src/libnm-core-impl/nm-setting-ovs-port.c:179 +#: 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 master." -msgstr "Uma conexão com uma configuração “%s” deve ter um mestre." +msgid "A connection with a '%s' setting must have a controller." +msgstr "Uma conexão com uma definição “%s” deve ter um controlador." -#: src/libnm-core-impl/nm-setting-ovs-port.c:215 +#: src/libnm-core-impl/nm-setting-ovs-port.c:347 +msgid "VLANs must be between 0 and 4095" +msgstr "VLANs devem estar entre 0 e 4095" + +#: src/libnm-core-impl/nm-setting-ovs-port.c:356 +#, c-format +msgid "duplicate VLAN %u" +msgstr "VLAN %u duplicada" + +#: src/libnm-core-impl/nm-setting-ovs-port.c:384 +#, c-format +msgid "VLANs %u and %u are not sorted in ascending order" +msgstr "VLANs %u e %u não estão ordenados por ordem ascendente" + +#: src/libnm-core-impl/nm-setting-ovs-port.c:457 #, c-format msgid "'%s' is not allowed in vlan_mode" msgstr "“%s” não é permitido em vlan_mode" -#: src/libnm-core-impl/nm-setting-ovs-port.c:228 +#: src/libnm-core-impl/nm-setting-ovs-port.c:470 #, c-format msgid "the tag id must be in range 0-4094 but is %u" msgstr "o id da tag deve estar na faixa 0-4094, mas é %u" -#: src/libnm-core-impl/nm-setting-ovs-port.c:238 +#: src/libnm-core-impl/nm-setting-ovs-port.c:480 #, c-format msgid "'%s' is not allowed in lacp" msgstr "“%s” não é permitido em lacp" -#: src/libnm-core-impl/nm-setting-ovs-port.c:251 +#: src/libnm-core-impl/nm-setting-ovs-port.c:493 #, c-format msgid "'%s' is not allowed in bond_mode" msgstr "“%s” não é permitido em bond_mode" -#: src/libnm-core-impl/nm-setting-ppp.c:353 +#: src/libnm-core-impl/nm-setting-ppp.c:350 #, c-format msgid "'%d' is out of valid range <128-16384>" msgstr "“%d” está fora da faixa válida <128-16384>" -#: src/libnm-core-impl/nm-setting-ppp.c:366 +#: src/libnm-core-impl/nm-setting-ppp.c:363 #, c-format msgid "setting this property requires non-zero '%s' property" msgstr "definição desta propriedade requer propriedade “%s” não-zero" -#: src/libnm-core-impl/nm-setting-proxy.c:138 +#: src/libnm-core-impl/nm-setting-proxy.c:137 msgid "invalid proxy method" msgstr "método de proxy inválido" -#: src/libnm-core-impl/nm-setting-proxy.c:148 -#: src/libnm-core-impl/nm-setting-proxy.c:160 +#: src/libnm-core-impl/nm-setting-proxy.c:147 +#: src/libnm-core-impl/nm-setting-proxy.c:159 msgid "this property is not allowed for method none" msgstr "esta propriedade não é permitida para método “none”" -#: src/libnm-core-impl/nm-setting-proxy.c:174 +#: src/libnm-core-impl/nm-setting-proxy.c:173 msgid "the script is too large" msgstr "o script é grande demais" -#: src/libnm-core-impl/nm-setting-proxy.c:185 +#: src/libnm-core-impl/nm-setting-proxy.c:184 msgid "the script is not valid utf8" msgstr "o script não é um utf8 válido" -#: src/libnm-core-impl/nm-setting-proxy.c:196 +#: src/libnm-core-impl/nm-setting-proxy.c:195 msgid "the script lacks FindProxyForURL function" msgstr "o script carece da função FindProxyForURL" -#: src/libnm-core-impl/nm-setting-sriov.c:422 -#: src/libnm-core-impl/nm-setting-wired.c:803 -#: src/libnm-core-impl/nm-setting-wired.c:819 -#: src/libnm-core-impl/nm-setting-wired.c:893 -#: src/libnm-core-impl/nm-setting-wired.c:952 -#: src/libnm-core-impl/nm-setting-wireless.c:997 -#: src/libnm-core-impl/nm-setting-wireless.c:1016 -#: src/libnmc-setting/nm-meta-setting-desc.c:4213 +#: 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:4315 #, c-format msgid "'%s' is not a valid MAC address" msgstr "“%s” não é um endereço MAC válido" -#: src/libnm-core-impl/nm-setting-sriov.c:1045 +#: 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 "VF com índice %u, mas o número total de VFs é %u" -#: src/libnm-core-impl/nm-setting-sriov.c:1059 +#: src/libnm-core-impl/nm-setting-sriov.c:1135 #, c-format msgid "invalid VF %u: %s" msgstr "VF inválido %u: %s" -#: src/libnm-core-impl/nm-setting-sriov.c:1073 +#: src/libnm-core-impl/nm-setting-sriov.c:1149 #, c-format msgid "duplicate VF index %u" msgstr "VF índice %u duplicado" -#: src/libnm-core-impl/nm-setting-sriov.c:1097 +#: src/libnm-core-impl/nm-setting-sriov.c:1173 #, c-format msgid "VFs %d and %d are not sorted by ascending index" msgstr "VFs %d e %d não estão ordenados por índice ascendente" @@ -2758,106 +3068,111 @@ msgid "there are duplicate TC filters" msgstr "há filtros TC duplicados" #: src/libnm-core-impl/nm-setting-team.c:119 -#: src/libnm-core-impl/nm-setting-team.c:193 -#: src/libnm-core-impl/nm-setting-team.c:325 +#: src/libnm-core-impl/nm-setting-team.c:189 +#: src/libnm-core-impl/nm-setting-team.c:321 #, c-format msgid "%s is out of range [0, %d]" msgstr "%s está fora da faixa [0, %d]" -#: src/libnm-core-impl/nm-setting-team.c:170 +#: src/libnm-core-impl/nm-setting-team.c:166 msgid "Missing target-host in nsna_ping link watcher" msgstr "Faltando target-host no monitorador de link de nsna_ping" -#: src/libnm-core-impl/nm-setting-team.c:178 -#: src/libnm-core-impl/nm-setting-team.c:301 +#: src/libnm-core-impl/nm-setting-team.c:174 +#: src/libnm-core-impl/nm-setting-team.c:297 #, c-format msgid "target-host '%s' contains invalid characters" msgstr "o target-host “%s” contém caracteres inválidos" -#: src/libnm-core-impl/nm-setting-team.c:292 +#: src/libnm-core-impl/nm-setting-team.c:288 #, c-format msgid "Missing %s in arp_ping link watcher" msgstr "Faltando %s no monitorador de link de arp_ping" -#: src/libnm-core-impl/nm-setting-team.c:310 +#: src/libnm-core-impl/nm-setting-team.c:306 #, c-format msgid "source-host '%s' contains invalid characters" msgstr "o source-host “%s” contém caracteres inválidos" -#: src/libnm-core-impl/nm-setting-team.c:335 +#: src/libnm-core-impl/nm-setting-team.c:331 msgid "vlanid is out of range [-1, 4094]" msgstr "vlanid está fora da faixa [-1, 4094]" -#: src/libnm-core-impl/nm-setting-tun.c:165 +#: src/libnm-core-impl/nm-setting-tun.c:162 #, c-format msgid "'%u': invalid mode" msgstr "“%u”: modo inválido" -#: src/libnm-core-impl/nm-setting-tun.c:176 +#: src/libnm-core-impl/nm-setting-tun.c:173 #, c-format msgid "'%s': invalid user ID" msgstr "“%s”: ID de usuário inválido" -#: src/libnm-core-impl/nm-setting-tun.c:188 +#: src/libnm-core-impl/nm-setting-tun.c:185 #, c-format msgid "'%s': invalid group ID" msgstr "“%s”: ID de grupo inválido" -#: src/libnm-core-impl/nm-setting-user.c:131 +#: src/libnm-core-impl/nm-setting-user.c:133 msgid "key requires a '.' for a namespace" msgstr "a chave requer um “.” para um espaço de nome" -#: src/libnm-core-impl/nm-setting-user.c:146 +#: src/libnm-core-impl/nm-setting-user.c:148 msgid "key cannot contain \"..\"" msgstr "a chave não pode conter “..”" -#: src/libnm-core-impl/nm-setting-user.c:314 +#: src/libnm-core-impl/nm-setting-user.c:318 msgid "maximum number of user data entries reached" msgstr "número máximo de entradas de dados de usuário atingida" -#: src/libnm-core-impl/nm-setting-veth.c:90 -#, fuzzy, c-format -msgid "'%s' is not a valid interface name" -msgstr "“%s” não é um tipo de interface válido" +#: src/libnm-core-impl/nm-setting-user.c:385 +#, c-format +msgid "maximum number of user data entries reached (%u instead of %u)" +msgstr "" +"o número máximo de entradas de dados de usuário atingido (%u em vez de %u)" -#: src/libnm-core-impl/nm-setting-vlan.c:650 +#: src/libnm-core-impl/nm-setting-vlan.c:666 #, c-format msgid "the vlan id must be in range 0-4094 but is %u" msgstr "o id da vlan deve estar na faixa 0-4094, mas é %u" -#: src/libnm-core-impl/nm-setting-vlan.c:660 +#: src/libnm-core-impl/nm-setting-vlan.c:676 msgid "flags are invalid" msgstr "sinalizadores são inválidos" -#: src/libnm-core-impl/nm-setting-vlan.c:672 +#: src/libnm-core-impl/nm-setting-vlan.c:685 +#, c-format +msgid "invalid VLAN protocol %s: must be '802.1Q' or '802.1ad'" +msgstr "Protocolo VLAN inválido %s: deve ser “802.1Q” ou “802.1ad”" + +#: src/libnm-core-impl/nm-setting-vlan.c:698 msgid "vlan setting should have a ethernet setting as well" msgstr "a definição de vlan deve ter uma definição de ethernet também" -#: src/libnm-core-impl/nm-setting-vpn.c:574 +#: src/libnm-core-impl/nm-setting-vpn.c:573 msgid "cannot set connection.multi-connect for VPN setting" msgstr "" "não foi possível definir connection.multi-connect para a configuração VPN" -#: src/libnm-core-impl/nm-setting-vpn.c:613 +#: src/libnm-core-impl/nm-setting-vpn.c:647 msgid "setting contained a secret with an empty name" msgstr "definição continha um segredo com um nome vazio" -#: src/libnm-core-impl/nm-setting-vpn.c:652 -#: src/libnm-core-impl/nm-setting.c:3325 +#: src/libnm-core-impl/nm-setting-vpn.c:694 +#: src/libnm-core-impl/nm-setting.c:3579 msgid "not a secret property" msgstr "não é uma propriedade de segredo" -#: src/libnm-core-impl/nm-setting-vpn.c:660 +#: src/libnm-core-impl/nm-setting-vpn.c:702 msgid "secret is not of correct type" msgstr "segredo não é do tipo correto" -#: src/libnm-core-impl/nm-setting-vpn.c:742 -#: src/libnm-core-impl/nm-setting-vpn.c:792 -#, fuzzy +#: src/libnm-core-impl/nm-setting-vpn.c:789 +#: src/libnm-core-impl/nm-setting-vpn.c:840 msgid "secret name cannot be empty" -msgstr "o nome da interface não pode estar vazia" +msgstr "nome secreto não pode ser vazio" -#: src/libnm-core-impl/nm-setting-vpn.c:758 +#: src/libnm-core-impl/nm-setting-vpn.c:805 msgid "secret flags property not found" msgstr "propriedade de sinalizadores de segredo não localizada" @@ -2865,546 +3180,665 @@ msgstr "propriedade de sinalizadores de segredo não localizada" msgid "table cannot be zero" msgstr "a tabela não pode ser zero" -#: src/libnm-core-impl/nm-setting-vxlan.c:356 -#: src/libnm-core-impl/nm-setting-vxlan.c:367 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-vxlan.c:354 +#: src/libnm-core-impl/nm-setting-vxlan.c:365 +#, c-format msgid "'%s' is not a valid IP%s address" -msgstr "“%s” não é um endereço IP%c válido" +msgstr "'%s' não é um endereço IP%s válido" -#: src/libnm-core-impl/nm-setting-vxlan.c:390 +#: src/libnm-core-impl/nm-setting-vxlan.c:388 #, c-format msgid "%d is greater than local port max %d" msgstr "%d é maior que porta local máxima %d" -#: src/libnm-core-impl/nm-setting-wired.c:783 +#: src/libnm-core-impl/nm-setting-wired.c:973 #, c-format msgid "'%s' is not a valid Ethernet port value" msgstr "“%s” não é um valor válido de porta Ethernet" -#: src/libnm-core-impl/nm-setting-wired.c:793 +#: src/libnm-core-impl/nm-setting-wired.c:983 #, c-format msgid "'%s' is not a valid duplex value" msgstr "“%s” não é um valor duplex válido" -#: src/libnm-core-impl/nm-setting-wired.c:866 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-wired.c:1058 +#, c-format msgid "invalid key '%s'" -msgstr "chave inválida “%s.%s”" +msgstr "chave inválida “%s”" -#: src/libnm-core-impl/nm-setting-wired.c:878 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-wired.c:1070 +#, c-format msgid "invalid value for key '%s'" -msgstr "valor inválido para “%s”" +msgstr "valor inválido para chave “%s”" -#: src/libnm-core-impl/nm-setting-wired.c:927 +#: src/libnm-core-impl/nm-setting-wired.c:1119 msgid "Wake-on-LAN mode 'default' and 'ignore' are exclusive flags" msgstr "Modos de Wake-on-LAN “default” e “ignore” são sinalizadores exclusivo" -#: src/libnm-core-impl/nm-setting-wired.c:940 +#: src/libnm-core-impl/nm-setting-wired.c:1132 msgid "Wake-on-LAN password can only be used with magic packet mode" msgstr "A senha de Wake-on-LAN só pode ser usada com o modo pacote mágico" -#: src/libnm-core-impl/nm-setting-wired.c:971 +#: src/libnm-core-impl/nm-setting-wired.c:1163 msgid "both speed and duplex should have a valid value or both should be unset" msgstr "" "tanto a velocidade quanto o duplex devem ter um valor válido ou ambos devem " "ser desfeitos" -#: src/libnm-core-impl/nm-setting-wired.c:972 +#: src/libnm-core-impl/nm-setting-wired.c:1164 msgid "both speed and duplex are required for static link configuration" msgstr "" "ambos “speed” e “duplex” são exigidas para configuração de link estático" -#: src/libnm-core-impl/nm-setting-wireguard.c:748 +#: src/libnm-core-impl/nm-setting-wireguard.c:747 msgid "missing public-key for peer" msgstr "faltando chave pública para o par" -#: src/libnm-core-impl/nm-setting-wireguard.c:754 +#: src/libnm-core-impl/nm-setting-wireguard.c:753 msgid "invalid public-key for peer" msgstr "chave pública inválida para o par" -#: src/libnm-core-impl/nm-setting-wireguard.c:764 +#: src/libnm-core-impl/nm-setting-wireguard.c:763 msgid "invalid preshared-key for peer" msgstr "chave pré-compartilhada inválida para o par" -#: src/libnm-core-impl/nm-setting-wireguard.c:783 +#: src/libnm-core-impl/nm-setting-wireguard.c:782 msgid "invalid endpoint for peer" msgstr "ponto de extremidade inválido para o par" -#: src/libnm-core-impl/nm-setting-wireguard.c:795 +#: src/libnm-core-impl/nm-setting-wireguard.c:794 #, c-format msgid "invalid IP address \"%s\" for allowed-ip of peer" msgstr "endereço IP inválido “%s” para ip permitido do par" -#: src/libnm-core-impl/nm-setting-wireguard.c:806 +#: src/libnm-core-impl/nm-setting-wireguard.c:805 msgid "invalid preshared-key-flags for peer" msgstr "opções de chave pré-compartilhada inválidas para o par" -#: src/libnm-core-impl/nm-setting-wireguard.c:1588 +#: src/libnm-core-impl/nm-setting-wireguard.c:1604 #, c-format msgid "peer #%u has no public-key" msgstr "o par nº %u não possui um chave pública" -#: src/libnm-core-impl/nm-setting-wireguard.c:1601 +#: src/libnm-core-impl/nm-setting-wireguard.c:1617 #, c-format msgid "peer #%u has invalid public-key" msgstr "o par nº %u possui chave pública inválida" -#: src/libnm-core-impl/nm-setting-wireguard.c:1617 +#: src/libnm-core-impl/nm-setting-wireguard.c:1633 #, c-format msgid "peer #%u has invalid endpoint" msgstr "o par nº %u possui ponto de extremidade inválido" -#: src/libnm-core-impl/nm-setting-wireguard.c:1649 +#: src/libnm-core-impl/nm-setting-wireguard.c:1665 #, c-format msgid "peer #%u has invalid allowed-ips setting" msgstr "o par nº %u possui configurações inválidas de ips permitidos" -#: src/libnm-core-impl/nm-setting-wireguard.c:1663 +#: src/libnm-core-impl/nm-setting-wireguard.c:1679 #, c-format msgid "peer #%u is invalid: %s" msgstr "o par nº %u é inválido: %s" -#: src/libnm-core-impl/nm-setting-wireguard.c:1735 -#: src/libnm-core-impl/nm-setting-wireguard.c:1754 +#: 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 "não há suporte ao método “%s” para o WireGuard" -#: src/libnm-core-impl/nm-setting-wireguard.c:1778 +#: src/libnm-core-impl/nm-setting-wireguard.c:1794 msgid "key must be 32 bytes base64 encoded" msgstr "a chave deve ser codificada com base64 de 32 bytes" -#: src/libnm-core-impl/nm-setting-wireguard.c:1911 +#: src/libnm-core-impl/nm-setting-wireguard.c:1925 msgid "invalid peer secrets" msgstr "segredos de par inválidos" -#: src/libnm-core-impl/nm-setting-wireguard.c:1937 +#: src/libnm-core-impl/nm-setting-wireguard.c:1951 #, c-format msgid "peer #%u lacks public-key" msgstr "o par nº %u carece de chave pública" -#: src/libnm-core-impl/nm-setting-wireguard.c:1954 +#: src/libnm-core-impl/nm-setting-wireguard.c:1968 #, c-format msgid "non-existing peer '%s'" msgstr "par “%s” inexistente" -#: src/libnm-core-impl/nm-setting-wireless-security.c:942 +#: src/libnm-core-impl/nm-setting-wireless-security.c:938 #, c-format msgid "'%s' is not a valid value for '%s' mode connections" msgstr "“%s” não é um valor válido para conexões de modo “%s”" -#: src/libnm-core-impl/nm-setting-wireless-security.c:958 +#: src/libnm-core-impl/nm-setting-wireless-security.c:954 #, c-format msgid "'%s' security requires '%s=%s'" msgstr "segurança “%s” requer “%s=%s”" -#: src/libnm-core-impl/nm-setting-wireless-security.c:987 +#: src/libnm-core-impl/nm-setting-wireless-security.c:983 #, c-format msgid "'%s' security requires '%s' setting presence" msgstr "segurança “%s” requer a presença de definição de “%s”" -#: src/libnm-core-impl/nm-setting-wireless-security.c:1076 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1072 #, c-format msgid "'%s' can only be used with '%s=%s' (WEP)" msgstr "“%s” pode ser usada apenas com “%s=%s” (WEP)" -#: src/libnm-core-impl/nm-setting-wireless-security.c:1113 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-wireless-security.c:1109 +#, 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” pode ser usada apenas com gerenciamento de chaves “wpa-eap”, “wpa-psk” " -"or “sae”" +"“%s” somente pode ser usada com gerenciamento de chaves 'owe', 'wpa-psk', " +"'sae', 'wpa-eap' ou 'wpa-eap-suite-b-192" -#: src/libnm-core-impl/nm-setting-wireless-security.c:1131 +#: src/libnm-core-impl/nm-setting-wireless-security.c:1127 msgid "" "pmf can only be 'default' or 'required' when using 'owe', 'sae' or 'wpa-eap-" "suite-b-192' key management" msgstr "" +"pmf somente pode ser 'default' ou 'required' quando se usa gerenciamento de " +"chaves 'owe', 'sae' or 'wpa-eap-suite-b-192'" -#: src/libnm-core-impl/nm-setting-wireless.c:866 +#: src/libnm-core-impl/nm-setting-wireless.c:1125 #, c-format msgid "'%s' is not a valid Wi-Fi mode" msgstr "“%s” não é um modo Wi-Fi válido" -#: src/libnm-core-impl/nm-setting-wireless.c:879 +#: src/libnm-core-impl/nm-setting-wireless.c:1138 #, c-format msgid "'%s' is not a valid band" msgstr "“%s” não é uma banda válida" -#: src/libnm-core-impl/nm-setting-wireless.c:892 +#: src/libnm-core-impl/nm-setting-wireless.c:1151 #, c-format msgid "'%s' requires setting '%s' property" msgstr "“%s” requer a definição da propriedade “%s”" -#: src/libnm-core-impl/nm-setting-wireless.c:922 +#: src/libnm-core-impl/nm-setting-wireless.c:1181 #, c-format msgid "'%s' requires '%s' and '%s' property" msgstr "“%s” requer as propriedades “%s” e “%s”" -#: src/libnm-core-impl/nm-setting-wireless.c:1034 -#: src/libnm-core-impl/nm-team-utils.c:2251 +#: src/libnm-core-impl/nm-setting-wireless.c:1295 +#: src/libnm-core-impl/nm-team-utils.c:2254 msgid "invalid value" msgstr "valor inválido" -#: src/libnm-core-impl/nm-setting-wireless.c:1047 +#: src/libnm-core-impl/nm-setting-wireless.c:1308 msgid "Wake-on-WLAN mode 'default' and 'ignore' are exclusive flags" msgstr "Modos de Wake-on-WLAN “default” e “ignore” são sinalizadores exclusivo" -#: src/libnm-core-impl/nm-setting-wireless.c:1058 +#: src/libnm-core-impl/nm-setting-wireless.c:1319 msgid "Wake-on-WLAN trying to set unknown flag" msgstr "Wake-on-WLAN tentando definir sinalizador desconhecido" -#: src/libnm-core-impl/nm-setting-wireless.c:1071 +#: src/libnm-core-impl/nm-setting-wireless.c:1332 msgid "AP isolation can be set only in AP mode" +msgstr "O isolamento AP somente pode ser modificado no modo AP" + +#: src/libnm-core-impl/nm-setting-wireless.c:1345 +msgid "a specific channel width can be set only in AP mode" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:1095 +#: 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 "" + +#: src/libnm-core-impl/nm-setting-wireless.c:1389 msgid "conflicting value of mac-address-randomization and cloned-mac-address" msgstr "valor conflitante de mac-address-randomization e cloned-mac-address" -#: src/libnm-core-impl/nm-setting-wpan.c:171 +#: src/libnm-core-impl/nm-setting-wireless.c:1401 +msgid "property is deprecated and not implemented" +msgstr "a propriedade foi descontinuada e não está implementada" + +#: src/libnm-core-impl/nm-setting-wpan.c:174 msgid "page must be defined along with a channel" msgstr "a página deve ser definida junto com um canal" -#: src/libnm-core-impl/nm-setting-wpan.c:180 +#: src/libnm-core-impl/nm-setting-wpan.c:183 #, c-format msgid "page must be between %d and %d" msgstr "a página deve estar entre %d e %d" -#: src/libnm-core-impl/nm-setting-wpan.c:191 +#: src/libnm-core-impl/nm-setting-wpan.c:194 #, c-format msgid "channel must not be between %d and %d" msgstr "o canal deve estar entre %d e %d" -#: src/libnm-core-impl/nm-setting.c:1649 src/libnm-core-impl/nm-setting.c:1689 -#: src/libnm-core-impl/nm-setting.c:1995 +#: 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 "" "não foi possível definir propriedade do tipo “%s” do valor de tipo “%s”" -#: src/libnm-core-impl/nm-setting.c:1665 -#, fuzzy, c-format +#: 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 "" -"o valor “%s” de tipo “%s” é inválido ou fora do intervalo da propriedade " -"“%s” de tipo “%s”" +"o valor do tipo “%s” é inválido ou fora do intervalo para a propriedade “%s”" -#: src/libnm-core-impl/nm-setting.c:1710 +#: src/libnm-core-impl/nm-setting.c:1835 #, c-format msgid "can not set property: %s" msgstr "não foi possível definir propriedade: %s" -#: src/libnm-core-impl/nm-setting.c:1934 +#: src/libnm-core-impl/nm-setting.c:2064 msgid "duplicate property" msgstr "propriedade duplicada" -#: src/libnm-core-impl/nm-setting.c:1954 +#: src/libnm-core-impl/nm-setting.c:2084 msgid "unknown property" msgstr "propriedade desconhecida" -#: src/libnm-core-impl/nm-setting.c:2028 src/libnm-core-impl/nm-setting.c:2110 +#: 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 "falha ao definir a propriedade: %s" -#: src/libnm-core-impl/nm-setting.c:3222 +#: src/libnm-core-impl/nm-setting.c:2515 +#, c-format +msgid "invalid value %d, expected %d-%d" +msgstr "valor inválido %d, esperado %d-%d" + +#: src/libnm-core-impl/nm-setting.c:2539 +msgid "cannot be empty" +msgstr "não pode estar vazio" + +#: src/libnm-core-impl/nm-setting.c:3476 msgid "secret not found" msgstr "segredo não localizado" -#: 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 "propriedade D-Bus inválida “%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 "propriedade D-Bus duplicada “%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 "propriedade D-Bus inválida “%s” para “%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 "nome de monitorador de link desconhecido “%s”" -#: src/libnm-core-impl/nm-team-utils.c:2238 -msgid "value out or range" +#: src/libnm-core-impl/nm-team-utils.c:2241 +msgid "value out of range" msgstr "valor fora da faixa" -#: src/libnm-core-impl/nm-team-utils.c:2270 +#: src/libnm-core-impl/nm-team-utils.c:2274 msgid "invalid runner-tx-hash" msgstr "runner-tx-hash inválido" -#: 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 só é permitido para 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 só é permitido para runners %s" -#: src/libnm-core-impl/nm-team-utils.c:2329 +#: src/libnm-core-impl/nm-team-utils.c:2333 msgid "cannot set parameters for lacp and activebackup runners together" msgstr "" "não é possível definir os parâmetros para os runners lacp e activebackup " "juntos" -#: src/libnm-core-impl/nm-team-utils.c:2343 +#: src/libnm-core-impl/nm-team-utils.c:2347 msgid "missing link watcher" msgstr "faltando monitorador de link" -#: src/libnm-core-impl/nm-team-utils.c:2369 +#: src/libnm-core-impl/nm-team-utils.c:2373 msgid "team config exceeds size limit" msgstr "a configuração de união excede o limite de tamanho" -#: src/libnm-core-impl/nm-team-utils.c:2380 +#: src/libnm-core-impl/nm-team-utils.c:2384 msgid "team config is not valid UTF-8" msgstr "a configuração de união não é um UTF-8 válido" -#: 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 "tipo de D-Bus inválido “%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 "monitoradores de link inválidos: %s" -#: src/libnm-core-impl/nm-utils.c:2259 +# Tipo latido? Ou seria tipo ouro? +#: src/libnm-core-impl/nm-utils.c:1367 +msgid "Expected value of type \"au\"" +msgstr "Esperado valor do tipo \"au\"" + +#: src/libnm-core-impl/nm-utils.c:1510 src/libnm-core-impl/nm-utils.c:1675 +msgid "Expected value of type \"aau\"" +msgstr "Esperado valor do tipo \"aau\"" + +#: src/libnm-core-impl/nm-utils.c:1521 +msgid "Expected \"address-labels\" of type \"as\"" +msgstr "" + +# idx parece ser um termo técnico não traduzivel, mas não tenho certeza +#: src/libnm-core-impl/nm-utils.c:1543 +#, c-format +msgid "Incomplete IPv4 address (idx=%u)" +msgstr "Endereço IPv4 incompleto (idx=%u)" + +# idx significa "Internet Data Exchange", que pode ser traduzido como "Troca de dados pela Internet", mas pelo o que eu pesquisei no Brasil essa sigla é usada em inglês mesmo sem passar por nenhum tipo de tradução +#: 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 +#: src/libnm-core-impl/nm-utils.c:2374 src/libnm-core-impl/nm-utils.c:2559 +#, c-format +msgid "%s (idx=%u)" +msgstr "%s (idx=%u)" + +#: src/libnm-core-impl/nm-utils.c:1693 +#, c-format +msgid "Incomplete IPv4 route (idx=%u)" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:1821 +msgid "Expected value of type \"aay\"" +msgstr "Esperava valor do tipo \"aay\"" + +#: src/libnm-core-impl/nm-utils.c:1846 +#, c-format +msgid "Invalid IPv6 DNS address length (idx=%u)" +msgstr "DNS IPv6 com tamanho inválido (idx=%u)" + +#: src/libnm-core-impl/nm-utils.c:1973 +msgid "Expected value of type \"a(ayuay)\"" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:1995 +#, c-format +msgid "Expected value of type \"(ayuay)\" (idx=%u)" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:2008 +#, c-format +msgid "IPv6 address with invalid length (idx=%u)" +msgstr "Endereço IPv6 com tamanho inválido (idx=%u)" + +#: src/libnm-core-impl/nm-utils.c:2038 +#, c-format +msgid "IPv6 gateway with invalid length (idx=%u)" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:2150 +msgid "Expected value of type \"a(ayuayu)\"" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:2174 +#, c-format +msgid "Expected value of type \"(ayuayu)\" (idx=%u)" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:2187 +#, c-format +msgid "IPv6 dest address with invalid length (idx=%u)" +msgstr "Endereço de destino IPv6 com tamanho inválido (idx=%u)" + +#: src/libnm-core-impl/nm-utils.c:2200 +#, c-format +msgid "IPv6 next-hop address with invalid length (idx=%u)" +msgstr "Endereço de próximo salto IPv6 com tamanho inválido (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}\"" +msgstr "Esperava valor do tipo \"aa{sv}\"" + +#: src/libnm-core-impl/nm-utils.c:2361 +#, c-format +msgid "IP address requires fields \"address\" and \"prefix\" (idx=%u)" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:2540 +#, c-format +msgid "Route requires fields \"dest\" and \"prefix\" (idx=%u)" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:2662 #, c-format msgid "'%s' is not a valid handle." msgstr "“%s” não é um tratamento válido." -#: src/libnm-core-impl/nm-utils.c:2407 +#: src/libnm-core-impl/nm-utils.c:2810 #, c-format msgid "'%s' unexpected: parent already specified." msgstr "“%s” inesperado: pai já especificado." -#: src/libnm-core-impl/nm-utils.c:2425 +#: src/libnm-core-impl/nm-utils.c:2828 #, c-format msgid "invalid handle: '%s'" msgstr "tratamento inválido: “%s”" -#: src/libnm-core-impl/nm-utils.c:2447 +#: src/libnm-core-impl/nm-utils.c:2850 msgid "parent not specified." msgstr "pai não especificado." -#: src/libnm-core-impl/nm-utils.c:2511 +#: src/libnm-core-impl/nm-utils.c:2914 #, c-format msgid "unsupported qdisc option: '%s'." msgstr "opção de qdisc sem suporte: “%s”." -#: src/libnm-core-impl/nm-utils.c:2641 +#: src/libnm-core-impl/nm-utils.c:3044 msgid "action name missing." msgstr "faltando nome da ação." -#: src/libnm-core-impl/nm-utils.c:2666 +#: src/libnm-core-impl/nm-utils.c:3069 #, c-format msgid "unsupported action option: '%s'." msgstr "opção de ação sem suporte: “%s”." -#: src/libnm-core-impl/nm-utils.c:2803 +#: src/libnm-core-impl/nm-utils.c:3206 msgid "invalid action: " msgstr "ação inválida: " -#: src/libnm-core-impl/nm-utils.c:2807 +#: src/libnm-core-impl/nm-utils.c:3210 #, c-format msgid "unsupported tfilter option: '%s'." msgstr "opção de tfilter sem suporte: “%s”." -#: src/libnm-core-impl/nm-utils.c:3107 +#: src/libnm-core-impl/nm-utils.c:3510 #, c-format msgid "failed stat file %s: %s" msgstr "falha ao obter estado do arquivo %s: %s" -#: src/libnm-core-impl/nm-utils.c:3118 +#: src/libnm-core-impl/nm-utils.c:3521 #, c-format msgid "not a file (%s)" msgstr "não é um arquivo (%s)" -#: src/libnm-core-impl/nm-utils.c:3129 +#: src/libnm-core-impl/nm-utils.c:3532 #, c-format msgid "invalid file owner %d for %s" msgstr "proprietário %d de arquivo inválido para %s" -#: src/libnm-core-impl/nm-utils.c:3141 +#: src/libnm-core-impl/nm-utils.c:3544 #, c-format msgid "file permissions for %s" msgstr "permissões de arquivo para %s" -#: src/libnm-core-impl/nm-utils.c:3151 +#: src/libnm-core-impl/nm-utils.c:3554 #, c-format msgid "reject %s" msgstr "rejeitar %s" -#: src/libnm-core-impl/nm-utils.c:3171 +#: src/libnm-core-impl/nm-utils.c:3574 #, c-format msgid "path is not absolute (%s)" msgstr "o caminho não é absoluto (%s)" -#: src/libnm-core-impl/nm-utils.c:3186 +#: src/libnm-core-impl/nm-utils.c:3589 #, c-format msgid "Plugin file does not exist (%s)" msgstr "O arquivo do plug-in não existe (%s)" -#: src/libnm-core-impl/nm-utils.c:3195 +#: src/libnm-core-impl/nm-utils.c:3598 #, c-format msgid "Plugin is not a valid file (%s)" msgstr "O plug-in não é um arquivo válido (%s)" -#: src/libnm-core-impl/nm-utils.c:3206 +#: src/libnm-core-impl/nm-utils.c:3609 #, c-format msgid "libtool archives are not supported (%s)" msgstr "Não há suporte a arquivos de libtool (%s)" -#: src/libnm-core-impl/nm-utils.c:3283 +#: src/libnm-core-impl/nm-utils.c:3686 #, c-format msgid "Could not find \"%s\" binary" msgstr "Não foi possível localizar o executável “%s”" -#: src/libnm-core-impl/nm-utils.c:4106 +#: src/libnm-core-impl/nm-utils.c:4510 msgid "unknown secret flags" msgstr "opções de segredo desconhecidas" -#: src/libnm-core-impl/nm-utils.c:4116 +#: src/libnm-core-impl/nm-utils.c:4520 msgid "conflicting secret flags" msgstr "opções de segredo conflitantes" -#: src/libnm-core-impl/nm-utils.c:4127 +#: src/libnm-core-impl/nm-utils.c:4531 msgid "secret flags must not be \"not-required\"" msgstr "opções de segredo não pode ser “not-required”" -#: src/libnm-core-impl/nm-utils.c:4135 +#: src/libnm-core-impl/nm-utils.c:4539 msgid "unsupported secret flags" msgstr "opção de segredo sem suporte" -#: src/libnm-core-impl/nm-utils.c:4165 +#: src/libnm-core-impl/nm-utils.c:4569 msgid "can't be simultaneously disabled and enabled" msgstr "não pode ser simultaneamente desabilitado e habilitado" -#: src/libnm-core-impl/nm-utils.c:4173 +#: src/libnm-core-impl/nm-utils.c:4577 msgid "WPS is required" msgstr "WPS é exigido" -#: src/libnm-core-impl/nm-utils.c:4241 +#: src/libnm-core-impl/nm-utils.c:4645 #, c-format msgid "not a valid ethernet MAC address for mask at position %lld" msgstr "não é um endereço MAC de ethernet válido para máscara na posição %lld" -#: src/libnm-core-impl/nm-utils.c:4260 +#: src/libnm-core-impl/nm-utils.c:4664 #, c-format msgid "not a valid ethernet MAC address #%u at position %lld" msgstr "não é um endereço MAC de ethernet #%u na posição %lld" -#: src/libnm-core-impl/nm-utils.c:4892 +#: src/libnm-core-impl/nm-utils.c:5321 msgid "not valid utf-8" msgstr "não é um utf-8 válido" -#: src/libnm-core-impl/nm-utils.c:4913 src/libnm-core-impl/nm-utils.c:4966 +#: src/libnm-core-impl/nm-utils.c:5342 src/libnm-core-impl/nm-utils.c:5395 msgid "is not a JSON object" msgstr "não é um objeto JSON" -#: src/libnm-core-impl/nm-utils.c:4942 +#: src/libnm-core-impl/nm-utils.c:5371 msgid "value is NULL" msgstr "o valor é NULO" -#: src/libnm-core-impl/nm-utils.c:4942 +#: src/libnm-core-impl/nm-utils.c:5371 msgid "value is empty" msgstr "o valor está vazio" -#: src/libnm-core-impl/nm-utils.c:4954 +#: src/libnm-core-impl/nm-utils.c:5383 #, c-format msgid "invalid JSON at position %d (%s)" msgstr "JSON inválido na posição %d (%s)" -#: src/libnm-core-impl/nm-utils.c:5082 src/libnm-core-impl/nm-utils.c:5102 +#: src/libnm-core-impl/nm-utils.c:5508 src/libnm-core-impl/nm-utils.c:5528 msgid "unterminated escape sequence" msgstr "sequência de escape não terminada" -#: src/libnm-core-impl/nm-utils.c:5128 +#: src/libnm-core-impl/nm-utils.c:5554 #, c-format msgid "unknown attribute '%s'" msgstr "atributo desconhecido “%s”" -#: src/libnm-core-impl/nm-utils.c:5146 +#: src/libnm-core-impl/nm-utils.c:5572 #, c-format msgid "missing key-value separator '%c' after '%s'" msgstr "faltando o separador de valor-chave “%c” após “%s”" -#: src/libnm-core-impl/nm-utils.c:5166 +#: src/libnm-core-impl/nm-utils.c:5592 #, c-format msgid "invalid uint32 value '%s' for attribute '%s'" msgstr "valor uint32 inválido “%s” para o atributo “%s”" -#: src/libnm-core-impl/nm-utils.c:5180 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-utils.c:5606 +#, c-format msgid "invalid int32 value '%s' for attribute '%s'" -msgstr "valor uint32 inválido “%s” para o atributo “%s”" +msgstr "valor int32 “%s” inválido para o atributo “%s”" -#: src/libnm-core-impl/nm-utils.c:5193 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-utils.c:5619 +#, c-format msgid "invalid uint64 value '%s' for attribute '%s'" -msgstr "valor uint8 inválido “%s” para o atributo “%s”" +msgstr "valor uint64 “%s” inválido para o atributo “%s”" -#: src/libnm-core-impl/nm-utils.c:5206 +#: src/libnm-core-impl/nm-utils.c:5632 #, c-format msgid "invalid uint8 value '%s' for attribute '%s'" msgstr "valor uint8 inválido “%s” para o atributo “%s”" -#: src/libnm-core-impl/nm-utils.c:5220 +#: src/libnm-core-impl/nm-utils.c:5646 #, c-format msgid "invalid boolean value '%s' for attribute '%s'" msgstr "valor booleano inválido “%s” para o atributo “%s”" -#: src/libnm-core-impl/nm-utils.c:5234 +#: src/libnm-core-impl/nm-utils.c:5660 #, c-format msgid "unsupported attribute '%s' of type '%s'" msgstr "atributo sem suporte “%s” de tipo “%s”" -#: src/libnm-core-impl/nm-utils.c:5535 +#: src/libnm-core-impl/nm-utils.c:5961 #, c-format msgid "Bridge VLANs %d and %d are not sorted by ascending vid" msgstr "VLANS de ponte %d e %d não estão ordenadas por vid ascendente" -#: src/libnm-core-impl/nm-utils.c:5559 +#: src/libnm-core-impl/nm-utils.c:5985 #, c-format msgid "duplicate bridge VLAN vid %u" msgstr "VLAN de ponte duplicado com vid %u" -#: src/libnm-core-impl/nm-utils.c:5571 +#: src/libnm-core-impl/nm-utils.c:5997 msgid "only one VLAN can be the PVID" msgstr "somente uma VLAN pode ser o PVID" -#: src/libnm-core-impl/nm-utils.c:5616 +#: src/libnm-core-impl/nm-utils.c:6140 #, c-format msgid "unknown flags 0x%x" msgstr "sinalizadores desconhecidos 0x%x" -#: src/libnm-core-impl/nm-utils.c:5628 +#: src/libnm-core-impl/nm-utils.c:6152 msgid "" "'fqdn-no-update' and 'fqdn-serv-update' flags cannot be set at the same time" msgstr "" "os sinalizadores “fqdn-no-update” e “fqdn-serv-update” não podem ser " "definidos ao mesmo tempo" -#: src/libnm-core-impl/nm-utils.c:5639 +#: src/libnm-core-impl/nm-utils.c:6163 msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags" msgstr "" "O sinalizador “fqdn-clear-flags” é incompatível com outros sinalizadores FQDN" -#: src/libnm-core-impl/nm-utils.c:5647 +#: src/libnm-core-impl/nm-utils.c:6171 msgid "DHCPv6 does not support the E (encoded) FQDN flag" msgstr "DHCPv6 não possui suporte ao sinalizador FQDN E (codificado)" @@ -3418,28 +3852,28 @@ msgstr "não foi possível carregar plug-in “%s”: %s" msgid "failed to load nm_vpn_editor_plugin_factory() from %s (%s)" msgstr "falha ao carregar nm_vpn_editor_plugin_factory() de %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 "erro desconhecido de inicialização do plug-in %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 "" "não foi possível carregar plug-in de VPN em “%s”: faltando nome do plug-in" -#: 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 "" "não foi possível carregar plug-in de VPN em “%s”: nome de serviço inválido" -#: src/libnm-core-impl/nm-vpn-editor-plugin.c:481 +#: src/libnm-core-impl/nm-vpn-editor-plugin.c:496 msgid "the plugin does not support import capability" msgstr "o plug-in não oferece suporte à capacidade de importação" -#: src/libnm-core-impl/nm-vpn-editor-plugin.c:505 +#: src/libnm-core-impl/nm-vpn-editor-plugin.c:520 msgid "the plugin does not support export capability" msgstr "o plug-in não oferece suporte à capacidade de exportação" @@ -3641,26 +4075,26 @@ msgstr "Não foi possível decodificar o certificado: %d" msgid "Password must be UTF-8" msgstr "Senha deve estar em UTF-8" -#: src/libnm-crypto/nm-crypto-nss.c:467 +#: src/libnm-crypto/nm-crypto-nss.c:474 msgid "Couldn't initialize slot" msgstr "Não foi possível inicializar o espaço" -#: src/libnm-crypto/nm-crypto-nss.c:476 +#: src/libnm-crypto/nm-crypto-nss.c:483 #, c-format msgid "Couldn't initialize PKCS#12 decoder: %d" msgstr "Não foi possível inicializar o decodificador PKCS#12: %d" -#: src/libnm-crypto/nm-crypto-nss.c:486 +#: src/libnm-crypto/nm-crypto-nss.c:493 #, c-format msgid "Couldn't decode PKCS#12 file: %d" msgstr "Não foi possível decodificar o arquivo PKCS#12: %d" -#: src/libnm-crypto/nm-crypto-nss.c:496 +#: src/libnm-crypto/nm-crypto-nss.c:503 #, c-format msgid "Couldn't verify PKCS#12 file: %d" msgstr "Não foi possível verificar o arquivo PKCS#12: %d" -#: src/libnm-crypto/nm-crypto-nss.c:548 +#: src/libnm-crypto/nm-crypto-nss.c:555 msgid "Could not generate random data." msgstr "Não foi possível gerar dados aleatórios." @@ -3669,7 +4103,7 @@ msgstr "Não foi possível gerar dados aleatórios." #: src/libnm-crypto/nm-crypto-null.c:77 src/libnm-crypto/nm-crypto-null.c:91 #: src/libnm-crypto/nm-crypto-null.c:101 msgid "Compiled without crypto support." -msgstr "" +msgstr "Compilado sem suporte a crypto." #: src/libnm-crypto/nm-crypto.c:215 msgid "PEM key file had no start tag" @@ -3778,17 +4212,22 @@ msgstr "Falha ao reconhecer o certificado" msgid "not a valid private key" msgstr "não é uma chave privada inválida" -#: src/libnm-glib-aux/nm-shared-utils.c:2716 +#: src/libnm-glib-aux/nm-dbus-aux.c:682 +#, c-format +msgid "Method returned type '%s', but expected '%s'" +msgstr "O método retornou o tipo “%s”, mas esperava-se “%s”" + +#: src/libnm-glib-aux/nm-shared-utils.c:2450 #, c-format msgid "object class '%s' has no property named '%s'" msgstr "a classe de objeto “%s” não possui uma propriedade chamada “%s”" -#: src/libnm-glib-aux/nm-shared-utils.c:2725 +#: src/libnm-glib-aux/nm-shared-utils.c:2459 #, c-format msgid "property '%s' of object class '%s' is not writable" msgstr "a propriedade “%s” da classe de objeto “%s” não pode ser escrita" -#: src/libnm-glib-aux/nm-shared-utils.c:2734 +#: src/libnm-glib-aux/nm-shared-utils.c:2468 #, c-format msgid "" "construct property \"%s\" for object '%s' can't be set after construction" @@ -3796,21 +4235,21 @@ msgstr "" "a propriedade de construtor “%s” para objeto “%s” não pode ser definido após " "construção" -#: src/libnm-glib-aux/nm-shared-utils.c:2745 +#: 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” não é um nome de propriedade válido; “%s” não é um subtipo de " "GObject" -#: src/libnm-glib-aux/nm-shared-utils.c:2758 +#: 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 "" "não foi possível definir a propriedade “%s” de tipo “%s” a partir do valor " "de tipo “%s”" -#: src/libnm-glib-aux/nm-shared-utils.c:2770 +#: 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 " @@ -3819,57 +4258,57 @@ msgstr "" "o valor “%s” de tipo “%s” é inválido ou fora do intervalo da propriedade " "“%s” de tipo “%s”" -#: src/libnm-glib-aux/nm-shared-utils.c:5745 +#: src/libnm-glib-aux/nm-shared-utils.c:5581 msgid "interface name is missing" msgstr "o nome da interface está faltando" -#: src/libnm-glib-aux/nm-shared-utils.c:5753 +#: src/libnm-glib-aux/nm-shared-utils.c:5589 msgid "interface name is too short" msgstr "o nome da interface é pequeno demais" -#: src/libnm-glib-aux/nm-shared-utils.c:5761 +#: src/libnm-glib-aux/nm-shared-utils.c:5597 msgid "interface name is reserved" msgstr "o nome da interface está reservado" -#: src/libnm-glib-aux/nm-shared-utils.c:5774 +#: src/libnm-glib-aux/nm-shared-utils.c:5610 msgid "interface name contains an invalid character" msgstr "o nome da interface contém um caractere inválido" -#: src/libnm-glib-aux/nm-shared-utils.c:5782 +#: src/libnm-glib-aux/nm-shared-utils.c:5618 msgid "interface name is longer than 15 characters" msgstr "o nome da interface é maior que 15 caracteres" -#: src/libnm-glib-aux/nm-shared-utils.c:5807 +#: src/libnm-glib-aux/nm-shared-utils.c:5643 #, c-format msgid "'%%' is not allowed in interface names" msgstr "“%%” não é permitido em nomes de interfaces" -#: src/libnm-glib-aux/nm-shared-utils.c:5819 +#: src/libnm-glib-aux/nm-shared-utils.c:5655 #, c-format msgid "'%s' is not allowed as interface name" msgstr "“%s” não é permitido como nome de interfaces" -#: src/libnm-glib-aux/nm-shared-utils.c:5841 +#: src/libnm-glib-aux/nm-shared-utils.c:5677 msgid "" "interface name must be alphanumerical with no forward or backward slashes" msgstr "" "o nome da interface deve ser alfanumérico com nenhuma barra normal ou " "invertida" -#: src/libnm-glib-aux/nm-shared-utils.c:5858 +#: src/libnm-glib-aux/nm-shared-utils.c:5694 msgid "interface name must not be empty" msgstr "o nome da interface não pode estar vazia" -#: src/libnm-glib-aux/nm-shared-utils.c:5866 +#: src/libnm-glib-aux/nm-shared-utils.c:5702 msgid "interface name must be UTF-8 encoded" msgstr "o nome da interface deve estar codificada em UTF-8" -#: src/libnm-log-core/nm-logging.c:252 +#: src/libnm-log-core/nm-logging.c:251 #, c-format msgid "Unknown log level '%s'" msgstr "Nível de registro “%s” desconhecido" -#: src/libnm-log-core/nm-logging.c:360 +#: src/libnm-log-core/nm-logging.c:359 #, c-format msgid "Unknown log domain '%s'" msgstr "Domínio de registro “%s” desconhecido" @@ -3902,21 +4341,22 @@ msgstr "“%s” é ambíguo: %s" msgid "missing name, try one of [%s]" msgstr "faltando o nome, tente um de [%s]" -#: src/libnmc-base/nm-client-utils.c:248 src/nmcli/connections.c:3735 -#: src/nmcli/connections.c:3793 +#: 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” não está entre [%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:1860 -#: src/libnmc-setting/nm-meta-setting-desc.c:1891 -#: src/libnmc-setting/nm-meta-setting-desc.c:2855 -#: src/libnmc-setting/nm-meta-setting-desc.c:2913 src/nmcli/common.c:1626 +#: 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:484 src/nmcli/devices.c:591 src/nmcli/devices.c:597 -#: src/nmcli/general.c:30 src/nmcli/general.c:85 src/nmcli/general.c:91 +#: 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 +#: src/nmcli/general.c:91 msgid "unknown" msgstr "desconhecido" @@ -3971,35 +4411,32 @@ msgstr "falha na conexão" #: src/libnmc-base/nm-client-utils.c:311 src/libnmc-base/nm-client-utils.c:312 #: src/libnmc-base/nm-client-utils.c:313 src/libnmc-base/nm-client-utils.c:314 #: src/libnmc-base/nm-client-utils.c:315 src/libnmc-base/nm-client-utils.c:316 -#, fuzzy msgid "connecting (externally)" -msgstr "conectando (preparando)" +msgstr "conectando (externamente)" #: src/libnmc-base/nm-client-utils.c:317 -#, fuzzy msgid "connected (externally)" -msgstr "conectado (somente site)" +msgstr "conectado (externamente)" #: src/libnmc-base/nm-client-utils.c:318 src/libnmc-base/nm-client-utils.c:319 -#, fuzzy msgid "deactivating (externally)" -msgstr "desativando" +msgstr "desativando (externamente)" #: src/libnmc-base/nm-client-utils.c:342 -#: src/libnmc-setting/nm-meta-setting-desc.c:885 -#: src/libnmc-setting/nm-meta-setting-desc.c:2847 src/nmcli/connections.c:5533 -#: src/nmcli/connections.c:7507 src/nmcli/connections.c:7508 -#: src/nmcli/devices.c:590 src/nmcli/devices.c:596 src/nmcli/devices.c:1408 -#: src/nmcli/general.c:92 src/nmcli/utils.h:313 +#: 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 "sim" #: src/libnmc-base/nm-client-utils.c:343 -#: src/libnmc-setting/nm-meta-setting-desc.c:885 -#: src/libnmc-setting/nm-meta-setting-desc.c:2850 src/nmcli/connections.c:5532 -#: src/nmcli/connections.c:7507 src/nmcli/connections.c:7508 -#: src/nmcli/devices.c:590 src/nmcli/devices.c:596 src/nmcli/devices.c:1408 -#: src/nmcli/general.c:93 src/nmcli/utils.h:313 +#: 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" msgstr "não" @@ -4016,8 +4453,8 @@ msgid "No reason given" msgstr "Nenhuma razão fornecida" #. We should not really come here -#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3755 -#: src/nmcli/connections.c:3814 +#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3802 +#: src/nmcli/connections.c:3874 msgid "Unknown error" msgstr "Erro desconhecido" @@ -4288,97 +4725,153 @@ msgstr "Falha ao configurar parâmetros SR-IOV" msgid "The Wi-Fi P2P peer could not be found" msgstr "Não foi possível encontrar o par de Wi-Fi P2P" +#: src/libnmc-base/nm-client-utils.c:469 +msgid "The device handler dispatcher returned an error" +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 "" + +#: src/libnmc-base/nm-client-utils.c:476 +msgid "The device is unmanaged because the link is not initialized by udev" +msgstr "" + +#: 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')" +msgstr "" + +#: 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 "" + +#: 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 "" + +#: 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 +msgid "The device is unmanaged via udev rule" +msgstr "O dispositivo é não gerenciado via regra 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:495 +#, fuzzy +#| msgid "NetworkManager has started" +msgid "Networking was disabled" +msgstr "NetworkManager foi iniciado" + +#: src/libnmc-base/nm-client-utils.c:497 +msgid "The modem didn't have an operator code" +msgstr "" + +#: src/libnmc-base/nm-client-utils.c:506 msgid "Unknown reason" msgstr "Motivo desconhecido" -#: src/libnmc-base/nm-client-utils.c:476 +#: src/libnmc-base/nm-client-utils.c:508 msgid "The connection was disconnected" msgstr "A conexão foi desconectada" -#: src/libnmc-base/nm-client-utils.c:478 +#: src/libnmc-base/nm-client-utils.c:510 msgid "Disconnected by user" msgstr "Desconectado pelo usuário" -#: src/libnmc-base/nm-client-utils.c:480 +#: src/libnmc-base/nm-client-utils.c:512 msgid "The base network connection was interrupted" msgstr "A conexão base de rede foi interrompida" -#: src/libnmc-base/nm-client-utils.c:482 +#: src/libnmc-base/nm-client-utils.c:514 msgid "The VPN service stopped unexpectedly" msgstr "O serviço VPN parou inesperadamente" -#: src/libnmc-base/nm-client-utils.c:484 +#: src/libnmc-base/nm-client-utils.c:516 msgid "The VPN service returned invalid configuration" msgstr "O serviço VPN retornou uma configuração inválida" -#: src/libnmc-base/nm-client-utils.c:486 +#: src/libnmc-base/nm-client-utils.c:518 msgid "The connection attempt timed out" msgstr "A tentativa de conexão esgotou o tempo limite" -#: src/libnmc-base/nm-client-utils.c:488 +#: src/libnmc-base/nm-client-utils.c:520 msgid "The VPN service did not start in time" msgstr "O serviço VPN não iniciou a tempo" -#: src/libnmc-base/nm-client-utils.c:490 +#: src/libnmc-base/nm-client-utils.c:522 msgid "The VPN service failed to start" msgstr "O serviço VPN falhou ao iniciar" -#: src/libnmc-base/nm-client-utils.c:491 +#: src/libnmc-base/nm-client-utils.c:523 msgid "No valid secrets" msgstr "Sem segredos válidos" -#: src/libnmc-base/nm-client-utils.c:492 +#: src/libnmc-base/nm-client-utils.c:524 msgid "Invalid secrets" msgstr "Segredos inválidos" -#: src/libnmc-base/nm-client-utils.c:494 +#: src/libnmc-base/nm-client-utils.c:526 msgid "The connection was removed" msgstr "A conexão foi removida" -#: src/libnmc-base/nm-client-utils.c:496 +#: src/libnmc-base/nm-client-utils.c:528 msgid "Master connection failed" msgstr "Conexão mestre falhou" -#: src/libnmc-base/nm-client-utils.c:498 +#: src/libnmc-base/nm-client-utils.c:530 msgid "Could not create a software link" msgstr "Não foi possível criar um link de software" -#: src/libnmc-base/nm-client-utils.c:500 +#: src/libnmc-base/nm-client-utils.c:532 msgid "The device disappeared" msgstr "O dispositivo desapareceu" -#: src/libnmc-base/nm-client-utils.c:823 +#: src/libnmc-base/nm-client-utils.c:858 msgid "missing colon for \".:\" format" -msgstr "" +msgstr "faltam dois pontos para o formato \".:\"" -#: src/libnmc-base/nm-client-utils.c:840 +#: src/libnmc-base/nm-client-utils.c:875 msgid "missing dot for \".:\" format" -msgstr "" - -#: src/libnmc-base/nm-client-utils.c:846 -#, fuzzy -msgid "missing setting for \".:\" format" -msgstr "primeiro use “goto ” ou “set .”\n" - -#: src/libnmc-base/nm-client-utils.c:857 -msgid "missing property for \".:\" format" -msgstr "" - -#: src/libnmc-base/nm-client-utils.c:867 -#, fuzzy -msgid "invalid setting name" -msgstr "nome de definição “%s” inválido" +msgstr "falta um ponto para o formato \".:\"" #: src/libnmc-base/nm-client-utils.c:881 -#, fuzzy -msgid "property name is not UTF-8" -msgstr "Nome de propriedade? " +msgid "missing setting for \".:\" format" +msgstr "faltando definição para formato “.:”" -#: src/libnmc-base/nm-client-utils.c:898 src/libnmc-base/nm-client-utils.c:904 -#, fuzzy +#: src/libnmc-base/nm-client-utils.c:892 +msgid "missing property for \".:\" format" +msgstr "falta uma propriedade para o formato \".:\"" + +#: src/libnmc-base/nm-client-utils.c:902 +msgid "invalid setting name" +msgstr "nome de definição inválido" + +#: src/libnmc-base/nm-client-utils.c:916 +msgid "property name is not UTF-8" +msgstr "nome da propriedade não é UTF-8" + +#: src/libnmc-base/nm-client-utils.c:933 src/libnmc-base/nm-client-utils.c:939 msgid "secret is not UTF-8" -msgstr "segredo não está definido" +msgstr "segredo não é UTF-8" #: src/libnmc-base/nm-polkit-listener.c:327 #, c-format @@ -4390,72 +4883,85 @@ msgstr "Não foi possível localizar um id de sessão para o uid %d" msgid "Could not retrieve session id: %s" msgstr "Não foi possível obter o id de sessão: %s" -#: src/libnmc-base/nm-secret-agent-simple.c:222 +#: src/libnmc-base/nm-secret-agent-simple.c:225 #, c-format msgid "Preshared-key for %s" msgstr "Chave pré-compartilhada para %s" -#: src/libnmc-base/nm-secret-agent-simple.c:270 -#: src/libnmc-base/nm-secret-agent-simple.c:357 -#: src/libnmc-setting/nm-meta-setting-desc.c:5054 src/nmtui/nmt-page-dsl.c:51 -#: src/nmtui/nmt-page-wifi.c:331 +#: 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: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 msgid "Username" msgstr "Nome de usuário" -#: src/libnmc-base/nm-secret-agent-simple.c:275 -#: src/libnmc-base/nm-secret-agent-simple.c:312 -#: src/libnmc-base/nm-secret-agent-simple.c:335 -#: src/libnmc-base/nm-secret-agent-simple.c:367 -#: src/libnmc-base/nm-secret-agent-simple.c:917 -#: src/libnmc-base/nm-secret-agent-simple.c:952 -#: src/libnmc-base/nm-secret-agent-simple.c:979 -#: src/libnmc-base/nm-vpn-helpers.c:143 src/libnmc-base/nm-vpn-helpers.c:147 -#: src/libnmc-base/nm-vpn-helpers.c:153 src/libnmc-base/nm-vpn-helpers.c:158 -#: src/nmcli/devices.c:4689 src/nmtui/nmt-page-dsl.c:64 -#: src/nmtui/nmt-page-wifi.c:271 src/nmtui/nmt-page-wifi.c:305 -#: src/nmtui/nmt-page-wifi.c:344 +#: src/libnmc-base/nm-secret-agent-simple.c:279 +#: src/libnmc-base/nm-secret-agent-simple.c:316 +#: src/libnmc-base/nm-secret-agent-simple.c:339 +#: src/libnmc-base/nm-secret-agent-simple.c:371 +#: src/libnmc-base/nm-secret-agent-simple.c:954 +#: src/libnmc-base/nm-secret-agent-simple.c:989 +#: src/libnmc-base/nm-secret-agent-simple.c:1016 +#: src/libnmc-base/nm-vpn-helpers.c:144 src/libnmc-base/nm-vpn-helpers.c:148 +#: src/libnmc-base/nm-vpn-helpers.c:154 src/libnmc-base/nm-vpn-helpers.c:159 +#: src/nmcli/devices.c:4727 src/nmtui/nmt-8021x-fields.c:196 +#: src/nmtui/nmt-8021x-fields.c:536 src/nmtui/nmt-8021x-fields.c:642 +#: src/nmtui/nmt-page-dsl.c:64 src/nmtui/nmt-page-wifi.c:287 +#: src/nmtui/nmt-page-wifi.c:319 src/nmtui/nmt-page-wifi.c:358 msgid "Password" msgstr "Senha" -#: src/libnmc-base/nm-secret-agent-simple.c:284 +#: src/libnmc-base/nm-secret-agent-simple.c:288 +#: src/nmtui/nmt-8021x-fields.c:365 msgid "Identity" msgstr "Identidade" -#: src/libnmc-base/nm-secret-agent-simple.c:289 +#: src/libnmc-base/nm-secret-agent-simple.c:293 msgid "Private key password" msgstr "Senha de chave privada" -#: src/libnmc-base/nm-secret-agent-simple.c:325 src/nmtui/nmt-page-wifi.c:284 +#: src/libnmc-base/nm-secret-agent-simple.c:329 src/nmtui/nmt-page-wifi.c:298 msgid "Key" msgstr "Chave" -#: src/libnmc-base/nm-secret-agent-simple.c:362 src/nmtui/nmt-page-dsl.c:67 +#: src/libnmc-base/nm-secret-agent-simple.c:366 src/nmtui/nmt-page-dsl.c:67 msgid "Service" msgstr "Serviço" -#: src/libnmc-base/nm-secret-agent-simple.c:473 +#: src/libnmc-base/nm-secret-agent-simple.c:500 msgid "WireGuard private-key" msgstr "Chave privada de WireGuard" -#: src/libnmc-base/nm-secret-agent-simple.c:512 +#: src/libnmc-base/nm-secret-agent-simple.c:539 #, c-format msgid "Secrets are required to connect WireGuard VPN '%s'" msgstr "Segredos são necessários para conectar a VPN WireGuard “%s”" -#: src/libnmc-base/nm-secret-agent-simple.c:620 -#: src/libnmc-base/nm-secret-agent-simple.c:913 -#: src/libnmc-base/nm-secret-agent-simple.c:948 -#: src/libnmc-base/nm-secret-agent-simple.c:975 -#: src/libnmc-base/nm-secret-agent-simple.c:994 +#: 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 #, c-format msgid "A password is required to connect to '%s'." msgstr "Uma senha é necessária para conectar ao “%s”." -#: src/libnmc-base/nm-secret-agent-simple.c:878 +#: src/libnmc-base/nm-secret-agent-simple.c:909 msgid "Authentication required by wireless network" msgstr "Autenticação requerida pela rede sem fio" -#: src/libnmc-base/nm-secret-agent-simple.c:880 +#: src/libnmc-base/nm-secret-agent-simple.c:911 +#, c-format +msgid "" +"Push of the WPS button on the router or a password is required to access the " +"wireless network '%s'." +msgstr "" +"Pressionar o botão WPS no roteador ou inserir uma senha é necessário para " +"acessar a rede sem fio “%s”." + +#: src/libnmc-base/nm-secret-agent-simple.c:916 #, c-format msgid "" "Passwords or encryption keys are required to access the wireless network " @@ -4464,79 +4970,79 @@ msgstr "" "Senhas ou chaves de criptografia são necessárias para acessar a rede sem fio " "“%s”." -#: src/libnmc-base/nm-secret-agent-simple.c:886 +#: src/libnmc-base/nm-secret-agent-simple.c:923 msgid "Wired 802.1X authentication" msgstr "Autenticação 802.1X com fio" -#: src/libnmc-base/nm-secret-agent-simple.c:887 +#: src/libnmc-base/nm-secret-agent-simple.c:924 #, c-format msgid "Secrets are required to access the wired network '%s'" msgstr "Segredos são necessários para acessar a rede cabeada “%s”" -#: src/libnmc-base/nm-secret-agent-simple.c:893 +#: src/libnmc-base/nm-secret-agent-simple.c:930 msgid "DSL authentication" msgstr "Autenticação DSL" -#: src/libnmc-base/nm-secret-agent-simple.c:894 +#: src/libnmc-base/nm-secret-agent-simple.c:931 #, c-format msgid "Secrets are required for the DSL connection '%s'" msgstr "Segredos são necessários para a conexão DSL “%s”" -#: src/libnmc-base/nm-secret-agent-simple.c:903 +#: src/libnmc-base/nm-secret-agent-simple.c:940 msgid "PIN code required" msgstr "Código PIN necessário" -#: src/libnmc-base/nm-secret-agent-simple.c:904 +#: src/libnmc-base/nm-secret-agent-simple.c:941 msgid "PIN code is needed for the mobile broadband device" msgstr "Código PIN é necessário para o dispositivo de banda larga móvel" -#: src/libnmc-base/nm-secret-agent-simple.c:907 +#: src/libnmc-base/nm-secret-agent-simple.c:944 msgid "PIN" msgstr "PIN" -#: src/libnmc-base/nm-secret-agent-simple.c:912 -#: src/libnmc-base/nm-secret-agent-simple.c:947 -#: src/libnmc-base/nm-secret-agent-simple.c:974 +#: src/libnmc-base/nm-secret-agent-simple.c:949 +#: src/libnmc-base/nm-secret-agent-simple.c:984 +#: src/libnmc-base/nm-secret-agent-simple.c:1011 msgid "Mobile broadband network password" msgstr "Senha de rede de banda larga móvel" -#: src/libnmc-base/nm-secret-agent-simple.c:925 +#: src/libnmc-base/nm-secret-agent-simple.c:962 #, c-format msgid "Secrets are required to access the MACsec network '%s'" msgstr "Os segredos são necessários para acessar a rede MACsec “%s”" -#: src/libnmc-base/nm-secret-agent-simple.c:929 +#: src/libnmc-base/nm-secret-agent-simple.c:966 msgid "MACsec PSK authentication" msgstr "Autenticação MACsec PSK" -#: src/libnmc-base/nm-secret-agent-simple.c:931 -#: src/libnmc-setting/nm-meta-setting-desc.c:6564 +#: src/libnmc-base/nm-secret-agent-simple.c:968 +#: src/libnmc-setting/nm-meta-setting-desc.c:7175 msgid "MKA CAK" msgstr "MKA CAK" -#: src/libnmc-base/nm-secret-agent-simple.c:936 +#: src/libnmc-base/nm-secret-agent-simple.c:973 msgid "MACsec EAP authentication" msgstr "Autenticação MACsec EAP" -#: src/libnmc-base/nm-secret-agent-simple.c:941 +#: src/libnmc-base/nm-secret-agent-simple.c:978 msgid "WireGuard VPN secret" msgstr "Segredo de VPN WireGuard" -#: src/libnmc-base/nm-secret-agent-simple.c:984 +#: src/libnmc-base/nm-secret-agent-simple.c:1021 msgid "VPN password required" msgstr "Senha de VPN necessária" -#: src/libnmc-base/nm-vpn-helpers.c:41 +#: src/libnmc-base/nm-vpn-helpers.c:42 #, c-format msgid "unknown VPN plugin \"%s\"" msgstr "plug-in VPN desconhecido “%s”" -#: src/libnmc-base/nm-vpn-helpers.c:57 +#: src/libnmc-base/nm-vpn-helpers.c:58 #, c-format msgid "cannot load legacy-only VPN plugin \"%s\" for \"%s\"" msgstr "não foi possível carregar plug-in VPN somente legado “%s” para “%s”" -#: src/libnmc-base/nm-vpn-helpers.c:65 +#: src/libnmc-base/nm-vpn-helpers.c:66 #, c-format msgid "" "cannot load VPN plugin \"%s\" due to missing \"%s\". Missing client plugin?" @@ -4544,37 +5050,58 @@ msgstr "" "não foi possível carregar plug-in VPN “%s” por estar faltando “%s”: Faltando " "plug-in do cliente?" -#: src/libnmc-base/nm-vpn-helpers.c:72 +#: src/libnmc-base/nm-vpn-helpers.c:73 #, c-format msgid "failed to load VPN plugin \"%s\": %s" msgstr "falha ao carregar plug-in VPN “%s”: %s" -#: src/libnmc-base/nm-vpn-helpers.c:148 +#: src/libnmc-base/nm-vpn-helpers.c:149 msgid "Certificate password" msgstr "Senha de certificado" # ctx::sourcefile::/rhn/admin/config/GeneralConfig.do -#: src/libnmc-base/nm-vpn-helpers.c:149 +#: src/libnmc-base/nm-vpn-helpers.c:150 msgid "HTTP proxy password" msgstr "Senha de proxy HTTP" -#: src/libnmc-base/nm-vpn-helpers.c:154 src/libnmc-base/nm-vpn-helpers.c:159 +#: src/libnmc-base/nm-vpn-helpers.c:155 src/libnmc-base/nm-vpn-helpers.c:160 msgid "Group password" msgstr "Senha do grupo" -#: src/libnmc-base/nm-vpn-helpers.c:163 src/nmtui/nmt-page-ip4.c:132 -#: src/nmtui/nmt-page-ip6.c:133 -msgid "Gateway" -msgstr "Gateway" - #: src/libnmc-base/nm-vpn-helpers.c:164 +msgid "Gateway URL" +msgstr "URL do gateway" + +#: src/libnmc-base/nm-vpn-helpers.c:165 msgid "Cookie" msgstr "Cookie" -#: src/libnmc-base/nm-vpn-helpers.c:165 +#: src/libnmc-base/nm-vpn-helpers.c:166 msgid "Gateway certificate hash" msgstr "Hash de certificado do gateway" +#: src/libnmc-base/nm-vpn-helpers.c:167 +msgid "Gateway DNS resolution ('host:IP')" +msgstr "Resolução de DNS do gateway (“host:IP”)" + +#: src/libnmc-base/nm-vpn-helpers.c:308 +msgid "no gateway configured" +msgstr "nenhum gateway configurado" + +#: src/libnmc-base/nm-vpn-helpers.c:392 +#, c-format +msgid "exited with status %d" +msgstr "saiu com status %d" + +#: src/libnmc-base/nm-vpn-helpers.c:399 +#, c-format +msgid "exited on signal %d" +msgstr "saiu no sinal %d" + +#: src/libnmc-base/nm-vpn-helpers.c:430 +msgid "insufficent secrets returned" +msgstr "segredos insuficientes retornados" + #: src/libnmc-setting/nm-meta-setting-access.c:501 #, c-format msgid "field '%s' has to be alone" @@ -4585,191 +5112,190 @@ msgstr "o campo “%s” tem que ser um só" msgid "invalid field '%s%s%s%s%s'; %s%s%s" msgstr "campo inválido “%s%s%s%s%s”; %s%s%s" -#: src/libnmc-setting/nm-meta-setting-desc.c:268 -#: src/libnmc-setting/nm-meta-setting-desc.c:334 -#, fuzzy, c-format -#| msgid "invalid prefix '%s'; <1-%d> allowed" +#: 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 "prefixo “%s” inválido; <1-%d> são permitidos" +msgstr "prefixo “%s” inválido; <0-%d> são permitidos" -#: src/libnmc-setting/nm-meta-setting-desc.c:280 +#: src/libnmc-setting/nm-meta-setting-desc.c:269 #, c-format msgid "invalid IP address: %s" msgstr "endereço IPv4 inválido: %s" -#: src/libnmc-setting/nm-meta-setting-desc.c:305 +#: 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 "" -"A sintaxe válida é: 'ip[/prefixo] [próx-salto] [métrica] [atributo=val]… [," -"ip[/prefixo] …]'" +"A sintaxe válida é: 'ip[/prefixo] [próx-salto] [métrica] [atributo=val]… " +"[,ip[/prefixo] …]'" -#: src/libnmc-setting/nm-meta-setting-desc.c:346 +#: src/libnmc-setting/nm-meta-setting-desc.c:340 #, c-format msgid "the next hop ('%s') must be first" msgstr "o próximo salto (“%s”) deve vir primeiro" -#: src/libnmc-setting/nm-meta-setting-desc.c:356 +#: src/libnmc-setting/nm-meta-setting-desc.c:350 #, c-format msgid "the metric ('%s') must be before attributes" msgstr "a métrica (“%s”) deve vir antes dos atributos" -#: src/libnmc-setting/nm-meta-setting-desc.c:407 +#: src/libnmc-setting/nm-meta-setting-desc.c:403 #, c-format msgid "invalid route: %s. %s" msgstr "rota inválida: %s. %s" -#: src/libnmc-setting/nm-meta-setting-desc.c:475 +#: src/libnmc-setting/nm-meta-setting-desc.c:472 #, c-format msgid "cannot read pac-script from file '%s'" msgstr "não foi possível ler script pac a partir do arquivo “%s”" -#: src/libnmc-setting/nm-meta-setting-desc.c:484 +#: src/libnmc-setting/nm-meta-setting-desc.c:480 #, c-format msgid "file '%s' contains non-valid utf-8" msgstr "o arquivo “%s” contém utf-8 não válido" -#: src/libnmc-setting/nm-meta-setting-desc.c:498 +#: src/libnmc-setting/nm-meta-setting-desc.c:493 #, c-format msgid "'%s' does not contain a valid PAC Script" msgstr "“%s” não contém um script PAC válido" -#: src/libnmc-setting/nm-meta-setting-desc.c:504 +#: src/libnmc-setting/nm-meta-setting-desc.c:496 msgid "Not a valid PAC Script" msgstr "Script PAC não válido" -#: src/libnmc-setting/nm-meta-setting-desc.c:557 +#: src/libnmc-setting/nm-meta-setting-desc.c:548 #, c-format msgid "cannot read team config from file '%s'" msgstr "não foi possível ler configuração de união a partir do arquivo “%s”" -#: src/libnmc-setting/nm-meta-setting-desc.c:566 +#: src/libnmc-setting/nm-meta-setting-desc.c:556 #, c-format msgid "team config file '%s' contains non-valid utf-8" msgstr "arquivo de configuração “%s” de união contém utf-8 não válido" -#: src/libnmc-setting/nm-meta-setting-desc.c:1060 +#: src/libnmc-setting/nm-meta-setting-desc.c:1058 msgid "auto" msgstr "auto" -#: src/libnmc-setting/nm-meta-setting-desc.c:1225 +#: 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:1418 -#: src/libnmc-setting/nm-meta-setting-desc.c:1426 -#: src/libnmc-setting/nm-meta-setting-desc.c:4393 +#: 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” está fora da faixa [%" -#: src/libnmc-setting/nm-meta-setting-desc.c:1435 +#: src/libnmc-setting/nm-meta-setting-desc.c:1464 #, c-format msgid "'%s' is not a valid number" msgstr "“%s” não é um número válido" -#: src/libnmc-setting/nm-meta-setting-desc.c:1492 +#: src/libnmc-setting/nm-meta-setting-desc.c:1520 #, c-format msgid "'%s' is out of range [0, %u]" msgstr "“%s” está fora da faixa [0, %u]" -#: src/libnmc-setting/nm-meta-setting-desc.c:1537 +#: src/libnmc-setting/nm-meta-setting-desc.c:1571 #, c-format msgid "'%s' is not a valid Ethernet MAC" msgstr "“%s” não é um MAC de Ethernet válido" -#: src/libnmc-setting/nm-meta-setting-desc.c:1662 +#: src/libnmc-setting/nm-meta-setting-desc.c:1660 #, c-format msgid "invalid option '%s', use a combination of [%s]" msgstr "opção inválida “%s”, use uma combinação de [%s]" -#: src/libnmc-setting/nm-meta-setting-desc.c:1827 +#: src/libnmc-setting/nm-meta-setting-desc.c:1797 #, c-format msgid "%d (key)" msgstr "%d (chave)" -#: src/libnmc-setting/nm-meta-setting-desc.c:1829 +#: src/libnmc-setting/nm-meta-setting-desc.c:1799 #, c-format msgid "%d (passphrase)" msgstr "%d (palavra-chave)" -#: src/libnmc-setting/nm-meta-setting-desc.c:1832 +#: src/libnmc-setting/nm-meta-setting-desc.c:1802 #, c-format msgid "%d (unknown)" msgstr "%d (desconhecido)" -#: src/libnmc-setting/nm-meta-setting-desc.c:1845 +#: src/libnmc-setting/nm-meta-setting-desc.c:1815 msgid "0 (NONE)" msgstr "0 (NENHUM(A))" -#: src/libnmc-setting/nm-meta-setting-desc.c:1851 +#: src/libnmc-setting/nm-meta-setting-desc.c:1821 msgid "REORDER_HEADERS, " msgstr "REORDENAR_CABEÇALHOS, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1853 +#: src/libnmc-setting/nm-meta-setting-desc.c:1823 msgid "GVRP, " msgstr "GVRP, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1855 +#: src/libnmc-setting/nm-meta-setting-desc.c:1825 msgid "LOOSE_BINDING, " msgstr "VÍNCULO_SOLTO, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1857 +#: src/libnmc-setting/nm-meta-setting-desc.c:1827 msgid "MVRP, " msgstr "MVRP, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1878 +#: src/libnmc-setting/nm-meta-setting-desc.c:1848 msgid "0 (none)" msgstr "0 (nenhum(a))" -#: src/libnmc-setting/nm-meta-setting-desc.c:1884 +#: src/libnmc-setting/nm-meta-setting-desc.c:1854 msgid "agent-owned, " msgstr "pertence-ao-agente, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1886 +#: src/libnmc-setting/nm-meta-setting-desc.c:1856 msgid "not saved, " msgstr "não salvo, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1888 +#: src/libnmc-setting/nm-meta-setting-desc.c:1858 msgid "not required, " msgstr "não requisitado, " -#: src/libnmc-setting/nm-meta-setting-desc.c:2093 +#: src/libnmc-setting/nm-meta-setting-desc.c:2063 #, c-format msgid "'%s' is not valid; use + + check-connectivity + + + A boolean value specifying whether NetworkManager will perform a connectivity check + for this device. Defaults to yes. + + + This setting does nothing if the connectivity check has been + disabled globally using the + connectivity.enabled setting. + + + keep-configuration diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 04850fbecf..91ddbc9489 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -6331,6 +6331,14 @@ concheck_is_possible(NMDevice *self) if (priv->state == NM_DEVICE_STATE_UNKNOWN) return FALSE; + if (!nm_config_data_get_device_config_boolean_by_device( + NM_CONFIG_GET_DATA, + NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY, + self, + TRUE, + TRUE)) + return FALSE; + return TRUE; } @@ -6351,8 +6359,10 @@ concheck_periodic_schedule_do(NMDevice *self, int addr_family, gint64 now_ns) goto out; } - if (!concheck_is_possible(self)) + if (!concheck_is_possible(self)) { + concheck_update_state(self, addr_family, NM_CONNECTIVITY_UNKNOWN, FALSE); goto out; + } nm_assert(now_ns > 0); nm_assert(priv->concheck_x[IS_IPv4].p_cur_interval > 0); @@ -6575,7 +6585,11 @@ concheck_update_interval(NMDevice *self, int addr_family, gboolean check_now) concheck_periodic_schedule_do(self, addr_family, 0); /* also update the fake connectivity state. */ - concheck_update_state(self, addr_family, NM_CONNECTIVITY_FAKE, TRUE); + if (concheck_is_possible(self)) + concheck_update_state(self, addr_family, NM_CONNECTIVITY_FAKE, TRUE); + else + concheck_update_state(self, addr_family, NM_CONNECTIVITY_UNKNOWN, FALSE); + return; } @@ -6604,6 +6618,7 @@ concheck_update_state(NMDevice *self, /* @state is a result of the connectivity check. We only expect a precise * number of possible values. */ nm_assert(NM_IN_SET(state, + NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_FULL, @@ -6927,8 +6942,11 @@ nm_device_check_connectivity(NMDevice *self, NMDeviceConnectivityCallback callback, gpointer user_data) { - if (!concheck_is_possible(self)) + if (!concheck_is_possible(self)) { + concheck_update_state(self, AF_INET, NM_CONNECTIVITY_UNKNOWN, FALSE); + concheck_update_state(self, AF_INET6, NM_CONNECTIVITY_UNKNOWN, FALSE); return NULL; + } concheck_periodic_schedule_set(self, addr_family, CONCHECK_SCHEDULE_CHECK_EXTERNAL); return concheck_start(self, addr_family, callback, user_data, FALSE); @@ -8316,6 +8334,17 @@ config_changed(NMConfig *config, && !nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV)) device_init_static_sriov_num_vfs(self); } + + if (NM_FLAGS_HAS(changes, NM_CONFIG_CHANGE_VALUES) && concheck_is_possible(self)) { + /* restart (periodic) connectivity checks if they were previously disabled */ + if (!nm_config_data_get_device_config_boolean_by_device( + old_data, + NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY, + self, + TRUE, + TRUE)) + nm_device_check_connectivity_update_interval(self); + } } static void diff --git a/src/core/nm-config.c b/src/core/nm-config.c index d1f2bbed35..472d783053 100644 --- a/src/core/nm-config.c +++ b/src/core/nm-config.c @@ -892,6 +892,7 @@ static const ConfigGroup config_groups[] = { .is_prefix = TRUE, .keys = NM_MAKE_STRV(NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT, NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER, + NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY, NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED, NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS, NM_CONFIG_KEYFILE_KEY_DEVICE_KEEP_CONFIGURATION, diff --git a/src/libnm-base/nm-config-base.h b/src/libnm-base/nm-config-base.h index d101c95c84..e8d46ddc09 100644 --- a/src/libnm-base/nm-config-base.h +++ b/src/libnm-base/nm-config-base.h @@ -65,6 +65,7 @@ #define NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED "managed" #define NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER "ignore-carrier" +#define NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY "check-connectivity" #define NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS "sriov-num-vfs" #define NM_CONFIG_KEYFILE_KEY_DEVICE_KEEP_CONFIGURATION "keep-configuration" #define NM_CONFIG_KEYFILE_KEY_DEVICE_ALLOWED_CONNECTIONS "allowed-connections" From bcb96a1b19dae7306be0b373f0cf76660499ac61 Mon Sep 17 00:00:00 2001 From: Mitchell Augustin Date: Fri, 3 Oct 2025 11:32:34 -0500 Subject: [PATCH 015/153] core: add handlers for SaePasswordMismatch signal Trigger a new auth request to the user when the SaePasswordMismatch signal is received from wpa_supplicant. Closes #904 --- src/core/devices/wifi/nm-device-wifi.c | 35 +++++++++++++++++++ src/core/supplicant/nm-supplicant-interface.c | 15 ++++++++ src/core/supplicant/nm-supplicant-interface.h | 1 + 3 files changed, 51 insertions(+) diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c index 395e0c8e5f..50a0dd7b5f 100644 --- a/src/core/devices/wifi/nm-device-wifi.c +++ b/src/core/devices/wifi/nm-device-wifi.c @@ -194,6 +194,9 @@ static void supplicant_iface_notify_p2p_available(NMSupplicantInterface *iface, static void supplicant_iface_notify_wpa_psk_mismatch_cb(NMSupplicantInterface *iface, NMDeviceWifi *self); +static void supplicant_iface_notify_wpa_sae_mismatch_cb(NMSupplicantInterface *iface, + NMDeviceWifi *self); + static void periodic_update(NMDeviceWifi *self); static void ap_add_remove(NMDeviceWifi *self, @@ -631,6 +634,10 @@ supplicant_interface_acquire_cb(NMSupplicantManager *supplicant_manager, NM_SUPPLICANT_INTERFACE_PSK_MISMATCH, G_CALLBACK(supplicant_iface_notify_wpa_psk_mismatch_cb), self); + g_signal_connect(priv->sup_iface, + NM_SUPPLICANT_INTERFACE_SAE_MISMATCH, + G_CALLBACK(supplicant_iface_notify_wpa_sae_mismatch_cb), + self); _scan_notify_is_scanning(self); @@ -2879,6 +2886,34 @@ supplicant_iface_notify_wpa_psk_mismatch_cb(NMSupplicantInterface *iface, NMDevi | NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW); } +static void +supplicant_iface_notify_wpa_sae_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) SAE password 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/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c index 43926d4228..40fb71700e 100644 --- a/src/core/supplicant/nm-supplicant-interface.c +++ b/src/core/supplicant/nm-supplicant-interface.c @@ -66,6 +66,7 @@ enum { GROUP_STARTED, /* a new Group (interface) was created */ GROUP_FINISHED, /* a Group (interface) has been finished */ PSK_MISMATCH, /* supplicant reported incorrect PSK */ + SAE_MISMATCH, /* supplicant reported incorrect SAE Password */ LAST_SIGNAL }; @@ -3110,6 +3111,11 @@ _signal_handle(NMSupplicantInterface *self, g_signal_emit(self, signals[PSK_MISMATCH], 0); return; } + + if (nm_streq(signal_name, "SaePasswordMismatch")) { + g_signal_emit(self, signals[SAE_MISMATCH], 0); + return; + } return; } @@ -3752,4 +3758,13 @@ nm_supplicant_interface_class_init(NMSupplicantInterfaceClass *klass) NULL, G_TYPE_NONE, 0); + signals[SAE_MISMATCH] = g_signal_new(NM_SUPPLICANT_INTERFACE_SAE_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 961de1b149..e77f5a420f 100644 --- a/src/core/supplicant/nm-supplicant-interface.h +++ b/src/core/supplicant/nm-supplicant-interface.h @@ -87,6 +87,7 @@ typedef enum { #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" +#define NM_SUPPLICANT_INTERFACE_SAE_MISMATCH "wpa-sae-password-mismatch" typedef struct _NMSupplicantInterfaceClass NMSupplicantInterfaceClass; From de0a37b2481576cd7817ca21186adc0751fb8b63 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Wed, 3 Dec 2025 10:19:52 +0100 Subject: [PATCH 016/153] build: fix rhel version detection in configure_for_system --- contrib/fedora/rpm/configure-for-system.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh index bcf619c645..b5dee01a43 100755 --- a/contrib/fedora/rpm/configure-for-system.sh +++ b/contrib/fedora/rpm/configure-for-system.sh @@ -202,7 +202,7 @@ if [ -z "$P_FEDORA" -a -z "$P_RHEL" ] ; then P_FEDORA="$x" P_RHEL=0 else - x="$(grep -q "ID=fedora" /etc/os-release && sed -n 's/VERSION_ID=//p' /etc/os-release)" + x="$(grep -q 'ID="rhel"' /etc/os-release && sed -n 's/^VERSION_ID="*\([0-9]*\).*/\1/p' /etc/os-release)" if test "$x" -gt 0 ; then P_FEDORA=0 P_RHEL="$x" From 55f96057c6d676c17f76c3210bdd0cf614399121 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Wed, 3 Dec 2025 10:22:57 +0100 Subject: [PATCH 017/153] build/configure_for_system: disable building with team on rhel10+ --- contrib/fedora/rpm/configure-for-system.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh index b5dee01a43..b5b92d3621 100755 --- a/contrib/fedora/rpm/configure-for-system.sh +++ b/contrib/fedora/rpm/configure-for-system.sh @@ -293,6 +293,10 @@ if [ -z "$P_MODEM_MANAGER_1" ] ; then fi fi +if [ -z "$TEAM" ] && [ "$P_RHEL" -ge 10 ] ; then + P_TEAM=0 +fi + if bool "$P_DEBUG" ; then P_CFLAGS="-g -Og -fexceptions${P_CFLAGS:+ }$P_CFLAGS" else From ae134ca9f4742217f3c90bc8b3fd878e42719cc6 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Wed, 3 Dec 2025 10:27:50 +0100 Subject: [PATCH 018/153] build/configure_for_system: stop building with ifcfg_rh support It has been deprecated for a long time, so it would be probably fine to stop building with it enabled. RHEL 9 is excluded since it still supports the ifcfg-rh format. --- contrib/fedora/rpm/configure-for-system.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh index b5b92d3621..e52e372bca 100755 --- a/contrib/fedora/rpm/configure-for-system.sh +++ b/contrib/fedora/rpm/configure-for-system.sh @@ -173,6 +173,7 @@ P_WIFI="${WIFI-1}" P_WWAN="${WWAN-1}" P_TEAM="${TEAM-1}" P_BLUETOOTH="${BLUETOOTH-1}" +P_IFCFG_RH="${IFCFG_RH-0}" P_NMTUI="${NMTUI-1}" P_NM_CLOUD_SETUP="${NM_CLOUD_SETUP-1}" P_OVS="${OVS-1}" @@ -293,10 +294,14 @@ if [ -z "$P_MODEM_MANAGER_1" ] ; then fi fi -if [ -z "$TEAM" ] && [ "$P_RHEL" -ge 10 ] ; then +if [ -z "$TEAM" ] && [ "${P_RHEL-0}" -ge 10 ] ; then P_TEAM=0 fi +if [ -z "$IFCFG_RH" ] && [ -n "$P_RHEL" ] && [ "$P_RHEL" -le 9 ] ; then + P_IFCFG_RH=1 +fi + if bool "$P_DEBUG" ; then P_CFLAGS="-g -Og -fexceptions${P_CFLAGS:+ }$P_CFLAGS" else @@ -407,7 +412,7 @@ meson setup\ -Ddbus_conf_dir="$P_DBUS_SYS_DIR" \ -Dtests=yes \ -Dvalgrind=no \ - -Difcfg_rh=true \ + -Difcfg_rh="$(bool_true "$P_IFCFG_RH")" \ -Difupdown=false \ $(args_enable "$P_PPP" -Dppp=true -Dpppd="$D_SBINDIR/pppd" -Dpppd_plugin_dir="$D_LIBDIR/pppd/$P_PPP_VERSION") \ $(args_enable "$(bool_not_true "$P_PPP")" -Dppp=false ) \ From a07961cfbed092f7e0388b367096b7e5fc364540 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Tue, 2 Dec 2025 11:05:08 +0100 Subject: [PATCH 019/153] systemd: selectively backport "Fix constness issues with newer glibc" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NetworkManager is failing to build on Rawhide with the following errors: ../src/libnm-systemd-shared/src/basic/string-util.h:33:16: error: return discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 33 | return strstr(haystack, needle); | ^~~~~~ In file included from ../src/libnm-systemd-shared/src/basic/fd-util.c:30: ../src/libnm-systemd-shared/src/basic/sort-util.h: In function ‘bsearch_safe’: ../src/libnm-systemd-shared/src/basic/sort-util.h:34:16: error: return discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 34 | return bsearch(key, base, nmemb, size, compar); | ^~~~~~~ This is fixed in systemd by commit 0bac1ed2422f15308414dd1e9d09812a966b0348: > Latest glibc uses _Generic to have strstr() and other functions return > const char* or char* based on whether the input is a const char* or a > char*. This causes build failures as we previously always expected a char*. > > Let's fix the compilation failures and add our own macros similar to glibc's > to have string functions that return a mutable or const pointer depending on > the input. Selectively backport the changes we need to fix building. --- src/libnm-systemd-shared/src/basic/sort-util.h | 7 +++++-- .../src/basic/string-util.c | 4 ++-- .../src/basic/string-util.h | 18 ++++++++++++------ .../src/fundamental/macro-fundamental.h | 9 ++++++++- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/libnm-systemd-shared/src/basic/sort-util.h b/src/libnm-systemd-shared/src/basic/sort-util.h index 9c818bd747..a3bfb32c1d 100644 --- a/src/libnm-systemd-shared/src/basic/sort-util.h +++ b/src/libnm-systemd-shared/src/basic/sort-util.h @@ -25,15 +25,18 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, * Normal bsearch requires base to be nonnull. Here were require * that only if nmemb > 0. */ -static inline void* bsearch_safe(const void *key, const void *base, +static inline void* bsearch_safe_internal(const void *key, const void *base, size_t nmemb, size_t size, comparison_fn_t compar) { if (nmemb <= 0) return NULL; assert(base); - return bsearch(key, base, nmemb, size, compar); + return (void*) bsearch(key, base, nmemb, size, compar); } +#define bsearch_safe(key, base, nmemb, size, compar) \ + const_generic((base), bsearch_safe_internal(key, base, nmemb, size, compar)) + #define typesafe_bsearch(k, b, n, func) \ ({ \ const typeof((b)[0]) *_k = k; \ diff --git a/src/libnm-systemd-shared/src/basic/string-util.c b/src/libnm-systemd-shared/src/basic/string-util.c index 5efd11eabc..52160fe3e2 100644 --- a/src/libnm-systemd-shared/src/basic/string-util.c +++ b/src/libnm-systemd-shared/src/basic/string-util.c @@ -1470,7 +1470,7 @@ ssize_t strlevenshtein(const char *x, const char *y) { return t1[yl]; } -char* strrstr(const char *haystack, const char *needle) { +char* strrstr_internal(const char *haystack, const char *needle) { /* Like strstr() but returns the last rather than the first occurrence of "needle" in "haystack". */ if (!haystack || !needle) @@ -1479,7 +1479,7 @@ char* strrstr(const char *haystack, const char *needle) { /* Special case: for the empty string we return the very last possible occurrence, i.e. *after* the * last char, not before. */ if (*needle == 0) - return strchr(haystack, 0); + return (char*) strchr(haystack, 0); for (const char *p = strstr(haystack, needle), *q; p; p = q) { q = strstr(p + 1, needle); diff --git a/src/libnm-systemd-shared/src/basic/string-util.h b/src/libnm-systemd-shared/src/basic/string-util.h index 91e63c9b12..5d2b5dfb16 100644 --- a/src/libnm-systemd-shared/src/basic/string-util.h +++ b/src/libnm-systemd-shared/src/basic/string-util.h @@ -27,24 +27,28 @@ #define URI_UNRESERVED ALPHANUMERICAL "-._~" /* [RFC3986] */ #define URI_VALID URI_RESERVED URI_UNRESERVED /* [RFC3986] */ -static inline char* strstr_ptr(const char *haystack, const char *needle) { +static inline char* strstr_ptr_internal(const char *haystack, const char *needle) { if (!haystack || !needle) return NULL; - return strstr(haystack, needle); + return (char*) strstr(haystack, needle); } -static inline char* strstrafter(const char *haystack, const char *needle) { - char *p; +#define strstr_ptr(haystack, needle) \ + const_generic(haystack, strstr_ptr_internal(haystack, needle)) +static inline char* strstrafter_internal(const char *haystack, const char *needle) { /* Returns NULL if not found, or pointer to first character after needle if found */ - p = strstr_ptr(haystack, needle); + char *p = (char*) strstr_ptr(haystack, needle); if (!p) return NULL; return p + strlen(needle); } +#define strstrafter(haystack, needle) \ + const_generic(haystack, strstrafter_internal(haystack, needle)) + static inline const char* strnull(const char *s) { return s ?: "(null)"; } @@ -300,6 +304,8 @@ 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); +char* strrstr_internal(const char *haystack, const char *needle); +#define strrstr(haystack, needle) \ + const_generic(haystack, strrstr_internal(haystack, needle)) size_t str_common_prefix(const char *a, const char *b); diff --git a/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h b/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h index abdfb9b6bd..a89994e273 100644 --- a/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h +++ b/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h @@ -511,4 +511,11 @@ 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 +#endif /* NM_IGNORED */ + +/* This macro is used to have a const-returning and non-const returning version of a function based on + * whether its first argument is const or not (e.g. strstr()). */ +#define const_generic(ptr, call) \ + _Generic(0 ? (ptr) : (void*) 1, \ + const void*: (const typeof(*call)*) (call), \ + void*: (call)) From 487ca30256ade2a1715a8d2a61725fc9c476fb7e Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Tue, 2 Dec 2025 14:46:16 +0100 Subject: [PATCH 020/153] all: const-ify str(r)chr output variables where possible --- src/core/dns/nm-dns-manager.c | 4 ++-- src/core/nm-checkpoint.c | 2 +- src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 2 +- src/libnm-core-aux-intern/nm-libnm-core-utils.c | 4 ++-- src/libnm-core-impl/nm-setting.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index c746e71497..ec33c46427 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -1510,8 +1510,8 @@ _domain_track_is_shadowed(GHashTable *ht, const char **out_parent, int *out_parent_priority) { - char *parent; - int parent_priority; + const char *parent; + int parent_priority; if (!ht) return FALSE; diff --git a/src/core/nm-checkpoint.c b/src/core/nm-checkpoint.c index ffcf6e3aad..45ea3a73b6 100644 --- a/src/core/nm-checkpoint.c +++ b/src/core/nm-checkpoint.c @@ -160,7 +160,7 @@ parse_connection_from_shadowed_file(const char *path, GError **error) { nm_auto_unref_keyfile GKeyFile *keyfile = NULL; gs_free char *base_dir = NULL; - char *sep; + const char *sep; keyfile = g_key_file_new(); if (!g_key_file_load_from_file(keyfile, path, G_KEY_FILE_NONE, error)) 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 b9e3f91920..728dccac99 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 @@ -77,7 +77,7 @@ get_full_file_path(const char *ifcfg_path, const char *file_path) { const char *base = file_path; gs_free char *dirname = NULL; - char *p; + const char *p; g_return_val_if_fail(ifcfg_path != NULL, NULL); g_return_val_if_fail(file_path != NULL, NULL); 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 2d709e20ef..2d4546d553 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.c +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.c @@ -483,8 +483,8 @@ nm_utils_validate_shared_dhcp_range(const char *shared_dhcp_range, GPtrArray *addresses, GError **error) { - char *start_address_str; - char *end_address_str; + const char *start_address_str; + const char *end_address_str; NMIPAddress *interface_address_with_prefix; NMIPAddr interface_address; NMIPAddr start_address; diff --git a/src/libnm-core-impl/nm-setting.c b/src/libnm-core-impl/nm-setting.c index 98424c76fc..3b3aecf1a6 100644 --- a/src/libnm-core-impl/nm-setting.c +++ b/src/libnm-core-impl/nm-setting.c @@ -4495,7 +4495,7 @@ nm_range_from_str(const char *str, GError **error) gs_free char *str_free = NULL; guint64 start; guint64 end = 0; - char *c; + const char *c; g_return_val_if_fail(str, NULL); g_return_val_if_fail(!error || !*error, NULL); From 5f6beb0e57f6be3cd5deccec7dcee7be6a5ee190 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Tue, 2 Dec 2025 14:50:34 +0100 Subject: [PATCH 021/153] nm-udev-utils: constify strstr-output variable `subsystem_full` is const, so `s` needs to be const too. Reorder the NULL-byte write so that we are not writing into a const char* (the underlying memory is the same). --- src/libnm-udev-aux/nm-udev-utils.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/libnm-udev-aux/nm-udev-utils.c b/src/libnm-udev-aux/nm-udev-utils.c index 744d03ce9e..9e43dd26b9 100644 --- a/src/libnm-udev-aux/nm-udev-utils.c +++ b/src/libnm-udev-aux/nm-udev-utils.c @@ -92,7 +92,8 @@ _subsystem_split(const char *subsystem_full, const char **out_devtype, char **to_free) { - char *tmp, *s; + char *tmp; + const char *s; nm_assert(subsystem_full); nm_assert(out_subsystem); @@ -101,12 +102,12 @@ _subsystem_split(const char *subsystem_full, s = strstr(subsystem_full, "/"); if (s) { - tmp = g_strdup(subsystem_full); - s = &tmp[s - subsystem_full]; - *s = '\0'; - *out_subsystem = tmp; - *out_devtype = &s[1]; - *to_free = tmp; + tmp = g_strdup(subsystem_full); + tmp[s - subsystem_full] = '\0'; + s = &tmp[s - subsystem_full]; + *out_subsystem = tmp; + *out_devtype = &s[1]; + *to_free = tmp; } else { *out_subsystem = subsystem_full; *out_devtype = NULL; From 754b87e1c4fa742959f9c3b52f5c6cac2192fd1b Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Tue, 2 Dec 2025 14:56:20 +0100 Subject: [PATCH 022/153] supplicant: separate input and local value We reallocate this value in the function, which is necessary because we write into it, and the input is const. Move the allocation into a local variable instead of overwriting the input pointer, because we are also pointing to it via `char* s`, which is not const. --- src/core/supplicant/nm-supplicant-settings-verify.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/supplicant/nm-supplicant-settings-verify.c b/src/core/supplicant/nm-supplicant-settings-verify.c index 6e5e44d2f8..cca53d820f 100644 --- a/src/core/supplicant/nm-supplicant-settings-verify.c +++ b/src/core/supplicant/nm-supplicant-settings-verify.c @@ -212,18 +212,19 @@ validate_type_utf8(const struct Opt *opt, const char *value, const guint32 len) } static gboolean -validate_type_keyword(const struct Opt *opt, const char *value, const guint32 len) +validate_type_keyword(const struct Opt *opt, const char *value_in, const guint32 len) { gs_free char *value_free = NULL; + char *value; nm_assert(opt); - nm_assert(value); + nm_assert(value_in); /* Allow everything */ if (!opt->str_allowed) return TRUE; - value = nm_strndup_a(300, value, len, &value_free); + value = nm_strndup_a(300, value_in, len, &value_free); /* validate each space-separated word in 'value' */ From ac427b25fb49b319e8ab0957a5f0b916601e8e0c Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Tue, 2 Dec 2025 14:59:19 +0100 Subject: [PATCH 023/153] core, impl: drop `const` qualifier from split outputs We write into the buffer returned by nm_strsplit_set_full(), even though it is returned as `const char**`. The function description claims this is fine: > * It is however safe and allowed to modify the individual strings in-place, > * like "g_strstrip((char *) iter[0])". Remove the const qualifier via cast so that it does not raise errors. --- src/core/dhcp/nm-dhcp-utils.c | 8 ++++---- src/libnm-core-impl/nm-setting-bridge.c | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/dhcp/nm-dhcp-utils.c b/src/core/dhcp/nm-dhcp-utils.c index 949d87207f..8a9bd58cc6 100644 --- a/src/core/dhcp/nm-dhcp-utils.c +++ b/src/core/dhcp/nm-dhcp-utils.c @@ -32,11 +32,11 @@ ip4_process_dhcpcd_rfc3442_routes(const char *iface, in_addr_t address, guint32 *out_gwaddr) { - gs_free const char **routes = NULL; - const char **r; - gboolean have_routes = FALSE; + gs_free char **routes = NULL; + char **r; + gboolean have_routes = FALSE; - routes = nm_strsplit_set(str, " "); + routes = (char **) nm_strsplit_set(str, " "); if (!routes) return FALSE; diff --git a/src/libnm-core-impl/nm-setting-bridge.c b/src/libnm-core-impl/nm-setting-bridge.c index c161843498..2145741204 100644 --- a/src/libnm-core-impl/nm-setting-bridge.c +++ b/src/libnm-core-impl/nm-setting-bridge.c @@ -472,17 +472,17 @@ nm_bridge_vlan_to_str(const NMBridgeVlan *vlan, GError **error) NMBridgeVlan * nm_bridge_vlan_from_str(const char *str, GError **error) { - NMBridgeVlan *vlan = NULL; - gs_free const char **tokens = NULL; - guint i, vid_start, vid_end = 0; - gboolean pvid = FALSE; - gboolean untagged = FALSE; - char *c; + NMBridgeVlan *vlan = NULL; + gs_free char **tokens = NULL; + guint i, vid_start, vid_end = 0; + gboolean pvid = FALSE; + gboolean untagged = FALSE; + char *c; g_return_val_if_fail(str, NULL); g_return_val_if_fail(!error || !*error, NULL); - tokens = nm_utils_escaped_tokens_split(str, NM_ASCII_SPACES); + tokens = (char **) nm_utils_escaped_tokens_split(str, NM_ASCII_SPACES); if (!tokens || !tokens[0]) { g_set_error_literal(error, NM_CONNECTION_ERROR, From 9e70f31c8cad748cd78e06fc517085822b918bc2 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Tue, 2 Dec 2025 15:03:28 +0100 Subject: [PATCH 024/153] initrd: remove const qualifier from temporary variable `argument` is not const, but `tmp` is. We use `tmp` for reading arguments one by one, but we cannot add a null byte to separate the key and value if it is const. Make it non-const, so that `val[0] = '\0';` does not fail. --- src/nm-initrd-generator/nmi-cmdline-reader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c index 5cdb3bcdb3..f9b0fa161b 100644 --- a/src/nm-initrd-generator/nmi-cmdline-reader.c +++ b/src/nm-initrd-generator/nmi-cmdline-reader.c @@ -1177,7 +1177,7 @@ reader_parse_rd_znet(Reader *reader, char *argument, gboolean net_ifnames) { const char *nettype; const char *subchannels[4] = {0, 0, 0, 0}; - const char *tmp; + char *tmp; gs_free char *ifname = NULL; gs_free char *str_subchannels = NULL; const char *prefix; @@ -1248,8 +1248,8 @@ reader_parse_rd_znet(Reader *reader, char *argument, gboolean net_ifnames) NULL); while ((tmp = get_word(&argument, ',')) != NULL) { - const char *key; - char *val; + char *key; + char *val; val = strchr(tmp, '='); if (!val) { From 8e72e6b4fb5d26aedde939a4c8d0d5aa2f12d0c0 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Wed, 3 Dec 2025 09:40:57 +0100 Subject: [PATCH 025/153] aux-intern: add explicit cast for strchr() `addr` is always reallocated in this branch, so it is safe to cast the result of strchr to char* here to silence the const-qualifier warning. --- src/libnm-core-aux-intern/nm-libnm-core-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2d4546d553..a39f645468 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.c +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.c @@ -825,7 +825,7 @@ nm_dns_uri_parse(int addr_family, const char *str, NMDnsServer *dns, GError **er addr = nm_strndup_a(100, addr_port, end - addr_port, &addr_heap); /* IPv6 link-local scope-id */ - perc = strchr(addr, '%'); + perc = (char *) strchr(addr, '%'); if (perc) { *perc = '\0'; if (g_strlcpy(dns->interface, perc + 1, sizeof(dns->interface)) From d40e88fd02ccbc07a5e0c7e3cb8a75dee830d1b8 Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Wed, 3 Dec 2025 11:19:47 +0100 Subject: [PATCH 026/153] test-link: test bond with use_carrier=1 `use_carrier` is removed from kernel since 6.18 [1], and returns the following error if set to 0: > option obsolete, use_carrier cannot be disabled This causes a failure of test-link-linux, so let's set it to 1. [1] https://lore.kernel.org/all/2029487.1756512517@famine/ --- src/core/platform/tests/test-link.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/platform/tests/test-link.c b/src/core/platform/tests/test-link.c index fab6bd2efe..77e7e64121 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); From dad4da06b1e00ea04145f12268e2345af74ba4e3 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 3 Dec 2025 09:30:15 +0100 Subject: [PATCH 027/153] libnm-core: fix the documentation of the gateway IP property The D-Bus API documentation of the IPv4 and IPv6 settings say: * addresses Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. * gateway The gateway associated with this configuration. This is only meaningful if "addresses" is also set. This documentation wrongly suggests that at D-Bus level "gateway" requires "addresses", while it actually requires "address-data". The reason for the inconsistency is that the gateway documentation is common between nmcli and D-Bus and it refers to the "address" GObject property, not to the D-Bus property. Fix this inconsistency by not explicitly mentioning the property name. Fixes: 36156b70dc06 ('libnm: Override parts of nm-setting-docs.xml') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2319 --- src/libnm-core-impl/nm-setting-ip-config.c | 2 +- src/libnmc-setting/settings-docs.h.in | 4 ++-- src/nmcli/gen-metadata-nm-settings-nmcli.xml.in | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c index 20aca478d8..1aecc20c83 100644 --- a/src/libnm-core-impl/nm-setting-ip-config.c +++ b/src/libnm-core-impl/nm-setting-ip-config.c @@ -6740,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/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index 4e8978cb20..89f8c6d178 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -205,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.") @@ -241,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.") diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in index 949bc6804e..881c41cac8 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in @@ -1357,7 +1357,7 @@ format="list of ipv4.addresses objects" /> Date: Fri, 12 Dec 2025 12:00:31 +0100 Subject: [PATCH 028/153] nm-version: set API_VERSION with MICRO+1 (temporary) In the past, stable branches used odd micro numbers as development micro version. Because of that, NM_API_VERSION was defined with MICRO+1 so we don't get warnings during development. As we stopped using odd micro=devel it is wrong to set MICRO+1 on odd releases. Final users of 1.52.3 has NM_API_VERSION 1.52.4. However, during development we need to have MICRO+1. For example, if we are working on top of 1.52.3 towards the next 1.52.4, we define new symbols with NM_AVAILABLE_IN_1_52_4. Because of that, we get compilation failures until we finally bump to 1.52.4, just before the release. The CI remains red until then, potentially missing many bugs. For now, just set MICRO+1 all the time. It is wrong, but it was wrong half of the time anyway, and at least we'll have a green CI until we implement a definitive solution. --- src/libnm-core-public/nm-version-macros.h.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libnm-core-public/nm-version-macros.h.in b/src/libnm-core-public/nm-version-macros.h.in index 7af10a6f13..e4050e692a 100644 --- a/src/libnm-core-public/nm-version-macros.h.in +++ b/src/libnm-core-public/nm-version-macros.h.in @@ -88,10 +88,10 @@ * 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) / 2) * 2)) +#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)) /* deprecated. */ #define NM_VERSION_CUR_STABLE NM_API_VERSION From 0b75d905e59999539ab1e92a92646b634c221215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Wed, 17 Sep 2025 10:41:15 +0200 Subject: [PATCH 029/153] polkit: remove the modify_system build option This build option allowed non-admin users to create system-wide connections. Generally, this is not a good idea as system-wide changes should be done by administrators. However, the main reason for the change is that this can be used to bypass filesystem permissions, among possibly other attacks. As the daemon runs as root, a user can create a system-wide connection that uses a certificate from a different user to authenticate in a WiFi network protected with 802.1X or a VPN, because as root user the daemon can access to the file. This patch does not completely fix the issue, as users can still create private connections specifying a path to another user's connection. This will be addressed in other patch. However, this patch is needed too, because in system-wide connections we don't store which user created the connection, so there woudn't be any way to check his/her permissions. This is part of the fix for CVE-2025-9615 See: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1809 --- .gitignore | 1 - NEWS | 4 ++++ contrib/fedora/rpm/NetworkManager.spec | 1 - contrib/fedora/rpm/configure-for-system.sh | 1 - data/meson.build | 10 +--------- ...=> org.freedesktop.NetworkManager.policy.in} | 4 ++-- meson.build | 17 +++++------------ meson_options.txt | 2 +- po/POTFILES.in | 2 +- 9 files changed, 14 insertions(+), 28 deletions(-) rename data/{org.freedesktop.NetworkManager.policy.in.in => org.freedesktop.NetworkManager.policy.in} (98%) diff --git a/.gitignore b/.gitignore index bf962c8abe..f793204262 100644 --- a/.gitignore +++ b/.gitignore @@ -81,7 +81,6 @@ test-*.trs /data/org.freedesktop.NetworkManager.service /data/server.conf /data/org.freedesktop.NetworkManager.policy -/data/org.freedesktop.NetworkManager.policy.in /data/nm-sudo.service /data/nm-priv-helper.service /data/NetworkManager-config-initrd.service diff --git a/NEWS b/NEWS index f9f1832be4..c93798c62b 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,10 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! * Install the systemd units in the initramfs using a systemd generator. * A new "check-connectivity" configuration option is available to disable the connectivity check for selected interfaces. +* Remove the modify_system build option that allowed setting up the + polkit permissions to allow non-admin users to create system-wide + connection. That configuration is discouraged because it can be used + to bypass filesystem permissions. ============================================= NetworkManager-1.56 diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 820cfda607..bfcc1089ae 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -665,7 +665,6 @@ Preferably use nmcli instead. -Dselinux=true \ -Dpolkit=true \ -Dconfig_auth_polkit_default=true \ - -Dmodify_system=true \ -Dconcheck=true \ %if 0%{?fedora} -Dlibpsl=true \ diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh index e52e372bca..62999b11b5 100755 --- a/contrib/fedora/rpm/configure-for-system.sh +++ b/contrib/fedora/rpm/configure-for-system.sh @@ -401,7 +401,6 @@ meson setup\ -Dselinux=true \ -Dpolkit=true \ -Dconfig_auth_polkit_default=true \ - -Dmodify_system=true \ -Dconcheck=true \ -Dlibpsl="$(bool_true "$P_FEDORA")" \ -Dsession_tracking=systemd \ diff --git a/data/meson.build b/data/meson.build index b77bf4340c..afe1800b56 100644 --- a/data/meson.build +++ b/data/meson.build @@ -55,16 +55,8 @@ if install_udevdir endif if enable_polkit - policy = 'org.freedesktop.NetworkManager.policy' - - policy_in = configure_file( - input: policy + '.in.in', - output: '@BASENAME@', - configuration: data_conf, - ) - i18n.merge_file( - input: policy_in, + input: 'org.freedesktop.NetworkManager.policy.in', output: '@BASENAME@', po_dir: po_dir, install: true, diff --git a/data/org.freedesktop.NetworkManager.policy.in.in b/data/org.freedesktop.NetworkManager.policy.in similarity index 98% rename from data/org.freedesktop.NetworkManager.policy.in.in rename to data/org.freedesktop.NetworkManager.policy.in index 13a0a5b504..cb143a2dd2 100644 --- a/data/org.freedesktop.NetworkManager.policy.in.in +++ b/data/org.freedesktop.NetworkManager.policy.in @@ -117,8 +117,8 @@ System policy prevents modification of network settings for all users auth_admin_keep - @NM_MODIFY_SYSTEM_POLICY@ - @NM_MODIFY_SYSTEM_POLICY@ + auth_admin_keep + auth_admin_keep diff --git a/meson.build b/meson.build index 56bbe28163..49f5b4214a 100644 --- a/meson.build +++ b/meson.build @@ -519,6 +519,10 @@ endif config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_AUTH_POLKIT', config_auth_polkit_default) enable_modify_system = get_option('modify_system') +if enable_modify_system + # FIXME: remove this after everyone has stopped using modify_system + error('modify_system=true is no longer allowed due to security reasons') +endif polkit_agent_helper_1_path = get_option('polkit_agent_helper_1') foreach p : [ '/usr/libexec/polkit-agent-helper-1', @@ -951,7 +955,6 @@ data_conf.set('NM_DHCP_CLIENTS_ENABLED', ', '.join(config_dhcp_c data_conf.set('NM_MAJOR_VERSION', nm_major_version) data_conf.set('NM_MICRO_VERSION', nm_micro_version) data_conf.set('NM_MINOR_VERSION', nm_minor_version) -data_conf.set('NM_MODIFY_SYSTEM_POLICY', (enable_modify_system ? 'yes' : 'auth_admin_keep')) data_conf.set('NM_VERSION', nm_version) data_conf.set('VERSION', nm_version) data_conf.set('bindir', nm_bindir) @@ -1082,17 +1085,7 @@ output += ' dbus_conf_dir: ' + dbus_conf_dir + '\n' output += '\nPlatform:\n' output += ' session tracking: ' + ','.join(session_trackers) + '\n' output += ' suspend/resume: ' + suspend_resume + '\n' -output += ' policykit: ' + enable_polkit.to_string() + ' (default: ' + config_auth_polkit_default + ')' -if enable_polkit - output += ' (' - if enable_modify_system - output += 'permissive' - else - output += 'restrictive' - endif - output += ' modify.system)' -endif -output += '\n' +output += ' policykit: ' + enable_polkit.to_string() + ' (default: ' + config_auth_polkit_default + ')\n' output += ' polkit-agent-helper-1: ' + polkit_agent_helper_1_path + '\n' output += ' selinux: ' + enable_selinux.to_string() + '\n' output += ' systemd-journald: ' + enable_systemd_journal.to_string() + ' (default: logging.backend=' + config_logging_backend_default + ')\n' diff --git a/meson_options.txt b/meson_options.txt index 8ec68a46bd..44d50c6a7a 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -19,7 +19,7 @@ option('session_tracking', type: 'combo', choices: ['systemd', 'elogind', 'no'], option('suspend_resume', type: 'combo', choices: ['systemd', 'elogind', 'consolekit', 'auto'], value: 'auto', description: 'Build NetworkManager with specific suspend/resume support') option('polkit', type: 'boolean', value: true, description: 'User auth-polkit configuration option.') option('config_auth_polkit_default', type: 'combo', choices: ['default', 'true', 'false', 'root-only'], value: 'default', description: 'Default value for configuration main.auth-polkit.') -option('modify_system', type: 'boolean', value: false, description: 'Allow users to modify system connections') +option('modify_system', type: 'boolean', value: false, description: 'Allow users to modify system connections (option no longer supported, don\'t use)') option('polkit_agent_helper_1', type: 'string', value: '', description: 'Path name to the polkit-agent-helper-1 binary from polkit') option('selinux', type: 'boolean', value: true, description: 'Build with SELinux') option('systemd_journal', type: 'boolean', value: true, description: 'Use systemd journal for logging') diff --git a/po/POTFILES.in b/po/POTFILES.in index feeaf9ebbe..20bd8f253a 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,6 +1,6 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. -data/org.freedesktop.NetworkManager.policy.in.in +data/org.freedesktop.NetworkManager.policy.in src/core/NetworkManagerUtils.c src/core/devices/adsl/nm-device-adsl.c src/core/devices/bluetooth/nm-bluez-manager.c From 39143f8bdd1a0fa65e95f57e0487457d33db07d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Wed, 17 Sep 2025 14:31:50 +0200 Subject: [PATCH 030/153] polkit: add build option to allow admin users not to type their password Add a build option to allow installing a Polkit rule that will grant permissions for admin users without asking for their password if they're in a local console. This shouldn't be encouraged, though. It's common practice that admin users has to introduce their password to make system-wide changes. The standard polkit policy, without this rule, is auth_admin_keep. This policy will ask for the password once and won't ask for it again for ~5 minutes, so it is not too unconvenient. Different distros use different group names for users with admin rights, typically 'sudo' or 'wheel'. The build option allows to define the desired group, or to leave it empty to not install the rule. However, until the previous commit it was allowed that local users (even non-admin) could do system-wide changes without introducing a password. This option allows to maintain the same behavior for admin users, keeping backwards compatibility so we avoid breaking existing scripts, for example. We cannot achieve the same for non-admin users because allowing them to create system-wide connection causes security vulnerabilities that cannot be fixed in any other way. --- data/meson.build | 11 ++++++++++- data/org.freedesktop.NetworkManager.rules.in | 17 +++++++++++++++++ meson.build | 7 +++++-- meson_options.txt | 1 + 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 data/org.freedesktop.NetworkManager.rules.in diff --git a/data/meson.build b/data/meson.build index afe1800b56..3e292cb2f4 100644 --- a/data/meson.build +++ b/data/meson.build @@ -60,8 +60,17 @@ if enable_polkit output: '@BASENAME@', po_dir: po_dir, install: true, - install_dir: polkit_gobject_policydir, + install_dir: polkit_policydir, ) + + if polkit_noauth_group != '' + configure_file( + input: 'org.freedesktop.NetworkManager.rules.in', + output: '@BASENAME@', + install_dir: polkit_rulesdir, + configuration: {'NM_POLKIT_NOAUTH_GROUP': polkit_noauth_group}, + ) + endif endif if enable_firewalld_zone diff --git a/data/org.freedesktop.NetworkManager.rules.in b/data/org.freedesktop.NetworkManager.rules.in new file mode 100644 index 0000000000..d6df0b323e --- /dev/null +++ b/data/org.freedesktop.NetworkManager.rules.in @@ -0,0 +1,17 @@ +// NetworkManager authorizations/policy for the @NM_POLKIT_NOAUTH_GROUP@ group. +// +// DO NOT EDIT THIS FILE, it will be overwritten on update. +// +// Allow users in the @NM_POLKIT_NOAUTH_GROUP@ group to create system-wide connections without being +// prompted for a password if they are in a local console. +// This is optional and is only recommended to maintain backwards compatibility +// in systems where it was already working in this way. It is discouraged +// otherwise. + +polkit.addRule(function(action, subject) { + if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && + subject.isInGroup("@NM_POLKIT_NOAUTH_GROUP@") && + subject.local) { + return polkit.Result.YES; + } +}); diff --git a/meson.build b/meson.build index 49f5b4214a..00a50cc64e 100644 --- a/meson.build +++ b/meson.build @@ -509,7 +509,8 @@ config_h.set10('WITH_TEAMDCTL', enable_teamdctl) enable_polkit = get_option('polkit') if enable_polkit # FIXME: policydir should be relative to `datadir`, not `prefix`. Fixed in https://gitlab.freedesktop.org/polkit/polkit/merge_requests/2 - polkit_gobject_policydir = dependency('polkit-gobject-1').get_variable(pkgconfig: 'policydir', pkgconfig_define: ['prefix', nm_prefix]) + polkit_policydir = dependency('polkit-gobject-1').get_variable(pkgconfig: 'policydir', pkgconfig_define: ['prefix', nm_prefix]) + polkit_rulesdir = join_paths(fs.parent(polkit_policydir), 'rules.d') endif config_auth_polkit_default = get_option('config_auth_polkit_default') @@ -524,6 +525,8 @@ if enable_modify_system error('modify_system=true is no longer allowed due to security reasons') endif +polkit_noauth_group = get_option('polkit_noauth_group') + polkit_agent_helper_1_path = get_option('polkit_agent_helper_1') foreach p : [ '/usr/libexec/polkit-agent-helper-1', '/usr/lib/polkit-1/polkit-agent-helper-1', @@ -1085,7 +1088,7 @@ output += ' dbus_conf_dir: ' + dbus_conf_dir + '\n' output += '\nPlatform:\n' output += ' session tracking: ' + ','.join(session_trackers) + '\n' output += ' suspend/resume: ' + suspend_resume + '\n' -output += ' policykit: ' + enable_polkit.to_string() + ' (default: ' + config_auth_polkit_default + ')\n' +output += ' policykit: ' + enable_polkit.to_string() + ' (default: ' + config_auth_polkit_default + ', noauth_group: "' + polkit_noauth_group + '")\n' output += ' polkit-agent-helper-1: ' + polkit_agent_helper_1_path + '\n' output += ' selinux: ' + enable_selinux.to_string() + '\n' output += ' systemd-journald: ' + enable_systemd_journal.to_string() + ' (default: logging.backend=' + config_logging_backend_default + ')\n' diff --git a/meson_options.txt b/meson_options.txt index 44d50c6a7a..6b5674443b 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -20,6 +20,7 @@ option('suspend_resume', type: 'combo', choices: ['systemd', 'elogind', 'console option('polkit', type: 'boolean', value: true, description: 'User auth-polkit configuration option.') option('config_auth_polkit_default', type: 'combo', choices: ['default', 'true', 'false', 'root-only'], value: 'default', description: 'Default value for configuration main.auth-polkit.') option('modify_system', type: 'boolean', value: false, description: 'Allow users to modify system connections (option no longer supported, don\'t use)') +option('polkit_noauth_group', type: 'string', value: '', description: 'Allow users of the selected group, typically sudo or wheel, to modify system connections without introducing a password (discouraged)') option('polkit_agent_helper_1', type: 'string', value: '', description: 'Path name to the polkit-agent-helper-1 binary from polkit') option('selinux', type: 'boolean', value: true, description: 'Build with SELinux') option('systemd_journal', type: 'boolean', value: true, description: 'Use systemd journal for logging') From d8f143f60146e847c673acceb1102417c3cd85a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Thu, 18 Sep 2025 09:29:40 +0200 Subject: [PATCH 031/153] spec: enable polkit_noauth_group for Fedora <= 43 and RHEL <= 10 In Fedora 44 and RHEL 11, admin users will need to type their password even on local consoles. --- contrib/fedora/rpm/NetworkManager.spec | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index bfcc1089ae..bb2adca0e7 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -107,6 +107,11 @@ %else %bcond_without iwd %endif +%if 0%{?fedora} <= 43 || 0%{?rhel} <= 10 +%bcond_without polkit_noauth_group +%else +%bcond_with polkit_noauth_group +%endif ############################################################################### @@ -665,6 +670,9 @@ Preferably use nmcli instead. -Dselinux=true \ -Dpolkit=true \ -Dconfig_auth_polkit_default=true \ +%if %{with polkit_noauth_group} + -Dpolkit_noauth_group=wheel \ +%endif -Dconcheck=true \ %if 0%{?fedora} -Dlibpsl=true \ @@ -912,6 +920,9 @@ fi %{_datadir}/dbus-1/system-services/org.freedesktop.nm_dispatcher.service %{_datadir}/dbus-1/system-services/org.freedesktop.nm_priv_helper.service %{_datadir}/polkit-1/actions/*.policy +%if %{with polkit_noauth_group} +%{_datadir}/polkit-1/rules.d/org.freedesktop.NetworkManager.rules +%endif %{_prefix}/lib/udev/rules.d/*.rules %{_prefix}/lib/firewalld/zones/nm-shared.xml # systemd stuff From 2739850b7842b488db7516f9b392f45f36bc596c Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 10 Oct 2025 11:44:55 +0200 Subject: [PATCH 032/153] libnm-core, core: add permission helpers Add utility functions to get the number of users and the first user from the connection.permissions property of a connection. --- src/core/nm-core-utils.c | 11 ++++++ src/core/nm-core-utils.h | 4 ++ src/libnm-core-impl/nm-setting-connection.c | 41 +++++++++++++++++++++ src/libnm-core-intern/nm-core-internal.h | 5 +++ 4 files changed, 61 insertions(+) diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index b68b5b7390..32312e8e9d 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -5624,3 +5624,14 @@ nm_rate_limit_check(NMRateLimit *rate_limit, gint32 window_sec, gint32 burst) return FALSE; } + +const char * +nm_utils_get_connection_first_permissions_user(NMConnection *connection) +{ + NMSettingConnection *s_con; + + s_con = nm_connection_get_setting_connection(connection); + nm_assert(s_con); + + return _nm_setting_connection_get_first_permissions_user(s_con); +} diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index 841616a414..e30d6ce657 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -503,4 +503,8 @@ typedef struct { gboolean nm_rate_limit_check(NMRateLimit *rate_limit, gint32 window_sec, gint32 burst); +/*****************************************************************************/ + +const char *nm_utils_get_connection_first_permissions_user(NMConnection *connection); + #endif /* __NM_CORE_UTILS_H__ */ diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index 4f25533c07..0ad97846df 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -433,6 +433,47 @@ nm_setting_connection_permissions_user_allowed_by_uid(NMSettingConnection *setti return _permissions_user_allowed(setting, NULL, uid); } +guint +_nm_setting_connection_get_num_permissions_users(NMSettingConnection *setting) +{ + NMSettingConnectionPrivate *priv; + guint i; + guint count = 0; + + nm_assert(NM_IS_SETTING_CONNECTION(setting)); + priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); + + for (i = 0; priv->permissions && i < priv->permissions->len; i++) { + const Permission *permission = &nm_g_array_index(priv->permissions, Permission, i); + + if (permission->ptype == PERM_TYPE_USER) { + count++; + } + } + + return count; +} + +const char * +_nm_setting_connection_get_first_permissions_user(NMSettingConnection *setting) +{ + NMSettingConnectionPrivate *priv; + guint i; + + nm_assert(NM_IS_SETTING_CONNECTION(setting)); + priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); + + for (i = 0; priv->permissions && i < priv->permissions->len; i++) { + const Permission *permission = &nm_g_array_index(priv->permissions, Permission, i); + + if (permission->ptype == PERM_TYPE_USER) { + return permission->item; + } + } + + return NULL; +} + /** * nm_setting_connection_add_permission: * @setting: the #NMSettingConnection diff --git a/src/libnm-core-intern/nm-core-internal.h b/src/libnm-core-intern/nm-core-internal.h index 8b23dd44cc..6991185d39 100644 --- a/src/libnm-core-intern/nm-core-internal.h +++ b/src/libnm-core-intern/nm-core-internal.h @@ -1187,4 +1187,9 @@ gboolean nm_connection_need_secrets_for_rerequest(NMConnection *connection); const GPtrArray *_nm_setting_ovs_port_get_trunks_arr(NMSettingOvsPort *self); +/*****************************************************************************/ + +guint _nm_setting_connection_get_num_permissions_users(NMSettingConnection *setting); +const char *_nm_setting_connection_get_first_permissions_user(NMSettingConnection *setting); + #endif From 6c1e04fc61eeb3526c9e91f1c36bf9bc44a478c3 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 2 Oct 2025 16:29:35 +0200 Subject: [PATCH 033/153] helpers: move helper programs to the same directory Create a new 'nm-helpers' directory for all the helper programs, to avoid having too many subdirs in the src directory. --- src/meson.build | 3 +-- src/nm-daemon-helper/README.md | 11 ---------- src/nm-daemon-helper/meson.build | 15 -------------- src/{nm-priv-helper => nm-helpers}/README.md | 20 ++++++++++++++++++- .../meson.build | 20 +++++++++++++++++++ .../nm-daemon-helper.c | 0 .../nm-priv-helper.c | 0 .../nm-priv-helper.conf | 0 .../org.freedesktop.nm_priv_helper.service.in | 0 9 files changed, 40 insertions(+), 29 deletions(-) delete mode 100644 src/nm-daemon-helper/README.md delete mode 100644 src/nm-daemon-helper/meson.build rename src/{nm-priv-helper => nm-helpers}/README.md (64%) rename src/{nm-priv-helper => nm-helpers}/meson.build (67%) rename src/{nm-daemon-helper => nm-helpers}/nm-daemon-helper.c (100%) rename src/{nm-priv-helper => nm-helpers}/nm-priv-helper.c (100%) rename src/{nm-priv-helper => nm-helpers}/nm-priv-helper.conf (100%) rename src/{nm-priv-helper => nm-helpers}/org.freedesktop.nm_priv_helper.service.in (100%) diff --git a/src/meson.build b/src/meson.build index a5b3441ba7..7c02080952 100644 --- a/src/meson.build +++ b/src/meson.build @@ -103,8 +103,7 @@ if enable_nmtui endif subdir('nmcli') subdir('nm-dispatcher') -subdir('nm-priv-helper') -subdir('nm-daemon-helper') +subdir('nm-helpers') subdir('nm-online') if enable_nmtui subdir('nmtui') diff --git a/src/nm-daemon-helper/README.md b/src/nm-daemon-helper/README.md deleted file mode 100644 index 695f533553..0000000000 --- a/src/nm-daemon-helper/README.md +++ /dev/null @@ -1,11 +0,0 @@ -nm-daemon-helper -================ - -A internal helper application that is spawned by NetworkManager -to perform certain actions. - -Currently all it does is doing a reverse DNS lookup, which -cannot be done by NetworkManager because the operation requires -to reconfigure the libc resolver (which is a process-wide operation). - -This is not directly useful to the user. diff --git a/src/nm-daemon-helper/meson.build b/src/nm-daemon-helper/meson.build deleted file mode 100644 index da0d6571e1..0000000000 --- a/src/nm-daemon-helper/meson.build +++ /dev/null @@ -1,15 +0,0 @@ -executable( - 'nm-daemon-helper', - 'nm-daemon-helper.c', - include_directories : [ - src_inc, - top_inc, - ], - link_with: [ - libnm_std_aux, - ], - link_args: ldflags_linker_script_binary, - link_depends: linker_script_binary, - install: true, - install_dir: nm_libexecdir, -) diff --git a/src/nm-priv-helper/README.md b/src/nm-helpers/README.md similarity index 64% rename from src/nm-priv-helper/README.md rename to src/nm-helpers/README.md index 576da7a70b..ccaa5bf5cd 100644 --- a/src/nm-priv-helper/README.md +++ b/src/nm-helpers/README.md @@ -1,5 +1,23 @@ +nm-helpers +========== + +This directory contains stand-alone helper programs used by various +components. + +nm-daemon-helper +---------------- + +A internal helper application that is spawned by NetworkManager +to perform certain actions. + +Currently all it does is doing a reverse DNS lookup, which +cannot be done by NetworkManager because the operation requires +to reconfigure the libc resolver (which is a process-wide operation). + +This is not directly useful to the user. + nm-priv-helper -============== +-------------- This is a D-Bus activatable, exit-on-idle service, which provides an internal API to NetworkManager daemon. diff --git a/src/nm-priv-helper/meson.build b/src/nm-helpers/meson.build similarity index 67% rename from src/nm-priv-helper/meson.build rename to src/nm-helpers/meson.build index 6141e0e207..5f330cbc94 100644 --- a/src/nm-priv-helper/meson.build +++ b/src/nm-helpers/meson.build @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# nm-daemon-helper + +executable( + 'nm-daemon-helper', + 'nm-daemon-helper.c', + include_directories : [ + src_inc, + top_inc, + ], + link_with: [ + libnm_std_aux, + ], + link_args: ldflags_linker_script_binary, + link_depends: linker_script_binary, + install: true, + install_dir: nm_libexecdir, +) + +# nm-priv-helper + configure_file( input: 'org.freedesktop.nm_priv_helper.service.in', output: '@BASENAME@', diff --git a/src/nm-daemon-helper/nm-daemon-helper.c b/src/nm-helpers/nm-daemon-helper.c similarity index 100% rename from src/nm-daemon-helper/nm-daemon-helper.c rename to src/nm-helpers/nm-daemon-helper.c diff --git a/src/nm-priv-helper/nm-priv-helper.c b/src/nm-helpers/nm-priv-helper.c similarity index 100% rename from src/nm-priv-helper/nm-priv-helper.c rename to src/nm-helpers/nm-priv-helper.c diff --git a/src/nm-priv-helper/nm-priv-helper.conf b/src/nm-helpers/nm-priv-helper.conf similarity index 100% rename from src/nm-priv-helper/nm-priv-helper.conf rename to src/nm-helpers/nm-priv-helper.conf diff --git a/src/nm-priv-helper/org.freedesktop.nm_priv_helper.service.in b/src/nm-helpers/org.freedesktop.nm_priv_helper.service.in similarity index 100% rename from src/nm-priv-helper/org.freedesktop.nm_priv_helper.service.in rename to src/nm-helpers/org.freedesktop.nm_priv_helper.service.in From 41e28b900f59c23c6bef059164371eb36ae8e586 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 29 Sep 2025 09:52:51 +0200 Subject: [PATCH 034/153] daemon-helper: add read-file-as-user Add a new command to read the content of a file after switching to the given user. This command can be used to enforce Unix filesystem permissions when accessing a file on behalf of a user. --- src/libnm-std-aux/nm-std-utils.c | 114 +++++++++++++++++++++++++++++- src/libnm-std-aux/nm-std-utils.h | 4 ++ src/nm-helpers/README.md | 11 +-- src/nm-helpers/nm-daemon-helper.c | 33 +++++++++ 4 files changed, 156 insertions(+), 6 deletions(-) diff --git a/src/libnm-std-aux/nm-std-utils.c b/src/libnm-std-aux/nm-std-utils.c index 8bc109f2e2..6c909dfab3 100644 --- a/src/libnm-std-aux/nm-std-utils.c +++ b/src/libnm-std-aux/nm-std-utils.c @@ -4,10 +4,14 @@ #include "nm-std-utils.h" -#include #include +#include +#include #include #include +#include +#include +#include /*****************************************************************************/ @@ -95,6 +99,114 @@ out_huge: /*****************************************************************************/ +bool +nm_utils_set_effective_user(const char *user, char *errbuf, size_t errbuf_len) +{ + struct passwd *pwentry; + int errsv; + char error[1024]; + + errno = 0; + pwentry = getpwnam(user); + if (!pwentry) { + errsv = errno; + if (errsv == 0) { + snprintf(errbuf, errbuf_len, "user not found"); + } else { + snprintf(errbuf, + errbuf_len, + "error getting user entry: %d (%s)\n", + errsv, + strerror_r(errsv, error, sizeof(error))); + } + return false; + } + + if (setgid(pwentry->pw_gid) != 0) { + errsv = errno; + snprintf(errbuf, + errbuf_len, + "failed to change group to %u: %d (%s)\n", + pwentry->pw_gid, + errsv, + strerror_r(errsv, error, sizeof(error))); + return false; + } + + if (initgroups(user, pwentry->pw_gid) != 0) { + errsv = errno; + snprintf(errbuf, + errbuf_len, + "failed to reset supplementary group list to %u: %d (%s)\n", + pwentry->pw_gid, + errsv, + strerror_r(errsv, error, sizeof(error))); + return false; + } + + if (setuid(pwentry->pw_uid) != 0) { + errsv = errno; + snprintf(errbuf, + errbuf_len, + "failed to change user to %u: %d (%s)\n", + pwentry->pw_uid, + errsv, + strerror_r(errsv, error, sizeof(error))); + return false; + } + + return true; +} + +/*****************************************************************************/ + +bool +nm_utils_read_file_to_stdout(const char *filename, char *errbuf, size_t errbuf_len) +{ + nm_auto_close int fd = -1; + char buffer[4096]; + char error[1024]; + ssize_t bytes_read; + int errsv; + + fd = open(filename, O_RDONLY); + if (fd == -1) { + errsv = errno; + snprintf(errbuf, + errbuf_len, + "error opening the file: %d (%s)", + errsv, + strerror_r(errsv, error, sizeof(error))); + return false; + } + + while ((bytes_read = read(fd, buffer, sizeof(buffer))) > 0) { + if (fwrite(buffer, 1, bytes_read, stdout) != (size_t) bytes_read) { + errsv = errno; + snprintf(errbuf, + errbuf_len, + "error writing to stdout: %d (%s)", + errsv, + strerror_r(errsv, error, sizeof(error))); + return false; + } + } + + if (bytes_read < 0) { + errsv = errno; + snprintf(errbuf, + errbuf_len, + "error reading the file: %d (%s)", + errsv, + strerror_r(errsv, error, sizeof(error))); + return false; + } + + return true; +} + +/*****************************************************************************/ + /** * _nm_strerror_r: * @errsv: the errno passed to strerror_r() diff --git a/src/libnm-std-aux/nm-std-utils.h b/src/libnm-std-aux/nm-std-utils.h index 015444c93d..04c61c30f5 100644 --- a/src/libnm-std-aux/nm-std-utils.h +++ b/src/libnm-std-aux/nm-std-utils.h @@ -37,4 +37,8 @@ size_t nm_utils_get_next_realloc_size(bool true_realloc, size_t requested); const char *_nm_strerror_r(int errsv, char *buf, size_t buf_size); +bool nm_utils_set_effective_user(const char *user, char *errbuf, size_t errbuf_size); + +bool nm_utils_read_file_to_stdout(const char *filename, char *errbuf, size_t errbuf_len); + #endif /* __NM_STD_UTILS_H__ */ diff --git a/src/nm-helpers/README.md b/src/nm-helpers/README.md index ccaa5bf5cd..ab0ea02444 100644 --- a/src/nm-helpers/README.md +++ b/src/nm-helpers/README.md @@ -7,12 +7,13 @@ components. nm-daemon-helper ---------------- -A internal helper application that is spawned by NetworkManager -to perform certain actions. +A internal helper application that is spawned by NetworkManager to +perform certain actions which can't be done in the daemon. -Currently all it does is doing a reverse DNS lookup, which -cannot be done by NetworkManager because the operation requires -to reconfigure the libc resolver (which is a process-wide operation). +Currently it's used to do a reverse DNS lookup after reconfiguring the +libc resolver (which is a process-wide operation), and to read files +on behalf of unprivileged users (which requires a seteuid that affects +all the threads of the process). This is not directly useful to the user. diff --git a/src/nm-helpers/nm-daemon-helper.c b/src/nm-helpers/nm-daemon-helper.c index 32be93a4ef..759993a451 100644 --- a/src/nm-helpers/nm-daemon-helper.c +++ b/src/nm-helpers/nm-daemon-helper.c @@ -137,6 +137,37 @@ cmd_resolve_address(void) return RETURN_ERROR; } +static int +cmd_read_file_as_user(void) +{ + nm_auto_free char *user = NULL; + nm_auto_free char *filename = NULL; + char error[1024]; + + user = read_arg(); + if (!user) + return RETURN_INVALID_ARGS; + + filename = read_arg(); + if (!filename) + return RETURN_INVALID_ARGS; + + if (more_args()) + return RETURN_INVALID_ARGS; + + if (!nm_utils_set_effective_user(user, error, sizeof(error))) { + fprintf(stderr, "Failed to set effective user '%s': %s", user, error); + return RETURN_ERROR; + } + + if (!nm_utils_read_file_to_stdout(filename, error, sizeof(error))) { + fprintf(stderr, "Failed to read file '%s' as user '%s': %s", filename, user, error); + return RETURN_ERROR; + } + + return RETURN_SUCCESS; +} + int main(int argc, char **argv) { @@ -150,6 +181,8 @@ main(int argc, char **argv) return cmd_version(); if (nm_streq(cmd, "resolve-address")) return cmd_resolve_address(); + if (nm_streq(cmd, "read-file-as-user")) + return cmd_read_file_as_user(); return RETURN_INVALID_CMD; } From bd2484d1a9d4e8c999855ba33901bf67fc057ae4 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 16 Sep 2025 16:56:00 +0200 Subject: [PATCH 035/153] supplicant: remove blobs before adding new ones When connecting, we add the blobs to the Interface object of the supplicant. Those blobs are not removed on disconnect and so when we try to add blobs with the same id, the supplicant returns an error. Make sure we start from a clean slate on each connection attempt, by deleting all existing blobs. Probably we should also delete the added blobs on disconnect, but that's left for a future improvement. --- src/core/supplicant/nm-supplicant-interface.c | 191 +++++++++++++++--- 1 file changed, 159 insertions(+), 32 deletions(-) diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c index 40fb71700e..4476c7015a 100644 --- a/src/core/supplicant/nm-supplicant-interface.c +++ b/src/core/supplicant/nm-supplicant-interface.c @@ -46,6 +46,7 @@ typedef struct { gpointer user_data; guint fail_on_idle_id; guint blobs_left; + guint remove_blobs_left; guint calls_left; struct _AddNetworkData *add_network_data; } AssocData; @@ -2266,6 +2267,7 @@ assoc_add_blob_cb(GObject *source, GAsyncResult *result, gpointer user_data) return; } + nm_assert(priv->assoc_data->blobs_left > 0); priv->assoc_data->blobs_left--; _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: blob added (%u left)", NM_HASH_OBFUSCATE_PTR(priv->assoc_data), @@ -2274,6 +2276,148 @@ assoc_add_blob_cb(GObject *source, GAsyncResult *result, gpointer user_data) assoc_call_select_network(self); } +static void +assoc_add_blobs(NMSupplicantInterface *self) +{ + NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE(self); + GHashTable *blobs; + GHashTableIter iter; + const char *blob_name; + GBytes *blob_data; + + blobs = nm_supplicant_config_get_blobs(priv->assoc_data->cfg); + priv->assoc_data->blobs_left = nm_g_hash_table_size(blobs); + + _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: need to add %u blobs", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + priv->assoc_data->blobs_left); + + if (priv->assoc_data->blobs_left == 0) { + assoc_call_select_network(self); + return; + } + + g_hash_table_iter_init(&iter, blobs); + while (g_hash_table_iter_next(&iter, (gpointer) &blob_name, (gpointer) &blob_data)) { + _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: adding blob '%s'", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + blob_name); + _dbus_connection_call( + self, + NM_WPAS_DBUS_IFACE_INTERFACE, + "AddBlob", + g_variant_new("(s@ay)", blob_name, nm_g_bytes_to_variant_ay(blob_data)), + G_VARIANT_TYPE("()"), + G_DBUS_CALL_FLAGS_NONE, + DBUS_TIMEOUT_MSEC, + priv->assoc_data->cancellable, + assoc_add_blob_cb, + self); + } +} + +static void +assoc_remove_blob_cb(GObject *source, GAsyncResult *result, gpointer user_data) +{ + NMSupplicantInterface *self; + NMSupplicantInterfacePrivate *priv; + gs_free_error GError *error = NULL; + gs_unref_variant GVariant *res = NULL; + + res = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), result, &error); + if (nm_utils_error_is_cancelled(error)) + return; + + self = NM_SUPPLICANT_INTERFACE(user_data); + priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE(self); + + /* We don't consider a failure fatal. The new association might be able + * to proceed even with the existing blobs, if they don't conflict with new + * ones. */ + + nm_assert(priv->assoc_data->remove_blobs_left > 0); + priv->assoc_data->remove_blobs_left--; + + if (error) { + g_dbus_error_strip_remote_error(error); + _LOGD("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: failed to delete blob: %s", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + error->message); + } else { + _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: blob removed (%u left)", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + priv->assoc_data->remove_blobs_left); + } + + if (priv->assoc_data->remove_blobs_left == 0) + assoc_add_blobs(self); +} + +static void +assoc_get_blobs_cb(GObject *source, GAsyncResult *result, gpointer user_data) +{ + NMSupplicantInterface *self; + NMSupplicantInterfacePrivate *priv; + gs_free_error GError *error = NULL; + gs_unref_variant GVariant *res = NULL; + gs_unref_variant GVariant *value = NULL; + GVariantIter iter; + const char *blob_name; + GVariant *blob_data; + + res = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), result, &error); + if (nm_utils_error_is_cancelled(error)) + return; + + self = NM_SUPPLICANT_INTERFACE(user_data); + priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE(self); + + if (error) { + _LOGD("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: failed to get blob list: %s", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + error->message); + assoc_add_blobs(self); + return; + } + + g_variant_get(res, "(v)", &value); + + /* While the "Blobs" property is documented as type "as", it is actually "a{say}" */ + if (!value || !g_variant_is_of_type(value, G_VARIANT_TYPE("a{say}"))) { + _LOGD("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: failed to get blob list: wrong return type %s", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + value ? g_variant_get_type_string(value) : "NULL"); + assoc_add_blobs(self); + return; + } + + g_variant_iter_init(&iter, value); + priv->assoc_data->remove_blobs_left = g_variant_iter_n_children(&iter); + _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: need to delete %u blobs", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + priv->assoc_data->remove_blobs_left); + + if (priv->assoc_data->remove_blobs_left == 0) { + assoc_add_blobs(self); + } else { + while (g_variant_iter_loop(&iter, "{&s@ay}", &blob_name, &blob_data)) { + _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: removing blob '%s'", + NM_HASH_OBFUSCATE_PTR(priv->assoc_data), + blob_name); + _dbus_connection_call(self, + NM_WPAS_DBUS_IFACE_INTERFACE, + "RemoveBlob", + g_variant_new("(s)", blob_name), + G_VARIANT_TYPE("()"), + G_DBUS_CALL_FLAGS_NONE, + DBUS_TIMEOUT_MSEC, + priv->assoc_data->cancellable, + assoc_remove_blob_cb, + self); + } + } +} + static void assoc_add_network_cb(GObject *source, GAsyncResult *result, gpointer user_data) { @@ -2281,12 +2425,8 @@ assoc_add_network_cb(GObject *source, GAsyncResult *result, gpointer user_data) AssocData *assoc_data; NMSupplicantInterface *self; NMSupplicantInterfacePrivate *priv; - gs_unref_variant GVariant *res = NULL; - gs_free_error GError *error = NULL; - GHashTable *blobs; - GHashTableIter iter; - const char *blob_name; - GBytes *blob_data; + gs_unref_variant GVariant *res = NULL; + gs_free_error GError *error = NULL; nm_auto_ref_string NMRefString *name_owner = NULL; nm_auto_ref_string NMRefString *object_path = NULL; @@ -2338,34 +2478,21 @@ assoc_add_network_cb(GObject *source, GAsyncResult *result, gpointer user_data) nm_assert(!priv->net_path); g_variant_get(res, "(o)", &priv->net_path); - /* Send blobs first; otherwise jump to selecting the network */ - blobs = nm_supplicant_config_get_blobs(priv->assoc_data->cfg); - priv->assoc_data->blobs_left = blobs ? g_hash_table_size(blobs) : 0u; - - _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: network added (%s) (%u blobs left)", + _LOGT("assoc[" NM_HASH_OBFUSCATE_PTR_FMT "]: network added (%s)", NM_HASH_OBFUSCATE_PTR(priv->assoc_data), - priv->net_path, - priv->assoc_data->blobs_left); + priv->net_path); - if (priv->assoc_data->blobs_left == 0) { - assoc_call_select_network(self); - return; - } - - g_hash_table_iter_init(&iter, blobs); - while (g_hash_table_iter_next(&iter, (gpointer) &blob_name, (gpointer) &blob_data)) { - _dbus_connection_call( - self, - NM_WPAS_DBUS_IFACE_INTERFACE, - "AddBlob", - g_variant_new("(s@ay)", blob_name, nm_g_bytes_to_variant_ay(blob_data)), - G_VARIANT_TYPE("()"), - G_DBUS_CALL_FLAGS_NONE, - DBUS_TIMEOUT_MSEC, - priv->assoc_data->cancellable, - assoc_add_blob_cb, - self); - } + /* Delete any existing blobs before adding new ones */ + _dbus_connection_call(self, + DBUS_INTERFACE_PROPERTIES, + "Get", + g_variant_new("(ss)", NM_WPAS_DBUS_IFACE_INTERFACE, "Blobs"), + G_VARIANT_TYPE("(v)"), + G_DBUS_CALL_FLAGS_NONE, + DBUS_TIMEOUT_MSEC, + priv->assoc_data->cancellable, + assoc_get_blobs_cb, + self); } static void From 4e26403c4a445b65a53c21145b15aa3e77d7240f Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 16 Sep 2025 16:57:19 +0200 Subject: [PATCH 036/153] core: support returning binary output from the daemon helper The full output of the daemon helper is added to a NMStrBuf, without interpreting it as a string (that is, without stopping at the first NUL character). However, when we retrieve the content from the NMStrBuf we assume it's a string. This is fine for certain commands that expect a string output, but it's not for other commands as the read-file-as-user one. Add a new argument to nm_utils_spawn_helper() to specify whether the output is binary or not. Also have different finish functions depending on the return type. --- src/core/devices/nm-device-utils.c | 3 ++- src/core/nm-core-utils.c | 39 ++++++++++++++++++++++++++---- src/core/nm-core-utils.h | 4 ++- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/core/devices/nm-device-utils.c b/src/core/devices/nm-device-utils.c index 3b4c6b2b63..be1de3ea87 100644 --- a/src/core/devices/nm-device-utils.c +++ b/src/core/devices/nm-device-utils.c @@ -239,7 +239,7 @@ resolve_addr_helper_cb(GObject *source, GAsyncResult *result, gpointer user_data gs_free_error GError *error = NULL; gs_free char *output = NULL; - output = nm_utils_spawn_helper_finish(result, &error); + output = nm_utils_spawn_helper_finish_string(result, &error); if (nm_utils_error_is_cancelled(error)) return; @@ -278,6 +278,7 @@ resolve_addr_spawn_helper(ResolveAddrInfo *info, ResolveAddrService services) nm_inet_ntop(info->addr_family, &info->address, addr_str); _LOG2D(info, "start lookup via nm-daemon-helper using services: %s", str); nm_utils_spawn_helper(NM_MAKE_STRV("resolve-address", addr_str, str), + FALSE, g_task_get_cancellable(info->task), resolve_addr_helper_cb, info); diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 32312e8e9d..7e1c1674b9 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -5012,6 +5012,7 @@ typedef struct { int child_stdin; int child_stdout; int child_stderr; + gboolean binary_output; GSource *input_source; GSource *output_source; GSource *error_source; @@ -5091,9 +5092,17 @@ helper_complete(HelperInfo *info, GError *error) } nm_clear_g_cancellable_disconnect(g_task_get_cancellable(info->task), &info->cancellable_id); - g_task_return_pointer(info->task, - nm_str_buf_finalize(&info->in_buffer, NULL) ?: g_new0(char, 1), - g_free); + + if (info->binary_output) { + g_task_return_pointer( + info->task, + g_bytes_new(nm_str_buf_get_str_unsafe(&info->in_buffer), info->in_buffer.len), + (GDestroyNotify) (g_bytes_unref)); + } else { + g_task_return_pointer(info->task, + nm_str_buf_finalize(&info->in_buffer, NULL) ?: g_new0(char, 1), + g_free); + } helper_info_free(info); } @@ -5236,6 +5245,7 @@ helper_cancelled(GObject *object, gpointer user_data) void nm_utils_spawn_helper(const char *const *args, + gboolean binary_output, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer cb_data) @@ -5251,9 +5261,14 @@ nm_utils_spawn_helper(const char *const *args, info = g_new(HelperInfo, 1); *info = (HelperInfo) { - .task = nm_g_task_new(NULL, cancellable, nm_utils_spawn_helper, callback, cb_data), + .task = nm_g_task_new(NULL, cancellable, nm_utils_spawn_helper, callback, cb_data), + .binary_output = binary_output, }; + /* Store if the caller requested binary output so that we can check later + * that the right result function is called. */ + g_task_set_task_data(info->task, GINT_TO_POINTER(binary_output), NULL); + if (!g_spawn_async_with_pipes("/", (char **) NM_MAKE_STRV(LIBEXECDIR "/nm-daemon-helper"), (char **) NM_MAKE_STRV(), @@ -5364,11 +5379,25 @@ nm_utils_spawn_helper(const char *const *args, } char * -nm_utils_spawn_helper_finish(GAsyncResult *result, GError **error) +nm_utils_spawn_helper_finish_string(GAsyncResult *result, GError **error) { GTask *task = G_TASK(result); nm_assert(nm_g_task_is_valid(result, NULL, nm_utils_spawn_helper)); + /* Check binary_output */ + nm_assert(GPOINTER_TO_INT(g_task_get_task_data(task)) == FALSE); + + return g_task_propagate_pointer(task, error); +} + +GBytes * +nm_utils_spawn_helper_finish_binary(GAsyncResult *result, GError **error) +{ + GTask *task = G_TASK(result); + + nm_assert(nm_g_task_is_valid(result, NULL, nm_utils_spawn_helper)); + /* Check binary_output */ + nm_assert(GPOINTER_TO_INT(g_task_get_task_data(task)) == TRUE); return g_task_propagate_pointer(task, error); } diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index e30d6ce657..be5490ce8d 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -478,11 +478,13 @@ guint8 nm_wifi_utils_level_to_quality(int val); /*****************************************************************************/ void nm_utils_spawn_helper(const char *const *args, + gboolean binary_output, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer cb_data); -char *nm_utils_spawn_helper_finish(GAsyncResult *result, GError **error); +char *nm_utils_spawn_helper_finish_string(GAsyncResult *result, GError **error); +GBytes *nm_utils_spawn_helper_finish_binary(GAsyncResult *result, GError **error); /*****************************************************************************/ From 932b85f7e7ee1a8ec50922d1468e53e77dc084d7 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 16 Sep 2025 16:58:31 +0200 Subject: [PATCH 037/153] supplicant: rename variables Rename uid to to blob_id, and con_uid to con_uuid. --- src/core/supplicant/nm-supplicant-config.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c index 38294e89a3..635174bdf0 100644 --- a/src/core/supplicant/nm-supplicant-config.c +++ b/src/core/supplicant/nm-supplicant-config.c @@ -258,19 +258,19 @@ static gboolean nm_supplicant_config_add_blob_for_connection(NMSupplicantConfig *self, GBytes *field, const char *name, - const char *con_uid, + const char *con_uuid, GError **error) { if (field && g_bytes_get_size(field)) { - gs_free char *uid = NULL; + gs_free char *blob_id = NULL; char *p; - uid = g_strdup_printf("%s-%s", con_uid, name); - for (p = uid; *p; p++) { + blob_id = g_strdup_printf("%s-%s", con_uuid, name); + for (p = blob_id; *p; p++) { if (*p == '/') *p = '-'; } - if (!nm_supplicant_config_add_blob(self, name, field, uid, error)) + if (!nm_supplicant_config_add_blob(self, name, field, blob_id, error)) return FALSE; } return TRUE; From 97033051222d25d2e576651011eef186bf003648 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 23 Sep 2025 17:00:53 +0200 Subject: [PATCH 038/153] core: add functions to read private files of connections Add function nm_utils_read_private_files(). It can be used to read a list of paths as the given user. It spawns the daemon-helper to read each path and returns asynchronously a hash table containing the files content. Also add nm_utils_get_connection_private_files_paths() to return a list of file paths referenced in a connection. The function currently returns only 802.1x file paths for certificates and keys. --- src/core/nm-core-utils.c | 199 +++++++++++++++++++++++++++++++++++++++ src/core/nm-core-utils.h | 11 +++ 2 files changed, 210 insertions(+) diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 7e1c1674b9..ee50de5a81 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -5664,3 +5664,202 @@ nm_utils_get_connection_first_permissions_user(NMConnection *connection) return _nm_setting_connection_get_first_permissions_user(s_con); } + +/*****************************************************************************/ + +static void +get_8021x_private_files(NMConnection *connection, GPtrArray *files) +{ + const struct { + NMSetting8021xCKScheme (*get_scheme_func)(NMSetting8021x *); + const char *(*get_path_func)(NMSetting8021x *); + } funcs[] = { + {nm_setting_802_1x_get_ca_cert_scheme, nm_setting_802_1x_get_ca_cert_path}, + {nm_setting_802_1x_get_client_cert_scheme, nm_setting_802_1x_get_client_cert_path}, + {nm_setting_802_1x_get_private_key_scheme, nm_setting_802_1x_get_private_key_path}, + {nm_setting_802_1x_get_phase2_ca_cert_scheme, nm_setting_802_1x_get_phase2_ca_cert_path}, + {nm_setting_802_1x_get_phase2_client_cert_scheme, + nm_setting_802_1x_get_phase2_client_cert_path}, + {nm_setting_802_1x_get_phase2_private_key_scheme, + nm_setting_802_1x_get_phase2_private_key_path}, + }; + NMSetting8021x *s_8021x; + const char *path; + guint i; + + s_8021x = nm_connection_get_setting_802_1x(connection); + if (!s_8021x) + return; + + for (i = 0; i < G_N_ELEMENTS(funcs); i++) { + if (funcs[i].get_scheme_func(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH) { + path = funcs[i].get_path_func(s_8021x); + if (path) { + g_ptr_array_add(files, (gpointer) path); + } + } + } +} + +const char ** +nm_utils_get_connection_private_files_paths(NMConnection *connection) +{ + GPtrArray *files; + + files = g_ptr_array_new(); + get_8021x_private_files(connection, files); + g_ptr_array_add(files, NULL); + + return (const char **) g_ptr_array_free(files, files->len == 1); +} + +typedef struct _ReadInfo ReadInfo; + +typedef struct { + char *path; + ReadInfo *read_info; +} FileInfo; + +struct _ReadInfo { + GTask *task; + GHashTable *table; + GPtrArray *file_infos; /* of FileInfo */ + GError *first_error; + guint num_pending; +}; + +static void +read_file_helper_cb(GObject *source, GAsyncResult *result, gpointer user_data) +{ + FileInfo *file_info = user_data; + ReadInfo *read_info = file_info->read_info; + gs_unref_bytes GBytes *output = NULL; + gs_free_error GError *error = NULL; + + output = nm_utils_spawn_helper_finish_binary(result, &error); + + nm_assert(read_info->num_pending > 0); + read_info->num_pending--; + + if (nm_utils_error_is_cancelled(error)) { + /* nop */ + } else if (error) { + nm_log_dbg(LOGD_CORE, + "read-private-files: failed to read file '%s': %s", + file_info->path, + error->message); + if (!read_info->first_error) { + /* @error just says "helper process exited with status X". + * Return a more human-friendly one. */ + read_info->first_error = g_error_new(NM_UTILS_ERROR, + NM_UTILS_ERROR_UNKNOWN, + "error reading file '%s'", + file_info->path); + } + } else { + nm_log_dbg(LOGD_SUPPLICANT, + "read-private-files: successfully read file '%s'", + file_info->path); + + /* Store the file contents in the hash table */ + if (!read_info->table) { + read_info->table = g_hash_table_new_full(nm_str_hash, + g_str_equal, + g_free, + (GDestroyNotify) g_bytes_unref); + } + g_hash_table_insert(read_info->table, + g_steal_pointer(&file_info->path), + g_steal_pointer(&output)); + } + + g_clear_pointer(&file_info->path, g_free); + + /* If all operations are completed, return */ + if (read_info->num_pending == 0) { + if (read_info->first_error) { + g_task_return_error(read_info->task, g_steal_pointer(&read_info->first_error)); + } else { + g_task_return_pointer(read_info->task, + g_steal_pointer(&read_info->table), + (GDestroyNotify) g_hash_table_unref); + } + + if (read_info->table) + g_hash_table_unref(read_info->table); + if (read_info->file_infos) + g_ptr_array_unref(read_info->file_infos); + + g_object_unref(read_info->task); + g_free(read_info); + } +} + +/** + * nm_utils_read_private_files: + * @paths: array of file paths to be read + * @user: name of the user to impersonate when reading the files + * @cancellable: cancellable to cancel the operation + * @callback: callback to invoke on completion + * @cb_data: data for @callback + * + * Reads the given list of files @paths on behalf of user @user. Invokes + * @callback asynchronously on completion. The callback must use + * nm_utils_read_private_files_finish() to obtain the result. + */ +void +nm_utils_read_private_files(const char *const *paths, + const char *user, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer cb_data) +{ + ReadInfo *read_info; + FileInfo *file_info; + guint i; + + g_return_if_fail(paths && paths[0]); + g_return_if_fail(cancellable); + g_return_if_fail(callback); + g_return_if_fail(cb_data); + + read_info = g_new(ReadInfo, 1); + *read_info = (ReadInfo) { + .task = nm_g_task_new(NULL, cancellable, nm_utils_read_private_files, callback, cb_data), + .file_infos = g_ptr_array_new_with_free_func(g_free), + }; + + for (i = 0; paths[i]; i++) { + file_info = g_new(FileInfo, 1); + *file_info = (FileInfo) { + .path = g_strdup(paths[i]), + .read_info = read_info, + }; + g_ptr_array_add(read_info->file_infos, file_info); + read_info->num_pending++; + + nm_utils_spawn_helper(NM_MAKE_STRV("read-file-as-user", user, paths[i]), + TRUE, + cancellable, + read_file_helper_cb, + file_info); + } +} + +/** + * nm_utils_read_private_files_finish: + * @result: the GAsyncResult + * @error: on return, the error + * + * Returns the files read by nm_utils_read_private_files(). The return value + * is a hash table {char * -> GBytes *}. Free it with g_hash_table_unref(). + */ +GHashTable * +nm_utils_read_private_files_finish(GAsyncResult *result, GError **error) +{ + GTask *task = G_TASK(result); + + nm_assert(nm_g_task_is_valid(result, NULL, nm_utils_read_private_files)); + + return g_task_propagate_pointer(task, error); +} diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index be5490ce8d..cccccae636 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -509,4 +509,15 @@ gboolean nm_rate_limit_check(NMRateLimit *rate_limit, gint32 window_sec, gint32 const char *nm_utils_get_connection_first_permissions_user(NMConnection *connection); +/*****************************************************************************/ + +const char **nm_utils_get_connection_private_files_paths(NMConnection *connection); + +void nm_utils_read_private_files(const char *const *paths, + const char *user, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer cb_data); +GHashTable *nm_utils_read_private_files_finish(GAsyncResult *result, GError **error); + #endif /* __NM_CORE_UTILS_H__ */ From a1928b4459a771acbc943dfd41ed3c3426ddb4a6 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 23 Sep 2025 17:04:02 +0200 Subject: [PATCH 039/153] device: read private files in stage2 During stage2 (prepare) of an activation, check if the connection is private and if it contains any certificate/key path. If so, start reading the files and delay stage2. Once done, store the files' content into priv->private_files.table and continue the activation. --- src/core/devices/nm-device-private.h | 2 + src/core/devices/nm-device.c | 127 ++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 1 deletion(-) diff --git a/src/core/devices/nm-device-private.h b/src/core/devices/nm-device-private.h index 2b4793eb38..6d82859757 100644 --- a/src/core/devices/nm-device-private.h +++ b/src/core/devices/nm-device-private.h @@ -176,4 +176,6 @@ void nm_device_auth_request(NMDevice *self, void nm_device_link_properties_set(NMDevice *self, gboolean reapply); +GHashTable *nm_device_get_private_files(NMDevice *self); + #endif /* NM_DEVICE_PRIVATE_H */ diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 91ddbc9489..f51aea53ae 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -348,6 +348,12 @@ typedef struct { int addr_family; } HostnameResolver; +typedef enum { + PRIVATE_FILES_STATE_UNKNOWN = 0, + PRIVATE_FILES_STATE_READING, + PRIVATE_FILES_STATE_DONE, +} PrivateFilesState; + /*****************************************************************************/ enum { @@ -784,6 +790,13 @@ typedef struct _NMDevicePrivate { guint64 rx_bytes; } stats; + struct { + GHashTable *table; + GCancellable *cancellable; + char *user; + PrivateFilesState state; + } private_files; + bool mtu_force_set_done : 1; bool needs_ip6_subnet : 1; @@ -10860,6 +10873,49 @@ tc_commit(NMDevice *self) return TRUE; } +static void +read_private_files_cb(GObject *source_object, GAsyncResult *result, gpointer data) +{ + gs_unref_hashtable GHashTable *table = NULL; + gs_free_error GError *error = NULL; + NMDevice *self; + NMDevicePrivate *priv; + + table = nm_utils_read_private_files_finish(result, &error); + if (nm_utils_error_is_cancelled(error)) + return; + + self = NM_DEVICE(data); + priv = NM_DEVICE_GET_PRIVATE(self); + + if (error) { + NMConnection *connection = nm_device_get_applied_connection(self); + + _LOGW(LOGD_DEVICE, + "could not read files for private connection %s owned by user '%s': %s", + connection ? nm_connection_get_uuid(connection) : NULL, + priv->private_files.user, + error->message); + nm_device_state_changed(self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_CONFIG_FAILED); + return; + } + + _LOGD(LOGD_DEVICE, "private files successfully read"); + + priv->private_files.state = PRIVATE_FILES_STATE_DONE; + priv->private_files.table = g_steal_pointer(&table); + g_clear_pointer(&priv->private_files.user, g_free); + g_clear_object(&priv->private_files.cancellable); + + nm_device_activate_schedule_stage2_device_config(self, FALSE); +} + +GHashTable * +nm_device_get_private_files(NMDevice *self) +{ + return NM_DEVICE_GET_PRIVATE(self)->private_files.table; +} + /* * activate_stage2_device_config * @@ -10872,6 +10928,7 @@ activate_stage2_device_config(NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); NMDeviceClass *klass = NM_DEVICE_GET_CLASS(self); + NMConnection *applied; NMActStageReturn ret; NMSettingWired *s_wired; gboolean no_firmware = FALSE; @@ -10880,6 +10937,68 @@ activate_stage2_device_config(NMDevice *self) nm_device_state_changed(self, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_REASON_NONE); + applied = nm_device_get_applied_connection(self); + + /* If the connection is private (owned by a specific user), we need to + * verify that the user has permission to access any files specified in + * the connection, such as certificates and keys. We do that by calling + * nm_utils_read_private_files() and saving the file contents in a hash + * table that can be accessed later during the activation. It is important + * to never access the files again to avoid TOCTOU bugs. + */ + switch (priv->private_files.state) { + case PRIVATE_FILES_STATE_UNKNOWN: + { + gs_free const char **paths = NULL; + NMSettingConnection *s_con; + const char *user; + + s_con = nm_connection_get_setting_connection(applied); + nm_assert(s_con); + user = _nm_setting_connection_get_first_permissions_user(s_con); + + priv->private_files.user = g_strdup(user); + if (!priv->private_files.user) { + priv->private_files.state = PRIVATE_FILES_STATE_DONE; + break; + } + + paths = nm_utils_get_connection_private_files_paths(applied); + if (!paths) { + priv->private_files.state = PRIVATE_FILES_STATE_DONE; + break; + } + + if (_nm_setting_connection_get_num_permissions_users(s_con) > 1) { + _LOGW(LOGD_DEVICE, + "private connections with multiple users are not allowed to reference " + "certificates and keys on the filesystem. Specify only one user in the " + "connection.permissions property."); + nm_device_state_changed(self, + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_CONFIG_FAILED); + return; + } + + priv->private_files.state = PRIVATE_FILES_STATE_READING; + priv->private_files.cancellable = g_cancellable_new(); + + _LOGD(LOGD_DEVICE, "reading private files"); + nm_utils_read_private_files(paths, + priv->private_files.user, + priv->private_files.cancellable, + read_private_files_cb, + self); + return; + } + case PRIVATE_FILES_STATE_READING: + /* wait */ + return; + case PRIVATE_FILES_STATE_DONE: + /* proceed */ + break; + } + if (!nm_device_managed_type_is_external(self)) { _ethtool_state_set(self); nm_device_link_properties_set(self, FALSE); @@ -10896,7 +11015,7 @@ activate_stage2_device_config(NMDevice *self) priv->tc_committed = TRUE; } - nm_routing_rules_sync(nm_device_get_applied_connection(self), + nm_routing_rules_sync(applied, NM_TERNARY_TRUE, klass->get_extra_rules, self, @@ -17209,6 +17328,12 @@ nm_device_cleanup(NMDevice *self, NMDeviceStateReason reason, CleanupType cleanu if (klass->deactivate) klass->deactivate(self); + /* Clean up private files */ + nm_clear_g_cancellable(&priv->private_files.cancellable); + g_clear_pointer(&priv->private_files.table, g_hash_table_unref); + g_clear_pointer(&priv->private_files.user, g_free); + priv->private_files.state = PRIVATE_FILES_STATE_UNKNOWN; + ifindex = nm_device_get_ip_ifindex(self); if (cleanup_type == CLEANUP_TYPE_DECONFIGURE) { From e85cc46d0b36cdba50fe8411cc93d55a49ebfccf Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 23 Sep 2025 17:06:39 +0200 Subject: [PATCH 040/153] core: pass certificates as blobs to supplicant for private connections In case of private connections, the device has already read the certificates and keys content from disk, validating that the owner of the connection has access to them. Pass those files as blobs to the supplicant so that it doesn't have to read them again from the filesystem, creating the opportunity for TOCTOU bugs. --- NEWS | 3 + src/core/devices/nm-device-ethernet.c | 11 +- src/core/devices/nm-device-macsec.c | 11 +- src/core/devices/wifi/nm-device-wifi.c | 4 +- src/core/supplicant/nm-supplicant-config.c | 160 ++++++++++++------ src/core/supplicant/nm-supplicant-config.h | 4 +- .../supplicant/tests/test-supplicant-config.c | 4 +- 7 files changed, 137 insertions(+), 60 deletions(-) diff --git a/NEWS b/NEWS index c93798c62b..26d42c8e52 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,9 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! polkit permissions to allow non-admin users to create system-wide connection. That configuration is discouraged because it can be used to bypass filesystem permissions. +* 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. ============================================= NetworkManager-1.56 diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c index 5396914e82..11f691ded9 100644 --- a/src/core/devices/nm-device-ethernet.c +++ b/src/core/devices/nm-device-ethernet.c @@ -629,10 +629,17 @@ build_supplicant_config(NMDeviceEthernet *self, GError **error) mtu = nm_platform_link_get_mtu(nm_device_get_platform(NM_DEVICE(self)), nm_device_get_ifindex(NM_DEVICE(self))); - config = nm_supplicant_config_new(NM_SUPPL_CAP_MASK_NONE); + config = nm_supplicant_config_new(NM_SUPPL_CAP_MASK_NONE, + nm_utils_get_connection_first_permissions_user(connection)); security = nm_connection_get_setting_802_1x(connection); - if (!nm_supplicant_config_add_setting_8021x(config, security, con_uuid, mtu, TRUE, error)) { + if (!nm_supplicant_config_add_setting_8021x(config, + security, + con_uuid, + mtu, + TRUE, + nm_device_get_private_files(NM_DEVICE(self)), + error)) { g_prefix_error(error, "802-1x-setting: "); g_clear_object(&config); } diff --git a/src/core/devices/nm-device-macsec.c b/src/core/devices/nm-device-macsec.c index 5d67081c77..eb39cb2ab0 100644 --- a/src/core/devices/nm-device-macsec.c +++ b/src/core/devices/nm-device-macsec.c @@ -201,7 +201,8 @@ build_supplicant_config(NMDeviceMacsec *self, GError **error) mtu = nm_platform_link_get_mtu(nm_device_get_platform(NM_DEVICE(self)), nm_device_get_ifindex(NM_DEVICE(self))); - config = nm_supplicant_config_new(NM_SUPPL_CAP_MASK_NONE); + config = nm_supplicant_config_new(NM_SUPPL_CAP_MASK_NONE, + nm_utils_get_connection_first_permissions_user(connection)); s_macsec = nm_device_get_applied_setting(NM_DEVICE(self), NM_TYPE_SETTING_MACSEC); @@ -227,7 +228,13 @@ build_supplicant_config(NMDeviceMacsec *self, GError **error) if (nm_setting_macsec_get_mode(s_macsec) == NM_SETTING_MACSEC_MODE_EAP) { s_8021x = nm_connection_get_setting_802_1x(connection); - if (!nm_supplicant_config_add_setting_8021x(config, s_8021x, con_uuid, mtu, TRUE, error)) { + if (!nm_supplicant_config_add_setting_8021x(config, + s_8021x, + con_uuid, + mtu, + TRUE, + nm_device_get_private_files(NM_DEVICE(self)), + error)) { g_prefix_error(error, "802-1x-setting: "); return NULL; } diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c index 50a0dd7b5f..9ca4cdd3af 100644 --- a/src/core/devices/wifi/nm-device-wifi.c +++ b/src/core/devices/wifi/nm-device-wifi.c @@ -3019,7 +3019,8 @@ build_supplicant_config(NMDeviceWifi *self, s_wireless = nm_connection_get_setting_wireless(connection); g_return_val_if_fail(s_wireless != NULL, NULL); - config = nm_supplicant_config_new(nm_supplicant_interface_get_capabilities(priv->sup_iface)); + config = nm_supplicant_config_new(nm_supplicant_interface_get_capabilities(priv->sup_iface), + nm_utils_get_connection_first_permissions_user(connection)); /* Warn if AP mode may not be supported */ if (nm_streq0(nm_setting_wireless_get_mode(s_wireless), NM_SETTING_WIRELESS_MODE_AP) @@ -3095,6 +3096,7 @@ build_supplicant_config(NMDeviceWifi *self, mtu, pmf, fils, + nm_device_get_private_files(NM_DEVICE(self)), error)) { g_prefix_error(error, "802-11-wireless-security: "); goto error; diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c index 635174bdf0..fd360e7238 100644 --- a/src/core/supplicant/nm-supplicant-config.c +++ b/src/core/supplicant/nm-supplicant-config.c @@ -30,6 +30,7 @@ typedef struct { typedef struct { GHashTable *config; GHashTable *blobs; + char *private_user; NMSupplCapMask capabilities; guint32 ap_scan; bool fast_required : 1; @@ -60,7 +61,7 @@ _get_capability(NMSupplicantConfigPrivate *priv, NMSupplCapType type) } NMSupplicantConfig * -nm_supplicant_config_new(NMSupplCapMask capabilities) +nm_supplicant_config_new(NMSupplCapMask capabilities, const char *private_user) { NMSupplicantConfigPrivate *priv; NMSupplicantConfig *self; @@ -69,6 +70,7 @@ nm_supplicant_config_new(NMSupplCapMask capabilities) priv = NM_SUPPLICANT_CONFIG_GET_PRIVATE(self); priv->capabilities = capabilities; + priv->private_user = g_strdup(private_user); return self; } @@ -283,6 +285,7 @@ nm_supplicant_config_finalize(GObject *object) g_hash_table_destroy(priv->config); nm_clear_pointer(&priv->blobs, g_hash_table_destroy); + nm_clear_pointer(&priv->private_user, g_free); G_OBJECT_CLASS(nm_supplicant_config_parent_class)->finalize(object); } @@ -930,6 +933,7 @@ nm_supplicant_config_add_setting_wireless_security(NMSupplicantConfig guint32 mtu, NMSettingWirelessSecurityPmf pmf, NMSettingWirelessSecurityFils fils, + GHashTable *files, GError **error) { NMSupplicantConfigPrivate *priv = NM_SUPPLICANT_CONFIG_GET_PRIVATE(self); @@ -1284,6 +1288,7 @@ nm_supplicant_config_add_setting_wireless_security(NMSupplicantConfig con_uuid, mtu, FALSE, + files, error)) return FALSE; } @@ -1365,6 +1370,7 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, const char *con_uuid, guint32 mtu, gboolean wired, + GHashTable *files, GError **error) { NMSupplicantConfigPrivate *priv; @@ -1594,24 +1600,21 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, } /* CA certificate */ + path = NULL; + bytes = NULL; if (ca_cert_override) { - if (!add_string_val(self, ca_cert_override, "ca_cert", FALSE, NULL, error)) - return FALSE; + /* This is a build-time-configured system-wide file path, no need to pass + * it as a blob */ + path = ca_cert_override; } else { switch (nm_setting_802_1x_get_ca_cert_scheme(setting)) { case NM_SETTING_802_1X_CK_SCHEME_BLOB: bytes = nm_setting_802_1x_get_ca_cert_blob(setting); - if (!nm_supplicant_config_add_blob_for_connection(self, - bytes, - "ca_cert", - con_uuid, - error)) - return FALSE; break; case NM_SETTING_802_1X_CK_SCHEME_PATH: path = nm_setting_802_1x_get_ca_cert_path(setting); - if (!add_string_val(self, path, "ca_cert", FALSE, NULL, error)) - return FALSE; + if (priv->private_user) + bytes = nm_g_hash_table_lookup(files, path); break; case NM_SETTING_802_1X_CK_SCHEME_PKCS11: if (!add_pkcs11_uri_with_pin(self, @@ -1627,26 +1630,32 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, break; } } + if (bytes) { + if (!nm_supplicant_config_add_blob_for_connection(self, bytes, "ca_cert", con_uuid, error)) + return FALSE; + } else if (path) { + /* Private connections cannot use paths other than the system CA store */ + g_return_val_if_fail(ca_cert_override || !priv->private_user, FALSE); + if (!add_string_val(self, path, "ca_cert", FALSE, NULL, error)) + return FALSE; + } /* Phase 2 CA certificate */ + path = NULL; + bytes = NULL; if (ca_cert_override) { - if (!add_string_val(self, ca_cert_override, "ca_cert2", FALSE, NULL, error)) - return FALSE; + /* This is a build-time-configured system-wide file path, no need to pass + * it as a blob */ + path = ca_cert_override; } else { switch (nm_setting_802_1x_get_phase2_ca_cert_scheme(setting)) { case NM_SETTING_802_1X_CK_SCHEME_BLOB: bytes = nm_setting_802_1x_get_phase2_ca_cert_blob(setting); - if (!nm_supplicant_config_add_blob_for_connection(self, - bytes, - "ca_cert2", - con_uuid, - error)) - return FALSE; break; case NM_SETTING_802_1X_CK_SCHEME_PATH: path = nm_setting_802_1x_get_phase2_ca_cert_path(setting); - if (!add_string_val(self, path, "ca_cert2", FALSE, NULL, error)) - return FALSE; + if (priv->private_user) + bytes = nm_g_hash_table_lookup(files, path); break; case NM_SETTING_802_1X_CK_SCHEME_PKCS11: if (!add_pkcs11_uri_with_pin( @@ -1663,6 +1672,15 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, break; } } + if (bytes) { + if (!nm_supplicant_config_add_blob_for_connection(self, bytes, "ca_cert2", con_uuid, error)) + return FALSE; + } else if (path) { + /* Private connections cannot use paths other than the system CA store */ + g_return_val_if_fail(ca_cert_override || !priv->private_user, FALSE); + if (!add_string_val(self, path, "ca_cert2", FALSE, NULL, error)) + return FALSE; + } /* Subject match */ value = nm_setting_802_1x_get_subject_match(setting); @@ -1714,21 +1732,17 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, /* Private key */ added = FALSE; + path = NULL; + bytes = NULL; switch (nm_setting_802_1x_get_private_key_scheme(setting)) { case NM_SETTING_802_1X_CK_SCHEME_BLOB: bytes = nm_setting_802_1x_get_private_key_blob(setting); - if (!nm_supplicant_config_add_blob_for_connection(self, - bytes, - "private_key", - con_uuid, - error)) - return FALSE; added = TRUE; break; case NM_SETTING_802_1X_CK_SCHEME_PATH: path = nm_setting_802_1x_get_private_key_path(setting); - if (!add_string_val(self, path, "private_key", FALSE, NULL, error)) - return FALSE; + if (priv->private_user) + bytes = nm_g_hash_table_lookup(files, path); added = TRUE; break; case NM_SETTING_802_1X_CK_SCHEME_PKCS11: @@ -1745,6 +1759,19 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, default: break; } + if (bytes) { + if (!nm_supplicant_config_add_blob_for_connection(self, + bytes, + "private_key", + con_uuid, + error)) + return FALSE; + } else if (path) { + /* Private connections cannot use paths */ + g_return_val_if_fail(!priv->private_user, FALSE); + if (!add_string_val(self, path, "private_key", FALSE, NULL, error)) + return FALSE; + } if (added) { NMSetting8021xCKFormat format; @@ -1768,20 +1795,16 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, /* Only add the client cert if the private key is not PKCS#12, as * wpa_supplicant configuration directs us to do. */ + path = NULL; + bytes = NULL; switch (nm_setting_802_1x_get_client_cert_scheme(setting)) { case NM_SETTING_802_1X_CK_SCHEME_BLOB: bytes = nm_setting_802_1x_get_client_cert_blob(setting); - if (!nm_supplicant_config_add_blob_for_connection(self, - bytes, - "client_cert", - con_uuid, - error)) - return FALSE; break; case NM_SETTING_802_1X_CK_SCHEME_PATH: path = nm_setting_802_1x_get_client_cert_path(setting); - if (!add_string_val(self, path, "client_cert", FALSE, NULL, error)) - return FALSE; + if (priv->private_user) + bytes = nm_g_hash_table_lookup(files, path); break; case NM_SETTING_802_1X_CK_SCHEME_PKCS11: if (!add_pkcs11_uri_with_pin( @@ -1797,26 +1820,35 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, default: break; } + if (bytes) { + if (!nm_supplicant_config_add_blob_for_connection(self, + bytes, + "client_cert", + con_uuid, + error)) + return FALSE; + } else if (path) { + /* Private connections cannot use paths */ + g_return_val_if_fail(!priv->private_user, FALSE); + if (!add_string_val(self, path, "client_cert", FALSE, NULL, error)) + return FALSE; + } } } /* Phase 2 private key */ added = FALSE; + path = NULL; + bytes = NULL; switch (nm_setting_802_1x_get_phase2_private_key_scheme(setting)) { case NM_SETTING_802_1X_CK_SCHEME_BLOB: bytes = nm_setting_802_1x_get_phase2_private_key_blob(setting); - if (!nm_supplicant_config_add_blob_for_connection(self, - bytes, - "private_key2", - con_uuid, - error)) - return FALSE; added = TRUE; break; case NM_SETTING_802_1X_CK_SCHEME_PATH: path = nm_setting_802_1x_get_phase2_private_key_path(setting); - if (!add_string_val(self, path, "private_key2", FALSE, NULL, error)) - return FALSE; + if (priv->private_user) + bytes = nm_g_hash_table_lookup(files, path); added = TRUE; break; case NM_SETTING_802_1X_CK_SCHEME_PKCS11: @@ -1834,6 +1866,19 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, default: break; } + if (bytes) { + if (!nm_supplicant_config_add_blob_for_connection(self, + bytes, + "private_key2", + con_uuid, + error)) + return FALSE; + } else if (path) { + /* Private connections cannot use paths */ + g_return_val_if_fail(!priv->private_user, FALSE); + if (!add_string_val(self, path, "private_key2", FALSE, NULL, error)) + return FALSE; + } if (added) { NMSetting8021xCKFormat format; @@ -1857,20 +1902,16 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, /* Only add the client cert if the private key is not PKCS#12, as * wpa_supplicant configuration directs us to do. */ + path = NULL; + bytes = NULL; switch (nm_setting_802_1x_get_phase2_client_cert_scheme(setting)) { case NM_SETTING_802_1X_CK_SCHEME_BLOB: bytes = nm_setting_802_1x_get_phase2_client_cert_blob(setting); - if (!nm_supplicant_config_add_blob_for_connection(self, - bytes, - "client_cert2", - con_uuid, - error)) - return FALSE; break; case NM_SETTING_802_1X_CK_SCHEME_PATH: path = nm_setting_802_1x_get_phase2_client_cert_path(setting); - if (!add_string_val(self, path, "client_cert2", FALSE, NULL, error)) - return FALSE; + if (priv->private_user) + bytes = nm_g_hash_table_lookup(files, path); break; case NM_SETTING_802_1X_CK_SCHEME_PKCS11: if (!add_pkcs11_uri_with_pin( @@ -1886,6 +1927,19 @@ nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, default: break; } + if (bytes) { + if (!nm_supplicant_config_add_blob_for_connection(self, + bytes, + "client_cert2", + con_uuid, + error)) + return FALSE; + } else if (path) { + /* Private connections cannot use paths */ + g_return_val_if_fail(!priv->private_user, FALSE); + if (!add_string_val(self, path, "client_cert2", FALSE, NULL, error)) + return FALSE; + } } } diff --git a/src/core/supplicant/nm-supplicant-config.h b/src/core/supplicant/nm-supplicant-config.h index c52b756e78..96460b86c7 100644 --- a/src/core/supplicant/nm-supplicant-config.h +++ b/src/core/supplicant/nm-supplicant-config.h @@ -29,7 +29,7 @@ typedef struct _NMSupplicantConfigClass NMSupplicantConfigClass; GType nm_supplicant_config_get_type(void); -NMSupplicantConfig *nm_supplicant_config_new(NMSupplCapMask capabilities); +NMSupplicantConfig *nm_supplicant_config_new(NMSupplCapMask capabilities, const char *private_user); guint32 nm_supplicant_config_get_ap_scan(NMSupplicantConfig *self); @@ -57,6 +57,7 @@ gboolean nm_supplicant_config_add_setting_wireless_security(NMSupplicantConfig guint32 mtu, NMSettingWirelessSecurityPmf pmf, NMSettingWirelessSecurityFils fils, + GHashTable *files, GError **error); gboolean nm_supplicant_config_add_no_security(NMSupplicantConfig *self, GError **error); @@ -66,6 +67,7 @@ gboolean nm_supplicant_config_add_setting_8021x(NMSupplicantConfig *self, const char *con_uuid, guint32 mtu, gboolean wired, + GHashTable *files, GError **error); gboolean nm_supplicant_config_add_setting_macsec(NMSupplicantConfig *self, diff --git a/src/core/supplicant/tests/test-supplicant-config.c b/src/core/supplicant/tests/test-supplicant-config.c index 1ca5b26e56..416fe0054f 100644 --- a/src/core/supplicant/tests/test-supplicant-config.c +++ b/src/core/supplicant/tests/test-supplicant-config.c @@ -98,7 +98,8 @@ build_supplicant_config(NMConnection *connection, NMSetting8021x *s_8021x; gboolean success; - config = nm_supplicant_config_new(capabilities); + config = nm_supplicant_config_new(capabilities, + nm_utils_get_connection_first_permissions_user(connection)); s_wifi = nm_connection_get_setting_wireless(connection); g_assert(s_wifi); @@ -120,6 +121,7 @@ build_supplicant_config(NMConnection *connection, mtu, pmf, fils, + NULL, &error); } else { success = nm_supplicant_config_add_no_security(config, &error); From 8d8edda3f40c95c279b20a9fe586997cf40893eb Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 27 Oct 2025 17:40:14 +0100 Subject: [PATCH 041/153] core,libnm-core: introduce property flag for certificate and keys If we add a new property in the future and it references a certificate or key stored on disk, we need to also implement the logic to verify the access to the file for private connections. Add a new property flag NM_SETTING_PARAM_CERT_KEY_FILE to existing certificate and key properties, so that it's easier to see that they need special treatment. Also add some assertions to verify that the properties with the flag are handled properly. While at it, move the enumeration of private-files to the settings. --- src/core/nm-core-utils.c | 46 +++-------- src/libnm-core-impl/nm-setting-8021x.c | 97 ++++++++++++++++++++++-- src/libnm-core-impl/nm-setting-private.h | 17 ++++- src/libnm-core-impl/nm-setting.c | 29 +++++++ src/libnm-core-intern/nm-core-internal.h | 2 + 5 files changed, 143 insertions(+), 48 deletions(-) diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index ee50de5a81..5404ecb9ce 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -5667,47 +5667,19 @@ nm_utils_get_connection_first_permissions_user(NMConnection *connection) /*****************************************************************************/ -static void -get_8021x_private_files(NMConnection *connection, GPtrArray *files) -{ - const struct { - NMSetting8021xCKScheme (*get_scheme_func)(NMSetting8021x *); - const char *(*get_path_func)(NMSetting8021x *); - } funcs[] = { - {nm_setting_802_1x_get_ca_cert_scheme, nm_setting_802_1x_get_ca_cert_path}, - {nm_setting_802_1x_get_client_cert_scheme, nm_setting_802_1x_get_client_cert_path}, - {nm_setting_802_1x_get_private_key_scheme, nm_setting_802_1x_get_private_key_path}, - {nm_setting_802_1x_get_phase2_ca_cert_scheme, nm_setting_802_1x_get_phase2_ca_cert_path}, - {nm_setting_802_1x_get_phase2_client_cert_scheme, - nm_setting_802_1x_get_phase2_client_cert_path}, - {nm_setting_802_1x_get_phase2_private_key_scheme, - nm_setting_802_1x_get_phase2_private_key_path}, - }; - NMSetting8021x *s_8021x; - const char *path; - guint i; - - s_8021x = nm_connection_get_setting_802_1x(connection); - if (!s_8021x) - return; - - for (i = 0; i < G_N_ELEMENTS(funcs); i++) { - if (funcs[i].get_scheme_func(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH) { - path = funcs[i].get_path_func(s_8021x); - if (path) { - g_ptr_array_add(files, (gpointer) path); - } - } - } -} - const char ** nm_utils_get_connection_private_files_paths(NMConnection *connection) { - GPtrArray *files; + GPtrArray *files; + gs_free NMSetting **settings = NULL; + guint num_settings; + guint i; - files = g_ptr_array_new(); - get_8021x_private_files(connection, files); + files = g_ptr_array_new(); + settings = nm_connection_get_settings(connection, &num_settings); + for (i = 0; i < num_settings; i++) { + _nm_setting_get_private_files(settings[i], files); + } g_ptr_array_add(files, NULL); return (const char **) g_ptr_array_free(files, files->len == 1); diff --git a/src/libnm-core-impl/nm-setting-8021x.c b/src/libnm-core-impl/nm-setting-8021x.c index 4ea6072966..f933380333 100644 --- a/src/libnm-core-impl/nm-setting-8021x.c +++ b/src/libnm-core-impl/nm-setting-8021x.c @@ -3133,6 +3133,86 @@ need_secrets(NMSetting *setting, gboolean check_rerequest) /*****************************************************************************/ +static void +get_private_files(NMSetting *setting, GPtrArray *files) +{ + const struct { + const char *property; + NMSetting8021xCKScheme (*get_scheme_func)(NMSetting8021x *); + const char *(*get_path_func)(NMSetting8021x *); + } cert_props[] = { + {NM_SETTING_802_1X_CA_CERT, + nm_setting_802_1x_get_ca_cert_scheme, + nm_setting_802_1x_get_ca_cert_path}, + {NM_SETTING_802_1X_CLIENT_CERT, + nm_setting_802_1x_get_client_cert_scheme, + nm_setting_802_1x_get_client_cert_path}, + {NM_SETTING_802_1X_PRIVATE_KEY, + nm_setting_802_1x_get_private_key_scheme, + nm_setting_802_1x_get_private_key_path}, + {NM_SETTING_802_1X_PHASE2_CA_CERT, + nm_setting_802_1x_get_phase2_ca_cert_scheme, + nm_setting_802_1x_get_phase2_ca_cert_path}, + {NM_SETTING_802_1X_PHASE2_CLIENT_CERT, + nm_setting_802_1x_get_phase2_client_cert_scheme, + nm_setting_802_1x_get_phase2_client_cert_path}, + {NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, + nm_setting_802_1x_get_phase2_private_key_scheme, + nm_setting_802_1x_get_phase2_private_key_path}, + }; + NMSetting8021x *s_8021x = NM_SETTING_802_1X(setting); + const char *path; + guint i; + + if (NM_MORE_ASSERT_ONCE(5)) { + GObjectClass *klass; + gs_free GParamSpec **properties = NULL; + guint n_properties; + gboolean found; + guint j; + + /* Check that all the properties in the setting with flag CERT_KEY_FILE + * are listed in the table, and vice versa. */ + + klass = G_OBJECT_GET_CLASS(setting); + + properties = g_object_class_list_properties(klass, &n_properties); + for (i = 0; i < n_properties; i++) { + if (!(properties[i]->flags & NM_SETTING_PARAM_CERT_KEY_FILE)) + continue; + + found = FALSE; + for (j = 0; j < G_N_ELEMENTS(cert_props); j++) { + if (nm_streq0(properties[i]->name, cert_props[j].property)) { + found = TRUE; + break; + } + } + + nm_assert(found); + } + + for (i = 0; i < G_N_ELEMENTS(cert_props); i++) { + GParamSpec *prop; + + prop = g_object_class_find_property(klass, cert_props[i].property); + nm_assert(prop); + nm_assert(prop->flags & NM_SETTING_PARAM_CERT_KEY_FILE); + } + } + + for (i = 0; i < G_N_ELEMENTS(cert_props); i++) { + if (cert_props[i].get_scheme_func(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH) { + path = cert_props[i].get_path_func(s_8021x); + if (path) { + g_ptr_array_add(files, (gpointer) path); + } + } + } +} + +/*****************************************************************************/ + static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { @@ -3223,8 +3303,9 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) object_class->set_property = set_property; object_class->finalize = finalize; - setting_class->verify = verify; - setting_class->need_secrets = need_secrets; + setting_class->verify = verify; + setting_class->need_secrets = need_secrets; + setting_class->get_private_files = get_private_files; /** * NMSetting8021x:eap: @@ -3359,7 +3440,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) obj_properties, NM_SETTING_802_1X_CA_CERT, PROP_CA_CERT, - NM_SETTING_PARAM_NONE, + NM_SETTING_PARAM_CERT_KEY_FILE, NMSetting8021xPrivate, ca_cert); @@ -3556,7 +3637,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) obj_properties, NM_SETTING_802_1X_CLIENT_CERT, PROP_CLIENT_CERT, - NM_SETTING_PARAM_NONE, + NM_SETTING_PARAM_CERT_KEY_FILE, NMSetting8021xPrivate, client_cert); @@ -3803,7 +3884,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) obj_properties, NM_SETTING_802_1X_PHASE2_CA_CERT, PROP_PHASE2_CA_CERT, - NM_SETTING_PARAM_NONE, + NM_SETTING_PARAM_CERT_KEY_FILE, NMSetting8021xPrivate, phase2_ca_cert); @@ -4006,7 +4087,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) obj_properties, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, PROP_PHASE2_CLIENT_CERT, - NM_SETTING_PARAM_NONE, + NM_SETTING_PARAM_CERT_KEY_FILE, NMSetting8021xPrivate, phase2_client_cert); @@ -4175,7 +4256,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) obj_properties, NM_SETTING_802_1X_PRIVATE_KEY, PROP_PRIVATE_KEY, - NM_SETTING_PARAM_NONE, + NM_SETTING_PARAM_CERT_KEY_FILE, NMSetting8021xPrivate, private_key); @@ -4276,7 +4357,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) obj_properties, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, PROP_PHASE2_PRIVATE_KEY, - NM_SETTING_PARAM_NONE, + NM_SETTING_PARAM_CERT_KEY_FILE, NMSetting8021xPrivate, phase2_private_key); diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h index 8ee770f471..61f9678936 100644 --- a/src/libnm-core-impl/nm-setting-private.h +++ b/src/libnm-core-impl/nm-setting-private.h @@ -154,6 +154,11 @@ struct _NMSettingClass { guint /* NMSettingParseFlags */ parse_flags, GError **error); + /* returns a list of certificate/key files referenced in the connection. + * When the connection is private, we need to verify that the owner of + * the connection has access to them. */ + void (*get_private_files)(NMSetting *setting, GPtrArray *files); + const struct _NMMetaSettingInfo *setting_info; }; @@ -334,6 +339,11 @@ struct _NMRange { */ #define NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS (1 << (7 + G_PARAM_USER_SHIFT)) +/* The property can refer to a certificate or key stored on disk. As such, + * special care is needed when accessing the file for private connections. + */ +#define NM_SETTING_PARAM_CERT_KEY_FILE (1 << (8 + G_PARAM_USER_SHIFT)) + extern const NMSettInfoPropertType nm_sett_info_propert_type_setting_name; extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_interface_name; extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_ignore_i; @@ -859,9 +869,10 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p { \ GParamSpec *_param_spec; \ \ - G_STATIC_ASSERT(!NM_FLAGS_ANY((param_flags), \ - ~(NM_SETTING_PARAM_SECRET | NM_SETTING_PARAM_INFERRABLE \ - | NM_SETTING_PARAM_FUZZY_IGNORE))); \ + G_STATIC_ASSERT( \ + !NM_FLAGS_ANY((param_flags), \ + ~(NM_SETTING_PARAM_SECRET | NM_SETTING_PARAM_INFERRABLE \ + | NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_CERT_KEY_FILE))); \ \ _param_spec = g_param_spec_boxed("" prop_name "", \ "", \ diff --git a/src/libnm-core-impl/nm-setting.c b/src/libnm-core-impl/nm-setting.c index 3b3aecf1a6..e87f39b200 100644 --- a/src/libnm-core-impl/nm-setting.c +++ b/src/libnm-core-impl/nm-setting.c @@ -2262,6 +2262,34 @@ init_from_dbus(NMSetting *setting, return TRUE; } +static void +get_private_files(NMSetting *setting, GPtrArray *files) +{ + if (NM_MORE_ASSERTS) { + GParamSpec **properties; + guint n_properties; + int i; + + properties = g_object_class_list_properties(G_OBJECT_GET_CLASS(setting), &n_properties); + for (i = 0; i < n_properties; i++) { + if (properties[i]->flags & NM_SETTING_PARAM_CERT_KEY_FILE) { + /* Certificates and keys needs special handling, see setting 802.1X */ + nm_assert_not_reached(); + } + } + g_free(properties); + } +} + +void +_nm_setting_get_private_files(NMSetting *setting, GPtrArray *files) +{ + g_return_if_fail(NM_IS_SETTING(setting)); + g_return_if_fail(files); + + NM_SETTING_GET_CLASS(setting)->get_private_files(setting, files); +} + /** * nm_setting_get_dbus_property_type: * @setting: an #NMSetting @@ -4672,6 +4700,7 @@ nm_setting_class_init(NMSettingClass *setting_class) setting_class->enumerate_values = enumerate_values; setting_class->aggregate = aggregate; setting_class->init_from_dbus = init_from_dbus; + setting_class->get_private_files = get_private_files; /** * NMSetting:name: diff --git a/src/libnm-core-intern/nm-core-internal.h b/src/libnm-core-intern/nm-core-internal.h index 6991185d39..b8df4d2e9d 100644 --- a/src/libnm-core-intern/nm-core-internal.h +++ b/src/libnm-core-intern/nm-core-internal.h @@ -1192,4 +1192,6 @@ const GPtrArray *_nm_setting_ovs_port_get_trunks_arr(NMSettingOvsPort *self); guint _nm_setting_connection_get_num_permissions_users(NMSettingConnection *setting); const char *_nm_setting_connection_get_first_permissions_user(NMSettingConnection *setting); +void _nm_setting_get_private_files(NMSetting *setting, GPtrArray *files); + #endif From 10db4baeb6d3eef76cf036b2f342ab61caa29764 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 10 Oct 2025 15:08:34 +0200 Subject: [PATCH 042/153] vpn: add nm_vpn_plugin_info_supports_safe_private_file_access() The new API indicates that the VPN plugin supports reading files (certificates, keys) of private connections in a safe way (i.e. checking user permissions), or that it doesn't need to read any file from disk. --- src/libnm-client-impl/libnm.ver | 1 + src/libnm-core-impl/nm-vpn-plugin-info.c | 23 ++++++++++++++++++++++ src/libnm-core-public/nm-vpn-plugin-info.h | 2 ++ 3 files changed, 26 insertions(+) diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver index 1fb3282d82..92183be2b3 100644 --- a/src/libnm-client-impl/libnm.ver +++ b/src/libnm-client-impl/libnm.ver @@ -2090,4 +2090,5 @@ global: nm_setting_gsm_get_device_uid; nm_setting_connection_get_dnssec; nm_setting_connection_dnssec_get_type; + nm_vpn_plugin_info_supports_safe_private_file_access; } libnm_1_54_0; diff --git a/src/libnm-core-impl/nm-vpn-plugin-info.c b/src/libnm-core-impl/nm-vpn-plugin-info.c index 223d8ab33b..47dc9e3b5a 100644 --- a/src/libnm-core-impl/nm-vpn-plugin-info.c +++ b/src/libnm-core-impl/nm-vpn-plugin-info.c @@ -913,6 +913,29 @@ nm_vpn_plugin_info_supports_multiple(NMVpnPluginInfo *self) return _nm_utils_ascii_str_to_bool(s, FALSE); } +/** + * nm_vpn_plugin_info_supports_safe_private_file_access: + * @self: plugin info instance + * + * Returns: %TRUE if the service supports reading files (certificates, keys) of + * 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 + */ +gboolean +nm_vpn_plugin_info_supports_safe_private_file_access(NMVpnPluginInfo *self) +{ + const char *s; + + g_return_val_if_fail(NM_IS_VPN_PLUGIN_INFO(self), FALSE); + + s = nm_vpn_plugin_info_lookup_property(self, + NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION, + "supports-safe-private-file-access"); + return _nm_utils_ascii_str_to_bool(s, FALSE); +} + /** * nm_vpn_plugin_info_get_aliases: * @self: plugin info instance diff --git a/src/libnm-core-public/nm-vpn-plugin-info.h b/src/libnm-core-public/nm-vpn-plugin-info.h index c045daa03d..0f2618ac9a 100644 --- a/src/libnm-core-public/nm-vpn-plugin-info.h +++ b/src/libnm-core-public/nm-vpn-plugin-info.h @@ -64,6 +64,8 @@ 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_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); NM_AVAILABLE_IN_1_2 From 57eb4a5bc65e3031a2b1435f551ed0f313873978 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 10 Oct 2025 16:51:55 +0200 Subject: [PATCH 043/153] vpn: check that plugin supports private connections Only allow private VPN connections if the VPN plugin declares the supports-safe-private-file-access capability. Also check that the private connection doesn't have more than one owner. --- src/core/vpn/nm-vpn-manager.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/core/vpn/nm-vpn-manager.c b/src/core/vpn/nm-vpn-manager.c index 6bf8edaee5..e49c689867 100644 --- a/src/core/vpn/nm-vpn-manager.c +++ b/src/core/vpn/nm-vpn-manager.c @@ -60,16 +60,21 @@ nm_vpn_manager_activate_connection(NMVpnManager *manager, NMVpnConnection *vpn, { NMVpnManagerPrivate *priv; NMVpnPluginInfo *plugin_info; + NMConnection *applied; const char *service_name; NMDevice *device; + const char *user; g_return_val_if_fail(NM_IS_VPN_MANAGER(manager), FALSE); g_return_val_if_fail(NM_IS_VPN_CONNECTION(vpn), FALSE); g_return_val_if_fail(!error || !*error, FALSE); - priv = NM_VPN_MANAGER_GET_PRIVATE(manager); - device = nm_active_connection_get_device(NM_ACTIVE_CONNECTION(vpn)); - g_assert(device); + priv = NM_VPN_MANAGER_GET_PRIVATE(manager); + device = nm_active_connection_get_device(NM_ACTIVE_CONNECTION(vpn)); + applied = nm_active_connection_get_applied_connection(NM_ACTIVE_CONNECTION(vpn)); + nm_assert(device); + nm_assert(applied); + if (nm_device_get_state(device) != NM_DEVICE_STATE_ACTIVATED && nm_device_get_state(device) != NM_DEVICE_STATE_SECONDARIES) { g_set_error_literal(error, @@ -101,6 +106,30 @@ nm_vpn_manager_activate_connection(NMVpnManager *manager, NMVpnConnection *vpn, return FALSE; } + user = nm_utils_get_connection_first_permissions_user(applied); + if (user) { + NMSettingConnection *s_con; + + s_con = nm_connection_get_setting_connection(applied); + nm_assert(s_con); + if (_nm_setting_connection_get_num_permissions_users(s_con) > 1) { + g_set_error_literal(error, + NM_MANAGER_ERROR, + NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE, + "private VPN connections with multiple users are not allowed."); + return FALSE; + } + + if (!nm_vpn_plugin_info_supports_safe_private_file_access(plugin_info)) { + g_set_error(error, + NM_MANAGER_ERROR, + NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE, + "The '%s' plugin doesn't support private connections.", + nm_vpn_plugin_info_get_name(plugin_info)); + return FALSE; + } + } + nm_vpn_connection_activate(vpn, plugin_info); if (!nm_vpn_plugin_info_supports_multiple(plugin_info)) { From 1a52bbe7c9dcabc066d8930dfd7b7cfe74dabf78 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 26 Sep 2025 21:04:04 +0200 Subject: [PATCH 044/153] libnm: add function to copy a certificate or key as user Add a new public function nm_utils_copy_cert_as_user() to libnm. It reads a certificate or key file on behalf of the given user and writes it to a directory in /run/NetworkManager. It is useful for VPN plugins that run as root and need to verify that the user owning the connection (the one listed in the connection.permissions property) can access the file. --- NEWS | 2 + contrib/fedora/rpm/NetworkManager.spec | 1 + src/libnm-client-impl/libnm.ver | 1 + src/libnm-client-impl/tests/meson.build | 16 +- .../tests/test-copy-cert-as-user.c | 32 +++ src/libnm-core-impl/nm-utils.c | 256 ++++++++++++++++++ src/libnm-core-public/nm-utils.h | 3 + src/nm-helpers/README.md | 8 + src/nm-helpers/meson.build | 20 ++ src/nm-helpers/nm-libnm-helper.c | 45 +++ 10 files changed, 378 insertions(+), 6 deletions(-) create mode 100644 src/libnm-client-impl/tests/test-copy-cert-as-user.c create mode 100644 src/nm-helpers/nm-libnm-helper.c diff --git a/NEWS b/NEWS index 26d42c8e52..f720a1bda6 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,8 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! * 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.56 diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index bb2adca0e7..cc952f213e 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -889,6 +889,7 @@ fi %{_libexecdir}/nm-dispatcher %{_libexecdir}/nm-initrd-generator %{_libexecdir}/nm-daemon-helper +%{_libexecdir}/nm-libnm-helper %{_libexecdir}/nm-priv-helper %dir %{_libdir}/%{name} %dir %{nmplugindir} diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver index 92183be2b3..ed5901d79f 100644 --- a/src/libnm-client-impl/libnm.ver +++ b/src/libnm-client-impl/libnm.ver @@ -2090,5 +2090,6 @@ global: 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_0; diff --git a/src/libnm-client-impl/tests/meson.build b/src/libnm-client-impl/tests/meson.build index 42e9883e77..500504db6e 100644 --- a/src/libnm-client-impl/tests/meson.build +++ b/src/libnm-client-impl/tests/meson.build @@ -5,6 +5,7 @@ test_units = [ 'test-nm-client', 'test-remote-settings-client', 'test-secret-agent', + 'test-copy-cert-as-user' ] foreach test_unit: test_units @@ -37,12 +38,15 @@ foreach test_unit: test_units ], ) - test( - 'src/libnm-client-impl/tests/' + test_unit, - test_script, - timeout: 90, - args: test_args + [exe.full_path()], - ) + # test-copy-cert-as-user is a manual test, don't run it automatically + if test_unit != 'test-copy-cert-as-user' + test( + 'src/libnm-client-impl/tests/' + test_unit, + test_script, + timeout: 90, + args: test_args + [exe.full_path()], + ) + endif endforeach if enable_introspection diff --git a/src/libnm-client-impl/tests/test-copy-cert-as-user.c b/src/libnm-client-impl/tests/test-copy-cert-as-user.c new file mode 100644 index 0000000000..b2ef9de67d --- /dev/null +++ b/src/libnm-client-impl/tests/test-copy-cert-as-user.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +/* + * This is a program to manually test the + * nm_utils_copy_cert_as_user() libnm function. + */ + +#include "libnm-client-impl/nm-default-libnm.h" + +#include "nm-utils.h" + +int +main(int argc, char **argv) +{ + gs_free_error GError *error = NULL; + gs_free char *filename = NULL; + + if (argc != 3) { + g_printerr("Usage: %s \n", argv[0]); + return 1; + } + + filename = nm_utils_copy_cert_as_user(argv[1], argv[2], &error); + if (!filename) { + g_printerr("Error: %s\n", error->message); + return 1; + } + + g_print("%s\n", filename); + + return 0; +} diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c index 6d5df98ccc..1bf00831f9 100644 --- a/src/libnm-core-impl/nm-utils.c +++ b/src/libnm-core-impl/nm-utils.c @@ -17,6 +17,7 @@ #include #include +#include "libnm-glib-aux/nm-io-utils.h" #include "libnm-glib-aux/nm-uuid.h" #include "libnm-glib-aux/nm-json-aux.h" #include "libnm-glib-aux/nm-str-buf.h" @@ -6195,3 +6196,258 @@ nm_utils_ensure_gtypes(void) for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) nm_meta_setting_infos[meta_type].get_setting_gtype(); } + +/*****************************************************************************/ + +typedef struct { + GPid pid; + GSource *child_watch_source; + GMainLoop *loop; + GError *error; + + int child_stdout; + int child_stderr; + + GSource *output_source; + GSource *error_source; + + NMStrBuf output_buffer; + NMStrBuf error_buffer; +} HelperInfo; + +static void +helper_complete(HelperInfo *info, GError *error_take) +{ + if (error_take) { + if (!info->error) + info->error = error_take; + else + g_error_free(error_take); + } + + if (info->output_source || info->error_source || info->pid != -1) { + /* Wait that the pipe is closed and process has terminated */ + return; + } + + if (info->error && info->error_buffer.len > 0) { + /* Prefer the message from stderr as it's more informative */ + g_error_free(info->error); + info->error = g_error_new(NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_FAILED, + "%s", + nm_str_buf_get_str(&info->error_buffer)); + } + + g_main_loop_quit(info->loop); +} + +static gboolean +helper_have_err_data(int fd, GIOCondition condition, gpointer user_data) +{ + HelperInfo *info = user_data; + gssize n_read; + GError *error = NULL; + + n_read = nm_utils_fd_read(fd, &info->error_buffer); + + if (n_read > 0) + return G_SOURCE_CONTINUE; + + nm_clear_g_source_inst(&info->error_source); + nm_clear_fd(&info->child_stderr); + + if (n_read < 0) { + error = g_error_new(NM_UTILS_ERROR, + NM_UTILS_ERROR_UNKNOWN, + "read from process returned %d (%s)", + (int) -n_read, + nm_strerror_native((int) -n_read)); + } + + helper_complete(info, error); + return G_SOURCE_CONTINUE; +} + +static gboolean +helper_have_data(int fd, GIOCondition condition, gpointer user_data) +{ + HelperInfo *info = user_data; + gssize n_read; + GError *error = NULL; + + n_read = nm_utils_fd_read(fd, &info->output_buffer); + + if (n_read > 0) + return G_SOURCE_CONTINUE; + + nm_clear_g_source_inst(&info->output_source); + nm_clear_fd(&info->child_stdout); + + if (n_read < 0) { + error = g_error_new(NM_UTILS_ERROR, + NM_UTILS_ERROR_UNKNOWN, + "read from process returned %d (%s)", + (int) -n_read, + nm_strerror_native((int) -n_read)); + } + + helper_complete(info, error); + return G_SOURCE_CONTINUE; +} + +static void +helper_child_terminated(GPid pid, int status, gpointer user_data) +{ + HelperInfo *info = user_data; + gs_free char *status_desc = NULL; + GError *error = NULL; + + info->pid = -1; + nm_clear_g_source_inst(&info->child_watch_source); + + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { + if (!status_desc) + status_desc = nm_utils_get_process_exit_status_desc(status); + error = + g_error_new(NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN, "helper process %s", status_desc); + } + + helper_complete(info, error); +} + +#define RUN_CERT_DIR NMRUNDIR "/cert" + +/** + * nm_utils_copy_cert_as_user: + * @filename: the file name of the certificate or key to copy + * @user: the user to impersonate when reading the file + * @error: (nullable): return location for a #GError, or %NULL + * + * Reads @filename on behalf of user @user and writes the + * content to a new file in /run/NetworkManager/cert/. + * The new file has permission 600 and is owned by root. + * + * This function is useful for VPN plugins that run as root and need + * to verify that the user owning the connection (the one listed in the + * connection.permissions property) can access the file. + * + * Returns: (transfer full): the name of the new temporary file. Or %NULL + * if an error occurred, including when the given user can't access the + * file. + * + * Since: 1.56 + */ +char * +nm_utils_copy_cert_as_user(const char *filename, const char *user, GError **error) +{ + gs_unref_bytes GBytes *bytes = NULL; + char dst_path[] = RUN_CERT_DIR "/XXXXXX"; + HelperInfo info = { + .child_stdout = -1, + .child_stderr = -1, + }; + GMainContext *context; + int fd = -1; + + g_return_val_if_fail(filename, NULL); + g_return_val_if_fail(user, NULL); + g_return_val_if_fail(!error || !*error, NULL); + + if (geteuid() != 0) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("This function needs to be called by root")); + return NULL; + } + + if (!g_spawn_async_with_pipes( + "/", + (char **) + NM_MAKE_STRV(LIBEXECDIR "/nm-libnm-helper", "read-file-as-user", filename, user), + (char **) NM_MAKE_STRV(), + G_SPAWN_CLOEXEC_PIPES | G_SPAWN_DO_NOT_REAP_CHILD, + NULL, + NULL, + &info.pid, + NULL, + &info.child_stdout, + &info.child_stderr, + error)) { + return NULL; + } + + context = g_main_context_new(); + info.loop = g_main_loop_new(context, FALSE); + + /* Watch process */ + info.child_watch_source = nm_g_child_watch_source_new(info.pid, + G_PRIORITY_DEFAULT, + helper_child_terminated, + &info, + NULL); + g_source_attach(info.child_watch_source, context); + + /* Watch stdout */ + info.output_buffer = NM_STR_BUF_INIT(0, FALSE); + info.output_source = nm_g_unix_fd_source_new(info.child_stdout, + G_IO_IN | G_IO_ERR | G_IO_HUP, + G_PRIORITY_DEFAULT, + helper_have_data, + &info, + NULL); + g_source_attach(info.output_source, context); + + /* Watch stderr */ + info.error_buffer = NM_STR_BUF_INIT(0, FALSE); + info.error_source = nm_g_unix_fd_source_new(info.child_stderr, + G_IO_IN | G_IO_ERR | G_IO_HUP, + G_PRIORITY_DEFAULT, + helper_have_err_data, + &info, + NULL); + g_source_attach(info.error_source, context); + + /* Wait termination */ + g_main_loop_run(info.loop); + g_clear_pointer(&info.loop, g_main_loop_unref); + g_clear_pointer(&context, g_main_context_unref); + + if (info.error) { + nm_str_buf_destroy(&info.output_buffer); + nm_str_buf_destroy(&info.error_buffer); + g_propagate_error(error, g_steal_pointer(&info.error)); + return NULL; + } + + /* Write the data to a new file */ + + bytes = g_bytes_new(nm_str_buf_get_str_unsafe(&info.output_buffer), info.output_buffer.len); + nm_str_buf_destroy(&info.output_buffer); + nm_str_buf_destroy(&info.error_buffer); + + mkdir(RUN_CERT_DIR, 0600); + fd = mkstemp(dst_path); + if (fd < 0) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Failure creating the temporary file")); + return NULL; + } + nm_close(fd); + + if (!nm_utils_file_set_contents(dst_path, + g_bytes_get_data(bytes, NULL), + g_bytes_get_size(bytes), + 0600, + NULL, + NULL, + NULL, + error)) { + return NULL; + } + + return g_strdup(dst_path); +} diff --git a/src/libnm-core-public/nm-utils.h b/src/libnm-core-public/nm-utils.h index 35ef580db7..e46bf47280 100644 --- a/src/libnm-core-public/nm-utils.h +++ b/src/libnm-core-public/nm-utils.h @@ -261,6 +261,9 @@ 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_56 +char *nm_utils_copy_cert_as_user(const char *filename, const char *user, GError **error); + G_END_DECLS #endif /* __NM_UTILS_H__ */ diff --git a/src/nm-helpers/README.md b/src/nm-helpers/README.md index ab0ea02444..66a9429221 100644 --- a/src/nm-helpers/README.md +++ b/src/nm-helpers/README.md @@ -17,6 +17,14 @@ all the threads of the process). This is not directly useful to the user. +nm-libnm-helper +--------------- + +A internal helper application that is spawned by libnm to perform +certain actions without impacting the calling process. + +This is not directly useful to the user. + nm-priv-helper -------------- diff --git a/src/nm-helpers/meson.build b/src/nm-helpers/meson.build index 5f330cbc94..7c148079d2 100644 --- a/src/nm-helpers/meson.build +++ b/src/nm-helpers/meson.build @@ -18,6 +18,26 @@ executable( install_dir: nm_libexecdir, ) +# nm-libnm-helper + +executable( + 'nm-libnm-helper', + ['nm-libnm-helper.c'], + include_directories : [ + src_inc, + top_inc, + ], + dependencies: [ + glib_dep, + ], + link_with: [ + libnm_glib_aux, + libnm_std_aux, + ], + install: true, + install_dir: nm_libexecdir, +) + # nm-priv-helper configure_file( diff --git a/src/nm-helpers/nm-libnm-helper.c b/src/nm-helpers/nm-libnm-helper.c new file mode 100644 index 0000000000..bd0ba67d94 --- /dev/null +++ b/src/nm-helpers/nm-libnm-helper.c @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "libnm-std-aux/nm-default-std.h" + +#include + +enum { + RETURN_SUCCESS = 0, + RETURN_INVALID_CMD = 1, + RETURN_INVALID_ARGS = 2, + RETURN_ERROR = 3, +}; + +static int +read_file_as_user(const char *filename, const char *user) +{ + char error[1024]; + + if (!nm_utils_set_effective_user(user, error, sizeof(error))) { + fprintf(stderr, "Failed to set effective user '%s': %s", user, error); + return RETURN_ERROR; + } + + if (!nm_utils_read_file_to_stdout(filename, error, sizeof(error))) { + fprintf(stderr, "Failed to read file '%s' as user '%s': %s", filename, user, error); + return RETURN_ERROR; + } + + return RETURN_SUCCESS; +} + +int +main(int argc, char **argv) +{ + if (argc <= 1) + return RETURN_INVALID_CMD; + + if (nm_streq(argv[1], "read-file-as-user")) { + if (argc != 4) + return RETURN_INVALID_ARGS; + return read_file_as_user(argv[2], argv[3]); + } + + return RETURN_INVALID_CMD; +} \ No newline at end of file From 599cc1ed1d0306905fa7581eded85c45defe582a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Fri, 12 Dec 2025 14:26:31 +0100 Subject: [PATCH 045/153] std-aux: use _nm_strerror_r The function strerror_r returns an int per POSIX spec, but GNU version returns char *. Using it fails the compilation in Alpine, so use _nm_strerror_r instead that handles both cases. Fixes: 41e28b900f59 ('daemon-helper: add read-file-as-user') --- src/libnm-std-aux/nm-std-utils.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libnm-std-aux/nm-std-utils.c b/src/libnm-std-aux/nm-std-utils.c index 6c909dfab3..ef0e445d76 100644 --- a/src/libnm-std-aux/nm-std-utils.c +++ b/src/libnm-std-aux/nm-std-utils.c @@ -117,7 +117,7 @@ nm_utils_set_effective_user(const char *user, char *errbuf, size_t errbuf_len) errbuf_len, "error getting user entry: %d (%s)\n", errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); } return false; } @@ -129,7 +129,7 @@ nm_utils_set_effective_user(const char *user, char *errbuf, size_t errbuf_len) "failed to change group to %u: %d (%s)\n", pwentry->pw_gid, errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); return false; } @@ -140,7 +140,7 @@ nm_utils_set_effective_user(const char *user, char *errbuf, size_t errbuf_len) "failed to reset supplementary group list to %u: %d (%s)\n", pwentry->pw_gid, errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); return false; } @@ -151,7 +151,7 @@ nm_utils_set_effective_user(const char *user, char *errbuf, size_t errbuf_len) "failed to change user to %u: %d (%s)\n", pwentry->pw_uid, errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); return false; } @@ -176,7 +176,7 @@ nm_utils_read_file_to_stdout(const char *filename, char *errbuf, size_t errbuf_l errbuf_len, "error opening the file: %d (%s)", errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); return false; } @@ -187,7 +187,7 @@ nm_utils_read_file_to_stdout(const char *filename, char *errbuf, size_t errbuf_l errbuf_len, "error writing to stdout: %d (%s)", errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); return false; } } @@ -198,7 +198,7 @@ nm_utils_read_file_to_stdout(const char *filename, char *errbuf, size_t errbuf_l errbuf_len, "error reading the file: %d (%s)", errsv, - strerror_r(errsv, error, sizeof(error))); + _nm_strerror_r(errsv, error, sizeof(error))); return false; } From 118475d571a28eef96373d6ebb6618cdb4f9e93a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Fri, 12 Dec 2025 15:20:41 +0100 Subject: [PATCH 046/153] ci: build with -D systemdsystemgeneratordir=no Avoid build failures in some distros. ERROR: Assert failed: systemd required but not found, please provide a valid systemd user generator dir or disable it Fixes: 636fb5ef2464 ('systemd: install initrd services using a generator') --- contrib/scripts/nm-ci-run.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/scripts/nm-ci-run.sh b/contrib/scripts/nm-ci-run.sh index 57b867c550..4fd47c1980 100755 --- a/contrib/scripts/nm-ci-run.sh +++ b/contrib/scripts/nm-ci-run.sh @@ -169,6 +169,7 @@ meson setup build \ -D ld_gc=false \ -D session_tracking=no \ -D systemdsystemunitdir=no \ + -D systemdsystemgeneratordir=no \ -D systemd_journal=false \ -D selinux=false \ -D libaudit=no \ From 8e0825f9cd4f9a8d923abba4c7a69ce9b700b273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Fri, 12 Dec 2025 16:01:44 +0100 Subject: [PATCH 047/153] release: bump version to 1.57.1 (development) --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 00a50cc64e..606d8c7a19 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ 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.57.0', + version: '1.57.1', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', From 3a4e18e30205b958ced44382313586e6858cc027 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 3 Dec 2025 18:24:58 +0100 Subject: [PATCH 048/153] nmcli: fix "device wifi connect" command with existing connection Executing this command twice, or when a connection profile already exists for the SSID: nmcli device wifi connect $SSID password $PASSWORD returns error: Error: 802-11-wireless-security.key-mgmt: property is missing. When setting the password nmcli was wiping the existing wireless security setting. Fixes: c8ff1b30fba3 ('nmcli/dev: use secret agent for nmcli d [wifi] connect') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1688 --- src/nmcli/devices.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index 9a0181138b..4831a06e19 100644 --- a/src/nmcli/devices.c +++ b/src/nmcli/devices.c @@ -4041,6 +4041,7 @@ do_device_wifi_connect(const NMCCommand *cmd, NmCli *nmc, int argc, const char * 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)); From 427a7cf2577868cd70556923a88312a68f939009 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 4 Dec 2025 10:58:53 +0100 Subject: [PATCH 049/153] nmcli: start the agent only after updating the connection When connecting to a wifi network and providing the password on the command line, nmcli first looks if there is a compatible connection to reuse. If there is not, it creates and activates a new one via a single call to AddAndActivate(). If there is a compatible connection, nmcli first calls Update() on it to set the new password and then Activate() to bring it up. Before that, it registers a secret agent that can prompt for a new password in case of authentication failure. However, as soon as nmcli registers a secret agent, NM tries to activate again the connection if it was blocked due to a previous authentication failure. This connection attempt is going to fail because it still uses the old password, as new one hasn't been set via Update(). Change the order of operations to register the agent after Update() and before Activate(). Reproducer: nmcli device wifi connect SSID password BAD_PASSWORD nmcli device wifi connect SSID password GOOD_PASSWORD Fixes: c8ff1b30fba3 ('nmcli/dev: use secret agent for nmcli d [wifi] connect') --- src/nmcli/devices.c | 52 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index 4831a06e19..e81e710f44 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,14 +4060,8 @@ 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) @@ -4076,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) @@ -4536,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 From de1fcdcc72be03559c922f67087597432a66d1e3 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 12 Nov 2025 10:27:11 +0100 Subject: [PATCH 050/153] build: deprecate Wireless Extensions Wireless Extensions is the legacy, ioctl-based kernel interface used to configure Wi-Fi cards. It has been deprecated and replaced by the cfg80211/nl80211 API since 2007, as it doesn't support modern Wi-Fi encryption and technologies. Mark it as deprecated, so that we can get rid of some unmaintained and untested code in a future release. --- NEWS | 3 +++ meson.build | 6 +++++- meson_options.txt | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index f720a1bda6..ef3d01d025 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,9 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! 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. +* The support for Wireless Extensions is deprecated and will be + removed in a future release. Wireless Extensions are now disabled by + default. ============================================= NetworkManager-1.56 diff --git a/meson.build b/meson.build index 606d8c7a19..0ff7acbcdc 100644 --- a/meson.build +++ b/meson.build @@ -333,7 +333,11 @@ enable_iwd = get_option('iwd') assert((not enable_iwd) or enable_wifi, 'Enabling iwd support requires Wi-Fi support as well') config_h.set10('WITH_IWD', enable_iwd) -enable_wext = get_option('wext') +wext = get_option('wext') +if wext == 'true' + error('Wireless Extensions support is deprecated and will be removed in the future. Use -Dwext=force to keep using it') +endif +enable_wext = (wext == 'force') config_h.set10('HAVE_WEXT', enable_wext) # Checks for libdl - on certain platforms its part of libc diff --git a/meson_options.txt b/meson_options.txt index 6b5674443b..c015538705 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -30,7 +30,7 @@ option('hostname_persist', type: 'combo', choices: ['default', 'suse', 'gentoo', option('libaudit', type: 'combo', choices: ['yes', 'yes-disabled-by-default', 'no'], value: 'yes', description: 'Build with audit daemon support. yes-disabled-by-default enables support, but disables it unless explicitly configured via NetworkManager.conf') # features -option('wext', type: 'boolean', value: true, description: 'Enable or disable Linux Wireless Extensions') +option('wext', type: 'combo', choices: ['true', 'false', 'force' ], value: 'false', description: 'Enable or disable Linux Wireless Extensions (deprecated). wext support will be removed in a future release, don\'t rely on this.') option('wifi', type: 'boolean', value: true, description: 'enable Wi-Fi support') option('iwd', type: 'boolean', value: false, description: 'enable iwd support (experimental)') option('ppp', type: 'boolean', value: true, description: 'enable PPP/PPPoE support') From a45163b13159521a550664a25d57ce1a43fe78ac Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 12 Nov 2025 10:19:53 +0100 Subject: [PATCH 051/153] rpm: disable wireless extensions on Fedora The Fedora kernel is built without WEXT since many years: https://fedoraproject.org/wiki/Changes/RemoveWirelessExtensions --- contrib/fedora/rpm/NetworkManager.spec | 6 +----- contrib/fedora/rpm/configure-for-system.sh | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index cc952f213e..32587a188b 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -621,14 +621,10 @@ Preferably use nmcli instead. %endif %if %{with wifi} -Dwifi=true \ -%if 0%{?fedora} - -Dwext=true \ -%else - -Dwext=false \ -%endif %else -Dwifi=false \ %endif + -Dwext=false \ %if %{with iwd} -Diwd=true \ %else diff --git a/contrib/fedora/rpm/configure-for-system.sh b/contrib/fedora/rpm/configure-for-system.sh index 62999b11b5..58daed4ef5 100755 --- a/contrib/fedora/rpm/configure-for-system.sh +++ b/contrib/fedora/rpm/configure-for-system.sh @@ -387,7 +387,7 @@ meson setup\ -Db_lto="$(bool_true "$P_LTO")" \ -Dlibaudit=yes-disabled-by-default \ -Dmodem_manager="$(bool_true "$P_MODEM_MANAGER_1")" \ - $(args_enable "$P_WIFI" -Dwifi=true -Dwext="$(bool_true "$P_FEDORA")") \ + $(args_enable "$P_WIFI" -Dwifi=true -Dwext=false) \ $(args_enable "$(bool_not_true "$P_WIFI")" -Dwifi=false ) \ -Diwd="$(bool_true "$P_IWD")" \ -Dbluez5_dun="$(bool_true "$P_BLUETOOTH")" \ From 664ba417c7954b8d8178812485e21e72004022e6 Mon Sep 17 00:00:00 2001 From: Muhammet Kara Date: Mon, 22 Dec 2025 02:00:33 +0300 Subject: [PATCH 052/153] Update Turkish translation Signed-off-by: Muhammet Kara --- po/tr.po | 5388 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 3064 insertions(+), 2324 deletions(-) diff --git a/po/tr.po b/po/tr.po index 194519266d..aa37445d4d 100644 --- a/po/tr.po +++ b/po/tr.po @@ -5,53 +5,49 @@ # # Alperen Yusuf Aybar , 2006. # Necdet Yücel , 2014, 2015. -# Muhammet Kara , 2012, 2015. # Lubomir Rintel , 2016. #zanata # Thomas Haller , 2017. #zanata # Sabri Ünal , 2023. # Emin Tufan Çetin , 2023. +# Muhammet Kara , 2012-2025. # msgid "" msgstr "" "Project-Id-Version: NetworkManager\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/" "NetworkManager/issues\n" -"POT-Creation-Date: 2024-03-06 15:26+0000\n" -"PO-Revision-Date: 2023-08-16 18:17+0300\n" -"Last-Translator: Sabri Ünal \n" -"Language-Team: Türkçe \n" +"POT-Creation-Date: 2025-12-19 15:31+0000\n" +"PO-Revision-Date: 2025-12-22 01:49+0300\n" +"Last-Translator: Muhammet Kara \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Gtranslator 49.0\n" "X-Launchpad-Export-Date: 2012-01-03 09:56+0000\n" "X-POOTLE-MTIME: 1424811693.000000\n" -#: data/org.freedesktop.NetworkManager.policy.in.in:13 +#: data/org.freedesktop.NetworkManager.policy.in:13 msgid "Enable or disable system networking" msgstr "Sistem ağını etkinleştir ya da etkisizleştir" -#: data/org.freedesktop.NetworkManager.policy.in.in:14 +#: data/org.freedesktop.NetworkManager.policy.in:14 msgid "System policy prevents enabling or disabling system networking" msgstr "" "Sistem kuralları, sistem ağını etkinleştirmeyi ya da etkisizleştirmeyi " "engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:22 -#, fuzzy +#: data/org.freedesktop.NetworkManager.policy.in:22 msgid "Reload NetworkManager configuration" -msgstr "Ağ Yöneticisinin sürümünü yazdır ve çık" +msgstr "Ağ Yöneticisi yapılandırmasını yeniden yükle" -#: data/org.freedesktop.NetworkManager.policy.in.in:23 -#, fuzzy +#: data/org.freedesktop.NetworkManager.policy.in:23 msgid "System policy prevents reloading NetworkManager" -msgstr "" -"Sistem kuralları, sistem ağını etkinleştirmeyi ya da etkisizleştirmeyi " -"engelliyor" +msgstr "Sistem ilkesi, Ağ Yöneticisi'ni yeniden yüklemeyi engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:32 +#: data/org.freedesktop.NetworkManager.policy.in:32 msgid "" "Put NetworkManager to sleep or wake it up (should only be used by system " "power management)" @@ -59,142 +55,141 @@ msgstr "" "NetworkManager'i uykuda konumuna getir veya uyandır (yalnızca sistem güç " "yönetimi tarafından kullanılmalıdır)" -#: data/org.freedesktop.NetworkManager.policy.in.in:33 +#: data/org.freedesktop.NetworkManager.policy.in:33 msgid "System policy prevents putting NetworkManager to sleep or waking it up" msgstr "" "Sistem kuralları, NetworkManager'ı uykuda konumuna getirmeyi veya " "uyandırmayı engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:41 +#: data/org.freedesktop.NetworkManager.policy.in:41 msgid "Enable or disable Wi-Fi devices" msgstr "Wi-Fi aygıtlarını etkinleştir ya da etkisizleştir" -#: data/org.freedesktop.NetworkManager.policy.in.in:42 +#: data/org.freedesktop.NetworkManager.policy.in:42 msgid "System policy prevents enabling or disabling Wi-Fi devices" msgstr "" "Sistem kuralları, Wi-Fi aygıtlarını etkinleştirmeyi ya da etkisizleştirmeyi " "engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:50 +#: data/org.freedesktop.NetworkManager.policy.in:50 msgid "Enable or disable mobile broadband devices" msgstr "Mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir" -#: data/org.freedesktop.NetworkManager.policy.in.in:51 +#: data/org.freedesktop.NetworkManager.policy.in:51 msgid "System policy prevents enabling or disabling mobile broadband devices" msgstr "" "Sistem kuralları, mobil genişbant aygıtlarını etkinleştirmeyi ya da " "etkisizleştirmeyi engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:59 +#: data/org.freedesktop.NetworkManager.policy.in:59 msgid "Enable or disable WiMAX mobile broadband devices" msgstr "WiMAX mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir" -#: data/org.freedesktop.NetworkManager.policy.in.in:60 +#: data/org.freedesktop.NetworkManager.policy.in:60 msgid "" "System policy prevents enabling or disabling WiMAX mobile broadband devices" msgstr "" "Sistem kuralları, WiMAX mobil genişbant aygıtlarını etkinleştirmeyi ya da " "etkisizleştirmeyi engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:68 +#: data/org.freedesktop.NetworkManager.policy.in:68 msgid "Allow control of network connections" msgstr "Ağ bağlantılarının denetimine izin ver" -#: data/org.freedesktop.NetworkManager.policy.in.in:69 +#: data/org.freedesktop.NetworkManager.policy.in:69 msgid "System policy prevents control of network connections" msgstr "Sistem kuralları, ağ bağlantılarını denetlemeyi engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:78 -#, fuzzy +#: data/org.freedesktop.NetworkManager.policy.in:78 msgid "Allow control of Wi-Fi scans" -msgstr "Ağ bağlantılarının denetimine izin ver" +msgstr "Kablosuz ağ taramalarının denetimine izin ver" -#: data/org.freedesktop.NetworkManager.policy.in.in:79 -#, fuzzy +#: data/org.freedesktop.NetworkManager.policy.in:79 msgid "System policy prevents Wi-Fi scans" -msgstr "" -"Sistem kuralları, Wi-Fi aygıtlarını etkinleştirmeyi ya da etkisizleştirmeyi " -"engelliyor" +msgstr "Sistem ilkesi, kablosuz ağ taramayı engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:88 +#: data/org.freedesktop.NetworkManager.policy.in:88 msgid "Connection sharing via a protected Wi-Fi network" msgstr "Korumalı bir Wi-Fi ağı yoluyla bağlantı paylaşımı" -#: data/org.freedesktop.NetworkManager.policy.in.in:89 +#: data/org.freedesktop.NetworkManager.policy.in:89 msgid "" "System policy prevents sharing connections via a protected Wi-Fi network" msgstr "" "Sistem kuralları, korumalı kablosuz ağ yoluyla bağlantı paylaşımını önlüyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:97 +#: data/org.freedesktop.NetworkManager.policy.in:97 msgid "Connection sharing via an open Wi-Fi network" msgstr "Açık bir Wfi ağı yoluyla bağlantı paylaşımı" -#: data/org.freedesktop.NetworkManager.policy.in.in:98 +#: data/org.freedesktop.NetworkManager.policy.in:98 msgid "System policy prevents sharing connections via an open Wi-Fi network" msgstr "" "Sistem kuralları, korumasız kablosuz ağ yoluyla bağlantı paylaşımını önlüyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:106 +#: data/org.freedesktop.NetworkManager.policy.in:106 msgid "Modify personal network connections" msgstr "Kişisel ağ bağlantılarını düzenle" -#: data/org.freedesktop.NetworkManager.policy.in.in:107 +#: data/org.freedesktop.NetworkManager.policy.in:107 msgid "System policy prevents modification of personal network settings" msgstr "" "Sistem kuralları, kişisel ağ ayarlarının değiştirilmesine izin vermiyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:116 +#: data/org.freedesktop.NetworkManager.policy.in:116 msgid "Modify network connections for all users" msgstr "Tüm kullanıcılar için ağ bağlantılarını düzenle" -#: data/org.freedesktop.NetworkManager.policy.in.in:117 +#: data/org.freedesktop.NetworkManager.policy.in:117 msgid "System policy prevents modification of network settings for all users" msgstr "" "Sistem kuralları, tüm kullanıcılar için ağ ayarlarının değiştirilmesine izin " "vermiyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:126 +#: data/org.freedesktop.NetworkManager.policy.in:126 msgid "Modify persistent system hostname" msgstr "Direşken sistemin adını değiştir" -#: data/org.freedesktop.NetworkManager.policy.in.in:127 +#: data/org.freedesktop.NetworkManager.policy.in:127 msgid "System policy prevents modification of the persistent system hostname" msgstr "Sistem kuralları, direşken sistemin adının değiştirilmesini önlüyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:136 -#, fuzzy +#: data/org.freedesktop.NetworkManager.policy.in:136 msgid "Modify persistent global DNS configuration" -msgstr "Başlangıç yapılandırmasının ardından çık" +msgstr "Kalıcı genel DNS yapılandırmasını değiştir" -#: data/org.freedesktop.NetworkManager.policy.in.in:137 -#, fuzzy +#: data/org.freedesktop.NetworkManager.policy.in:137 msgid "" "System policy prevents modification of the persistent global DNS " "configuration" -msgstr "Sistem kuralları, direşken sistemin adının değiştirilmesini önlüyor" - -#: data/org.freedesktop.NetworkManager.policy.in.in:146 -msgid "Perform a checkpoint or rollback of interfaces configuration" msgstr "" +"Sistem ilkesi, kalıcı genel DNS yapılandırmasının değiştirilmesini engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:147 +#: data/org.freedesktop.NetworkManager.policy.in:146 +msgid "Perform a checkpoint or rollback of interfaces configuration" +msgstr "Arabirim yapılandırmasını denetim noktasına al veya geri al" + +#: data/org.freedesktop.NetworkManager.policy.in:147 msgid "System policy prevents the creation of a checkpoint or its rollback" msgstr "" +"Sistem ilkesi, denetim noktası oluşturulmasını veya geri alınmasını " +"engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:156 +#: data/org.freedesktop.NetworkManager.policy.in:156 msgid "Enable or disable device statistics" -msgstr "" +msgstr "Aygıt istatistiklerini etkinleştir veya devre dışı bırak" -#: data/org.freedesktop.NetworkManager.policy.in.in:157 +#: data/org.freedesktop.NetworkManager.policy.in:157 msgid "System policy prevents enabling or disabling device statistics" msgstr "" +"Sistem ilkesi, aygıt istatistiklerinin etkinleştirilmesini veya devre dışı " +"bırakılmasını engelliyor" -#: data/org.freedesktop.NetworkManager.policy.in.in:165 +#: data/org.freedesktop.NetworkManager.policy.in:165 msgid "Enable or disable connectivity checking" msgstr "Bağlanabilirlik denetimini etkinleştir ya da devre dışı bırak" -#: data/org.freedesktop.NetworkManager.policy.in.in:166 +#: data/org.freedesktop.NetworkManager.policy.in:166 msgid "System policy prevents enabling or disabling connectivity checking" msgstr "" "Sistem ilkesi, bağlanabilirlik denetimini etkisizleştirmeyi ya da devre dışı " @@ -211,7 +206,7 @@ msgid "%s %u" msgstr "%s %u" #: src/core/devices/adsl/nm-device-adsl.c:118 -#: src/libnmc-setting/nm-meta-setting-desc.c:8661 +#: src/libnmc-setting/nm-meta-setting-desc.c:9005 msgid "ADSL connection" msgstr "ADSL bağlantısı" @@ -221,10 +216,8 @@ msgid "%s Network" msgstr "%s Ağı" #: src/core/devices/bluetooth/nm-device-bt.c:303 -#, fuzzy -#| msgid "PAN requested, but Bluetooth device does not support NAP" msgid "NAP requested, but Bluetooth device does not support NAP" -msgstr "PAN isteği yapıldı, ancak Bluetooth aygıtı NAP desteklemiyor" +msgstr "NAP isteği yapıldı, ancak Bluetooth aygıtı NAP desteklemiyor" #: src/core/devices/bluetooth/nm-device-bt.c:316 msgid "NAP connection" @@ -251,12 +244,12 @@ msgid "DUN connection must include a GSM or CDMA setting" msgstr "DUN bağlantısı bir GSM ya da CDMA ayarı içermek zorundadır" #: 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:920 msgid "GSM connection" msgstr "GSM bağlantısı" #: 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:940 msgid "CDMA connection" msgstr "CDMA bağlantısı" @@ -264,19 +257,19 @@ msgstr "CDMA bağlantısı" msgid "Unknown/unhandled Bluetooth connection type" msgstr "Bilinmeyen/yakalanmamoş Bluetooth bağlantı tipi" -#: 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 "bağlantı aygıtla eşleşmiyor" -#: src/core/devices/nm-device-6lowpan.c:162 +#: src/core/devices/nm-device-6lowpan.c:154 msgid "6LOWPAN connection" msgstr "6LOWPAN bağlantısı" -#: src/core/devices/nm-device-bond.c:95 +#: src/core/devices/nm-device-bond.c:94 msgid "Bond connection" msgstr "Bond bağlantısı" -#: src/core/devices/nm-device-bridge.c:164 +#: src/core/devices/nm-device-bridge.c:165 msgid "Bridge connection" msgstr "Köprü bağlantısı" @@ -289,21 +282,21 @@ msgstr "Temsili bağlantı" msgid "Wired connection %d" msgstr "Kablolu bağlantı %d" -#: src/core/devices/nm-device-ethernet.c:1641 -#: src/libnmc-setting/nm-meta-setting-desc.c:8703 +#: src/core/devices/nm-device-ethernet.c:1660 +#: src/libnmc-setting/nm-meta-setting-desc.c:9049 msgid "Veth connection" msgstr "Veth bağlantısı" -#: src/core/devices/nm-device-ethernet.c:1699 +#: src/core/devices/nm-device-ethernet.c:1717 msgid "PPPoE connection" msgstr "PPPoE bağlantısı" -#: src/core/devices/nm-device-ethernet.c:1699 +#: src/core/devices/nm-device-ethernet.c:1717 msgid "Wired connection" msgstr "Kablolu bağlantı" #: src/core/devices/nm-device-infiniband.c:160 -#: src/libnmc-setting/nm-meta-setting-desc.c:8676 +#: src/libnmc-setting/nm-meta-setting-desc.c:9020 msgid "InfiniBand connection" msgstr "InfiniBand bağlantısı" @@ -312,12 +305,10 @@ msgid "IP tunnel connection" msgstr "IP tünel bağlantısı" #: src/core/devices/nm-device-loopback.c:67 -#, fuzzy -#| msgid "ADSL connection" msgid "Loopback connection" -msgstr "ADSL bağlantısı" +msgstr "Geri döngü bağlantısı" -#: src/core/devices/nm-device-macvlan.c:366 +#: src/core/devices/nm-device-macvlan.c:355 msgid "MACVLAN connection" msgstr "MACVLAN bağlantısı" @@ -325,18 +316,18 @@ msgstr "MACVLAN bağlantısı" msgid "TUN connection" msgstr "TUN bağlantısı" -#: src/core/devices/nm-device-vlan.c:380 -#: src/libnmc-setting/nm-meta-setting-desc.c:8704 +#: src/core/devices/nm-device-vlan.c:370 +#: src/libnmc-setting/nm-meta-setting-desc.c:9050 msgid "VLAN connection" msgstr "VLAN bağlantısı" #: src/core/devices/nm-device-vrf.c:185 -#: src/libnmc-setting/nm-meta-setting-desc.c:8706 +#: src/libnmc-setting/nm-meta-setting-desc.c:9052 msgid "VRF connection" msgstr "VRF bağlantısı" #: src/core/devices/nm-device-vxlan.c:385 -#: src/libnmc-setting/nm-meta-setting-desc.c:8707 +#: src/libnmc-setting/nm-meta-setting-desc.c:9053 msgid "VXLAN connection" msgstr "VLAN bağlantısı" @@ -477,9 +468,8 @@ msgid "connection does not match access point" msgstr "bağlantı, erişim noktası ile eşleşmiyor" #: src/core/devices/wifi/nm-wifi-utils.c:654 -#, fuzzy msgid "connection does not match mesh point" -msgstr "bağlantı, erişim noktası ile eşleşmiyor" +msgstr "bağlantı, örgü noktasıyla eşleşmiyor" #: src/core/devices/wifi/nm-wifi-utils.c:673 msgid "Access point is unencrypted but setting specifies security" @@ -526,10 +516,9 @@ msgid "Cannot create '%s': %s" msgstr "'%s' oluşturulamıyor: %s" #: src/core/main-utils.c:195 -#, fuzzy, c-format -#| msgid "%s is already running (pid %ld)\n" +#, c-format msgid "%s is already running (pid %lld)\n" -msgstr "%s zaten çalışıyor (pid %ld)\n" +msgstr "%s zaten çalışıyor (pid %lld)\n" #: src/core/main-utils.c:263 src/core/main.c:368 #, c-format @@ -570,9 +559,8 @@ msgid "Specify the location of a PID file" msgstr "PID dosyasının konumunu belirtin" #: src/core/main.c:240 -#, fuzzy msgid "Print NetworkManager configuration and exit" -msgstr "Ağ Yöneticisinin sürümünü yazdır ve çık" +msgstr "Ağ Yöneticisi yapılandırmasını yazdır ve çık" #: src/core/main.c:251 msgid "" @@ -592,137 +580,138 @@ msgstr "" msgid "Could not daemonize: %s [error %u]\n" msgstr "Art alan hizmeti yapılamadı: %s [hata %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/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' geçerli değil" -#: src/core/nm-config.c:566 +#: src/core/nm-config.c:567 #, c-format msgid "Bad '%s' option: " msgstr "'%s' seçeneği hatalı: " -#: src/core/nm-config.c:583 +#: src/core/nm-config.c:584 msgid "Config file location" msgstr "Yapılandırma dosyasının konumu" -#: src/core/nm-config.c:590 +#: src/core/nm-config.c:591 msgid "Config directory location" msgstr "Yapılandırma dizini konumu" -#: src/core/nm-config.c:597 +#: src/core/nm-config.c:598 msgid "System config directory location" msgstr "Sistem yapılandırma dizini konumu" -#: src/core/nm-config.c:604 +#: src/core/nm-config.c:605 msgid "Internal config file location" msgstr "İç yapılandırma dosyası konumu" -#: src/core/nm-config.c:611 +#: src/core/nm-config.c:612 msgid "State file location" msgstr "Durum dosyası konumu" -#: src/core/nm-config.c:618 +#: src/core/nm-config.c:619 msgid "State file for no-auto-default devices" -msgstr "" +msgstr "Otomatik öntanımlı olmayan aygıtlar için durum dosyası" -#: src/core/nm-config.c:625 +#: src/core/nm-config.c:626 msgid "List of plugins separated by ','" msgstr "Eklentilerin listesi (',' ile ayrılmış)" -#: src/core/nm-config.c:632 +#: src/core/nm-config.c:633 msgid "Quit after initial configuration" msgstr "Başlangıç yapılandırmasının ardından çık" -#: src/core/nm-config.c:639 +#: src/core/nm-config.c:640 msgid "Don't become a daemon, and log to stderr" msgstr "Art alan hizmeti olma ve stderr üstüne günlükle" -#: src/core/nm-config.c:648 +#: src/core/nm-config.c:649 msgid "An http(s) address for checking internet connectivity" msgstr "İnternet bağlanılabilirliğini kontrol etmek için bir http(s) adresi" -#: src/core/nm-config.c:655 +#: src/core/nm-config.c:656 msgid "The interval between connectivity checks (in seconds)" msgstr "Bağlantı kontrolleri aralığı süresi (saniye cinsinden)" -#: src/core/nm-config.c:662 +#: src/core/nm-config.c:663 msgid "The expected start of the response" msgstr "Yanıtın beklenen başlangıcı" -#: src/core/nm-config.c:671 +#: src/core/nm-config.c:672 msgid "NetworkManager options" msgstr "NetworkManager seçenekleri" -#: src/core/nm-config.c:672 -#, fuzzy +#: src/core/nm-config.c:673 msgid "Show NetworkManager options" -msgstr "NetworkManager izinleri" +msgstr "Ağ Yöneticisi seçeneklerini göster" -#: src/core/nm-manager.c:6893 src/libnmc-setting/nm-meta-setting-desc.c:8705 +#: src/core/nm-manager.c:7001 src/libnmc-setting/nm-meta-setting-desc.c:9051 msgid "VPN connection" msgstr "VPN bağlantısı" -#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5650 -#: 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:5657 +#: 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 "Bağ" -#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5721 -#: 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:5728 +#: 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 "Takım" -#: src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:6058 -#: 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:6065 +#: 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 "Köprü" -#: src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9024 -#: src/libnm-core-impl/nm-team-utils.c:2391 +#: 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 "geçersiz 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 "" +msgstr "istek %s ile başarılı oldu fakat nesne uygun olmayan bir durumda" -#: 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 "" +msgstr "işlem başarılı oldu fakat %s nesnesi mevcut değil" #: src/libnm-client-impl/nm-conn-utils.c:40 -#, fuzzy, c-format +#, c-format msgid "Invalid peer starting at %s:%zu: %s" -msgstr "geçersiz ayar adı '%s'" +msgstr "Geçersiz eş, %s:%zu konumunda başlıyor: %s" #: src/libnm-client-impl/nm-conn-utils.c:171 msgid "" "The name of the WireGuard config must be a valid interface name followed by " "\".conf\"" msgstr "" +"WireGuard yapılandırmasının adı, \".conf\" ile biten geçerli bir arayüz adı " +"olmalıdır" #: src/libnm-client-impl/nm-conn-utils.c:454 #, c-format msgid "unrecognized line at %s:%zu" -msgstr "" +msgstr "%s:%zu konumunda tanınmayan satır" #: src/libnm-client-impl/nm-conn-utils.c:461 -#, fuzzy, c-format +#, c-format msgid "invalid value for '%s' at %s:%zu" -msgstr "'%s', '%s' için geçerli bir değer değil" +msgstr "'%s' için %s:%zu konumunda geçersiz değer" #: src/libnm-client-impl/nm-conn-utils.c:469 -#, fuzzy, c-format +#, c-format msgid "invalid secret '%s' at %s:%zu" -msgstr "geçersiz VPN parolaları" +msgstr "geçersiz gizli anahtar '%s', %s:%zu konumunda" #: src/libnm-client-impl/nm-conn-utils.c:593 #, c-format @@ -781,7 +770,7 @@ msgstr "Bağlantı bir Ethernet veya PPPoE bağlantısı değil." #: src/libnm-client-impl/nm-device-ethernet.c:206 msgid "The connection and device differ in S390 subchannels." -msgstr "" +msgstr "Bağlantı ve aygıtın S390 alt kanalları farklı." #: src/libnm-client-impl/nm-device-ethernet.c:223 #, c-format @@ -789,7 +778,6 @@ msgid "Invalid device MAC address %s." msgstr "Geçersiz aygıt MAC adresi %s." #: src/libnm-client-impl/nm-device-ethernet.c:231 -#, fuzzy msgid "The MACs of the device and the connection do not match." msgstr "Aygıtın MAC adresleri ile bağlantı eşleşmiyor." @@ -799,9 +787,9 @@ msgid "Invalid MAC in the blacklist: %s." msgstr "Kara listede geçersiz MAC: %s." #: src/libnm-client-impl/nm-device-ethernet.c:252 -#, fuzzy, c-format +#, c-format msgid "Device MAC (%s) is blacklisted by the connection." -msgstr "Aygıt bağlantının gerektirdiği yetenekleri kaybediyor." +msgstr "Aygıtın MAC adresi (%s), bağlantı tarafından kara listeye alınmış." #: src/libnm-client-impl/nm-device-generic.c:80 msgid "The connection was not a generic connection." @@ -898,9 +886,8 @@ msgid "The connection was not a VXLAN connection." msgstr "Bağlantı bir VXLAN bağlantısı değildi." #: src/libnm-client-impl/nm-device-vxlan.c:393 -#, fuzzy msgid "The VXLAN identifiers of the device and the connection didn't match." -msgstr "Aygıtın VLAN tanımlayıcıları ile bağlantı eşleşmiyor." +msgstr "Aygıtın VXLAN tanımlayıcıları ile bağlantı eşleşmiyor." #: src/libnm-client-impl/nm-device-wifi-p2p.c:266 msgid "The connection was not a Wi-Fi P2P connection." @@ -922,138 +909,143 @@ msgstr "Aygıt bağlantının gerektirdiği WPA2/RSN yetenekleri kaybediyor." msgid "The connection was not a wpan connection." msgstr "Bağlantı bir wpan bağlantısı değildi." -#: 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 "Kablosuz" -#: 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 "" +msgstr "Open vSwitch Arayüzü" -#: src/libnm-client-impl/nm-device.c:1771 +#: src/libnm-client-impl/nm-device.c:1772 msgid "Open vSwitch Port" -msgstr "" +msgstr "Open vSwitch Bağlantı Noktası" -#: src/libnm-client-impl/nm-device.c:1773 +#: src/libnm-client-impl/nm-device.c:1774 msgid "Open vSwitch Bridge" -msgstr "" +msgstr "Open vSwitch Köprüsü" -#: 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 "Mobil Geniş Bant" -#: 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 "" +msgstr "Tun" -#: src/libnm-client-impl/nm-device.c:1799 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 "" +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 "" +msgstr "MACsec" -#: src/libnm-client-impl/nm-device.c:1803 +#: src/libnm-client-impl/nm-device.c:1804 msgid "Dummy" msgstr "Temsili" -#: src/libnm-client-impl/nm-device.c:1805 -#, fuzzy +#: src/libnm-client-impl/nm-device.c:1806 msgid "PPP" -msgstr "PPPoE" +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 "" +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 "Kablosuz 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 "" +msgstr "Geri Döngü (Loopback)" -#: src/libnm-client-impl/nm-device.c:1819 +#: src/libnm-client-impl/nm-device.c:1820 msgid "HSR" -msgstr "" +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:475 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:505 src/nmcli/utils.c:1852 msgid "Unknown" msgstr "Bilinmeyen" -#: src/libnm-client-impl/nm-device.c:1851 +#: src/libnm-client-impl/nm-device.c:1854 msgid "Wired" msgstr "Kablolu" -#: 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" @@ -1063,135 +1055,215 @@ 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 "Bağlantı geçerli değildi: %s" -#: src/libnm-client-impl/nm-device.c:2875 +#: src/libnm-client-impl/nm-device.c:2878 msgid "The interface names of the device and the connection didn't match" msgstr "Aygıtın arayüz isimleri ve bağlantı eşleşmiyor." #: src/libnm-client-impl/nm-secret-agent-old.c:1384 -#, fuzzy msgid "registration failed" -msgstr "Ağa katılım engellendi" +msgstr "kayıt başarısız oldu" #: 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 "Servis adı belirtilmedi" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:287 -#, fuzzy, c-format +#: 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' geçerli değil; 2 veya 3 karakter dizisi gereklidir" +msgstr "" +"'%s' geçerli değil: özellikler 'anahtar=değer' şeklinde belirtilmelidir" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:301 -#, fuzzy, c-format +#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:302 +#, c-format msgid "'%s' is not a valid key" -msgstr "'%s' geçerli bir bant değil" +msgstr "'%s' geçerli bir anahtar değil" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:306 -#, fuzzy, c-format +#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:307 +#, c-format msgid "duplicate key '%s'" -msgstr "bilinmeyen ayar adı" +msgstr "yinelenen anahtar '%s'" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:320 -#, fuzzy, c-format +#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:321 +#, c-format msgid "number for '%s' is out of range" -msgstr "'%d' değeri aralığın dışında <%d-%d>" +msgstr "'%s' için sayı, aralık dışında" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:325 -#, fuzzy, c-format +#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:326 +#, c-format msgid "value for '%s' must be a number" -msgstr "'%s' bir numara değil" +msgstr "'%s' için değer, bir sayı olmalıdır" -#: 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 "" +msgstr "'%s' için değer, mantıksal olmalıdır" -#: 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 "eksik 'name' özniteliği" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:356 -#, fuzzy, c-format +#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:357 +#, c-format msgid "invalid 'name' \"%s\"" -msgstr "geçersiz yönlendirme: %s" +msgstr "geçersiz 'ad' \"%s\"" -#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:369 -#, fuzzy, c-format +#: src/libnm-core-aux-extern/nm-libnm-core-aux.c:370 +#, c-format msgid "attribute '%s' is invalid for \"%s\"" -msgstr "'%s', '%s' için geçerli bir değer değil" +msgstr "'%s' özniteliği, \"%s\" için geçersiz" #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:425 -#, fuzzy msgid "property cannot be an empty string" -msgstr "özellik '%s=%s' için boş olamaz" +msgstr "özellik, boş bir dize olamaz" #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:442 -#, fuzzy msgid "property cannot be longer than 255 bytes" -msgstr "özellik değişemedi" +msgstr "özellik, 255 bayttan uzun olamaz" #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:453 -#, fuzzy msgid "property cannot contain any nul bytes" -msgstr "özellik '%s' protokolünü içermiyor" +msgstr "özellik, nul baytlar içeremez" #: src/libnm-core-aux-intern/nm-libnm-core-utils.c:474 msgid "invalid DSCP value; allowed values are: 'CS0', 'CS4', 'CS6'" -msgstr "" +msgstr "geçersiz DSCP değeri; izin verilen değerler: 'CS0', 'CS4', 'CS6'" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:691 +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:508 +msgid "NULL DHCP range; it should be provided as ,." +msgstr "NULL DHCP aralığı; , olarak sağlanmalıdır." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:520 +msgid "Non-NULL range and NULL addresses detected." +msgstr "NULL aralık ya da NULL adrese rastlanmadı." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:529 +msgid "Invalid DHCP range; it should be provided as ,." +msgstr "Geçersiz DHCP aralığı; , olarak sağlanmalıdır." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:538 +msgid "Start IP has invalid length." +msgstr "Bağlangıç IP adresinin uzunluğu geçersiz." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:549 +msgid "Start IP is invalid." +msgstr "Başlangıç IP adresi geçersiz." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:557 +msgid "End IP is invalid." +msgstr "Bitiş IP adresi geçersiz." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:565 +msgid "Start IP should be lower than the end IP." +msgstr "Başlangıç IP adresi, bitiş IP adresinden küçük olmalıdır." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:594 +msgid "Requested range is not in any network configured on the interface." +msgstr "Talep edilen aralık, arayüzde yapılandırılmış hiçbir ağda değil." + +#: 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 "" +"Geçersiz DHCP kira süresi değeri; öntanımlı olmalı ya da %u ile %u arasında " +"pozitif bir sayı veya %s olmalıdır." + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:754 +msgid "the string is empty" +msgstr "dizge boş" + +#: 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 "DNS-over-TLS sunucu adı boş" + +#: 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\" geçerli bir IP adresi ya da desteklenen bir URI değil" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:822 +msgid "unterminated square bracket" +msgstr "sonlandırılmamış köşeli parantez" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:836 +msgid "the interface name is too long" +msgstr "arayüz adı çok uzun" + +#: 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\" geçerli bir bağlantı noktası numarası değil" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:880 +msgid "IPv6 addresses must be enclosed in square brackets" +msgstr "IPv6 adresleri köşeli parantez içinde olmalıdır" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:888 +#, c-format +msgid "\"%s\" is not a valid IP address" +msgstr "\"%s\" geçerli bir IP adresi değil" + +#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:897 +msgid "the server name is only supported for DNS-over-TLS" +msgstr "sunucu adı yalnızca DNS-over-TLS için desteklenir" + +#: 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 yalnızca IPv6 link-local adresleri için desteklenir" + +#: 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 "eksik anahtar" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:699 +#: 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 -#, fuzzy msgid "key is too long" -msgstr "Hata: 'ssid' gerekli." +msgstr "anahtar çok uzun" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:706 +#: 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 -#, fuzzy msgid "key must be UTF8" -msgstr "Parola UTF-8 olmalı" +msgstr "anahtar, UTF8 olmalıdır" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:715 +#: 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 -#, fuzzy msgid "key contains invalid characters" -msgstr "IV, onaltılık olmayan sayılar barınırıyor." +msgstr "anahtar, geçersiz karakterler içeriyor" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:743 +#: 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 "değer eksik" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:752 +#: 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 "değer çok büyük" -#: src/libnm-core-aux-intern/nm-libnm-core-utils.c:760 +#: 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" @@ -1206,67 +1278,64 @@ msgid "unknown setting name" msgstr "bilinmeyen ayar adı" #: src/libnm-core-impl/nm-connection.c:525 -#, fuzzy msgid "duplicate setting name" -msgstr "bilinmeyen ayar adı" +msgstr "yinelenen ayar adı" #: src/libnm-core-impl/nm-connection.c:941 -#, fuzzy msgid "has an invalid UUID" -msgstr "'%s' geçerli bir UUID değil" +msgstr "geçersiz UUID'e sahip" #: src/libnm-core-impl/nm-connection.c:946 msgid "has a UUID that requires normalization" -msgstr "" +msgstr "normalleştirme gerektiren bir UUID’ye sahip" #: src/libnm-core-impl/nm-connection.c:951 -#, fuzzy msgid "has duplicate UUIDs" -msgstr "bilinmeyen ayar adı" +msgstr "yinelenen UUID'lere sahip" -#: src/libnm-core-impl/nm-connection.c:1839 +#: src/libnm-core-impl/nm-connection.c:1936 msgid "setting not found" msgstr "ayar bulunamadı" -#: 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 "ikincil olmayan bağlantılar için ayarlar gerekli" +#: 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 "ayar, bağlantı noktası olmayan bağlantılar için gereklidir" -#: 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 "ikincil bağlantıda ayara izin verilmiyor" +#: 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 "ayara, bağlantı noktası bağlantısında izin verilmiyor" -#: src/libnm-core-impl/nm-connection.c:2068 +#: src/libnm-core-impl/nm-connection.c:2166 msgid "Unexpected failure to normalize the connection" msgstr "Bağlantıyı normalleştirmede beklenmedik hata" -#: src/libnm-core-impl/nm-connection.c:2129 +#: src/libnm-core-impl/nm-connection.c:2227 msgid "Unexpected failure to verify the connection" msgstr "Bağlantı doğrulamada beklenmedik hata" -#: 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 "" +msgstr "%2$s yerine, beklenmeyen uuid %1$s" -#: src/libnm-core-impl/nm-connection.c:3095 -#: src/libnm-core-impl/nm-setting-8021x.c:2621 -#: src/libnm-core-impl/nm-setting-8021x.c:2658 -#: src/libnm-core-impl/nm-setting-8021x.c:2676 -#: src/libnm-core-impl/nm-setting-8021x.c:2814 +#: 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 +#: src/libnm-core-impl/nm-setting-8021x.c:2834 #: src/libnm-core-impl/nm-setting-adsl.c:171 #: src/libnm-core-impl/nm-setting-bluetooth.c:126 #: 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:1483 +#: src/libnm-core-impl/nm-setting-connection.c:1521 +#: src/libnm-core-impl/nm-setting-connection.c:2020 +#: 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 @@ -1275,263 +1344,292 @@ msgstr "" #: src/libnm-core-impl/nm-setting-wifi-p2p.c:119 #: src/libnm-core-impl/nm-setting-wimax.c:106 #: src/libnm-core-impl/nm-setting-wireless-security.c:912 -#: src/libnm-core-impl/nm-setting-wireless.c:902 +#: src/libnm-core-impl/nm-setting-wireless.c:1100 msgid "property is missing" msgstr "özellik eksik" -#: src/libnm-core-impl/nm-connection.c:3256 +#: src/libnm-core-impl/nm-connection.c:3355 msgid "IP Tunnel" msgstr "IP Tünel" -#: src/libnm-core-impl/nm-connection.c:3260 +#: src/libnm-core-impl/nm-connection.c:3359 msgid "TUN/TAP" -msgstr "" +msgstr "TUN/TAP" #: src/libnm-core-impl/nm-keyfile-utils.c:174 msgid "Value cannot be interpreted as a list of numbers." -msgstr "" +msgstr "Değer, sayı listesi olarak yorumlanamıyor." #: src/libnm-core-impl/nm-keyfile-utils.c:303 #, c-format msgid "value is not an integer in range [%lld, %lld]" -msgstr "" +msgstr "değer, [%lld, %lld] aralığında bir tam sayı değil" -#: src/libnm-core-impl/nm-keyfile.c:333 +#: src/libnm-core-impl/nm-keyfile.c:334 msgid "ignoring missing number" msgstr "eksik sayı gözardı ediliyor" -#: src/libnm-core-impl/nm-keyfile.c:345 +#: src/libnm-core-impl/nm-keyfile.c:346 #, c-format msgid "ignoring invalid number '%s'" msgstr "geçersiz sayı '%s' gözardı ediliyor" -#: 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 "geçersiz %s adresi gözardı ediliyor: %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 "geçersiz ağ geçidi '%s' (%s rotası için) gözardı ediliyor" -#: 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 "geçersiz %s rotası gözardı ediliyor: %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 "beklenmeyen karakter '%c' (%s adresi için): '%s' (konum %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 "beklenmeyen karakter '%c' (%s için): '%s' (konum %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 "beklenmeyen karakter '%c' (%s için önek uzunluğunda): '%s' (konum %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 değerinin sonunda çöp değer: '%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 değerinin sonunda artık kullanılmayan noktalı virgül: '%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' için geçersiz önek uzunluğu, öntanımlı %d değeri atanıyor" -#: 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' için eksik önek uzunluğu, %d öntanımlı değeri atanıyor" -#: 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 "" +"\"gateway\" anahtarı ayarlı olduğu için \"address*\" anahtarlarındaki \"%s\" " +"ağ geçidi yok sayılıyor" + +#: 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 #, c-format msgid "invalid value for \"%s\": %s" -msgstr "" +msgstr "\"%s\" için geçersiz değer: %s" -#: src/libnm-core-impl/nm-keyfile.c:1140 +#: src/libnm-core-impl/nm-keyfile.c:1168 #, c-format -msgid "ignoring invalid DNS server IPv%c address '%s'" -msgstr "geçersiz DNS sunucusu IPv%c adresi '%s' gözardı ediliyor" +msgid "ignoring invalid DNS server IPv%c address '%s': %s" +msgstr "geçersiz DNS sunucusu IPv%c adresi '%s' gözardı ediliyor: %s" -#: src/libnm-core-impl/nm-keyfile.c:1177 -#: src/libnmc-setting/nm-meta-setting-desc.c:1653 -#, fuzzy, c-format +#: 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 "" +"DNS arama değeri '%s' içinde geçersiz ayırıcı ',' veya ' ' " +"normalleştiriliyor; gelecekte anahtar dosyalarında yalnızca ';' geçerli " +"ayırıcı olacaktır" + +#: 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 "geçersiz seçenek '%s' ya da değeri '%s'" +msgstr "geçersiz seçenek '%s'; [%s] seçeneklerinden birini kullanın" -#: src/libnm-core-impl/nm-keyfile.c:1257 +#: src/libnm-core-impl/nm-keyfile.c:1326 msgid "ignoring invalid MAC address" msgstr "geçersiz MAC adresi gözardı ediliyor" -#: src/libnm-core-impl/nm-keyfile.c:1333 +#: src/libnm-core-impl/nm-keyfile.c:1402 #, c-format msgid "ignoring invalid bond option %s%s%s = %s%s%s: %s" msgstr "geçersiz bağlama seçeneği gözardı ediliyor: %s%s%s = %s%s%s: %s" -#: src/libnm-core-impl/nm-keyfile.c:1523 +#: src/libnm-core-impl/nm-keyfile.c:1592 msgid "ignoring invalid SSID" msgstr "geçersiz SSID gözardı ediliyor" -#: src/libnm-core-impl/nm-keyfile.c:1541 +#: src/libnm-core-impl/nm-keyfile.c:1610 msgid "ignoring invalid raw password" msgstr "geçersiz ham parola gözardı ediliyor" -#: src/libnm-core-impl/nm-keyfile.c:1686 +#: src/libnm-core-impl/nm-keyfile.c:1755 msgid "invalid key/cert value" msgstr "geçersiz anahtar/sertifika değeri" -#: src/libnm-core-impl/nm-keyfile.c:1701 +#: src/libnm-core-impl/nm-keyfile.c:1770 #, c-format msgid "invalid key/cert value path \"%s\"" msgstr "geçersiz anahtar/sertifika değeri yolu \"%s\"" -#: src/libnm-core-impl/nm-keyfile.c:1726 src/libnm-core-impl/nm-keyfile.c:1823 +#: 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 "sertifika ya da anahtar dosyası '%s' yok" -#: src/libnm-core-impl/nm-keyfile.c:1739 +#: src/libnm-core-impl/nm-keyfile.c:1808 #, c-format msgid "invalid PKCS#11 URI \"%s\"" -msgstr "" +msgstr "geçersiz PKCS#11 URI \"%s\"" -#: src/libnm-core-impl/nm-keyfile.c:1785 +#: src/libnm-core-impl/nm-keyfile.c:1854 msgid "invalid key/cert value data:;base64, is not base64" msgstr "geçersiz anahtar/sertifika verisi:;base64, base64 değil" -#: src/libnm-core-impl/nm-keyfile.c:1798 +#: src/libnm-core-impl/nm-keyfile.c:1867 msgid "invalid key/cert value data:;base64,file://" msgstr "geçersiz anahtar/sertifika değeri verisi:;base64,file://" -#: src/libnm-core-impl/nm-keyfile.c:1839 +#: src/libnm-core-impl/nm-keyfile.c:1908 msgid "invalid key/cert value is not a valid blob" msgstr "geçersiz anahtar/sertifika değeri, geçerli bir blob değil" -#: src/libnm-core-impl/nm-keyfile.c:1941 +#: src/libnm-core-impl/nm-keyfile.c:2010 #, c-format msgid "invalid parity value '%s'" msgstr "geçersiz parite değeri '%s'" -#: src/libnm-core-impl/nm-keyfile.c:1963 src/libnm-core-impl/nm-keyfile.c:3545 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:2032 src/libnm-core-impl/nm-keyfile.c:3611 +#, c-format msgid "invalid setting: %s" -msgstr "geçersiz ayar adı '%s'" +msgstr "geçersiz ayar: %s" -#: src/libnm-core-impl/nm-keyfile.c:1983 +#: src/libnm-core-impl/nm-keyfile.c:2052 #, c-format msgid "ignoring invalid team configuration: %s" -msgstr "" +msgstr "geçersiz takım yapılandırılması göz ardı ediliyor: %s" -#: src/libnm-core-impl/nm-keyfile.c:2104 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:2173 +#, c-format msgid "invalid qdisc: %s" -msgstr "geçersiz IP adresi: %s" +msgstr "geçersiz qdisc: %s" -#: src/libnm-core-impl/nm-keyfile.c:2154 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:2223 +#, c-format msgid "invalid tfilter: %s" -msgstr "geçersiz yönlendirme: %s" +msgstr "geçersiz tfilter: %s" -#: src/libnm-core-impl/nm-keyfile.c:3370 +#: src/libnm-core-impl/nm-keyfile.c:3436 #, c-format msgid "error loading setting value: %s" msgstr "ayar değeri yüklenirken hata: %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: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 "" +msgstr "değer, tam sayı olarak yorumlanamıyor" -#: src/libnm-core-impl/nm-keyfile.c:3486 -#, 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 "" -"geçersiz bayt ögesi '%d' gözardı ediliyor (0 ile 255 -dahil- arasında değil)" +"geçersiz bayt ögesi '%u' gözardı ediliyor (0 ile 255 -dahil- arasında değil)" -#: src/libnm-core-impl/nm-keyfile.c:3570 +#: src/libnm-core-impl/nm-keyfile.c:3646 +#, c-format +msgid "invalid value for '%s.dhcp-send-hostname'" +msgstr "'%s.dhcp-send-hostname' için geçersiz değer" + +#: src/libnm-core-impl/nm-keyfile.c:3667 +#, c-format +msgid "invalid value for '%s.dhcp-send-hostname-deprecated'" +msgstr "'%s.dhcp-send-hostname-deprecated' için geçersiz değer" + +#: src/libnm-core-impl/nm-keyfile.c:3692 #, c-format msgid "invalid setting name '%s'" msgstr "geçersiz ayar adı '%s'" -#: src/libnm-core-impl/nm-keyfile.c:3617 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3741 +#, c-format msgid "invalid key '%s.%s'" -msgstr "geçersiz seçenek '%s'" +msgstr "geçersiz anahtar '%s.%s'" -#: src/libnm-core-impl/nm-keyfile.c:3633 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3757 +#, c-format msgid "key '%s.%s' is not boolean" -msgstr "'%s' bir numara değil" +msgstr "'%s.%s' anahtarı, bir mantıksal değer değil" -#: src/libnm-core-impl/nm-keyfile.c:3650 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3774 +#, c-format msgid "key '%s.%s' is not a uint32" -msgstr "'%s' bir numara değil" +msgstr "'%s.%s' anahtarı, bir uint32 değeri değil" -#: src/libnm-core-impl/nm-keyfile.c:3707 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3831 +#, c-format msgid "invalid peer public key in section '%s'" -msgstr "geçersiz seçenek '%s'" +msgstr "'%s' bölümünde, geçersiz eş genel anahtarı" -#: src/libnm-core-impl/nm-keyfile.c:3722 +#: 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 "" +"'%s.%s' anahtarı, base64 kodlamasında geçerli bir 256 bit anahtar değil" -#: src/libnm-core-impl/nm-keyfile.c:3745 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3869 +#, c-format msgid "key '%s.%s' is not a valid secret flag" -msgstr "'%s' geçerli bir DCB bayrağı değil" +msgstr "'%s.%s' anahtarı, geçerli bir gizli bayrak değil" -#: src/libnm-core-impl/nm-keyfile.c:3768 -#, 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 "'%s' bir numara değil" +msgstr "'%s.%s' anahtarı, 0 ile 2^32 aralığında bir tam sayı değil" -#: src/libnm-core-impl/nm-keyfile.c:3784 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3908 +#, c-format msgid "key '%s.%s' is not a valid endpoint" -msgstr "'%s' geçerli bir bant değil" +msgstr "'%s.%s' anahtarı, geçerli bir uç nokta değil" -#: src/libnm-core-impl/nm-keyfile.c:3810 +#: src/libnm-core-impl/nm-keyfile.c:3934 #, c-format msgid "key '%s.%s' has invalid allowed-ips" -msgstr "" +msgstr "'%s.%s' anahtarının izin verilen IP'leri geçersiz" -#: src/libnm-core-impl/nm-keyfile.c:3825 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-keyfile.c:3949 +#, c-format msgid "peer '%s' is invalid: %s" -msgstr "'%s' geçerli değil" +msgstr "eş '%s', geçersiz: %s" -#: src/libnm-core-impl/nm-keyfile.c:4353 +#: src/libnm-core-impl/nm-keyfile.c:4499 #, c-format msgid "unsupported option \"%s.%s\" of variant type %s" -msgstr "" +msgstr "desteklenmeyen seçenek \"%s.%s\", varyan türü %s" #: src/libnm-core-impl/nm-setting-6lowpan.c:81 -#: src/libnm-core-impl/nm-setting-hsr.c:131 -#: src/libnm-core-impl/nm-setting-hsr.c:149 +#: src/libnm-core-impl/nm-setting-hsr.c:171 +#: src/libnm-core-impl/nm-setting-hsr.c:189 #: src/libnm-core-impl/nm-setting-veth.c:81 -#, fuzzy msgid "property is not specified" -msgstr "özellik belirtilmemiş ve '%s:%s' değil" +msgstr "özellik belirtilmemiş" #: src/libnm-core-impl/nm-setting-6lowpan.c:104 #: src/libnm-core-impl/nm-setting-macsec.c:333 @@ -1542,6 +1640,7 @@ msgstr "'%s' değer '%s=%s' ile eşleşmiyor" #: 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 @@ -1550,71 +1649,70 @@ msgstr "'%s' değer '%s=%s' ile eşleşmiyor" msgid "'%s' is neither an UUID nor an interface name" msgstr "'%s' UUID ya da bir arayüz ismi değil" -#: src/libnm-core-impl/nm-setting-8021x.c:235 +#: src/libnm-core-impl/nm-setting-8021x.c:237 msgid "binary data missing" msgstr "ikili veri eksik" -#: src/libnm-core-impl/nm-setting-8021x.c:267 +#: src/libnm-core-impl/nm-setting-8021x.c:269 msgid "URI not NUL terminated" msgstr "URI, NUL sonlandırılmamış" -#: src/libnm-core-impl/nm-setting-8021x.c:276 +#: src/libnm-core-impl/nm-setting-8021x.c:278 msgid "URI is empty" msgstr "URI boş" -#: src/libnm-core-impl/nm-setting-8021x.c:284 +#: src/libnm-core-impl/nm-setting-8021x.c:286 msgid "URI is not valid UTF-8" msgstr "URI geçerli bir UTF-8 değil" -#: src/libnm-core-impl/nm-setting-8021x.c:302 +#: src/libnm-core-impl/nm-setting-8021x.c:304 msgid "data missing" msgstr "veri eksik" -#: src/libnm-core-impl/nm-setting-8021x.c:323 -#: src/libnm-core-impl/nm-setting-8021x.c:691 +#: src/libnm-core-impl/nm-setting-8021x.c:325 +#: src/libnm-core-impl/nm-setting-8021x.c:693 #, c-format msgid "certificate is invalid: %s" msgstr "sertifika geçersiz: %s" -#: src/libnm-core-impl/nm-setting-8021x.c:332 -#, fuzzy +#: src/libnm-core-impl/nm-setting-8021x.c:334 msgid "certificate detected as invalid scheme" -msgstr "sertifika geçersiz: %s" +msgstr "sertifika, geçersiz bir şema olarak algılandı" -#: src/libnm-core-impl/nm-setting-8021x.c:558 +#: src/libnm-core-impl/nm-setting-8021x.c:560 msgid "CA certificate must be in X.509 format" msgstr "CA sertifikası X.509 biçiminde olmalı" -#: src/libnm-core-impl/nm-setting-8021x.c:570 +#: src/libnm-core-impl/nm-setting-8021x.c:572 msgid "invalid certificate format" msgstr "geçersiz sertifika biçimi" -#: src/libnm-core-impl/nm-setting-8021x.c:702 +#: src/libnm-core-impl/nm-setting-8021x.c:704 msgid "password is not supported when certificate is not on a PKCS#11 token" -msgstr "" +msgstr "sertifika bir PKCS#11 belirteci üzerinde değilse parola desteklenmez" -#: src/libnm-core-impl/nm-setting-8021x.c:2626 -#: src/libnm-core-impl/nm-setting-8021x.c:2666 -#: src/libnm-core-impl/nm-setting-8021x.c:2685 -#: src/libnm-core-impl/nm-setting-8021x.c:2855 +#: src/libnm-core-impl/nm-setting-8021x.c:2646 +#: src/libnm-core-impl/nm-setting-8021x.c:2686 +#: src/libnm-core-impl/nm-setting-8021x.c:2705 #: src/libnm-core-impl/nm-setting-8021x.c:2875 #: src/libnm-core-impl/nm-setting-8021x.c:2895 -#: src/libnm-core-impl/nm-setting-8021x.c:2961 +#: src/libnm-core-impl/nm-setting-8021x.c:2915 #: src/libnm-core-impl/nm-setting-8021x.c:2981 -#: src/libnm-core-impl/nm-setting-8021x.c:3035 +#: src/libnm-core-impl/nm-setting-8021x.c:3001 +#: src/libnm-core-impl/nm-setting-8021x.c:3055 #: 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:1493 +#: src/libnm-core-impl/nm-setting-connection.c:1536 +#: src/libnm-core-impl/nm-setting-connection.c:1788 +#: src/libnm-core-impl/nm-setting-gsm.c:560 +#: src/libnm-core-impl/nm-setting-gsm.c:575 +#: src/libnm-core-impl/nm-setting-gsm.c:618 +#: src/libnm-core-impl/nm-setting-gsm.c:627 +#: 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 #: src/libnm-core-impl/nm-setting-pppoe.c:159 #: src/libnm-core-impl/nm-setting-vpn.c:553 @@ -1622,37 +1720,37 @@ 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 +#: src/libnm-core-impl/nm-setting.c:2654 msgid "property is empty" msgstr "özellik boş" -#: src/libnm-core-impl/nm-setting-8021x.c:2699 +#: src/libnm-core-impl/nm-setting-8021x.c:2719 #, c-format msgid "has to match '%s' property for PKCS#12" msgstr "PKCS#12 için '%s' özelliği eşleşmek zorunda" -#: src/libnm-core-impl/nm-setting-8021x.c:2722 +#: src/libnm-core-impl/nm-setting-8021x.c:2742 msgid "exactly one property must be set" -msgstr "" +msgstr "tam olarak tek bir özellik ayarlanmalıdır" -#: src/libnm-core-impl/nm-setting-8021x.c:2802 -#, fuzzy +#: src/libnm-core-impl/nm-setting-8021x.c:2822 msgid "can be enabled only on Ethernet connections" -msgstr "Bağlantı silinemedi: %s" +msgstr "yalnızca kablolu bağlantılar üzerinde etkinleştirilebilir" -#: src/libnm-core-impl/nm-setting-8021x.c:2823 +#: src/libnm-core-impl/nm-setting-8021x.c:2843 #: src/libnm-core-impl/nm-setting-bluetooth.c:108 +#: 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-ip6-config.c:301 -#: src/libnm-core-impl/nm-setting-ip6-config.c:317 +#: 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 #: src/libnm-core-impl/nm-setting-wifi-p2p.c:131 #: src/libnm-core-impl/nm-setting-wimax.c:119 -#: src/libnm-core-impl/nm-setting-wired.c:842 -#: src/libnm-core-impl/nm-setting-wired.c:855 +#: src/libnm-core-impl/nm-setting-wired.c:1028 +#: src/libnm-core-impl/nm-setting-wired.c:1041 #: src/libnm-core-impl/nm-setting-wireless-security.c:1008 #: src/libnm-core-impl/nm-setting-wireless-security.c:1020 #: src/libnm-core-impl/nm-setting-wireless-security.c:1032 @@ -1661,19 +1759,19 @@ msgstr "Bağlantı silinemedi: %s" #: src/libnm-core-impl/nm-setting-wireless-security.c:1089 #: src/libnm-core-impl/nm-setting-wireless-security.c:1156 #: src/libnm-core-impl/nm-setting-wireless-security.c:1205 -#: src/libnm-core-impl/nm-setting-wireless.c:998 -#: src/libnm-core-impl/nm-setting-wireless.c:1010 -#: src/libnm-core-impl/nm-setting-wireless.c:1023 +#: src/libnm-core-impl/nm-setting-wireless.c:1196 +#: src/libnm-core-impl/nm-setting-wireless.c:1208 +#: 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:4557 +#: src/libnm-core-impl/nm-utils.c:4560 msgid "property is invalid" msgstr "özellik geçersiz" -#: src/libnm-core-impl/nm-setting-8021x.c:2849 #: src/libnm-core-impl/nm-setting-8021x.c:2869 #: src/libnm-core-impl/nm-setting-8021x.c:2889 -#: src/libnm-core-impl/nm-setting-8021x.c:2955 +#: src/libnm-core-impl/nm-setting-8021x.c:2909 #: src/libnm-core-impl/nm-setting-8021x.c:2975 +#: src/libnm-core-impl/nm-setting-8021x.c:2995 #: src/libnm-core-impl/nm-setting-adsl.c:191 #: src/libnm-core-impl/nm-setting-adsl.c:204 #: src/libnm-core-impl/nm-setting-bluetooth.c:143 @@ -1682,15 +1780,18 @@ msgstr "özellik geçersiz" msgid "'%s' is not a valid value for the property" msgstr "'%s' özellik için geçerli bir değer değil" -#: src/libnm-core-impl/nm-setting-8021x.c:2908 +#: src/libnm-core-impl/nm-setting-8021x.c:2928 #, c-format msgid "invalid auth flags: '%d' contains unknown flags" msgstr "" +"geçersiz kimlik doğrulama bayrakları: '%d' bilinmeyen bayraklar içeriyor" -#: src/libnm-core-impl/nm-setting-8021x.c:2933 +#: src/libnm-core-impl/nm-setting-8021x.c:2953 msgid "" "invalid auth flags: both enable and disable are set for the same TLS version" msgstr "" +"geçersiz kimlik doğrulama bayrakları: hem etkinleştirme (enable) hem devre " +"dışı bırakma (disable) aynı TLS sürümü için ayarlanmış" #: src/libnm-core-impl/nm-setting-bluetooth.c:167 #, c-format @@ -1698,12 +1799,13 @@ msgid "'%s' connection requires '%s' or '%s' setting" msgstr "'%s' bağlantısı '%s' ya da '%s' ayarı istiyor" #: src/libnm-core-impl/nm-setting-bluetooth.c:219 -#, fuzzy, c-format +#, c-format msgid "'%s' connection requires '%s' setting" -msgstr "'%s' bağlantısı '%s' ya da '%s' ayarı istiyor" +msgstr "'%s' bağlantısı, '%s' ayarı gerektiriyor" #: src/libnm-core-impl/nm-setting-bond-port.c:99 #: src/libnm-core-impl/nm-setting-bridge-port.c:326 +#: src/libnm-core-impl/nm-setting-generic.c:100 #: src/libnm-core-impl/nm-setting-ovs-bridge.c:151 #: src/libnm-core-impl/nm-setting-ovs-interface.c:306 #: src/libnm-core-impl/nm-setting-ovs-port.c:411 @@ -1714,14 +1816,15 @@ msgstr "eksik ayar" #: 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' ayarını içeren bir bağlantının ikincil tür ayarı '%s' olmalıdır. Bunun " -"yerine '%s'" +"'%s' ayarını içeren bir bağlantının bağlantı noktası türü '%s' olarak " +"ayarlanmış olmalıdır. Bunun yerine şu anda '%s'" #: src/libnm-core-impl/nm-setting-bond.c:524 #, c-format @@ -1729,24 +1832,23 @@ msgid "'%s' option is empty" msgstr "'%s' seçeneği boş" #: src/libnm-core-impl/nm-setting-bond.c:537 -#, fuzzy, c-format -#| msgid "'%s' is not a valid IPv4 address for '%s' option" +#, c-format msgid "'%s' is not a valid %s address for '%s' option" -msgstr "'%s', '%s' seçeneği için geçerli bir IPv4 adresi değil" +msgstr "'%1$s', '%3$s' seçeneği için geçerli bir '%2$s' adresi değil" #: src/libnm-core-impl/nm-setting-bond.c:565 msgid "missing option name" msgstr "eksik seçenek arı" #: src/libnm-core-impl/nm-setting-bond.c:570 -#, fuzzy, c-format +#, c-format msgid "invalid option '%s'" msgstr "geçersiz seçenek '%s'" #: src/libnm-core-impl/nm-setting-bond.c:609 -#, fuzzy, c-format +#, c-format msgid "invalid value '%s' for option '%s'" -msgstr "geçersiz seçenek '%s' ya da değeri '%s'" +msgstr "'%2$s' seçeneği için geçersiz değer '%1$s'" #: src/libnm-core-impl/nm-setting-bond.c:923 #, c-format @@ -1767,7 +1869,7 @@ msgstr "'%s=%s', '%s > 0' ile uyumlu değil" #: src/libnm-core-impl/nm-setting-bond.c:974 #, c-format msgid "'%s' is not valid for the '%s' option: %s" -msgstr "" +msgstr "'%s', '%s' seçeneği için geçerli değil: %s" #: src/libnm-core-impl/nm-setting-bond.c:986 #, c-format @@ -1782,20 +1884,19 @@ msgstr "'%s=%s', '%s' için geçerli bir yapılandırma değil" #: 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 "'%s' seçeneği, '%s' seçeneğinin ayarlanması için gerekli" +msgstr "'%s' seçeneği, etkinleştirilmek için '%s' seçeneğini gerektirir" #: 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 "'%s' seçeneği boş" +msgstr "'%s' seçeneği, '%s' değerinin katı olan bir değere sahip olmalıdır" #: src/libnm-core-impl/nm-setting-bond.c:1073 -#, fuzzy, c-format -#| msgid "'%s' option requires '%s' option to be set" +#, c-format msgid "'%s' option requires '%s' or '%s'option to be set" -msgstr "'%s' seçeneği, '%s' seçeneğinin ayarlanması için gerekli" +msgstr "'%s' seçeneği, '%s' ya da '%s' seçeneğinin ayarlanmasını gerektirir" #: src/libnm-core-impl/nm-setting-bond.c:1085 #: src/libnm-core-impl/nm-setting-bond.c:1095 @@ -1812,17 +1913,17 @@ msgstr "'%s' seçeneği yalnızca '%s' kipi ile geçerli olur" #: src/libnm-core-impl/nm-setting-bond.c:1133 #, c-format msgid "'%s' and '%s' cannot have different values" -msgstr "" +msgstr "'%s' ve '%s' farklı değerler alamaz" #: src/libnm-core-impl/nm-setting-bond.c:1146 #, c-format msgid "%s requires bond mode \"%s\"" -msgstr "" +msgstr "%s, \"%s\" bağ kipini gerektirir" #: src/libnm-core-impl/nm-setting-bond.c:1159 #, c-format msgid "%s requires xmit_hash_policy \"vlan+srcmac\"" -msgstr "" +msgstr "%s, xmit_hash_policy \"vlan+srcmac\" gerektirir" #: src/libnm-core-impl/nm-setting-bond.c:1182 #, c-format @@ -1830,9 +1931,9 @@ msgid "'%s' option should be string" msgstr "'%s' seçeneği karakter dizisi olmalı" #: src/libnm-core-impl/nm-setting-bond.c:1195 -#, fuzzy, c-format +#, c-format msgid "'%s' option is not valid with mode '%s'" -msgstr "'%s' seçeneği yalnızca '%s' kipi ile geçerli olur" +msgstr "'%s' seçeneği, '%s' kipi ile geçerli değil" #: src/libnm-core-impl/nm-setting-bridge.c:1182 #, c-format @@ -1845,139 +1946,191 @@ msgstr "geçerli bir MAC adresi değildir" #: src/libnm-core-impl/nm-setting-bridge.c:1245 msgid "the mask can't contain bits 0 (STP), 1 (MAC) or 2 (LACP)" -msgstr "" +msgstr "maske, 0 (STP), 1 (MAC) ya da 2 (LACP) bitlerini içeremez" #: src/libnm-core-impl/nm-setting-bridge.c:1267 -#, fuzzy msgid "is not a valid link local MAC address" -msgstr "geçerli bir MAC adresi değildir" +msgstr "geçerli bir link-local MAC adresi değil" #: src/libnm-core-impl/nm-setting-bridge.c:1279 -#, fuzzy msgid "is not a valid VLAN filtering protocol" -msgstr "'%s' geçerli bir ethernet port numarası değildir" +msgstr "geçerli bir VLAN süzme iletişim kuralı değil" #: src/libnm-core-impl/nm-setting-bridge.c:1291 -#, fuzzy msgid "is not a valid option" -msgstr "'%s' değeri geçerli bir UUID değil" +msgstr "geçerli bir seçenek değil" #: src/libnm-core-impl/nm-setting-bridge.c:1303 -#, fuzzy, c-format +#, c-format msgid "'%s' option must be a power of 2" -msgstr "'%s' seçeneği boş" +msgstr "'%s' seçeneği 2'nin katı olmalı" #: src/libnm-core-impl/nm-setting-bridge.c:1325 msgid "bridge connection should have a ethernet setting as well" -msgstr "" +msgstr "köprü bağlantısının bir kablolu bağlantı ayarı da olmalıdır" -#: src/libnm-core-impl/nm-setting-connection.c:1146 +#: src/libnm-core-impl/nm-setting-connection.c:1377 #, c-format msgid "setting required for connection of type '%s'" msgstr "'%s' tipinin bağlantısı için ayar gerekli" -#: src/libnm-core-impl/nm-setting-connection.c:1177 +#: src/libnm-core-impl/nm-setting-connection.c:1408 #, c-format -msgid "Unknown slave type '%s'" -msgstr "Bilinmeyen ikincil tür '%s'" +msgid "Unknown port type '%s'" +msgstr "Bilinmeyen bağlantı noktası türü '%s'" -#: src/libnm-core-impl/nm-setting-connection.c:1192 +#: src/libnm-core-impl/nm-setting-connection.c:1423 #, c-format msgid "Slave connections need a valid '%s' property" msgstr "İkincil bağlantının bir geçerli '%s' özelliğine ihtiyacı var" -#: src/libnm-core-impl/nm-setting-connection.c:1216 +#: src/libnm-core-impl/nm-setting-connection.c:1446 #, c-format msgid "Cannot set '%s' without '%s'" msgstr "'%s' '%s' olamdan ayarlanamaz" -#: src/libnm-core-impl/nm-setting-connection.c:1275 +#: src/libnm-core-impl/nm-setting-connection.c:1505 #, c-format msgid "'%s' is not a valid UUID" msgstr "'%s' geçerli bir UUID değil" -#: src/libnm-core-impl/nm-setting-connection.c:1320 +#: src/libnm-core-impl/nm-setting-connection.c:1550 #, c-format msgid "connection type '%s' is not valid" msgstr "bağlantı tipi '%s' geçerli değil" -#: src/libnm-core-impl/nm-setting-connection.c:1426 -#, fuzzy, c-format -msgid "'%s' connections must be enslaved to '%s', not '%s'" -msgstr "'%s' bağlantısı '%s' ya da '%s' ayarı istiyor" +#: src/libnm-core-impl/nm-setting-connection.c:1656 +#, c-format +msgid "'%s' connections must be attached as port to '%s', not '%s'" +msgstr "'%s' bağlantıları '%s' bağlantı noktasına iliştirilmelidir, '%s' değil" -#: src/libnm-core-impl/nm-setting-connection.c:1441 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-connection.c:1671 +#, c-format msgid "metered value %d is not valid" -msgstr "'%s' değeri geçerli bir UUID değil" +msgstr "ölçülü değer %d geçerli değil" -#: 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:1685 +#: src/libnm-core-impl/nm-setting-connection.c:1699 +#: src/libnm-core-impl/nm-setting-connection.c:1713 +#: src/libnm-core-impl/nm-setting-connection.c:1774 #, c-format msgid "value %d is not valid" msgstr "değer %d geçersiz" -#: src/libnm-core-impl/nm-setting-connection.c:1499 +#: src/libnm-core-impl/nm-setting-connection.c:1729 msgid "\"disabled\" flag cannot be combined with other MPTCP flags" msgstr "" +"\"disabled\" (devre dışı) bayrağı diğer MPTCP bayrakları ile birlikte " +"kullanılamaz" -#: src/libnm-core-impl/nm-setting-connection.c:1513 +#: src/libnm-core-impl/nm-setting-connection.c:1743 msgid "cannot set both \"signal\" and \"fullmesh\" MPTCP flags" -msgstr "" +msgstr "\"signal\" ve \"fullmesh\" MPTCP bayrakları aynı anda ayarlanamaz" -#: src/libnm-core-impl/nm-setting-connection.c:1525 -#, fuzzy, c-format +#: src/libnm-core-impl/nm-setting-connection.c:1755 +#, c-format msgid "value %u is not a valid combination of MPTCP flags" -msgstr "'%s' geçerli değil; [%s] ya da [%s] kullanın" +msgstr "%u değeri, MPTCP bayraklarının geçerli bir birleşimi değil" -#: src/libnm-core-impl/nm-setting-connection.c:1572 +#: src/libnm-core-impl/nm-setting-connection.c:1802 msgid "DHCP option cannot be longer than 255 characters" msgstr "DHCP seçeneği 255 karakterden uzun olamaz" -#: src/libnm-core-impl/nm-setting-connection.c:1583 -#, fuzzy +#: src/libnm-core-impl/nm-setting-connection.c:1813 msgid "MUD URL is not a valid URL" -msgstr "'%s' geçerli bir UUID değil" +msgstr "MUD URL, geeçrli bir URL değil" -#: src/libnm-core-impl/nm-setting-connection.c:1603 -#, fuzzy +#: src/libnm-core-impl/nm-setting-connection.c:1833 msgid "invalid permissions not in format \"user:$UNAME[:]\"" -msgstr "geçersiz yönlendirme: %s" +msgstr "geçersiz izinler; \"user:$UNAME[:]\" biçiminde değil" -#: src/libnm-core-impl/nm-setting-connection.c:1632 +#: src/libnm-core-impl/nm-setting-connection.c:1849 +#: src/libnm-core-impl/nm-setting-connection.c:1866 +#, c-format +msgid "can only be set if %s.%s is set" +msgstr "yalnızca %s.%s ayarlanmışsa ayarlanabilir" + +#: src/libnm-core-impl/nm-setting-connection.c:1880 +#, c-format +msgid "is incompatible with '%s'" +msgstr "'%s' ile uyumlu değil" + +#: src/libnm-core-impl/nm-setting-connection.c:1905 +#, c-format +msgid "contains IPv4 address '%s', %s.%s cannot be 'disabled'" +msgstr "IPv4 adresi '%s' içeriyor, %s.%s 'disabled' olamaz" + +#: src/libnm-core-impl/nm-setting-connection.c:1919 +#, c-format +msgid "contains IPv4 address '%s', %s.%s cannot be 'true'" +msgstr "IPv4 adresi '%s' içeriyor, %s.%s 'true' olamaz" + +#: src/libnm-core-impl/nm-setting-connection.c:1933 +#, c-format +msgid "contains IPv4 address '%s', %s.%s must be set to 'false' explicitly" +msgstr "IPv4 adresi '%s' içeriyor, %s.%s açıkça 'false' olarak ayarlanmalı" + +#: src/libnm-core-impl/nm-setting-connection.c:1958 +#, c-format +msgid "contains IPv6 address '%s', %s.%s cannot be '%s'" +msgstr "IPv6 adresi '%s' içeriyor, %s.%s değeri '%s' olamaz" + +#: src/libnm-core-impl/nm-setting-connection.c:1973 +#, c-format +msgid "contains IPv6 address '%s', %s.%s cannot be 'true'" +msgstr "IPv6 adresi '%s' içeriyor, %s.%s 'true' olamaz" + +#: src/libnm-core-impl/nm-setting-connection.c:1987 +#, c-format +msgid "contains IPv6 address '%s', %s.%s must be set to 'false' explicitly" +msgstr "IPv6 adresi '%s' içeriyor, %s.%s açıkça 'false' olarak ayarlanmalı" + +#: src/libnm-core-impl/nm-setting-connection.c:2003 +#, fuzzy, c-format +#| msgid "invalid IPv6 address '%s'" +msgid "has an invalid IP address '%s'" +msgstr "geçersiz IPv6 adresi '%s'" + +#: src/libnm-core-impl/nm-setting-connection.c:2032 #, c-format msgid "property type should be set to '%s'" msgstr "özellik türü '%s' olarak ayarlanmalı" -#: src/libnm-core-impl/nm-setting-connection.c:1650 +#: src/libnm-core-impl/nm-setting-connection.c:2050 #, fuzzy, c-format #| msgid "slave-type '%s' requires a '%s' setting in the connection" msgid "port-type '%s' requires a '%s' setting in the connection" msgstr "ikincil tür '%s' bağlantı ayarı olarak bir '%s' gereksinimi duyuyor" -#: src/libnm-core-impl/nm-setting-connection.c:1661 -#, c-format +#: src/libnm-core-impl/nm-setting-connection.c:2061 +#, fuzzy, c-format +#| msgid "" +#| "Detect a slave connection with '%s' set and a port type '%s'. '%s' should " +#| "be set to '%s'" 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' atanmış ve bağlantı noktası türü '%s' olan bir ikincil bağlantı " "algılandı. '%s' '%s' olarak atanmalıdır." -#: src/libnm-core-impl/nm-setting-connection.c:1687 +#: src/libnm-core-impl/nm-setting-connection.c:2087 #, fuzzy, 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' atanmış ve bağlantı noktası türü '%s' olan bir ikincil bağlantı " "algılandı. '%s' '%s' olarak atanmalıdır." -#: src/libnm-core-impl/nm-setting-connection.c:1704 +#: src/libnm-core-impl/nm-setting-connection.c:2104 msgid "UUID needs normalization" msgstr "" -#: src/libnm-core-impl/nm-setting-connection.c:1719 +#: src/libnm-core-impl/nm-setting-connection.c:2121 +#, fuzzy +msgid "has duplicate addresses" +msgstr "bilinmeyen ayar adı" + +#: src/libnm-core-impl/nm-setting-connection.c:2133 msgid "read-only is deprecated and not settable for the user" msgstr "" @@ -2007,89 +2160,104 @@ msgstr "toplam %100 etmiyor" msgid "property invalid" msgstr "özellik geçersiz" -#: src/libnm-core-impl/nm-setting-ethtool.c:328 +#: src/libnm-core-impl/nm-setting-ethtool.c:345 msgid "unsupported ethtool setting" msgstr "" -#: src/libnm-core-impl/nm-setting-ethtool.c:337 +#: src/libnm-core-impl/nm-setting-ethtool.c:354 #, fuzzy msgid "setting has invalid variant type" msgstr "geçersiz parite değeri '%s'" -#: 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 "" -#: 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 "" -#: 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 +#, fuzzy, c-format +msgid "'%s' is not valid FEC modes, valid modes are combinations of %s" +msgstr "'%s' geçerli değil; [%s] ya da [%s] kullanın" + +#: src/libnm-core-impl/nm-setting-ethtool.c:436 #, c-format msgid "unknown ethtool option '%s'" msgstr "bilinmeyen ethtool seçeneği '%s'" -#: src/libnm-core-impl/nm-setting-gsm.c:337 +#: src/libnm-core-impl/nm-setting-generic.c:109 +#, fuzzy, c-format +msgid "the property is required when %s.%s is set" +msgstr "özellik '%s=%s' için boş olamaz" + +#: src/libnm-core-impl/nm-setting-gsm.c:501 #, fuzzy #| msgid "property is empty" msgid "property value is empty" msgstr "özellik boş" -#: src/libnm-core-impl/nm-setting-gsm.c:346 +#: src/libnm-core-impl/nm-setting-gsm.c:510 #, fuzzy #| msgid "property value '%s' is empty or too long (>64)" msgid "property value is too long (>64)" msgstr "özellik değeri '%s' boş ya da çok uzun (>64)" -#: src/libnm-core-impl/nm-setting-gsm.c:378 +#: src/libnm-core-impl/nm-setting-gsm.c:542 #, c-format msgid "'%s' contains invalid char(s) (use [A-Za-z._-])" msgstr "'%s' geçersiz karakter(ler) içeriyor ([A-Za-z._-] kullanın)" -#: src/libnm-core-impl/nm-setting-gsm.c:425 +#: src/libnm-core-impl/nm-setting-gsm.c:589 #, c-format msgid "'%s' length is invalid (should be 5 or 6 digits)" msgstr "'%s' uzunluğu geçerli değil (5 ya da 6 basamak olmalı)" -#: src/libnm-core-impl/nm-setting-gsm.c:439 +#: src/libnm-core-impl/nm-setting-gsm.c:603 #, c-format msgid "'%s' is not a number" msgstr "'%s' bir numara değil" -#: src/libnm-core-impl/nm-setting-gsm.c:476 +#: src/libnm-core-impl/nm-setting-gsm.c:640 #, fuzzy msgid "property is empty or wrong size" msgstr "özellik boş" -#: src/libnm-core-impl/nm-setting-gsm.c:489 +#: src/libnm-core-impl/nm-setting-gsm.c:653 #, fuzzy msgid "property must contain only digits" msgstr "özellik '%s' protokolünü içermiyor" -#: src/libnm-core-impl/nm-setting-gsm.c:503 +#: src/libnm-core-impl/nm-setting-gsm.c:667 msgid "can't be enabled when manual configuration is present" msgstr "" -#: src/libnm-core-impl/nm-setting-hsr.c:139 -#: src/libnm-core-impl/nm-setting-hsr.c:157 +#: src/libnm-core-impl/nm-setting-hsr.c:179 +#: src/libnm-core-impl/nm-setting-hsr.c:197 #: src/libnm-core-impl/nm-setting-veth.c:90 #, fuzzy, c-format msgid "'%s' is not a valid interface name" msgstr "'%s' geçerli bir arayüz adı değil" +#: src/libnm-core-impl/nm-setting-hsr.c:207 +msgid "HSR protocol cannot be configured for PRP interfaces" +msgstr "" + #: src/libnm-core-impl/nm-setting-infiniband.c:213 msgid "Must specify a P_Key if specifying parent" msgstr "Eğer üst belirtilmiş ise P_Key belirtilmek zorundadır" -#: 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 bağlantısı bir üst arayüz ismi belirtmemiş" -#: 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 "" -#: 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 " @@ -2098,7 +2266,7 @@ msgstr "" "yazılımsal sınırsız bant aygıtının arayüz ismi '%s' ve ya ayarlanmamış olmak " "zorundadır ('%s' yerine)" -#: src/libnm-core-impl/nm-setting-infiniband.c:268 +#: src/libnm-core-impl/nm-setting-infiniband.c:269 #, fuzzy, c-format #| msgid "" #| "interface name of software infiniband device must be '%s' or unset " @@ -2110,7 +2278,7 @@ msgstr "" "yazılımsal sınırsız bant aygıtının arayüz ismi '%s' ve ya ayarlanmamış olmak " "zorundadır ('%s' yerine)" -#: src/libnm-core-impl/nm-setting-infiniband.c:294 +#: src/libnm-core-impl/nm-setting-infiniband.c:295 #, fuzzy, c-format msgid "mtu can be at most %u but it is %u" msgstr "taşıma kipi '%s' için mtu en fazla %d olmalı ancak şu anda %d" @@ -2149,12 +2317,12 @@ msgid "Invalid routing metric '%s'" msgstr "Geçersiz yönlendirme metriği '%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 "bilinmeyen öznitelik" #: 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 #, fuzzy, c-format msgid "invalid attribute type '%s'" msgstr "geçersiz parite değeri '%s'" @@ -2366,84 +2534,95 @@ msgstr "sertifika geçersiz: %s" msgid "invalid address family" msgstr "geçersiz adresi ailesi" -#: src/libnm-core-impl/nm-setting-ip-config.c:5110 +#: src/libnm-core-impl/nm-setting-ip-config.c:5134 #, fuzzy, c-format msgid "rule #%u is invalid: %s" msgstr "sertifika geçersiz: %s" -#: src/libnm-core-impl/nm-setting-ip-config.c:5547 +#: src/libnm-core-impl/nm-setting-ip-config.c:5662 #, fuzzy, c-format #| msgid "%d. DNS server address is invalid" -msgid "%u. DNS server address is invalid" +msgid "%u. DNS server address is invalid: %s" msgstr "%d. DNS sunucusu adresi geçersiz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5567 +#: src/libnm-core-impl/nm-setting-ip-config.c:5685 +#, fuzzy, c-format +#| msgid "%d. DNS server address is invalid" +msgid "DNS search domain '%s' is invalid" +msgstr "%d. DNS sunucusu adresi geçersiz" + +#: src/libnm-core-impl/nm-setting-ip-config.c:5705 #, c-format msgid "%d. IP address is invalid" msgstr "%d. IP adresi geçersiz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5582 +#: src/libnm-core-impl/nm-setting-ip-config.c:5720 #, c-format msgid "%d. IP address has 'label' property with invalid type" msgstr "%d. IP adresi geçersiz türde bir 'etiket' özelliğine sahip" -#: src/libnm-core-impl/nm-setting-ip-config.c:5594 +#: src/libnm-core-impl/nm-setting-ip-config.c:5732 #, c-format msgid "%d. IP address has invalid label '%s'" msgstr "%d. IP adresi geçersiz '%s' etiketine sahip" -#: src/libnm-core-impl/nm-setting-ip-config.c:5612 +#: src/libnm-core-impl/nm-setting-ip-config.c:5750 msgid "gateway cannot be set if there are no addresses configured" msgstr "adres yapılandırılmadan ağ geçidi atanamaz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5624 +#: src/libnm-core-impl/nm-setting-ip-config.c:5762 msgid "gateway is invalid" msgstr "ağ geçidi geçersiz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5642 +#: src/libnm-core-impl/nm-setting-ip-config.c:5780 #, c-format msgid "%d. route is invalid" msgstr "%d. yönlendirme geçersiz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5655 +#: src/libnm-core-impl/nm-setting-ip-config.c:5793 #, fuzzy, c-format msgid "invalid attribute: %s" msgstr "geçersiz parite değeri '%s'" -#: src/libnm-core-impl/nm-setting-ip-config.c:5675 +#: src/libnm-core-impl/nm-setting-ip-config.c:5813 #, c-format msgid "%u. rule has wrong address-family" msgstr "" -#: src/libnm-core-impl/nm-setting-ip-config.c:5687 +#: src/libnm-core-impl/nm-setting-ip-config.c:5825 #, fuzzy, c-format msgid "%u. rule is invalid: %s" msgstr "%d. yönlendirme geçersiz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5703 +#: src/libnm-core-impl/nm-setting-ip-config.c:5841 #, fuzzy, c-format msgid "'%s' is not a valid IAID" msgstr "'%s' geçerli bir UUID değil" -#: src/libnm-core-impl/nm-setting-ip-config.c:5717 +#: src/libnm-core-impl/nm-setting-ip-config.c:5855 #, fuzzy, c-format msgid "the property cannot be set when '%s' is disabled" msgstr "özellik '%s=%s' için boş olamaz" -#: src/libnm-core-impl/nm-setting-ip-config.c:5743 +#: src/libnm-core-impl/nm-setting-ip-config.c:5881 msgid "the property is currently supported only for DHCPv4" msgstr "" -#: src/libnm-core-impl/nm-setting-ip-config.c:5760 +#: src/libnm-core-impl/nm-setting-ip-config.c:5898 #, fuzzy, c-format msgid "'%s' is not a valid IP or subnet" msgstr "'%s' geçerli bir MAC adresi değildir" -#: src/libnm-core-impl/nm-setting-ip-config.c:5784 +#: src/libnm-core-impl/nm-setting-ip-config.c:5942 #, fuzzy, c-format msgid "a gateway is incompatible with '%s'" msgstr "'%s=%s', '%s > 0' ile uyumlu değil" +#: src/libnm-core-impl/nm-setting-ip-config.c:5956 +#, fuzzy, c-format +msgid "the value is inconsistent with '%s'" +msgstr "'%s=%s', '%s > 0' ile uyumlu değil" + #: src/libnm-core-impl/nm-setting-ip-tunnel.c:364 #, fuzzy, c-format msgid "'%d' is not a valid tunnel mode" @@ -2484,79 +2663,105 @@ msgstr "Bağlantı silinemedi: %s" msgid "wired setting not allowed for mode %s" msgstr "%s kipi için kablolu ayara izin verilmiyor" -#: src/libnm-core-impl/nm-setting-ip4-config.c:171 -#: src/libnm-core-impl/nm-setting-ip6-config.c:236 +#: 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 "özellik belirtilmemiş ve '%s:%s' değil" + +#: src/libnm-core-impl/nm-setting-ipvlan.c:166 +#, fuzzy, c-format +#| msgid "Transport mode" +msgid "unsupported mode %u" +msgstr "Aktarım kipi" + +#: src/libnm-core-impl/nm-setting-ipvlan.c:176 +msgid "private and VEPA cannot be enabled at the same time" +msgstr "" + +#: 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 "" -#: 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-ip6-config.c:255 -#: src/libnm-core-impl/nm-setting-ip6-config.c:269 -#: src/libnm-core-impl/nm-setting-ip6-config.c:283 +#: 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 #, c-format msgid "this property is not allowed for '%s=%s'" msgstr "bu özellik '%s=%s' için kullanılamaz" -#: 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 "" -#: 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 "" -#: src/libnm-core-impl/nm-setting-ip4-config.c:308 +#: src/libnm-core-impl/nm-setting-ip4-config.c:331 #, fuzzy, c-format msgid "'%s' is not a valid FQDN" msgstr "'%s' geçerli bir UUID değil" -#: 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 "" -#: 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 "" -#: 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 "" -#: 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 "" -#: src/libnm-core-impl/nm-setting-ip6-config.c:335 +#: src/libnm-core-impl/nm-setting-ip6-config.c:377 msgid "value is not a valid token" msgstr "değer geçerli bir jeton değil" -#: src/libnm-core-impl/nm-setting-ip6-config.c:349 +#: src/libnm-core-impl/nm-setting-ip6-config.c:391 msgid "only makes sense with EUI64 address generation mode" msgstr "" -#: src/libnm-core-impl/nm-setting-ip6-config.c:363 +#: src/libnm-core-impl/nm-setting-ip6-config.c:405 msgid "invalid DUID" msgstr "geçersiz UUID" -#: src/libnm-core-impl/nm-setting-ip6-config.c:380 +#: src/libnm-core-impl/nm-setting-ip6-config.c:422 #, fuzzy #| msgid "Invalid IPv6 address prefix '%u'" msgid "must be a valid IPv6 address with prefix" msgstr "Geçersiz IPv6 adres ön eki '%u'" -#: src/libnm-core-impl/nm-setting-ip6-config.c:393 +#: src/libnm-core-impl/nm-setting-ip6-config.c:435 msgid "DHCP DSCP is not supported for IPv6" msgstr "" -#: src/libnm-core-impl/nm-setting-ip6-config.c:407 +#: src/libnm-core-impl/nm-setting-ip6-config.c:447 +msgid "Shared DHCP range is not supported for IPv6" +msgstr "" + +#: src/libnm-core-impl/nm-setting-ip6-config.c:459 +msgid "Shared DHCP lease time is not supported for IPv6" +msgstr "" + +#: 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:424 +#: src/libnm-core-impl/nm-setting-ip6-config.c:490 msgid "property should be TRUE when method is set to ignore or disabled" msgstr "" @@ -2598,13 +2803,6 @@ msgstr "IV, uzunluk olarak bayt cinsinden bir çift sayı olmalıdır." msgid "the key contains non-hexadecimal characters" msgstr "IV, onaltılık olmayan sayılar barınırıyor." -#: 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 "özellik belirtilmemiş ve '%s:%s' değil" - #: src/libnm-core-impl/nm-setting-macsec.c:396 #, c-format msgid "EAP key management requires '%s' setting presence" @@ -2622,39 +2820,39 @@ msgstr "" 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 +#: 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 #, fuzzy msgid "is empty" msgstr "özellik boş" #: src/libnm-core-impl/nm-setting-olpc-mesh.c:110 -#: src/libnm-core-impl/nm-setting-wireless.c:915 +#: src/libnm-core-impl/nm-setting-wireless.c:1113 msgid "SSID length is out of range <1-32> bytes" msgstr "SSID uzunluğu aşıldı <1-32> byte" #: src/libnm-core-impl/nm-setting-olpc-mesh.c:122 -#: src/libnm-core-impl/nm-setting-wireless.c:968 +#: src/libnm-core-impl/nm-setting-wireless.c:1166 #, c-format msgid "'%d' is not a valid channel" msgstr "'%d' geçerli olmayan bir kanal" #: src/libnm-core-impl/nm-setting-ovs-bridge.c:160 #, fuzzy, c-format -msgid "A connection with a '%s' setting must not have a master." +msgid "A connection with a '%s' setting must not have a controller." msgstr "" -"'%s' atanmış ve bağlantı noktası türü '%s' olan bir ikincil bağlantı " -"algılandı. '%s' '%s' olarak atanmalıdır." +"'%s' ayarını içeren bir bağlantının ikincil tür ayarı '%s' olmalıdır. Bunun " +"yerine '%s'" #: src/libnm-core-impl/nm-setting-ovs-bridge.c:174 #, fuzzy, c-format msgid "'%s' is not allowed in fail_mode" msgstr "'%s' geçerli bir Wi-Fi kipi değil" -#: 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 #, fuzzy msgid "must be a power of two" msgstr "'%s' seçeneği boş" @@ -2745,6 +2943,7 @@ msgid "Missing ovs interface type" msgstr "" #: src/libnm-core-impl/nm-setting-ovs-interface.c:315 +#: src/libnm-core-impl/nm-setting-ovs-port.c:420 #, fuzzy, c-format msgid "A connection with a '%s' setting must have a controller." msgstr "" @@ -2765,25 +2964,6 @@ msgstr "bilinmeyen ayar adı" msgid "VLANs %u and %u are not sorted in ascending order" msgstr "" -#: src/libnm-core-impl/nm-setting-ovs-port.c:420 -#, fuzzy, c-format -msgid "A connection with a '%s' setting must have a master." -msgstr "" -"'%s' ayarını içeren bir bağlantının ikincil tür ayarı '%s' olmalıdır. Bunun " -"yerine '%s'" - -#: src/libnm-core-impl/nm-setting-ovs-port.c:434 -#, fuzzy, c-format -#| msgid "" -#| "A connection with a '%s' setting must have the slave-type set to '%s'. " -#| "Instead it is '%s'" -msgid "" -"A connection with a '%s' setting must have the port-type set to '%s'. " -"Instead it is '%s'" -msgstr "" -"'%s' ayarını içeren bir bağlantının ikincil tür ayarı '%s' olmalıdır. Bunun " -"yerine '%s'" - #: src/libnm-core-impl/nm-setting-ovs-port.c:457 #, fuzzy, c-format msgid "'%s' is not allowed in vlan_mode" @@ -2835,34 +3015,34 @@ msgstr "" msgid "the script lacks FindProxyForURL function" msgstr "" -#: src/libnm-core-impl/nm-setting-sriov.c:432 -#: src/libnm-core-impl/nm-setting-wired.c:809 -#: src/libnm-core-impl/nm-setting-wired.c:825 -#: src/libnm-core-impl/nm-setting-wired.c:899 -#: src/libnm-core-impl/nm-setting-wired.c:958 -#: src/libnm-core-impl/nm-setting-wireless.c:1059 -#: src/libnm-core-impl/nm-setting-wireless.c:1079 -#: src/libnmc-setting/nm-meta-setting-desc.c:4258 +#: 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:4315 #, c-format msgid "'%s' is not a valid MAC address" msgstr "'%s' geçerli bir MAC adresi değildir" -#: 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 "" -#: src/libnm-core-impl/nm-setting-sriov.c:1117 +#: src/libnm-core-impl/nm-setting-sriov.c:1135 #, fuzzy, c-format msgid "invalid VF %u: %s" msgstr "geçersiz IP adresi: %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 "bilinmeyen ayar adı" -#: 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 "" @@ -2896,33 +3076,33 @@ msgid "there are duplicate TC filters" msgstr "" #: src/libnm-core-impl/nm-setting-team.c:119 -#: src/libnm-core-impl/nm-setting-team.c:195 -#: src/libnm-core-impl/nm-setting-team.c:327 +#: src/libnm-core-impl/nm-setting-team.c:189 +#: src/libnm-core-impl/nm-setting-team.c:321 #, fuzzy, c-format msgid "%s is out of range [0, %d]" msgstr "'%d' değeri aralığın dışında <%d-%d>" -#: src/libnm-core-impl/nm-setting-team.c:172 +#: src/libnm-core-impl/nm-setting-team.c:166 msgid "Missing target-host in nsna_ping link watcher" msgstr "" -#: src/libnm-core-impl/nm-setting-team.c:180 -#: src/libnm-core-impl/nm-setting-team.c:303 +#: src/libnm-core-impl/nm-setting-team.c:174 +#: src/libnm-core-impl/nm-setting-team.c:297 #, fuzzy, c-format msgid "target-host '%s' contains invalid characters" msgstr "IV, onaltılık olmayan sayılar barınırıyor." -#: src/libnm-core-impl/nm-setting-team.c:294 +#: src/libnm-core-impl/nm-setting-team.c:288 #, c-format msgid "Missing %s in arp_ping link watcher" msgstr "" -#: src/libnm-core-impl/nm-setting-team.c:312 +#: src/libnm-core-impl/nm-setting-team.c:306 #, fuzzy, c-format msgid "source-host '%s' contains invalid characters" msgstr "IV, onaltılık olmayan sayılar barınırıyor." -#: src/libnm-core-impl/nm-setting-team.c:337 +#: src/libnm-core-impl/nm-setting-team.c:331 #, fuzzy msgid "vlanid is out of range [-1, 4094]" msgstr "'%d' değeri aralığın dışında <%d-%d>" @@ -2981,26 +3161,26 @@ msgstr "" msgid "cannot set connection.multi-connect for VPN setting" msgstr "" -#: src/libnm-core-impl/nm-setting-vpn.c:612 +#: src/libnm-core-impl/nm-setting-vpn.c:647 msgid "setting contained a secret with an empty name" msgstr "ayar ismi olmayan bir gizli bilgi içeriyor" -#: src/libnm-core-impl/nm-setting-vpn.c:651 -#: src/libnm-core-impl/nm-setting.c:3575 +#: src/libnm-core-impl/nm-setting-vpn.c:694 +#: src/libnm-core-impl/nm-setting.c:3607 msgid "not a secret property" msgstr "gizli bir özellik değil" -#: src/libnm-core-impl/nm-setting-vpn.c:659 +#: src/libnm-core-impl/nm-setting-vpn.c:702 msgid "secret is not of correct type" msgstr "gizli bilgi doğru türde değil" -#: src/libnm-core-impl/nm-setting-vpn.c:741 -#: src/libnm-core-impl/nm-setting-vpn.c:791 +#: 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 "'%s' seçeneği boş" -#: src/libnm-core-impl/nm-setting-vpn.c:757 +#: src/libnm-core-impl/nm-setting-vpn.c:805 #, fuzzy msgid "secret flags property not found" msgstr "Gizli bayraklar özelliği '%s' bulunamadı" @@ -3021,39 +3201,39 @@ msgstr "'%s' geçerli bir MAC adresi değildir" msgid "%d is greater than local port max %d" msgstr "" -#: src/libnm-core-impl/nm-setting-wired.c:789 +#: src/libnm-core-impl/nm-setting-wired.c:973 #, c-format msgid "'%s' is not a valid Ethernet port value" msgstr "'%s' geçerli bir Ethernet port numarası değildir" -#: src/libnm-core-impl/nm-setting-wired.c:799 +#: src/libnm-core-impl/nm-setting-wired.c:983 #, c-format msgid "'%s' is not a valid duplex value" msgstr "'%s' geçerli bir dupleks değeri değil" -#: src/libnm-core-impl/nm-setting-wired.c:872 +#: src/libnm-core-impl/nm-setting-wired.c:1058 #, c-format msgid "invalid key '%s'" msgstr "geçersiz anahtar '%s'" -#: src/libnm-core-impl/nm-setting-wired.c:884 +#: src/libnm-core-impl/nm-setting-wired.c:1070 #, fuzzy, c-format msgid "invalid value for key '%s'" msgstr "geçersiz yönlendirme: %s" -#: src/libnm-core-impl/nm-setting-wired.c:933 +#: src/libnm-core-impl/nm-setting-wired.c:1119 msgid "Wake-on-LAN mode 'default' and 'ignore' are exclusive flags" msgstr "" -#: src/libnm-core-impl/nm-setting-wired.c:946 +#: src/libnm-core-impl/nm-setting-wired.c:1132 msgid "Wake-on-LAN password can only be used with magic packet mode" msgstr "" -#: src/libnm-core-impl/nm-setting-wired.c:977 +#: src/libnm-core-impl/nm-setting-wired.c:1163 msgid "both speed and duplex should have a valid value or both should be unset" msgstr "" -#: src/libnm-core-impl/nm-setting-wired.c:978 +#: src/libnm-core-impl/nm-setting-wired.c:1164 msgid "both speed and duplex are required for static link configuration" msgstr "" @@ -3084,52 +3264,52 @@ msgstr "geçersiz IP adresi: %s" msgid "invalid preshared-key-flags for peer" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1587 +#: src/libnm-core-impl/nm-setting-wireguard.c:1604 #, c-format msgid "peer #%u has no public-key" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1600 +#: src/libnm-core-impl/nm-setting-wireguard.c:1617 #, c-format msgid "peer #%u has invalid public-key" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1616 +#: src/libnm-core-impl/nm-setting-wireguard.c:1633 #, c-format msgid "peer #%u has invalid endpoint" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1648 +#: src/libnm-core-impl/nm-setting-wireguard.c:1665 #, c-format msgid "peer #%u has invalid allowed-ips setting" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1662 +#: src/libnm-core-impl/nm-setting-wireguard.c:1679 #, fuzzy, c-format msgid "peer #%u is invalid: %s" msgstr "sertifika geçersiz: %s" -#: src/libnm-core-impl/nm-setting-wireguard.c:1734 -#: src/libnm-core-impl/nm-setting-wireguard.c:1753 +#: 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 "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1777 +#: src/libnm-core-impl/nm-setting-wireguard.c:1794 msgid "key must be 32 bytes base64 encoded" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1908 +#: src/libnm-core-impl/nm-setting-wireguard.c:1925 #, fuzzy msgid "invalid peer secrets" msgstr "geçersiz VPN parolaları" -#: src/libnm-core-impl/nm-setting-wireguard.c:1934 +#: src/libnm-core-impl/nm-setting-wireguard.c:1951 #, c-format msgid "peer #%u lacks public-key" msgstr "" -#: src/libnm-core-impl/nm-setting-wireguard.c:1951 +#: src/libnm-core-impl/nm-setting-wireguard.c:1968 #, c-format msgid "non-existing peer '%s'" msgstr "" @@ -3167,48 +3347,60 @@ msgid "" "suite-b-192' key management" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:927 +#: src/libnm-core-impl/nm-setting-wireless.c:1125 #, c-format msgid "'%s' is not a valid Wi-Fi mode" msgstr "'%s' geçerli bir Wi-Fi kipi değil" -#: src/libnm-core-impl/nm-setting-wireless.c:940 +#: src/libnm-core-impl/nm-setting-wireless.c:1138 #, c-format msgid "'%s' is not a valid band" msgstr "'%s' geçerli bir bant değil" -#: src/libnm-core-impl/nm-setting-wireless.c:953 +#: src/libnm-core-impl/nm-setting-wireless.c:1151 #, c-format msgid "'%s' requires setting '%s' property" msgstr "'%s' ayarı '%s' özelliği istiyor" -#: src/libnm-core-impl/nm-setting-wireless.c:983 +#: src/libnm-core-impl/nm-setting-wireless.c:1181 #, fuzzy, c-format msgid "'%s' requires '%s' and '%s' property" msgstr "'%s' ayarı '%s' özelliği istiyor" -#: src/libnm-core-impl/nm-setting-wireless.c:1097 -#: src/libnm-core-impl/nm-team-utils.c:2251 +#: src/libnm-core-impl/nm-setting-wireless.c:1295 +#: src/libnm-core-impl/nm-team-utils.c:2254 msgid "invalid value" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:1110 +#: src/libnm-core-impl/nm-setting-wireless.c:1308 msgid "Wake-on-WLAN mode 'default' and 'ignore' are exclusive flags" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:1121 +#: src/libnm-core-impl/nm-setting-wireless.c:1319 msgid "Wake-on-WLAN trying to set unknown flag" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:1134 +#: src/libnm-core-impl/nm-setting-wireless.c:1332 msgid "AP isolation can be set only in AP mode" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:1152 +#: src/libnm-core-impl/nm-setting-wireless.c:1345 +msgid "a specific channel width can be set only in AP mode" +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 "" + +#: src/libnm-core-impl/nm-setting-wireless.c:1389 msgid "conflicting value of mac-address-randomization and cloned-mac-address" msgstr "" -#: src/libnm-core-impl/nm-setting-wireless.c:1164 +#: src/libnm-core-impl/nm-setting-wireless.c:1401 msgid "property is deprecated and not implemented" msgstr "" @@ -3226,442 +3418,454 @@ msgstr "" msgid "channel must not be between %d and %d" msgstr "" -#: 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' türündeki özellik '%s' türünün değerinden atanamadı" -#: 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 "" -#: src/libnm-core-impl/nm-setting.c:1833 +#: src/libnm-core-impl/nm-setting.c:1835 #, fuzzy, c-format msgid "can not set property: %s" msgstr "gizli bir özellik değil" -#: src/libnm-core-impl/nm-setting.c:2062 +#: src/libnm-core-impl/nm-setting.c:2064 msgid "duplicate property" msgstr "" -#: src/libnm-core-impl/nm-setting.c:2082 +#: src/libnm-core-impl/nm-setting.c:2084 msgid "unknown property" msgstr "bilinmeyen özellik" -#: 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 #, fuzzy, c-format msgid "failed to set property: %s" msgstr "Hata: '%s' özelliği ayarlanamadı: %s\n" -#: src/libnm-core-impl/nm-setting.c:2513 +#: src/libnm-core-impl/nm-setting.c:2543 #, fuzzy, c-format msgid "invalid value %d, expected %d-%d" msgstr "'%s', '%s' için geçerli bir değer değil" -#: src/libnm-core-impl/nm-setting.c:2537 +#: src/libnm-core-impl/nm-setting.c:2567 #, fuzzy msgid "cannot be empty" msgstr "'%s' seçeneği boş" -#: src/libnm-core-impl/nm-setting.c:3472 +#: src/libnm-core-impl/nm-setting.c:3504 msgid "secret not found" msgstr "gizli bilgi bulunamadı" -#: 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 #, fuzzy, c-format msgid "invalid D-Bus property \"%s\"" msgstr "geçersiz yönlendirme: %s" -#: src/libnm-core-impl/nm-team-utils.c:1559 +#: src/libnm-core-impl/nm-team-utils.c:1561 #, fuzzy, c-format msgid "duplicate D-Bus property \"%s\"" msgstr "gizli bir özellik değil" -#: src/libnm-core-impl/nm-team-utils.c:1579 +#: src/libnm-core-impl/nm-team-utils.c:1581 #, fuzzy, c-format msgid "invalid D-Bus property \"%s\" for \"%s\"" msgstr "geçersiz alan '%s'; olası alanlar: %s" -#: src/libnm-core-impl/nm-team-utils.c:1651 +#: src/libnm-core-impl/nm-team-utils.c:1653 #, fuzzy, c-format msgid "unknown link-watcher name \"%s\"" msgstr "Bilinmeyen kayıt etki alanı '%s'" -#: src/libnm-core-impl/nm-team-utils.c:2238 -msgid "value out or range" +#: src/libnm-core-impl/nm-team-utils.c:2241 +#, fuzzy +#| msgid "value out or range" +msgid "value out of range" msgstr "değer aralık dışında" -#: src/libnm-core-impl/nm-team-utils.c:2270 +#: src/libnm-core-impl/nm-team-utils.c:2274 #, fuzzy msgid "invalid runner-tx-hash" msgstr "geçersiz yönlendirme: %s" -#: src/libnm-core-impl/nm-team-utils.c:2298 +#: src/libnm-core-impl/nm-team-utils.c:2302 #, fuzzy, c-format msgid "%s is only allowed for runner %s" msgstr "'%s' geçerli bir DCB bayrağı değil" -#: src/libnm-core-impl/nm-team-utils.c:2308 +#: src/libnm-core-impl/nm-team-utils.c:2312 #, fuzzy, c-format msgid "%s is only allowed for runners %s" msgstr "'%s' seçeneği yalnızca '%s=%s' için geçerli" -#: src/libnm-core-impl/nm-team-utils.c:2329 +#: src/libnm-core-impl/nm-team-utils.c:2333 msgid "cannot set parameters for lacp and activebackup runners together" msgstr "" -#: src/libnm-core-impl/nm-team-utils.c:2343 +#: src/libnm-core-impl/nm-team-utils.c:2347 #, fuzzy msgid "missing link watcher" msgstr "eksik seçenek" -#: src/libnm-core-impl/nm-team-utils.c:2369 +#: src/libnm-core-impl/nm-team-utils.c:2373 msgid "team config exceeds size limit" msgstr "" -#: src/libnm-core-impl/nm-team-utils.c:2380 +#: src/libnm-core-impl/nm-team-utils.c:2384 #, fuzzy msgid "team config is not valid UTF-8" msgstr "'%s' değeri geçerli bir UUID değil" -#: src/libnm-core-impl/nm-team-utils.c:2555 +#: src/libnm-core-impl/nm-team-utils.c:2559 #, fuzzy, c-format msgid "invalid D-Bus type \"%s\"" msgstr "geçersiz yönlendirme: %s" -#: src/libnm-core-impl/nm-team-utils.c:2594 +#: src/libnm-core-impl/nm-team-utils.c:2598 #, fuzzy, c-format msgid "invalid link-watchers: %s" msgstr "geçersiz yönlendirme: %s" -#: src/libnm-core-impl/nm-utils.c:1365 +#: src/libnm-core-impl/nm-utils.c:1368 #, fuzzy msgid "Expected value of type \"au\"" msgstr "'%s', '%s' için geçerli bir değer değil" -#: src/libnm-core-impl/nm-utils.c:1508 src/libnm-core-impl/nm-utils.c:1673 +#: src/libnm-core-impl/nm-utils.c:1511 src/libnm-core-impl/nm-utils.c:1676 #, fuzzy msgid "Expected value of type \"aau\"" msgstr "'%s', '%s' için geçerli bir değer değil" -#: src/libnm-core-impl/nm-utils.c:1519 +#: src/libnm-core-impl/nm-utils.c:1522 msgid "Expected \"address-labels\" of type \"as\"" msgstr "" -#: src/libnm-core-impl/nm-utils.c:1541 +#: src/libnm-core-impl/nm-utils.c:1544 #, fuzzy, c-format #| msgid "Invalid IPv4 address prefix '%u'" msgid "Incomplete IPv4 address (idx=%u)" msgstr "Geçersiz IPv4 adres ön eki '%u'" -#: src/libnm-core-impl/nm-utils.c:1554 src/libnm-core-impl/nm-utils.c:1710 -#: src/libnm-core-impl/nm-utils.c:2019 src/libnm-core-impl/nm-utils.c:2216 -#: src/libnm-core-impl/nm-utils.c:2372 src/libnm-core-impl/nm-utils.c:2557 +#: src/libnm-core-impl/nm-utils.c:1557 src/libnm-core-impl/nm-utils.c:1713 +#: src/libnm-core-impl/nm-utils.c:2022 src/libnm-core-impl/nm-utils.c:2219 +#: src/libnm-core-impl/nm-utils.c:2375 src/libnm-core-impl/nm-utils.c:2560 #, c-format msgid "%s (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:1691 +#: src/libnm-core-impl/nm-utils.c:1694 #, c-format msgid "Incomplete IPv4 route (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:1819 +#: src/libnm-core-impl/nm-utils.c:1822 #, fuzzy msgid "Expected value of type \"aay\"" msgstr "'%s', '%s' için geçerli bir değer değil" -#: src/libnm-core-impl/nm-utils.c:1844 +#: src/libnm-core-impl/nm-utils.c:1847 #, fuzzy, c-format #| msgid "Invalid IPv6 address prefix '%u'" msgid "Invalid IPv6 DNS address length (idx=%u)" msgstr "Geçersiz IPv6 adres ön eki '%u'" -#: src/libnm-core-impl/nm-utils.c:1971 +#: src/libnm-core-impl/nm-utils.c:1974 msgid "Expected value of type \"a(ayuay)\"" msgstr "" -#: src/libnm-core-impl/nm-utils.c:1993 +#: src/libnm-core-impl/nm-utils.c:1996 #, c-format msgid "Expected value of type \"(ayuay)\" (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:2006 +#: src/libnm-core-impl/nm-utils.c:2009 #, fuzzy, c-format #| msgid "%d. IPv6 address has invalid prefix" msgid "IPv6 address with invalid length (idx=%u)" msgstr "%d. IPv6 adresi geçersiz bir ön eke sahip" -#: src/libnm-core-impl/nm-utils.c:2036 +#: src/libnm-core-impl/nm-utils.c:2039 #, c-format msgid "IPv6 gateway with invalid length (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:2148 +#: src/libnm-core-impl/nm-utils.c:2151 msgid "Expected value of type \"a(ayuayu)\"" msgstr "" -#: src/libnm-core-impl/nm-utils.c:2172 +#: src/libnm-core-impl/nm-utils.c:2175 #, c-format msgid "Expected value of type \"(ayuayu)\" (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:2185 +#: src/libnm-core-impl/nm-utils.c:2188 #, fuzzy, c-format #| msgid "%d. IPv6 address has invalid prefix" msgid "IPv6 dest address with invalid length (idx=%u)" msgstr "%d. IPv6 adresi geçersiz bir ön eke sahip" -#: src/libnm-core-impl/nm-utils.c:2198 +#: src/libnm-core-impl/nm-utils.c:2201 #, fuzzy, c-format #| msgid "%d. IPv6 address has invalid prefix" msgid "IPv6 next-hop address with invalid length (idx=%u)" msgstr "%d. IPv6 adresi geçersiz bir ön eke sahip" -#: src/libnm-core-impl/nm-utils.c:2341 src/libnm-core-impl/nm-utils.c:2520 +#: src/libnm-core-impl/nm-utils.c:2344 src/libnm-core-impl/nm-utils.c:2523 #, fuzzy msgid "Expected value of type \"aa{sv}\"" msgstr "'%s', '%s' için geçerli bir değer değil" -#: src/libnm-core-impl/nm-utils.c:2359 +#: src/libnm-core-impl/nm-utils.c:2362 #, c-format msgid "IP address requires fields \"address\" and \"prefix\" (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:2538 +#: src/libnm-core-impl/nm-utils.c:2541 #, c-format msgid "Route requires fields \"dest\" and \"prefix\" (idx=%u)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:2660 +#: src/libnm-core-impl/nm-utils.c:2663 #, fuzzy, c-format msgid "'%s' is not a valid handle." msgstr "'%s' geçerli bir bant değil" -#: src/libnm-core-impl/nm-utils.c:2808 +#: src/libnm-core-impl/nm-utils.c:2811 #, c-format msgid "'%s' unexpected: parent already specified." msgstr "" -#: src/libnm-core-impl/nm-utils.c:2826 +#: src/libnm-core-impl/nm-utils.c:2829 #, fuzzy, c-format msgid "invalid handle: '%s'" msgstr "geçersiz seçenek '%s'" -#: src/libnm-core-impl/nm-utils.c:2848 +#: src/libnm-core-impl/nm-utils.c:2851 #, fuzzy msgid "parent not specified." msgstr "Servis adı belirtilmedi" -#: src/libnm-core-impl/nm-utils.c:2912 +#: src/libnm-core-impl/nm-utils.c:2915 #, c-format msgid "unsupported qdisc option: '%s'." msgstr "" -#: src/libnm-core-impl/nm-utils.c:3042 +#: src/libnm-core-impl/nm-utils.c:3045 #, fuzzy msgid "action name missing." msgstr "veri eksik" -#: src/libnm-core-impl/nm-utils.c:3067 +#: src/libnm-core-impl/nm-utils.c:3070 #, c-format msgid "unsupported action option: '%s'." msgstr "" -#: src/libnm-core-impl/nm-utils.c:3204 +#: src/libnm-core-impl/nm-utils.c:3207 msgid "invalid action: " msgstr "geçersiz işlem: " -#: src/libnm-core-impl/nm-utils.c:3208 +#: src/libnm-core-impl/nm-utils.c:3211 #, c-format msgid "unsupported tfilter option: '%s'." msgstr "" -#: src/libnm-core-impl/nm-utils.c:3508 +#: src/libnm-core-impl/nm-utils.c:3511 #, fuzzy, c-format msgid "failed stat file %s: %s" msgstr "'%s' passwd dosyası okunamadı: %s" -#: src/libnm-core-impl/nm-utils.c:3519 +#: src/libnm-core-impl/nm-utils.c:3522 #, fuzzy, c-format msgid "not a file (%s)" msgstr "'%s' dosyası yüklenemedi\n" -#: src/libnm-core-impl/nm-utils.c:3530 +#: src/libnm-core-impl/nm-utils.c:3533 #, fuzzy, c-format msgid "invalid file owner %d for %s" msgstr "geçersiz alan '%s'; olası alanlar: %s" -#: src/libnm-core-impl/nm-utils.c:3542 +#: src/libnm-core-impl/nm-utils.c:3545 #, c-format msgid "file permissions for %s" msgstr "" -#: src/libnm-core-impl/nm-utils.c:3552 +#: src/libnm-core-impl/nm-utils.c:3555 #, c-format msgid "reject %s" msgstr "" -#: src/libnm-core-impl/nm-utils.c:3572 +#: src/libnm-core-impl/nm-utils.c:3575 #, fuzzy, c-format msgid "path is not absolute (%s)" msgstr "geçersiz int64 değeri (%s)" -#: src/libnm-core-impl/nm-utils.c:3587 +#: src/libnm-core-impl/nm-utils.c:3590 #, c-format msgid "Plugin file does not exist (%s)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:3596 +#: src/libnm-core-impl/nm-utils.c:3599 #, fuzzy, c-format msgid "Plugin is not a valid file (%s)" msgstr "'%s', '%s' için geçerli bir değer değil" -#: src/libnm-core-impl/nm-utils.c:3607 +#: src/libnm-core-impl/nm-utils.c:3610 #, c-format msgid "libtool archives are not supported (%s)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:3684 +#: src/libnm-core-impl/nm-utils.c:3687 #, c-format msgid "Could not find \"%s\" binary" msgstr "\"%s\" ikilik dosyası bulunamadı" -#: src/libnm-core-impl/nm-utils.c:4508 +#: src/libnm-core-impl/nm-utils.c:4511 msgid "unknown secret flags" msgstr "bilinmeyen gizli bayraklar" -#: src/libnm-core-impl/nm-utils.c:4518 +#: src/libnm-core-impl/nm-utils.c:4521 msgid "conflicting secret flags" msgstr "" -#: src/libnm-core-impl/nm-utils.c:4529 +#: src/libnm-core-impl/nm-utils.c:4532 #, fuzzy msgid "secret flags must not be \"not-required\"" msgstr "Gizli bayraklar özelliği '%s' bulunamadı" -#: src/libnm-core-impl/nm-utils.c:4537 +#: src/libnm-core-impl/nm-utils.c:4540 msgid "unsupported secret flags" msgstr "" -#: src/libnm-core-impl/nm-utils.c:4567 +#: src/libnm-core-impl/nm-utils.c:4570 msgid "can't be simultaneously disabled and enabled" msgstr "" -#: src/libnm-core-impl/nm-utils.c:4575 +#: src/libnm-core-impl/nm-utils.c:4578 msgid "WPS is required" msgstr "WPS gerekli" -#: src/libnm-core-impl/nm-utils.c:4643 +#: src/libnm-core-impl/nm-utils.c:4646 #, c-format msgid "not a valid ethernet MAC address for mask at position %lld" msgstr "" -#: src/libnm-core-impl/nm-utils.c:4662 +#: src/libnm-core-impl/nm-utils.c:4665 #, c-format msgid "not a valid ethernet MAC address #%u at position %lld" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5319 +#: src/libnm-core-impl/nm-utils.c:5322 msgid "not valid utf-8" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5340 src/libnm-core-impl/nm-utils.c:5393 +#: src/libnm-core-impl/nm-utils.c:5343 src/libnm-core-impl/nm-utils.c:5396 msgid "is not a JSON object" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5369 +#: src/libnm-core-impl/nm-utils.c:5372 msgid "value is NULL" msgstr "değer NULL" -#: src/libnm-core-impl/nm-utils.c:5369 +#: src/libnm-core-impl/nm-utils.c:5372 msgid "value is empty" msgstr "değer boş" -#: src/libnm-core-impl/nm-utils.c:5381 +#: src/libnm-core-impl/nm-utils.c:5384 #, c-format msgid "invalid JSON at position %d (%s)" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5506 src/libnm-core-impl/nm-utils.c:5526 +#: src/libnm-core-impl/nm-utils.c:5509 src/libnm-core-impl/nm-utils.c:5529 msgid "unterminated escape sequence" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5552 +#: src/libnm-core-impl/nm-utils.c:5555 #, c-format msgid "unknown attribute '%s'" msgstr "bilinmeyen öznitelik '%s'" -#: src/libnm-core-impl/nm-utils.c:5570 +#: src/libnm-core-impl/nm-utils.c:5573 #, c-format msgid "missing key-value separator '%c' after '%s'" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5590 +#: src/libnm-core-impl/nm-utils.c:5593 #, fuzzy, c-format msgid "invalid uint32 value '%s' for attribute '%s'" msgstr "geçersiz seçenek '%s' ya da değeri '%s'" -#: src/libnm-core-impl/nm-utils.c:5604 +#: src/libnm-core-impl/nm-utils.c:5607 #, fuzzy, c-format msgid "invalid int32 value '%s' for attribute '%s'" msgstr "geçersiz seçenek '%s' ya da değeri '%s'" -#: src/libnm-core-impl/nm-utils.c:5617 +#: src/libnm-core-impl/nm-utils.c:5620 #, fuzzy, c-format msgid "invalid uint64 value '%s' for attribute '%s'" msgstr "geçersiz seçenek '%s' ya da değeri '%s'" -#: src/libnm-core-impl/nm-utils.c:5630 +#: src/libnm-core-impl/nm-utils.c:5633 #, fuzzy, c-format msgid "invalid uint8 value '%s' for attribute '%s'" msgstr "geçersiz seçenek '%s' ya da değeri '%s'" -#: src/libnm-core-impl/nm-utils.c:5644 +#: src/libnm-core-impl/nm-utils.c:5647 #, fuzzy, c-format msgid "invalid boolean value '%s' for attribute '%s'" msgstr "geçersiz seçenek '%s' ya da değeri '%s'" -#: src/libnm-core-impl/nm-utils.c:5658 +#: src/libnm-core-impl/nm-utils.c:5661 #, c-format msgid "unsupported attribute '%s' of type '%s'" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5959 +#: src/libnm-core-impl/nm-utils.c:5962 #, c-format msgid "Bridge VLANs %d and %d are not sorted by ascending vid" msgstr "" -#: src/libnm-core-impl/nm-utils.c:5983 +#: src/libnm-core-impl/nm-utils.c:5986 #, fuzzy, c-format msgid "duplicate bridge VLAN vid %u" msgstr "bilinmeyen ayar adı" -#: src/libnm-core-impl/nm-utils.c:5995 +#: src/libnm-core-impl/nm-utils.c:5998 msgid "only one VLAN can be the PVID" msgstr "" -#: src/libnm-core-impl/nm-utils.c:6138 +#: src/libnm-core-impl/nm-utils.c:6141 #, c-format msgid "unknown flags 0x%x" msgstr "bilinmeyen bayraklar 0x%x" -#: src/libnm-core-impl/nm-utils.c:6150 +#: src/libnm-core-impl/nm-utils.c:6153 msgid "" "'fqdn-no-update' and 'fqdn-serv-update' flags cannot be set at the same time" msgstr "" -#: src/libnm-core-impl/nm-utils.c:6161 +#: src/libnm-core-impl/nm-utils.c:6164 msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags" msgstr "" -#: src/libnm-core-impl/nm-utils.c:6169 +#: src/libnm-core-impl/nm-utils.c:6172 msgid "DHCPv6 does not support the E (encoded) FQDN flag" msgstr "" +#: src/libnm-core-impl/nm-utils.c:6361 +msgid "This function needs to be called by root" +msgstr "" + +#: src/libnm-core-impl/nm-utils.c:6436 +#, fuzzy +#| msgid "Error: failed to create temporary file %s." +msgid "Failure creating the temporary file" +msgstr "Hata: geçici dosya %s oluşturulamadı." + #: src/libnm-core-impl/nm-vpn-editor-plugin.c:284 #, c-format msgid "cannot load plugin \"%s\": %s" @@ -3672,26 +3876,26 @@ msgstr "" msgid "failed to load nm_vpn_editor_plugin_factory() from %s (%s)" msgstr "" -#: 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 "" -#: 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 "" -#: 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 "" -#: src/libnm-core-impl/nm-vpn-editor-plugin.c:493 +#: 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 +#: src/libnm-core-impl/nm-vpn-editor-plugin.c:520 msgid "the plugin does not support export capability" msgstr "" @@ -3719,24 +3923,24 @@ msgstr "" msgid "there exists a conflicting plugin with the same name (%s)" msgstr "" -#: src/libnm-core-impl/nm-vpn-plugin-info.c:1050 +#: src/libnm-core-impl/nm-vpn-plugin-info.c:1073 msgid "missing \"plugin\" setting" msgstr "eksik \"plugin\" ayarı" -#: src/libnm-core-impl/nm-vpn-plugin-info.c:1060 +#: src/libnm-core-impl/nm-vpn-plugin-info.c:1083 #, c-format msgid "%s: don't retry loading plugin which already failed previously" msgstr "" -#: src/libnm-core-impl/nm-vpn-plugin-info.c:1134 +#: src/libnm-core-impl/nm-vpn-plugin-info.c:1157 msgid "missing filename to load VPN plugin info" msgstr "" -#: src/libnm-core-impl/nm-vpn-plugin-info.c:1149 +#: src/libnm-core-impl/nm-vpn-plugin-info.c:1172 msgid "missing name for VPN plugin info" msgstr "" -#: src/libnm-core-impl/nm-vpn-plugin-info.c:1163 +#: src/libnm-core-impl/nm-vpn-plugin-info.c:1186 msgid "missing service for VPN plugin info" msgstr "" @@ -4038,89 +4242,89 @@ msgstr "geçersiz özel anahtar" msgid "Method returned type '%s', but expected '%s'" msgstr "Yöntem '%s' türünü döndürdü, fakar '%s' bekleniyordu" -#: 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 "" -#: 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 "" -#: 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" msgstr "" -#: 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 "" -#: src/libnm-glib-aux/nm-shared-utils.c:2481 +#: src/libnm-glib-aux/nm-shared-utils.c:2492 #, fuzzy, c-format msgid "unable to set property '%s' of type '%s' from value of type '%s'" msgstr "'%s' türündeki özellik '%s' türünün değerinden atanamadı" -#: 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 " "type '%s'" msgstr "" -#: src/libnm-glib-aux/nm-shared-utils.c:5516 +#: src/libnm-glib-aux/nm-shared-utils.c:5581 #, fuzzy msgid "interface name is missing" msgstr "veri eksik" -#: 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 "" -#: src/libnm-glib-aux/nm-shared-utils.c:5578 +#: src/libnm-glib-aux/nm-shared-utils.c:5643 #, fuzzy, c-format msgid "'%%' is not allowed in interface names" msgstr "'%s' geçerli bir arayüz adı değil" -#: src/libnm-glib-aux/nm-shared-utils.c:5590 +#: src/libnm-glib-aux/nm-shared-utils.c:5655 #, fuzzy, c-format msgid "'%s' is not allowed as interface name" msgstr "'%s' geçerli bir arayüz adı değil" -#: 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 "" -#: src/libnm-log-core/nm-logging.c:252 +#: src/libnm-log-core/nm-logging.c:251 #, c-format msgid "Unknown log level '%s'" msgstr "Bilinmeyen günlük düzeyi '%s'" -#: src/libnm-log-core/nm-logging.c:360 +#: src/libnm-log-core/nm-logging.c:359 #, c-format msgid "Unknown log domain '%s'" msgstr "Bilinmeyen günlük etki alanı '%s'" @@ -4153,18 +4357,18 @@ msgstr "'%s' belirsiz (%s x %s)" msgid "missing name, try one of [%s]" msgstr "eksik isim, şunlardan birini deneyin [%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] arasında değil" #: 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 @@ -4236,8 +4440,8 @@ msgstr "devre dışı bırakılıyor (dış)" #: 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" @@ -4245,8 +4449,8 @@ msgstr "evet" #: 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" @@ -4265,8 +4469,8 @@ msgid "No reason given" msgstr "Açıklama verilmedi" #. We should not really come here -#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3791 -#: src/nmcli/connections.c:3850 +#: src/libnmc-base/nm-client-utils.c:354 src/nmcli/connections.c:3802 +#: src/nmcli/connections.c:3874 msgid "Unknown error" msgstr "Bilinmeyen hata" @@ -4545,98 +4749,156 @@ msgstr "Wi-Fi P2P eşi bulunamadı" msgid "The device handler dispatcher returned an error" 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 "" + #: src/libnmc-base/nm-client-utils.c:476 +msgid "The device is unmanaged because the link is not initialized by udev" +msgstr "" + +#: 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')" +msgstr "" + +#: 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 "" + +#: 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 "" + +#: 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 disappeared" +msgid "The device is unmanaged via udev rule" +msgstr "Aygıt kayboldu" + +#: 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:495 +#, fuzzy +#| msgid "NetworkManager has started" +msgid "Networking was disabled" +msgstr "NetworkManager başlatıldı" + +#: src/libnmc-base/nm-client-utils.c:497 +msgid "The modem didn't have an operator code" +msgstr "" + +#: src/libnmc-base/nm-client-utils.c:506 msgid "Unknown reason" msgstr "Bilinmeyen neden" -#: src/libnmc-base/nm-client-utils.c:478 +#: src/libnmc-base/nm-client-utils.c:508 msgid "The connection was disconnected" msgstr "Bağlantı kesildi" -#: src/libnmc-base/nm-client-utils.c:480 +#: src/libnmc-base/nm-client-utils.c:510 msgid "Disconnected by user" msgstr "Kullanıcı tarafından bağlantı kesildi" -#: src/libnmc-base/nm-client-utils.c:482 +#: src/libnmc-base/nm-client-utils.c:512 #, fuzzy msgid "The base network connection was interrupted" msgstr "ana ağ bağlantısı yarıda kesildi" -#: src/libnmc-base/nm-client-utils.c:484 +#: src/libnmc-base/nm-client-utils.c:514 msgid "The VPN service stopped unexpectedly" msgstr "VPN hizmeti beklenmedik bir biçimde durdu" -#: src/libnmc-base/nm-client-utils.c:486 +#: src/libnmc-base/nm-client-utils.c:516 msgid "The VPN service returned invalid configuration" msgstr "VPN hizmeti geçersiz yapılandırma döndürdü" -#: src/libnmc-base/nm-client-utils.c:488 +#: src/libnmc-base/nm-client-utils.c:518 msgid "The connection attempt timed out" msgstr "Bağlantı denemesi zaman aşımına uğradı" -#: src/libnmc-base/nm-client-utils.c:490 +#: src/libnmc-base/nm-client-utils.c:520 msgid "The VPN service did not start in time" msgstr "VPN hizmeti zamanında başlatılmadı" -#: src/libnmc-base/nm-client-utils.c:492 +#: src/libnmc-base/nm-client-utils.c:522 msgid "The VPN service failed to start" msgstr "VPN hizmeti başlatılamadı" -#: src/libnmc-base/nm-client-utils.c:493 +#: src/libnmc-base/nm-client-utils.c:523 #, fuzzy msgid "No valid secrets" msgstr "geçerli bir VPN parolası yok" -#: src/libnmc-base/nm-client-utils.c:494 +#: src/libnmc-base/nm-client-utils.c:524 #, fuzzy msgid "Invalid secrets" msgstr "geçersiz VPN parolaları" -#: src/libnmc-base/nm-client-utils.c:496 +#: src/libnmc-base/nm-client-utils.c:526 msgid "The connection was removed" msgstr "Bağlantı kaldırıldı" -#: src/libnmc-base/nm-client-utils.c:498 +#: src/libnmc-base/nm-client-utils.c:528 msgid "Master connection failed" msgstr "Ana bağlantı başarısız" -#: src/libnmc-base/nm-client-utils.c:500 +#: src/libnmc-base/nm-client-utils.c:530 #, fuzzy msgid "Could not create a software link" msgstr "Geçici dosya oluşturulamadı: %s" -#: src/libnmc-base/nm-client-utils.c:502 +#: src/libnmc-base/nm-client-utils.c:532 msgid "The device disappeared" msgstr "Aygıt kayboldu" -#: src/libnmc-base/nm-client-utils.c:828 +#: src/libnmc-base/nm-client-utils.c:858 msgid "missing colon for \".:\" format" msgstr "" -#: src/libnmc-base/nm-client-utils.c:845 +#: src/libnmc-base/nm-client-utils.c:875 msgid "missing dot for \".:\" format" msgstr "" -#: src/libnmc-base/nm-client-utils.c:851 +#: src/libnmc-base/nm-client-utils.c:881 #, fuzzy msgid "missing setting for \".:\" format" msgstr "önce 'goto 'ı kullanın, veya 'set .<özellik>'\n" -#: src/libnmc-base/nm-client-utils.c:862 +#: src/libnmc-base/nm-client-utils.c:892 msgid "missing property for \".:\" format" msgstr "" -#: src/libnmc-base/nm-client-utils.c:872 +#: src/libnmc-base/nm-client-utils.c:902 #, fuzzy msgid "invalid setting name" msgstr "geçersiz ayar adı '%s'" -#: src/libnmc-base/nm-client-utils.c:886 +#: src/libnmc-base/nm-client-utils.c:916 #, fuzzy msgid "property name is not UTF-8" msgstr "Özellik ismi? " -#: src/libnmc-base/nm-client-utils.c:903 src/libnmc-base/nm-client-utils.c:909 +#: src/libnmc-base/nm-client-utils.c:933 src/libnmc-base/nm-client-utils.c:939 #, fuzzy msgid "secret is not UTF-8" msgstr "secret ayarlı değil" @@ -4658,9 +4920,9 @@ msgstr "" #: 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:5175 -#: src/nmtui/nmt-8021x-fields.c:182 src/nmtui/nmt-8021x-fields.c:353 -#: src/nmtui/nmt-8021x-fields.c:457 src/nmtui/nmt-page-dsl.c:51 +#: 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 msgid "Username" msgstr "Kullanıcı adı" @@ -4669,20 +4931,20 @@ msgstr "Kullanıcı adı" #: src/libnmc-base/nm-secret-agent-simple.c:316 #: src/libnmc-base/nm-secret-agent-simple.c:339 #: src/libnmc-base/nm-secret-agent-simple.c:371 -#: src/libnmc-base/nm-secret-agent-simple.c:948 -#: src/libnmc-base/nm-secret-agent-simple.c:983 -#: src/libnmc-base/nm-secret-agent-simple.c:1010 +#: src/libnmc-base/nm-secret-agent-simple.c:954 +#: src/libnmc-base/nm-secret-agent-simple.c:989 +#: src/libnmc-base/nm-secret-agent-simple.c:1016 #: src/libnmc-base/nm-vpn-helpers.c:144 src/libnmc-base/nm-vpn-helpers.c:148 #: src/libnmc-base/nm-vpn-helpers.c:154 src/libnmc-base/nm-vpn-helpers.c:159 -#: src/nmcli/devices.c:4736 src/nmtui/nmt-8021x-fields.c:195 -#: src/nmtui/nmt-8021x-fields.c:373 src/nmtui/nmt-8021x-fields.c:477 +#: src/nmcli/devices.c:4758 src/nmtui/nmt-8021x-fields.c:196 +#: src/nmtui/nmt-8021x-fields.c:536 src/nmtui/nmt-8021x-fields.c:642 #: src/nmtui/nmt-page-dsl.c:64 src/nmtui/nmt-page-wifi.c:287 #: src/nmtui/nmt-page-wifi.c:319 src/nmtui/nmt-page-wifi.c:358 msgid "Password" msgstr "Parola" #: src/libnmc-base/nm-secret-agent-simple.c:288 -#: src/nmtui/nmt-8021x-fields.c:204 +#: src/nmtui/nmt-8021x-fields.c:365 msgid "Identity" msgstr "Kimlik" @@ -4708,10 +4970,10 @@ msgid "Secrets are required to connect WireGuard VPN '%s'" msgstr "'%s' ağına bağlanmak için parola gerekiyor." #: src/libnmc-base/nm-secret-agent-simple.c:651 -#: src/libnmc-base/nm-secret-agent-simple.c:944 -#: src/libnmc-base/nm-secret-agent-simple.c:979 -#: src/libnmc-base/nm-secret-agent-simple.c:1006 -#: src/libnmc-base/nm-secret-agent-simple.c:1025 +#: 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 #, c-format msgid "A password is required to connect to '%s'." msgstr "'%s' ağına bağlanmak için parola gerekiyor." @@ -4721,6 +4983,17 @@ msgid "Authentication required by wireless network" msgstr "Kablosuz ağ kimlik doğrulama gerektiriyor" #: src/libnmc-base/nm-secret-agent-simple.c:911 +#, fuzzy, c-format +#| msgid "" +#| "Passwords or encryption keys are required to access the wireless network " +#| "'%s'." +msgid "" +"Push of the WPS button on the router or a password is required to access the " +"wireless network '%s'." +msgstr "" +"'%s' kablosuz ağına bağlanmak için parola veya şifreleme anahtarı gerekiyor." + +#: src/libnmc-base/nm-secret-agent-simple.c:916 #, c-format msgid "" "Passwords or encryption keys are required to access the wireless network " @@ -4728,65 +5001,65 @@ msgid "" msgstr "" "'%s' kablosuz ağına bağlanmak için parola veya şifreleme anahtarı gerekiyor." -#: src/libnmc-base/nm-secret-agent-simple.c:917 +#: src/libnmc-base/nm-secret-agent-simple.c:923 msgid "Wired 802.1X authentication" msgstr "Kablolu 802.1X kimlik doğrulaması" -#: src/libnmc-base/nm-secret-agent-simple.c:918 +#: src/libnmc-base/nm-secret-agent-simple.c:924 #, c-format msgid "Secrets are required to access the wired network '%s'" msgstr "" -#: src/libnmc-base/nm-secret-agent-simple.c:924 +#: src/libnmc-base/nm-secret-agent-simple.c:930 msgid "DSL authentication" msgstr "DSL kimlik doğrulaması" -#: src/libnmc-base/nm-secret-agent-simple.c:925 +#: src/libnmc-base/nm-secret-agent-simple.c:931 #, c-format msgid "Secrets are required for the DSL connection '%s'" msgstr "" -#: src/libnmc-base/nm-secret-agent-simple.c:934 +#: src/libnmc-base/nm-secret-agent-simple.c:940 msgid "PIN code required" msgstr "PIN kodu gerekiyor" -#: src/libnmc-base/nm-secret-agent-simple.c:935 +#: src/libnmc-base/nm-secret-agent-simple.c:941 msgid "PIN code is needed for the mobile broadband device" msgstr "Mobil geniş bant aygıtı için PIN kodu gerekli" -#: src/libnmc-base/nm-secret-agent-simple.c:938 +#: src/libnmc-base/nm-secret-agent-simple.c:944 msgid "PIN" msgstr "PIN" -#: src/libnmc-base/nm-secret-agent-simple.c:943 -#: src/libnmc-base/nm-secret-agent-simple.c:978 -#: src/libnmc-base/nm-secret-agent-simple.c:1005 +#: src/libnmc-base/nm-secret-agent-simple.c:949 +#: src/libnmc-base/nm-secret-agent-simple.c:984 +#: src/libnmc-base/nm-secret-agent-simple.c:1011 msgid "Mobile broadband network password" msgstr "Mobil geniş ağ parolası" -#: src/libnmc-base/nm-secret-agent-simple.c:956 +#: src/libnmc-base/nm-secret-agent-simple.c:962 #, c-format msgid "Secrets are required to access the MACsec network '%s'" msgstr "" -#: src/libnmc-base/nm-secret-agent-simple.c:960 +#: src/libnmc-base/nm-secret-agent-simple.c:966 msgid "MACsec PSK authentication" msgstr "" -#: src/libnmc-base/nm-secret-agent-simple.c:962 -#: src/libnmc-setting/nm-meta-setting-desc.c:6898 +#: src/libnmc-base/nm-secret-agent-simple.c:968 +#: src/libnmc-setting/nm-meta-setting-desc.c:7175 msgid "MKA CAK" msgstr "" -#: src/libnmc-base/nm-secret-agent-simple.c:967 +#: src/libnmc-base/nm-secret-agent-simple.c:973 msgid "MACsec EAP authentication" msgstr "" -#: src/libnmc-base/nm-secret-agent-simple.c:972 +#: src/libnmc-base/nm-secret-agent-simple.c:978 msgid "WireGuard VPN secret" msgstr "WireGuard VPN gizi" -#: src/libnmc-base/nm-secret-agent-simple.c:1015 +#: src/libnmc-base/nm-secret-agent-simple.c:1021 msgid "VPN password required" msgstr "VPN parolası gerekiyor" @@ -4888,8 +5161,8 @@ msgstr "geçersiz IP adresi: %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 "" #: src/libnmc-setting/nm-meta-setting-desc.c:340 @@ -4936,140 +5209,140 @@ msgstr "" msgid "team config file '%s' contains non-valid utf-8" msgstr "" -#: src/libnmc-setting/nm-meta-setting-desc.c:1050 +#: src/libnmc-setting/nm-meta-setting-desc.c:1058 msgid "auto" msgstr "kendiliğinden" -#: src/libnmc-setting/nm-meta-setting-desc.c:1179 +#: src/libnmc-setting/nm-meta-setting-desc.c:1187 #, c-format msgid "%s (%s)" msgstr "" -#: 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 #, fuzzy msgid "'%s' is out of range [%" msgstr "'%d' değeri aralığın dışında <%d-%d>" -#: 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 "" -#: 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 "" -#: 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' geçerli bir Ethernet MAC adresi değil" -#: src/libnmc-setting/nm-meta-setting-desc.c:1647 +#: src/libnmc-setting/nm-meta-setting-desc.c:1660 #, fuzzy, c-format msgid "invalid option '%s', use a combination of [%s]" msgstr "geçersiz seçenek '%s' ya da değeri '%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 (anahtar)" -#: 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 (parola)" -#: 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 (bilinmeyen)" -#: src/libnmc-setting/nm-meta-setting-desc.c:1802 +#: src/libnmc-setting/nm-meta-setting-desc.c:1815 msgid "0 (NONE)" msgstr "0 (YOK)" -#: src/libnmc-setting/nm-meta-setting-desc.c:1808 +#: src/libnmc-setting/nm-meta-setting-desc.c:1821 msgid "REORDER_HEADERS, " msgstr "BAŞLIKLARI_YENİDENSIRALA, " -#: 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 "BAĞLAMAYI_AYIR, " -#: 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 (hiçbiri)" -#: src/libnmc-setting/nm-meta-setting-desc.c:1841 +#: src/libnmc-setting/nm-meta-setting-desc.c:1854 msgid "agent-owned, " msgstr "uygulamaya-ait, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1843 +#: src/libnmc-setting/nm-meta-setting-desc.c:1856 msgid "not saved, " msgstr "kaydedilmemiş, " -#: src/libnmc-setting/nm-meta-setting-desc.c:1845 +#: src/libnmc-setting/nm-meta-setting-desc.c:1858 msgid "not required, " msgstr "gerekli değil, " -#: 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 + + ipv4.clat + If left unspecified, defaults to "no". + ipv4.routed-dns diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index de8edc8064..96b50f882e 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -906,10 +906,11 @@ static void concheck_update_state(NMDevice *self, static void sriov_op_cb(GError *error, gpointer user_data); static void device_ifindex_changed_cb(NMManager *manager, NMDevice *device_changed, NMDevice *self); -static gboolean device_link_changed(gpointer user_data); -static gboolean _get_maybe_ipv6_disabled(NMDevice *self); -static void deactivate_ready(NMDevice *self, NMDeviceStateReason reason); -static void carrier_disconnected_action_cancel(NMDevice *self); +static gboolean device_link_changed(gpointer user_data); +static gboolean _get_maybe_ipv6_disabled(NMDevice *self); +static void deactivate_ready(NMDevice *self, NMDeviceStateReason reason); +static void carrier_disconnected_action_cancel(NMDevice *self); +static const char *nm_device_get_effective_ip_config_method(NMDevice *self, int addr_family); /*****************************************************************************/ @@ -1523,6 +1524,40 @@ _prop_get_connection_dnssec(NMDevice *self, NMConnection *connection) NM_SETTING_CONNECTION_DNSSEC_DEFAULT); } +static NMSettingIp4ConfigClat +_prop_get_ipv4_clat(NMDevice *self) +{ + NMSettingIP4Config *s_ip4 = NULL; + NMSettingIp4ConfigClat clat; + const char *method; + + s_ip4 = nm_device_get_applied_setting(self, NM_TYPE_SETTING_IP4_CONFIG); + if (!s_ip4) + return NM_SETTING_IP4_CONFIG_CLAT_NO; + + method = nm_device_get_effective_ip_config_method(self, AF_INET); + if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) + return NM_SETTING_IP4_CONFIG_CLAT_NO; + + clat = nm_setting_ip4_config_get_clat(s_ip4); + if (clat == NM_SETTING_IP4_CONFIG_CLAT_DEFAULT) { + clat = nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, + NM_CON_DEFAULT("ipv4.clat"), + self, + NM_SETTING_IP4_CONFIG_CLAT_NO, + NM_SETTING_IP4_CONFIG_CLAT_FORCE, + NM_SETTING_IP4_CONFIG_CLAT_NO); + } + + if (clat == NM_SETTING_IP4_CONFIG_CLAT_AUTO + && !nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { + /* clat=auto enables CLAT only with method=auto */ + clat = NM_SETTING_IP4_CONFIG_CLAT_NO; + } + + return clat; +} + static NMMptcpFlags _prop_get_connection_mptcp_flags(NMDevice *self, NMConnection *connection) { @@ -3641,6 +3676,7 @@ nm_device_create_l3_config_data_from_connection(NMDevice *self, NMConnection *co 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; } @@ -11467,6 +11503,8 @@ _dev_ipmanual_start(NMDevice *self) if (_prop_get_ipvx_routed_dns(self, AF_INET6) == NM_SETTING_IP_CONFIG_ROUTED_DNS_YES) { nm_l3_config_data_set_routed_dns(l3cd, AF_INET6, TRUE); } + + nm_l3_config_data_set_clat(l3cd, _prop_get_ipv4_clat(self)); } if (!l3cd) { diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 92a91844c2..dd7892d417 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -125,6 +125,7 @@ struct _NML3ConfigData { NMSettingConnectionDnsOverTls dns_over_tls; NMSettingConnectionDnssec dnssec; NMUtilsIPv6IfaceId ip6_token; + NMSettingIp4ConfigClat clat; NMRefString *network_id; NML3ConfigDatFlags flags; @@ -525,6 +526,13 @@ nm_l3_config_data_log(const NML3ConfigData *self, _L("nis-domain: %s", self->nis_domain->str); } + if (!IS_IPv4) { + if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_AUTO) + _L("clat: auto"); + else if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_FORCE) + _L("clat: force"); + } + if (!IS_IPv4 && self->pref64_valid) { _L("pref64_prefix: %s/%d", nm_utils_inet6_ntop(&self->pref64_prefix, sbuf_addr), @@ -725,6 +733,7 @@ nm_l3_config_data_new(NMDedupMultiIndex *multi_idx, int ifindex, NMIPConfigSourc .flags = NM_L3_CONFIG_DAT_FLAGS_NONE, .metered = NM_TERNARY_DEFAULT, .proxy_browser_only = NM_TERNARY_DEFAULT, + .clat = NM_SETTING_IP4_CONFIG_CLAT_NO, .proxy_method = NM_PROXY_CONFIG_METHOD_UNKNOWN, .route_table_sync_4 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE, .route_table_sync_6 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE, @@ -1991,6 +2000,29 @@ nm_l3_config_data_set_network_id(NML3ConfigData *self, const char *value) return nm_ref_string_reset_str(&self->network_id, value); } +gboolean +nm_l3_config_data_set_clat(NML3ConfigData *self, NMSettingIp4ConfigClat val) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); + nm_assert(NM_IN_SET(val, + NM_SETTING_IP4_CONFIG_CLAT_NO, + NM_SETTING_IP4_CONFIG_CLAT_FORCE, + NM_SETTING_IP4_CONFIG_CLAT_AUTO)); + + if (self->clat == val) + return FALSE; + self->clat = val; + return TRUE; +} + +NMSettingIp4ConfigClat +nm_l3_config_data_get_clat(const NML3ConfigData *self) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); + + return self->clat; +} + gboolean nm_l3_config_data_set_pref64_valid(NML3ConfigData *self, gboolean val) { @@ -2591,6 +2623,8 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a, NM_CMP_DIRECT_UNSAFE(a->routed_dns_4, b->routed_dns_4); NM_CMP_DIRECT_UNSAFE(a->routed_dns_6, b->routed_dns_6); + NM_CMP_DIRECT_UNSAFE(a->clat, b->clat); + NM_CMP_DIRECT(!!a->pref64_valid, !!b->pref64_valid); if (a->pref64_valid) { NM_CMP_DIRECT(a->pref64_plen, b->pref64_plen); @@ -3662,6 +3696,14 @@ nm_l3_config_data_merge(NML3ConfigData *self, if (src->routed_dns_6) self->routed_dns_6 = TRUE; + if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_NO) { + /* 'no' always loses to 'force' and 'auto' */ + self->clat = src->clat; + } else if (src->clat == NM_SETTING_IP4_CONFIG_CLAT_FORCE) { + /* 'force' always takes precedence */ + self->clat = src->clat; + } + if (src->pref64_valid) { self->pref64_prefix = src->pref64_prefix; self->pref64_plen = src->pref64_plen; diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index b1b2c5c711..750960bd35 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -5,6 +5,7 @@ #include "libnm-glib-aux/nm-dedup-multi.h" #include "nm-setting-connection.h" +#include "nm-setting-ip4-config.h" #include "nm-setting-ip6-config.h" #include "libnm-platform/nm-platform.h" #include "libnm-platform/nmp-object.h" @@ -498,6 +499,10 @@ gboolean nm_l3_config_data_set_network_id(NML3ConfigData *self, const char *netw const char *nm_l3_config_data_get_network_id(const NML3ConfigData *self); +gboolean nm_l3_config_data_set_clat(NML3ConfigData *self, NMSettingIp4ConfigClat val); + +NMSettingIp4ConfigClat nm_l3_config_data_get_clat(const NML3ConfigData *self); + gboolean nm_l3_config_data_set_pref64_valid(NML3ConfigData *self, gboolean val); gboolean nm_l3_config_data_get_pref64_valid(const NML3ConfigData *self); diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 2533a44cfd..5c132c325b 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4159,8 +4159,11 @@ _l3cfg_update_combined_config(NML3Cfg *self, gboolean merged_changed = FALSE; gboolean commited_changed = FALSE; #if HAVE_CLAT - struct in6_addr pref64; - guint32 pref64_plen; + struct in6_addr pref64; + guint32 pref64_plen; + gboolean clat_enabled = FALSE; + const NMPlatformIP4Route *ip4_route; + NMDedupMultiIter iter; #endif nm_assert(NM_IS_L3CFG(self)); @@ -4260,10 +4263,32 @@ _l3cfg_update_combined_config(NML3Cfg *self, } #if HAVE_CLAT - if (nm_l3_config_data_get_pref64_valid(l3cd)) { + switch (nm_l3_config_data_get_clat(l3cd)) { + case NM_SETTING_IP4_CONFIG_CLAT_FORCE: + clat_enabled = TRUE; + break; + case NM_SETTING_IP4_CONFIG_CLAT_NO: + clat_enabled = FALSE; + break; + case NM_SETTING_IP4_CONFIG_CLAT_AUTO: + clat_enabled = TRUE; + /* disable if there is a native IPv4 gateway */ + nm_l3_config_data_iter_ip4_route_for_each (&iter, l3cd, &ip4_route) { + if (ip4_route->network == INADDR_ANY && ip4_route->plen == 0 + && ip4_route->gateway != INADDR_ANY) + clat_enabled = FALSE; + break; + } + break; + case NM_SETTING_IP4_CONFIG_CLAT_DEFAULT: + nm_assert_not_reached(); + clat_enabled = TRUE; + break; + } + + if (clat_enabled && nm_l3_config_data_get_pref64_valid(l3cd)) { NMPlatformIPXRoute rx; NMIPAddrTyped best_v6_gateway; - NMDedupMultiIter iter; const NMPlatformIP6Route *best_v6_route; const NMPlatformIP6Address *ip6_entry; struct in6_addr ip6; From b5f534d31d3b23019c47145d3b3ce94497f5487a Mon Sep 17 00:00:00 2001 From: Mary Strodl Date: Thu, 30 Jan 2025 16:00:45 -0500 Subject: [PATCH 096/153] NEWS: Note CLAT support --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index 48f497c6bd..b2bbbe1d4d 100644 --- a/NEWS +++ b/NEWS @@ -40,6 +40,7 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! * New button in nmtui that allows users to chose from list of available devices when creating connection profiles for physical interfaces (Ethernet, Wi-Fi, etc.). +* Add support for CLAT (464XLAT) using a BPF program. ============================================= NetworkManager-1.56 From 815a7952031241643d626df65a36ca6fbe3c6e18 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 3 Oct 2025 17:48:01 +0200 Subject: [PATCH 097/153] bpf: clat: avoid 32-bit register spills when access skb->data The verifier reports this error when accessing skb->data: ; void *data = (void *)(unsigned long long)skb->data; @ clat.bpf.c:625 (61) r2 = *(u32 *)(r1 +76) ; frame1: R1=ctx() R2_w=pkt(r=0) (63) *(u32 *)(r10 -120) = r2 invalid size of register spill Apparently it's trying to spill only 32 bits from the register to the stack, which is invalid. A similar problem was reported here: https://github.com/cilium/cilium/pull/25336 Add some macros using inline asm to fix the problem. With this change now the compiler properly generates 64-bit spills. ; src/core/bpf/clat.bpf.c:625 -; void *data = (void *)(unsigned long long)skb->data; +; void *data = SKB_DATA(skb); 137: 61 12 4c 00 00 00 00 00 w2 = *(u32 *)(r1 + 0x4c) - 138: 63 2a 88 ff 00 00 00 00 *(u32 *)(r10 - 0x78) = w2 + 138: 7b 2a 88 ff 00 00 00 00 *(u64 *)(r10 - 0x78) = r2 --- src/core/bpf/clat.bpf.c | 46 +++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 6dd16a48a8..2ff73c6d8b 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -61,6 +61,22 @@ struct { #define DBG(fmt, ...) #endif +/* Macros to read the sk_buff data* pointers, preventing the compiler + * from generating a 32-bit register spill. */ +#define SKB_ACCESS_MEMBER_32(_skb, member) \ + ({ \ + void *ptr; \ + \ + asm volatile("%0 = *(u32 *)(%1 + %2)" \ + : "=r"(ptr) \ + : "r"(_skb), "i"(offsetof(struct __sk_buff, member))); \ + \ + ptr; \ + }) + +#define SKB_DATA(_skb) SKB_ACCESS_MEMBER_32(_skb, data) +#define SKB_DATA_END(_skb) SKB_ACCESS_MEMBER_32(_skb, data_end) + struct icmpv6_pseudo { struct in6_addr saddr; struct in6_addr daddr; @@ -76,7 +92,7 @@ update_l4_checksum(struct __sk_buff *skb, int ip_type, bool v4to6) { - void *data = (void *) (unsigned long long) skb->data; + void *data = SKB_DATA(skb); int flags = BPF_F_PSEUDO_HDR; __u16 offset; __u32 csum; @@ -119,7 +135,7 @@ update_icmp_checksum(struct __sk_buff *skb, void *icmp_after, bool add) { - void *data = (void *) (unsigned long long) skb->data; + void *data = SKB_DATA(skb); struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, .saddr = ip6h->saddr, .daddr = ip6h->daddr, @@ -161,8 +177,7 @@ update_icmp_checksum(struct __sk_buff *skb, static int rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) { - void *data_end = (void *) (unsigned long long) skb->data_end; - + void *data_end = SKB_DATA_END(skb); struct icmphdr old_icmp, *icmp = (void *) (iph + 1); struct icmp6hdr icmp6, *new_icmp6; __u32 mtu; @@ -278,8 +293,8 @@ static __attribute__((always_inline)) inline int clat_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) { int ret = TC_ACT_OK; - void *data_end = (void *) (unsigned long long) skb->data_end; - void *data = (void *) (unsigned long long) skb->data; + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); int ip_type, iphdr_len, ip_offset; struct in6_addr *dst_v6; @@ -363,8 +378,8 @@ clat_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IPV6), 0)) goto out; - data = (void *) (unsigned long long) skb->data; - data_end = (void *) (unsigned long long) skb->data_end; + data = SKB_DATA(skb); + data_end = SKB_DATA_END(skb); eth = data; ip6h = data + ip_offset; @@ -400,8 +415,7 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, struct icmphdr **new_icmp_out, struct hdr_cursor *nh) { - void *data_end = (void *) (unsigned long long) skb->data_end; - + void *data_end = SKB_DATA_END(skb); struct icmp6hdr old_icmp6, *icmp6 = (void *) (ip6h + 1); struct icmphdr icmp, *new_icmp; __u32 mtu, ptr; @@ -631,8 +645,8 @@ static __attribute__((always_inline)) inline int clat_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) { int ret = TC_ACT_OK; - void *data_end = (void *) (unsigned long long) skb->data_end; - void *data = (void *) (unsigned long long) skb->data; + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); struct ethhdr *eth; struct iphdr *iph; @@ -648,8 +662,8 @@ clat_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IP), 0)) goto out; - data = (void *) (unsigned long long) skb->data; - data_end = (void *) (unsigned long long) skb->data_end; + data = SKB_DATA(skb); + data_end = SKB_DATA_END(skb); eth = data; iph = data + ip_offset; @@ -667,8 +681,8 @@ out: static __attribute__((always_inline)) inline int clat_handler(struct __sk_buff *skb, bool egress) { - void *data_end = (void *) (unsigned long long) skb->data_end; - void *data = (void *) (unsigned long long) skb->data; + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); struct hdr_cursor nh = {.pos = data}; struct ethhdr *eth; int eth_type; From f9cd6e20a5e6ab657d447204e990400e5d36b879 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 3 Oct 2025 18:01:05 +0200 Subject: [PATCH 098/153] bpf: clat: fix other verifier errors When copying the IPv6 addresses via a direct assignement, the compiler generates 32-bit operations that the verifier doesn't like: > 237: (61) r3 = *(u32 *)(r8 +76) ; frame1: R3_w=pkt(r=0) R8=ctx() > ; .saddr = ip6h->saddr, @ clat.bpf.c:124 > 238: (63) *(u32 *)(r10 -64) = r3 > invalid size of register spill Use explicit memcpy() for those. Also, check the packet length before accessing the ICMPv6 header. --- src/core/bpf/clat.bpf.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 2ff73c6d8b..478751c8ce 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -98,18 +98,16 @@ update_l4_checksum(struct __sk_buff *skb, __u32 csum; if (v4to6) { - csum = bpf_csum_diff((__be32 *) &iph->saddr, - 2 * sizeof(__u32), - (__be32 *) &ip6h->saddr, - 2 * sizeof(struct in6_addr), - 0); + void *from_ptr = &iph->saddr; + void *to_ptr = &ip6h->saddr; + + csum = bpf_csum_diff(from_ptr, 2 * sizeof(__u32), to_ptr, 2 * sizeof(struct in6_addr), 0); offset = (void *) (iph + 1) - data; } else { - csum = bpf_csum_diff((__be32 *) &ip6h->saddr, - 2 * sizeof(struct in6_addr), - (__be32 *) &iph->saddr, - 2 * sizeof(__u32), - 0); + void *from_ptr = &ip6h->saddr; + void *to_ptr = &iph->saddr; + + csum = bpf_csum_diff(from_ptr, 2 * sizeof(struct in6_addr), to_ptr, 2 * sizeof(__u32), 0); offset = (void *) (ip6h + 1) - data; } @@ -136,13 +134,13 @@ update_icmp_checksum(struct __sk_buff *skb, bool add) { void *data = SKB_DATA(skb); - struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, - .saddr = ip6h->saddr, - .daddr = ip6h->daddr, - .len = ip6h->payload_len}; + struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, .len = ip6h->payload_len}; __u16 h_before, h_after, offset; __u32 csum, u_before, u_after; + __builtin_memcpy(&ph.saddr, &ip6h->saddr, sizeof(struct in6_addr)); + __builtin_memcpy(&ph.daddr, &ip6h->daddr, sizeof(struct in6_addr)); + /* Do checksum update in two passes: first compute the incremental * checksum update of the ICMPv6 pseudo header, update the checksum * using bpf_l4_csum_replace(), and then do a separate update for the @@ -577,7 +575,10 @@ clat_translate_v6(struct __sk_buff *skb, switch (dst_hdr.protocol) { case IPPROTO_ICMPV6: - new_icmp = (void *) (ip6h + 1); + new_icmp = (void *) (ip6h + 1); + if ((void *) (new_icmp + 1) > data_end) + goto out; + old_icmp6 = *((struct icmp6hdr *) (void *) new_icmp); if (rewrite_icmpv6(ip6h, skb, &new_icmp, nh)) goto out; From ade4de22f3f545844d043e53b1d7351dac8a6326 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 2 Jan 2026 16:34:53 +0100 Subject: [PATCH 099/153] bpf: clat: remove unused variables --- src/core/bpf/clat.bpf.c | 21 +++++++-------------- src/core/bpf/meson.build | 2 ++ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 478751c8ce..2c338f988f 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -413,19 +413,16 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, struct icmphdr **new_icmp_out, struct hdr_cursor *nh) { - void *data_end = SKB_DATA_END(skb); - struct icmp6hdr old_icmp6, *icmp6 = (void *) (ip6h + 1); - struct icmphdr icmp, *new_icmp; - __u32 mtu, ptr; - struct iphdr dst_hdr; - void *inner_packet; + void *data_end = SKB_DATA_END(skb); + struct icmp6hdr *icmp6 = (void *) (ip6h + 1); + struct icmphdr icmp, *new_icmp; + __u32 mtu, ptr; if ((void *) (icmp6 + 1) > data_end) return -1; - old_icmp6 = *icmp6; - new_icmp = (void *) icmp6; - icmp = *new_icmp; + new_icmp = (void *) icmp6; + icmp = *new_icmp; /* These translations are defined in RFC6145 section 5.2 */ switch (icmp6->icmp6_type) { @@ -501,8 +498,7 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, return -1; } - *new_icmp = icmp; -out: + *new_icmp = icmp; *new_icmp_out = new_icmp; return 0; } @@ -514,15 +510,12 @@ clat_translate_v6(struct __sk_buff *skb, struct iphdr *dst_hdr_out, bool depth) { - struct in6_addr subnet_v6 = {}; struct in_addr src_v4; int ip_type; struct ipv6hdr *ip6h; int ret = TC_ACT_OK; struct icmphdr *new_icmp; struct icmp6hdr old_icmp6; - struct iphdr dst_hdr_icmp; - int type; struct clat_v6_config_value *v6_config; struct clat_v6_config_key v6_config_key; diff --git a/src/core/bpf/meson.build b/src/core/bpf/meson.build index 200d0c670e..0ba2af16a9 100644 --- a/src/core/bpf/meson.build +++ b/src/core/bpf/meson.build @@ -96,6 +96,7 @@ endif bpf_clang_flags = [ '-std=gnu17', + '-Wunused', '-Wno-compare-distinct-pointer-types', '-fno-stack-protector', '-O2', @@ -107,6 +108,7 @@ bpf_clang_flags = [ bpf_gcc_flags = [ '-std=gnu17', + '-Wunused', '-fno-stack-protector', '-fno-ssa-phiopt', '-O2', From d1351f12191f7a094c23ae99258674aa7495d736 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 28 Oct 2025 22:44:00 +0100 Subject: [PATCH 100/153] bpf: clat: remove unused includes --- src/core/bpf/clat.bpf.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 2c338f988f..ed87f81409 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -19,13 +19,10 @@ #include #include #include -#include #include #include #include #include -#include -#include #include #include From 6273f0afbad75087d6fc1d5c9886d5fa64f74d95 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 2 Jan 2026 16:37:03 +0100 Subject: [PATCH 101/153] bpf: clat: add missing "break" statements --- src/core/bpf/clat.bpf.c | 4 ++++ src/core/bpf/meson.build | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index ed87f81409..e4dd169364 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -209,6 +209,7 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) icmp6.icmp6_type = ICMPV6_PARAMPROB; icmp6.icmp6_code = ICMPV6_UNK_NEXTHDR; icmp6.icmp6_pointer = bpf_htonl(offsetof(struct ipv6hdr, nexthdr)); + break; case ICMP_PORT_UNREACH: icmp6.icmp6_code = ICMPV6_PORT_UNREACH; break; @@ -222,11 +223,13 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) if (mtu < 1280) mtu = 1280; icmp6.icmp6_mtu = bpf_htonl(mtu); + break; case ICMP_NET_ANO: case ICMP_HOST_ANO: case ICMP_PKT_FILTERED: case ICMP_PREC_CUTOFF: icmp6.icmp6_code = ICMPV6_ADM_PROHIBITED; + break; default: return -1; } @@ -271,6 +274,7 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) default: return -1; } + break; default: return -1; } diff --git a/src/core/bpf/meson.build b/src/core/bpf/meson.build index 0ba2af16a9..39b978dd75 100644 --- a/src/core/bpf/meson.build +++ b/src/core/bpf/meson.build @@ -97,6 +97,7 @@ endif bpf_clang_flags = [ '-std=gnu17', '-Wunused', + '-Wimplicit-fallthrough', '-Wno-compare-distinct-pointer-types', '-fno-stack-protector', '-O2', @@ -109,6 +110,7 @@ bpf_clang_flags = [ bpf_gcc_flags = [ '-std=gnu17', '-Wunused', + '-Wimplicit-fallthrough', '-fno-stack-protector', '-fno-ssa-phiopt', '-O2', From 3af67616554d611424b834e4f5a0278f546671c5 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 2 Jan 2026 16:41:50 +0100 Subject: [PATCH 102/153] bpf: clat: fix translation of ICMPv6 Parameter Problem According to RFC 6145 5.2, the pointer should be set for code 0, not 1. --- src/core/bpf/clat.bpf.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index e4dd169364..e65edd0fbe 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -468,14 +468,11 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, case 0: icmp.type = ICMP_PARAMETERPROB; icmp.code = 0; - break; - case 1: - icmp.type = ICMP_DEST_UNREACH; - icmp.code = ICMP_PROT_UNREACH; - ptr = bpf_ntohl(icmp6->icmp6_pointer); + /* Figure 6 in RFC6145 - using if statements b/c of * range at the bottom */ + ptr = bpf_ntohl(icmp6->icmp6_pointer); if (ptr == 0 || ptr == 1) icmp.un.reserved[0] = ptr; else if (ptr == 4 || ptr == 5) @@ -491,6 +488,10 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, else return -1; break; + case 1: + icmp.type = ICMP_DEST_UNREACH; + icmp.code = ICMP_PROT_UNREACH; + break; default: return -1; } From 213e9e33da11b6cb71975fa9b8be9e9cab4e6aaf Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 23 Dec 2025 22:11:29 +0100 Subject: [PATCH 103/153] bpf: clat: use the right endian-conversion function bpf_ntohl() is more correct because the field is in network byte order; but there is no actual change in behavior. --- src/core/bpf/clat.bpf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index e65edd0fbe..3bec158b68 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -455,7 +455,7 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, icmp.type = ICMP_DEST_UNREACH; icmp.code = ICMP_FRAG_NEEDED; - mtu = bpf_htonl(icmp6->icmp6_mtu) - 20; + mtu = bpf_ntohl(icmp6->icmp6_mtu) - 20; if (mtu > 0xffff) return -1; icmp.un.frag.mtu = bpf_htons(mtu); From 232da41572e3a3f3f853967c35d4ce8d36b0b680 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 3 Oct 2025 16:55:34 +0200 Subject: [PATCH 104/153] bpf: clat: don't explicitly inline functions BPF handles function calls fine these days. Only leave the inline qualifier on very small functions like csum_fold_helper(). --- src/core/bpf/clat.bpf.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 3bec158b68..2419c50cdc 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -82,7 +82,7 @@ struct icmpv6_pseudo { __u8 nh; } __attribute__((packed)); -static __always_inline void +static void update_l4_checksum(struct __sk_buff *skb, struct ipv6hdr *ip6h, struct iphdr *iph, @@ -123,7 +123,7 @@ update_l4_checksum(struct __sk_buff *skb, bpf_l4_csum_replace(skb, offset, 0, csum, flags); } -static __always_inline void +static void update_icmp_checksum(struct __sk_buff *skb, struct ipv6hdr *ip6h, void *icmp_before, @@ -288,7 +288,7 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) } /* ipv4 traffic in from application on this device, needs to be translated to v6 and sent to PLAT */ -static __attribute__((always_inline)) inline int +static int clat_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) { int ret = TC_ACT_OK; @@ -402,13 +402,13 @@ csum_fold_helper(__u32 csum) return ~sum; } -static __attribute__((always_inline)) inline int clat_translate_v6(struct __sk_buff *skb, - struct hdr_cursor *nh, - void *data_end, - struct iphdr *dst_hdr_out, - bool depth); +static int clat_translate_v6(struct __sk_buff *skb, + struct hdr_cursor *nh, + void *data_end, + struct iphdr *dst_hdr_out, + bool depth); -static __attribute__((always_inline)) inline int +static int rewrite_icmpv6(struct ipv6hdr *ip6h, struct __sk_buff *skb, struct icmphdr **new_icmp_out, @@ -505,7 +505,7 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, return 0; } -static __attribute__((always_inline)) inline int +static int clat_translate_v6(struct __sk_buff *skb, struct hdr_cursor *nh, void *data_end, @@ -637,7 +637,7 @@ out: } /* ipv6 traffic from the PLAT, to be translated into ipv4 and sent to an application */ -static __attribute__((always_inline)) inline int +static int clat_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) { int ret = TC_ACT_OK; @@ -674,7 +674,7 @@ out: return ret; } -static __attribute__((always_inline)) inline int +static int clat_handler(struct __sk_buff *skb, bool egress) { void *data_end = SKB_DATA_END(skb); From e99a6452be6e01445c76190c37150f070858111e Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 3 Oct 2025 16:58:39 +0200 Subject: [PATCH 105/153] bpf: clat: fix error handling for IPv6 packets There are 3 possible results from clat_translate_v6(): 1. the packet didn't match the CLAT IPv6 address and must be accepted; 2. the packet matches but it is invalid and so it must be dropped; 3. the packet matches and it is valid; clat_handle_v6() should translate the packet to IPv4; Before, the function returned TC_ACT_SHOT for both 2 and 3. Therefore, clat_handle_v6() tried to rewrite also invalid packets. Fix that by returning TC_ACT_UNSPEC for valid packets, meaning that there isn't a final verdict yet. --- src/core/bpf/clat.bpf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 2419c50cdc..3a20a6da3f 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -632,6 +632,7 @@ icmp_out: *dst_hdr_out = dst_hdr; + ret = TC_ACT_UNSPEC; out: return ret; } @@ -651,10 +652,12 @@ clat_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) int ip_offset = (nh->pos - data) & 0x1fff; ret = clat_translate_v6(skb, nh, data_end, &dst_hdr, 0); - if (ret != TC_ACT_SHOT) { + if (ret != TC_ACT_UNSPEC) { goto out; } + ret = TC_ACT_SHOT; + if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IP), 0)) goto out; From 173dc154a07ebeb8fd8f5928cdcd898d54952559 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 3 Oct 2025 17:05:12 +0200 Subject: [PATCH 106/153] bpf: clat: remove commented code The rewrite of IPv6 header inside a ICMP error needs to be implemented. Remove the unused comments for now. --- src/core/bpf/clat.bpf.c | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 3a20a6da3f..de02014fe1 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -586,34 +586,6 @@ clat_translate_v6(struct __sk_buff *skb, if ((void *) (new_icmp + 1) > data_end) goto icmp_out; - /* int type = (*new_icmp).type; */ - /* switch (type) { */ - /* case ICMP_TIME_EXCEEDED: */ - /* case ICMP_DEST_UNREACH: */ - - /* nh->pos = new_icmp + 1; */ - /* if (clat_translate_v6(skb, nh, data_end, &dst_hdr_icmp, 1)) { */ - /* DBG("Bad embedded v6?"); */ - /* goto out; */ - /* } */ - /* if (((__u8 *)(new_icmp + 1)) + sizeof(dst_hdr_icmp) >= data_end) { */ - /* DBG("ICMP header is out of bounds"); */ - /* goto out; */ - /* } */ - /* memcpy(new_icmp + 1, &dst_hdr_icmp, sizeof(dst_hdr_icmp)); // dst_hdr.ihl * 4 */ - - /* /\* Scoot the payload up against the v4 header *\/ */ - /* /\* (Note: We can't use a normal memmove here because clang only supports */ - /* constexpr lengths!) *\/ */ - - /* clat_memmove(((__u8 *)(new_icmp + 1)) + sizeof(dst_hdr), */ - /* ((__u8 *)(new_icmp + 1)) + sizeof(struct ipv6hdr), */ - /* skb, */ - /* dst_hdr.tot_len - (dst_hdr.ihl * 4)); */ - /* /\* TODO: Translate ICMP Extension length *\/ */ - /* break; */ - /* } */ - update_icmp_checksum(skb, ip6h, &old_icmp6, new_icmp, false); icmp_out: From 183d68dcbe68f41507de1cb25c584c8298687634 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sat, 25 Oct 2025 10:45:46 +0200 Subject: [PATCH 107/153] bpf: clat: rework to avoid pointer arithmetic Avoid using pointer arithmetic in the BPF program, so that it requires only CAP_BPF and not CAP_PERFMON. In this context "pointer arithmetic" means adding a variable value to a packet pointer. This means that the program no longer tries to parse variable-size headers (IPv4 options, IPv6 extension headers). Those were already not supported before. It also doesn't parse VLAN tags, but there should be no need for that. If we use fixed offset, we can avoid using the parsing helpers from libxdp. --- .gitlab-ci.yml | 10 +- contrib/alpine/REQUIRED_PACKAGES | 1 - contrib/debian/REQUIRED_PACKAGES | 1 - contrib/fedora/REQUIRED_PACKAGES | 1 - contrib/fedora/rpm/NetworkManager.spec | 1 - meson.build | 1 - src/core/bpf/clat.bpf.c | 218 ++++++++++--------------- 7 files changed, 93 insertions(+), 140 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dc8509071c..bc1e874f95 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-9048a8c683b9' - CENTOS_TAG: 'tag-026f017b5a4a' - DEBIAN_TAG: 'tag-27883e6c662f' - FEDORA_TAG: 'tag-026f017b5a4a' - UBUNTU_TAG: 'tag-27883e6c662f' + ALPINE_TAG: 'tag-8e4bbc59695b' + CENTOS_TAG: 'tag-caf6673db1a7' + DEBIAN_TAG: 'tag-e394e8e726e1' + FEDORA_TAG: 'tag-caf6673db1a7' + UBUNTU_TAG: 'tag-e394e8e726e1' ALPINE_EXEC: 'bash .gitlab-ci/alpine-install.sh' CENTOS_EXEC: 'bash .gitlab-ci/fedora-install.sh' diff --git a/contrib/alpine/REQUIRED_PACKAGES b/contrib/alpine/REQUIRED_PACKAGES index a429c1c733..c6ae3a4edd 100755 --- a/contrib/alpine/REQUIRED_PACKAGES +++ b/contrib/alpine/REQUIRED_PACKAGES @@ -32,7 +32,6 @@ apk add \ 'libpsl-dev' \ 'libsoup-dev' \ 'libteam-dev' \ - 'libxdp-dev' \ 'linux-headers' \ 'meson' \ 'mobile-broadband-provider-info' \ diff --git a/contrib/debian/REQUIRED_PACKAGES b/contrib/debian/REQUIRED_PACKAGES index a61ec0d184..c2e409fa7f 100755 --- a/contrib/debian/REQUIRED_PACKAGES +++ b/contrib/debian/REQUIRED_PACKAGES @@ -65,7 +65,6 @@ install \ libsystemd-dev \ libteam-dev \ libudev-dev \ - libxdp-dev \ locales \ meson \ mobile-broadband-provider-info \ diff --git a/contrib/fedora/REQUIRED_PACKAGES b/contrib/fedora/REQUIRED_PACKAGES index 6d37d8280f..557c6c73a7 100755 --- a/contrib/fedora/REQUIRED_PACKAGES +++ b/contrib/fedora/REQUIRED_PACKAGES @@ -71,7 +71,6 @@ install \ libnvme-devel \ libselinux-devel \ libuuid-devel \ - libxdp-devel \ meson \ mobile-broadband-provider-info-devel \ newt-devel \ diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 940b9f2736..f37444949f 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -287,7 +287,6 @@ BuildRequires: iproute BuildRequires: iproute-tc BuildRequires: libnvme-devel >= 1.5 BuildRequires: libbpf-devel -BuildRequires: libxdp-devel BuildRequires: bpftool Provides: %{name}-dispatcher%{?_isa} = %{epoch}:%{version}-%{release} diff --git a/meson.build b/meson.build index cb604a5ad4..913d7431be 100644 --- a/meson.build +++ b/meson.build @@ -519,7 +519,6 @@ enable_clat = get_option('clat') if enable_clat libbpf = dependency('libbpf', version: '>= 0.1.0', required: false) assert(libbpf.found(), 'You must have libbpf installed to build. Use -Dclat=false to disable use of it') - libxdp = dependency('libxdp', version: '>= 0.1.0', required: false) endif config_h.set10('HAVE_CLAT', enable_clat) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index de02014fe1..64cb0af228 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -26,7 +26,6 @@ #include #include -#include #include "clat.h" @@ -89,7 +88,6 @@ update_l4_checksum(struct __sk_buff *skb, int ip_type, bool v4to6) { - void *data = SKB_DATA(skb); int flags = BPF_F_PSEUDO_HDR; __u16 offset; __u32 csum; @@ -99,13 +97,13 @@ update_l4_checksum(struct __sk_buff *skb, void *to_ptr = &ip6h->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(__u32), to_ptr, 2 * sizeof(struct in6_addr), 0); - offset = (void *) (iph + 1) - data; + offset = sizeof(struct ethhdr) + sizeof(struct iphdr); } else { void *from_ptr = &ip6h->saddr; void *to_ptr = &iph->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(struct in6_addr), to_ptr, 2 * sizeof(__u32), 0); - offset = (void *) (ip6h + 1) - data; + offset = sizeof(struct ethhdr) + sizeof(struct ipv6hdr); } switch (ip_type) { @@ -130,8 +128,7 @@ update_icmp_checksum(struct __sk_buff *skb, void *icmp_after, bool add) { - void *data = SKB_DATA(skb); - struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, .len = ip6h->payload_len}; + struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, .len = ip6h->payload_len}; __u16 h_before, h_after, offset; __u32 csum, u_before, u_after; @@ -153,7 +150,8 @@ update_icmp_checksum(struct __sk_buff *skb, add ? sizeof(ph) : 0, 0); - offset = ((void *) icmp_after - data) + 2; + offset = sizeof(struct ethhdr) + (add ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) + 2; + /* first two bytes of ICMP header, type and code */ h_before = *(__u16 *) icmp_before; h_after = *(__u16 *) icmp_after; @@ -289,34 +287,27 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) /* ipv4 traffic in from application on this device, needs to be translated to v6 and sent to PLAT */ static int -clat_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) +clat_handle_v4(struct __sk_buff *skb) { - int ret = TC_ACT_OK; - void *data_end = SKB_DATA_END(skb); - void *data = SKB_DATA(skb); - int ip_type, iphdr_len, ip_offset; - - struct in6_addr *dst_v6; - struct ipv6hdr *ip6h; - struct ipv6hdr dst_hdr = { - .version = 6, + int ret = TC_ACT_OK; + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); + struct ipv6hdr *ip6h; + struct ipv6hdr dst_hdr = { + .version = 6, }; struct iphdr *iph; struct ethhdr *eth; - struct in_addr src_v4; struct clat_v4_config_value *v4_config; struct clat_v4_config_key v4_config_key; - ip_offset = (nh->pos - data) & 0x1fff; - - ip_type = parse_iphdr(nh, data_end, &iph); - if (ip_type < 0) + iph = data + sizeof(struct ethhdr); + if (iph + 1 > data_end) goto out; - src_v4.s_addr = iph->saddr; - v4_config_key.ifindex = skb->ifindex; - v4_config_key.local_v4 = src_v4; + v4_config_key.ifindex = skb->ifindex; + v4_config_key.local_v4.s_addr = iph->saddr; v4_config = bpf_map_lookup_elem(&v4_config_map, &v4_config_key); if (!v4_config) { @@ -337,28 +328,26 @@ clat_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) * out. The DF is the second-most-significant bit (as bit 0 is * reserved). */ - iphdr_len = iph->ihl * 4; - if (iphdr_len != sizeof(struct iphdr) || (iph->frag_off & ~bpf_htons(1 << 14))) { + + if (iph->ihl != 5 || (iph->frag_off & ~bpf_htons(1 << 14))) { DBG("v4: pkt src/dst %pI4/%pI4 has IP options or is fragmented, dropping\n", &iph->daddr, &iph->saddr); goto out; } - dst_v6 = &v4_config->pref64; - dst_v6->s6_addr32[3] = iph->daddr; - - DBG("v4: Found mapping for dst %pI4 to %pI6c\n", &iph->daddr, dst_v6); - /* src v4 as last octet of clat address */ - dst_hdr.saddr = v4_config->local_v6; - dst_hdr.daddr = *dst_v6; - dst_hdr.nexthdr = iph->protocol; - dst_hdr.hop_limit = iph->ttl; + dst_hdr.saddr = v4_config->local_v6; + dst_hdr.daddr = v4_config->pref64; + dst_hdr.daddr.s6_addr32[3] = iph->daddr; + dst_hdr.nexthdr = iph->protocol; + dst_hdr.hop_limit = iph->ttl; /* weird definition in ipv6hdr */ dst_hdr.priority = (iph->tos & 0x70) >> 4; dst_hdr.flow_lbl[0] = iph->tos << 4; - dst_hdr.payload_len = bpf_htons(bpf_ntohs(iph->tot_len) - iphdr_len); + dst_hdr.payload_len = bpf_htons(bpf_ntohs(iph->tot_len) - sizeof(struct iphdr)); + + DBG("v4: Found mapping for dst %pI4 to %pI6c\n", &iph->daddr, &dst_hdr.daddr); switch (dst_hdr.nexthdr) { case IPPROTO_ICMP: @@ -380,9 +369,12 @@ clat_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - eth = data; - ip6h = data + ip_offset; - if ((void *) (eth + 1) > data_end || (void *) (ip6h + 1) > data_end) + eth = data; + if (eth + 1 > data_end) + goto out; + + ip6h = (void *) (eth + 1); + if (ip6h + 1 > data_end) goto out; eth->h_proto = bpf_htons(ETH_P_IPV6); @@ -402,24 +394,18 @@ csum_fold_helper(__u32 csum) return ~sum; } -static int clat_translate_v6(struct __sk_buff *skb, - struct hdr_cursor *nh, - void *data_end, - struct iphdr *dst_hdr_out, - bool depth); - static int -rewrite_icmpv6(struct ipv6hdr *ip6h, - struct __sk_buff *skb, - struct icmphdr **new_icmp_out, - struct hdr_cursor *nh) +rewrite_icmpv6(struct ipv6hdr *ip6h, struct __sk_buff *skb) { void *data_end = SKB_DATA_END(skb); - struct icmp6hdr *icmp6 = (void *) (ip6h + 1); - struct icmphdr icmp, *new_icmp; - __u32 mtu, ptr; + struct icmp6hdr *icmp6; + struct icmphdr icmp; + struct icmphdr *new_icmp; + __u32 mtu; + __u32 ptr; - if ((void *) (icmp6 + 1) > data_end) + icmp6 = (void *) (ip6h + 1); + if (icmp6 + 1 > data_end) return -1; new_icmp = (void *) icmp6; @@ -500,40 +486,33 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, return -1; } - *new_icmp = icmp; - *new_icmp_out = new_icmp; + *new_icmp = icmp; return 0; } +/* ipv6 traffic from the PLAT, to be translated into ipv4 and sent to an application */ static int -clat_translate_v6(struct __sk_buff *skb, - struct hdr_cursor *nh, - void *data_end, - struct iphdr *dst_hdr_out, - bool depth) +clat_handle_v6(struct __sk_buff *skb) { - struct in_addr src_v4; - int ip_type; + int ret = TC_ACT_OK; + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); + struct ethhdr *eth; + struct iphdr *iph; struct ipv6hdr *ip6h; - int ret = TC_ACT_OK; - struct icmphdr *new_icmp; - struct icmp6hdr old_icmp6; + struct iphdr dst_hdr = { + .version = 4, + .ihl = 5, + .frag_off = bpf_htons(1 << 14), /* set Don't Fragment bit */ + }; struct clat_v6_config_value *v6_config; struct clat_v6_config_key v6_config_key; - struct iphdr dst_hdr = { - .version = 4, - .ihl = 5, - .frag_off = bpf_htons(1 << 14), /* set Don't Fragment bit */ - }; - - ip_type = parse_ip6hdr(nh, data_end, &ip6h); - if (ip_type < 0) + ip6h = data + sizeof(struct ethhdr); + if (ip6h + 1 > data_end) goto out; - src_v4.s_addr = ip6h->saddr.s6_addr32[3]; - v6_config_key.local_v6 = ip6h->daddr; v6_config_key.pref64 = ip6h->saddr; /* v6 pxlen is always 96 */ @@ -554,35 +533,34 @@ clat_translate_v6(struct __sk_buff *skb, */ ret = TC_ACT_SHOT; - /* drop packets with IP options - parser skips options */ - if (ip_type != ip6h->nexthdr) { - DBG("v6: dropping packet with IP options from %pI6c\n", &ip6h->saddr); + /* drop packets with extension headers */ + if (ip6h->nexthdr != IPPROTO_TCP && ip6h->nexthdr != IPPROTO_UDP + && ip6h->nexthdr != IPPROTO_ICMPV6) goto out; - } dst_hdr.daddr = v6_config->local_v4.s_addr; - dst_hdr.saddr = src_v4.s_addr; + dst_hdr.saddr = ip6h->saddr.s6_addr32[3]; dst_hdr.protocol = ip6h->nexthdr; dst_hdr.ttl = ip6h->hop_limit; dst_hdr.tos = ip6h->priority << 4 | (ip6h->flow_lbl[0] >> 4); - dst_hdr.tot_len = bpf_htons(bpf_ntohs(ip6h->payload_len) + sizeof(dst_hdr)); + dst_hdr.tot_len = bpf_htons(bpf_ntohs(ip6h->payload_len) + sizeof(struct iphdr)); switch (dst_hdr.protocol) { case IPPROTO_ICMPV6: + { + struct icmphdr *new_icmp; + struct icmp6hdr old_icmp6; new_icmp = (void *) (ip6h + 1); - if ((void *) (new_icmp + 1) > data_end) + if (new_icmp + 1 > data_end) goto out; old_icmp6 = *((struct icmp6hdr *) (void *) new_icmp); - if (rewrite_icmpv6(ip6h, skb, &new_icmp, nh)) + if (rewrite_icmpv6(ip6h, skb)) goto out; - /* FIXME: also need to rewrite IP header embedded in ICMP error */ - if (depth) - goto icmp_out; - if (!new_icmp) - goto icmp_out; + /* TODO: also need to rewrite IP header embedded in ICMP error */ + if ((void *) (new_icmp + 1) > data_end) goto icmp_out; @@ -591,6 +569,7 @@ clat_translate_v6(struct __sk_buff *skb, icmp_out: dst_hdr.protocol = IPPROTO_ICMP; break; + } case IPPROTO_TCP: case IPPROTO_UDP: update_l4_checksum(skb, ip6h, &dst_hdr, dst_hdr.protocol, false); @@ -602,34 +581,6 @@ icmp_out: dst_hdr.check = csum_fold_helper( bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, sizeof(dst_hdr), 0)); - *dst_hdr_out = dst_hdr; - - ret = TC_ACT_UNSPEC; -out: - return ret; -} - -/* ipv6 traffic from the PLAT, to be translated into ipv4 and sent to an application */ -static int -clat_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) -{ - int ret = TC_ACT_OK; - void *data_end = SKB_DATA_END(skb); - void *data = SKB_DATA(skb); - - struct ethhdr *eth; - struct iphdr *iph; - struct iphdr dst_hdr; - - int ip_offset = (nh->pos - data) & 0x1fff; - - ret = clat_translate_v6(skb, nh, data_end, &dst_hdr, 0); - if (ret != TC_ACT_UNSPEC) { - goto out; - } - - ret = TC_ACT_SHOT; - if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IP), 0)) goto out; @@ -637,8 +588,11 @@ clat_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) data_end = SKB_DATA_END(skb); eth = data; - iph = data + ip_offset; - if ((void *) (eth + 1) > data_end || (void *) (iph + 1) > data_end) + if (eth + 1 > data_end) + goto out; + + iph = (void *) (eth + 1); + if (iph + 1 > data_end) goto out; eth->h_proto = bpf_htons(ETH_P_IP); @@ -652,18 +606,22 @@ out: static int clat_handler(struct __sk_buff *skb, bool egress) { - void *data_end = SKB_DATA_END(skb); - void *data = SKB_DATA(skb); - struct hdr_cursor nh = {.pos = data}; - struct ethhdr *eth; - int eth_type; + void *data = SKB_DATA(skb); + void *data_end = SKB_DATA_END(skb); + struct ethhdr *eth; - /* Parse Ethernet and IP/IPv6 headers */ - eth_type = parse_ethhdr(&nh, data_end, ð); - if (eth_type == bpf_htons(ETH_P_IP) && egress) - return clat_handle_v4(skb, &nh); - else if (eth_type == bpf_htons(ETH_P_IPV6) && !egress) - return clat_handle_v6(skb, &nh); + eth = data; + if (eth + 1 > data_end) + return TC_ACT_OK; + + /* Don't explicitly handle Ethernet types 8021Q and 8021AD + * because we don't expect to receive VLAN-tagged packets + * on the interface. */ + + if (eth->h_proto == bpf_htons(ETH_P_IP) && egress) + return clat_handle_v4(skb); + else if (eth->h_proto == bpf_htons(ETH_P_IPV6) && !egress) + return clat_handle_v6(skb); return TC_ACT_OK; } From 8c83367a49ed659f6702cd7eb49172d8ad177666 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 28 Oct 2025 21:57:02 +0100 Subject: [PATCH 108/153] bpf: clat: improve the code style and consistency Improve the code style and consistency of some functions: - declare only one variable per line - add "const" keyword to read-only function arguments - remove unneeded function arguments - rename variables holding headers on the stack with the "_buf" suffix --- src/core/bpf/clat.bpf.c | 180 ++++++++++++++++++++-------------------- 1 file changed, 89 insertions(+), 91 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 64cb0af228..e297094f77 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -122,15 +122,19 @@ update_l4_checksum(struct __sk_buff *skb, } static void -update_icmp_checksum(struct __sk_buff *skb, - struct ipv6hdr *ip6h, - void *icmp_before, - void *icmp_after, - bool add) +update_icmp_checksum(struct __sk_buff *skb, + const struct ipv6hdr *ip6h, + void *icmp_before, + void *icmp_after, + bool v4to6) { struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, .len = ip6h->payload_len}; - __u16 h_before, h_after, offset; - __u32 csum, u_before, u_after; + __u16 h_before; + __u16 h_after; + __u16 offset; + __u32 csum; + __u32 u_before; + __u32 u_after; __builtin_memcpy(&ph.saddr, &ip6h->saddr, sizeof(struct in6_addr)); __builtin_memcpy(&ph.daddr, &ip6h->daddr, sizeof(struct in6_addr)); @@ -145,12 +149,12 @@ update_icmp_checksum(struct __sk_buff *skb, * itself. */ csum = bpf_csum_diff((__be32 *) &ph, - add ? 0 : sizeof(ph), + v4to6 ? 0 : sizeof(ph), (__be32 *) &ph, - add ? sizeof(ph) : 0, + v4to6 ? sizeof(ph) : 0, 0); - offset = sizeof(struct ethhdr) + (add ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) + 2; + offset = sizeof(struct ethhdr) + (v4to6 ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) + 2; /* first two bytes of ICMP header, type and code */ h_before = *(__u16 *) icmp_before; @@ -168,30 +172,34 @@ update_icmp_checksum(struct __sk_buff *skb, } static int -rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) +rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) { - void *data_end = SKB_DATA_END(skb); - struct icmphdr old_icmp, *icmp = (void *) (iph + 1); - struct icmp6hdr icmp6, *new_icmp6; - __u32 mtu; + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); + struct icmphdr icmp_buf; /* copy of the old ICMPv4 header */ + struct icmp6hdr icmp6_buf; /* buffer for the new ICMPv6 header */ + struct icmphdr *icmp; + struct icmp6hdr *icmp6; + __u32 mtu; - if ((void *) (icmp + 1) > data_end) + icmp = data + sizeof(struct ethhdr) + sizeof(struct iphdr); + if ((icmp + 1) > data_end) return -1; - old_icmp = *icmp; - new_icmp6 = (void *) icmp; - icmp6 = *new_icmp6; + icmp_buf = *icmp; + icmp6 = (void *) icmp; + icmp6_buf = *icmp6; /* These translations are defined in RFC6145 section 4.2 */ switch (icmp->type) { case ICMP_ECHO: - icmp6.icmp6_type = ICMPV6_ECHO_REQUEST; + icmp6_buf.icmp6_type = ICMPV6_ECHO_REQUEST; break; case ICMP_ECHOREPLY: - icmp6.icmp6_type = ICMPV6_ECHO_REPLY; + icmp6_buf.icmp6_type = ICMPV6_ECHO_REPLY; break; case ICMP_DEST_UNREACH: - icmp6.icmp6_type = ICMPV6_DEST_UNREACH; + icmp6_buf.icmp6_type = ICMPV6_DEST_UNREACH; switch (icmp->code) { case ICMP_NET_UNREACH: case ICMP_HOST_UNREACH: @@ -201,32 +209,32 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) case ICMP_HOST_ISOLATED: case ICMP_NET_UNR_TOS: case ICMP_HOST_UNR_TOS: - icmp6.icmp6_code = ICMPV6_NOROUTE; + icmp6_buf.icmp6_code = ICMPV6_NOROUTE; break; case ICMP_PROT_UNREACH: - icmp6.icmp6_type = ICMPV6_PARAMPROB; - icmp6.icmp6_code = ICMPV6_UNK_NEXTHDR; - icmp6.icmp6_pointer = bpf_htonl(offsetof(struct ipv6hdr, nexthdr)); + icmp6_buf.icmp6_type = ICMPV6_PARAMPROB; + icmp6_buf.icmp6_code = ICMPV6_UNK_NEXTHDR; + icmp6_buf.icmp6_pointer = bpf_htonl(offsetof(struct ipv6hdr, nexthdr)); break; case ICMP_PORT_UNREACH: - icmp6.icmp6_code = ICMPV6_PORT_UNREACH; + icmp6_buf.icmp6_code = ICMPV6_PORT_UNREACH; break; case ICMP_FRAG_NEEDED: - icmp6.icmp6_type = ICMPV6_PKT_TOOBIG; - icmp6.icmp6_code = 0; - mtu = bpf_ntohs(icmp->un.frag.mtu) + 20; + icmp6_buf.icmp6_type = ICMPV6_PKT_TOOBIG; + icmp6_buf.icmp6_code = 0; + mtu = bpf_ntohs(icmp->un.frag.mtu) + 20; /* RFC6145 section 6, "second approach" - should not be * necessary, but might as well do this */ if (mtu < 1280) mtu = 1280; - icmp6.icmp6_mtu = bpf_htonl(mtu); + icmp6_buf.icmp6_mtu = bpf_htonl(mtu); break; case ICMP_NET_ANO: case ICMP_HOST_ANO: case ICMP_PKT_FILTERED: case ICMP_PREC_CUTOFF: - icmp6.icmp6_code = ICMPV6_ADM_PROHIBITED; + icmp6_buf.icmp6_code = ICMPV6_ADM_PROHIBITED; break; default: return -1; @@ -235,39 +243,39 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) case ICMP_PARAMETERPROB: if (icmp->code == 1) return -1; - icmp6.icmp6_type = ICMPV6_PARAMPROB; - icmp6.icmp6_code = ICMPV6_HDR_FIELD; + icmp6_buf.icmp6_type = ICMPV6_PARAMPROB; + icmp6_buf.icmp6_code = ICMPV6_HDR_FIELD; /* The pointer field not defined in the Linux header. This * translation is from Figure 3 of RFC6145. */ switch (icmp->un.reserved[0]) { case 0: /* version/IHL */ - icmp6.icmp6_pointer = 0; + icmp6_buf.icmp6_pointer = 0; break; case 1: /* Type of Service */ - icmp6.icmp6_pointer = bpf_htonl(1); + icmp6_buf.icmp6_pointer = bpf_htonl(1); break; case 2: /* Total length */ case 3: - icmp6.icmp6_pointer = bpf_htonl(4); + icmp6_buf.icmp6_pointer = bpf_htonl(4); break; case 8: /* Time to Live */ - icmp6.icmp6_pointer = bpf_htonl(7); + icmp6_buf.icmp6_pointer = bpf_htonl(7); break; case 9: /* Protocol */ - icmp6.icmp6_pointer = bpf_htonl(6); + icmp6_buf.icmp6_pointer = bpf_htonl(6); break; case 12: /* Source address */ case 13: case 14: case 15: - icmp6.icmp6_pointer = bpf_htonl(8); + icmp6_buf.icmp6_pointer = bpf_htonl(8); break; case 16: /* Destination address */ case 17: case 18: case 19: - icmp6.icmp6_pointer = bpf_htonl(24); + icmp6_buf.icmp6_pointer = bpf_htonl(24); break; default: return -1; @@ -277,8 +285,8 @@ rewrite_icmp(struct iphdr *iph, struct ipv6hdr *ip6h, struct __sk_buff *skb) return -1; } - *new_icmp6 = icmp6; - update_icmp_checksum(skb, ip6h, &old_icmp, new_icmp6, true); + *icmp6 = icmp6_buf; + update_icmp_checksum(skb, ip6h, &icmp_buf, icmp6, true); /* FIXME: also need to rewrite IP header embedded in ICMP error */ @@ -351,7 +359,7 @@ clat_handle_v4(struct __sk_buff *skb) switch (dst_hdr.nexthdr) { case IPPROTO_ICMP: - if (rewrite_icmp(iph, &dst_hdr, skb)) + if (rewrite_icmp(skb, &dst_hdr)) goto out; dst_hdr.nexthdr = IPPROTO_ICMPV6; break; @@ -395,88 +403,92 @@ csum_fold_helper(__u32 csum) } static int -rewrite_icmpv6(struct ipv6hdr *ip6h, struct __sk_buff *skb) +rewrite_icmpv6(struct __sk_buff *skb) { void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); struct icmp6hdr *icmp6; - struct icmphdr icmp; - struct icmphdr *new_icmp; + struct icmphdr *icmp; + struct icmphdr icmp_buf; /* buffer for the new ICMPv4 header */ + struct icmp6hdr icmp6_buf; /* copy of the old ICMPv6 header */ + struct ipv6hdr *ip6h; __u32 mtu; __u32 ptr; - icmp6 = (void *) (ip6h + 1); + icmp6 = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); if (icmp6 + 1 > data_end) return -1; - new_icmp = (void *) icmp6; - icmp = *new_icmp; + icmp6_buf = *icmp6; + icmp = (void *) icmp6; + icmp_buf = *icmp; /* These translations are defined in RFC6145 section 5.2 */ switch (icmp6->icmp6_type) { case ICMPV6_ECHO_REQUEST: - icmp.type = ICMP_ECHO; + icmp_buf.type = ICMP_ECHO; break; case ICMPV6_ECHO_REPLY: - icmp.type = ICMP_ECHOREPLY; + icmp_buf.type = ICMP_ECHOREPLY; break; case ICMPV6_DEST_UNREACH: - icmp.type = ICMP_DEST_UNREACH; + icmp_buf.type = ICMP_DEST_UNREACH; switch (icmp6->icmp6_code) { case ICMPV6_NOROUTE: case ICMPV6_NOT_NEIGHBOUR: case ICMPV6_ADDR_UNREACH: - icmp.code = ICMP_HOST_UNREACH; + icmp_buf.code = ICMP_HOST_UNREACH; break; case ICMPV6_ADM_PROHIBITED: - icmp.code = ICMP_HOST_ANO; + icmp_buf.code = ICMP_HOST_ANO; break; case ICMPV6_PORT_UNREACH: - icmp.code = ICMP_PORT_UNREACH; + icmp_buf.code = ICMP_PORT_UNREACH; break; default: return -1; } break; case ICMPV6_PKT_TOOBIG: - icmp.type = ICMP_DEST_UNREACH; - icmp.code = ICMP_FRAG_NEEDED; + icmp_buf.type = ICMP_DEST_UNREACH; + icmp_buf.code = ICMP_FRAG_NEEDED; mtu = bpf_ntohl(icmp6->icmp6_mtu) - 20; if (mtu > 0xffff) return -1; - icmp.un.frag.mtu = bpf_htons(mtu); + icmp_buf.un.frag.mtu = bpf_htons(mtu); break; case ICMPV6_TIME_EXCEED: - icmp.type = ICMP_TIME_EXCEEDED; + icmp_buf.type = ICMP_TIME_EXCEEDED; break; case ICMPV6_PARAMPROB: switch (icmp6->icmp6_code) { case 0: - icmp.type = ICMP_PARAMETERPROB; - icmp.code = 0; + icmp_buf.type = ICMP_PARAMETERPROB; + icmp_buf.code = 0; /* Figure 6 in RFC6145 - using if statements b/c of * range at the bottom */ ptr = bpf_ntohl(icmp6->icmp6_pointer); if (ptr == 0 || ptr == 1) - icmp.un.reserved[0] = ptr; + icmp_buf.un.reserved[0] = ptr; else if (ptr == 4 || ptr == 5) - icmp.un.reserved[0] = 2; + icmp_buf.un.reserved[0] = 2; else if (ptr == 6) - icmp.un.reserved[0] = 9; + icmp_buf.un.reserved[0] = 9; else if (ptr == 7) - icmp.un.reserved[0] = 8; + icmp_buf.un.reserved[0] = 8; else if (ptr >= 8 && ptr <= 23) - icmp.un.reserved[0] = 12; + icmp_buf.un.reserved[0] = 12; else if (ptr >= 24 && ptr <= 39) - icmp.un.reserved[0] = 16; + icmp_buf.un.reserved[0] = 16; else return -1; break; case 1: - icmp.type = ICMP_DEST_UNREACH; - icmp.code = ICMP_PROT_UNREACH; + icmp_buf.type = ICMP_DEST_UNREACH; + icmp_buf.code = ICMP_PROT_UNREACH; break; default: return -1; @@ -486,7 +498,12 @@ rewrite_icmpv6(struct ipv6hdr *ip6h, struct __sk_buff *skb) return -1; } - *new_icmp = icmp; + *icmp = icmp_buf; + ip6h = data + sizeof(struct ethhdr); + update_icmp_checksum(skb, ip6h, &icmp6_buf, icmp, false); + + /* FIXME: also need to rewrite IP header embedded in ICMP error */ + return 0; } @@ -547,29 +564,10 @@ clat_handle_v6(struct __sk_buff *skb) switch (dst_hdr.protocol) { case IPPROTO_ICMPV6: - { - struct icmphdr *new_icmp; - struct icmp6hdr old_icmp6; - - new_icmp = (void *) (ip6h + 1); - if (new_icmp + 1 > data_end) + if (rewrite_icmpv6(skb)) goto out; - - old_icmp6 = *((struct icmp6hdr *) (void *) new_icmp); - if (rewrite_icmpv6(ip6h, skb)) - goto out; - - /* TODO: also need to rewrite IP header embedded in ICMP error */ - - if ((void *) (new_icmp + 1) > data_end) - goto icmp_out; - - update_icmp_checksum(skb, ip6h, &old_icmp6, new_icmp, false); - -icmp_out: dst_hdr.protocol = IPPROTO_ICMP; break; - } case IPPROTO_TCP: case IPPROTO_UDP: update_l4_checksum(skb, ip6h, &dst_hdr, dst_hdr.protocol, false); From 8414afd9ae5fab578e45276759f787f8b3e5d1d9 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 26 Oct 2025 17:44:12 +0100 Subject: [PATCH 109/153] clat: pass the configuration as a BPF global variable The program only needs to know the local IPv4 address, the local IPv6 address and the PREF64. There is no need to create multiple maps for that, just pass a global configuration struct containing those 3 fields. --- src/core/bpf/clat.bpf.c | 78 +++++++++++----------------- src/core/bpf/clat.h | 16 +----- src/core/nm-l3cfg.c | 112 +++++----------------------------------- 3 files changed, 44 insertions(+), 162 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index e297094f77..46e552583f 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -31,21 +31,7 @@ char _license[] SEC("license") = "GPL"; -struct { - __uint(type, BPF_MAP_TYPE_HASH); - __type(key, struct clat_v4_config_key); - __type(value, struct clat_v4_config_value); - __uint(max_entries, 16); - __uint(map_flags, BPF_F_NO_PREALLOC); -} v4_config_map SEC(".maps"); - -struct { - __uint(type, BPF_MAP_TYPE_HASH); - __type(key, struct clat_v6_config_key); - __type(value, struct clat_v6_config_value); - __uint(max_entries, 16); - __uint(map_flags, BPF_F_NO_PREALLOC); -} v6_config_map SEC(".maps"); +struct clat_config config; #ifdef DEBUG #define DBG(fmt, ...) \ @@ -307,25 +293,15 @@ clat_handle_v4(struct __sk_buff *skb) struct iphdr *iph; struct ethhdr *eth; - struct clat_v4_config_value *v4_config; - struct clat_v4_config_key v4_config_key; - iph = data + sizeof(struct ethhdr); if (iph + 1 > data_end) goto out; - v4_config_key.ifindex = skb->ifindex; - v4_config_key.local_v4.s_addr = iph->saddr; - - v4_config = bpf_map_lookup_elem(&v4_config_map, &v4_config_key); - if (!v4_config) { - DBG("-> v4: config for src_v4=%pI4 not found!\n", &v4_config_key.local_v4); + if (iph->saddr != config.local_v4.s_addr) goto out; - } - /* At this point we know the destination IP is within the configured - * subnet, so if we can't rewrite the packet it should be dropped (so as - * not to leak traffic in that subnet). + /* At this point we know the packet needs translation. If we can't + * rewrite it, it should be dropped. */ ret = TC_ACT_SHOT; @@ -345,8 +321,8 @@ clat_handle_v4(struct __sk_buff *skb) } /* src v4 as last octet of clat address */ - dst_hdr.saddr = v4_config->local_v6; - dst_hdr.daddr = v4_config->pref64; + dst_hdr.saddr = config.local_v6; + dst_hdr.daddr = config.pref64; dst_hdr.daddr.s6_addr32[3] = iph->daddr; dst_hdr.nexthdr = iph->protocol; dst_hdr.hop_limit = iph->ttl; @@ -402,6 +378,18 @@ csum_fold_helper(__u32 csum) return ~sum; } +static __always_inline bool +v6addr_equal(const struct in6_addr *a, const struct in6_addr *b) +{ + int i; + + for (i = 0; i < 4; i++) { + if (a->s6_addr32[i] != b->s6_addr32[i]) + return false; + } + return true; +} + static int rewrite_icmpv6(struct __sk_buff *skb) { @@ -514,6 +502,7 @@ clat_handle_v6(struct __sk_buff *skb) int ret = TC_ACT_OK; void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); + struct in6_addr subnet_v6; struct ethhdr *eth; struct iphdr *iph; struct ipv6hdr *ip6h; @@ -523,30 +512,21 @@ clat_handle_v6(struct __sk_buff *skb) .frag_off = bpf_htons(1 << 14), /* set Don't Fragment bit */ }; - struct clat_v6_config_value *v6_config; - struct clat_v6_config_key v6_config_key; - ip6h = data + sizeof(struct ethhdr); if (ip6h + 1 > data_end) goto out; - v6_config_key.local_v6 = ip6h->daddr; - v6_config_key.pref64 = ip6h->saddr; - /* v6 pxlen is always 96 */ - v6_config_key.pref64.s6_addr32[3] = 0; - v6_config_key.ifindex = skb->ifindex; - - v6_config = bpf_map_lookup_elem(&v6_config_map, &v6_config_key); - if (!v6_config) { - DBG("<- v6: config for pref64=%pI6c, local_v6=%pI6c not found!\n", - &v6_config_key.pref64, - &v6_config_key.local_v6); + if (!v6addr_equal(&ip6h->daddr, &config.local_v6)) goto out; - } - /* At this point we know the destination IP is within the configured - * subnet, so if we can't rewrite the packet it should be dropped (so as - * not to leak traffic in that subnet). + subnet_v6 = ip6h->saddr; + subnet_v6.s6_addr32[3] = 0; /* prefix len is always 96 for now */ + + if (!v6addr_equal(&subnet_v6, &config.pref64)) + goto out; + + /* At this point we know the packet needs translation. If we can't + * rewrite it, it should be dropped. */ ret = TC_ACT_SHOT; @@ -555,7 +535,7 @@ clat_handle_v6(struct __sk_buff *skb) && ip6h->nexthdr != IPPROTO_ICMPV6) goto out; - dst_hdr.daddr = v6_config->local_v4.s_addr; + dst_hdr.daddr = config.local_v4.s_addr; dst_hdr.saddr = ip6h->saddr.s6_addr32[3]; dst_hdr.protocol = ip6h->nexthdr; dst_hdr.ttl = ip6h->hop_limit; diff --git a/src/core/bpf/clat.h b/src/core/bpf/clat.h index ee4763d5c7..2748946392 100644 --- a/src/core/bpf/clat.h +++ b/src/core/bpf/clat.h @@ -4,24 +4,10 @@ #include -struct clat_v6_config_key { +struct clat_config { struct in6_addr local_v6; struct in6_addr pref64; - __u32 ifindex; -}; - -struct clat_v6_config_value { struct in_addr local_v4; }; -struct clat_v4_config_key { - struct in_addr local_v4; - __u32 ifindex; -}; - -struct clat_v4_config_value { - struct in6_addr local_v6; - struct in6_addr pref64; -}; - #endif diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 5c132c325b..005339446e 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -310,9 +310,6 @@ typedef struct _NML3CfgPrivate { NMNetnsIPReservation *clat_address_4_committed; NMPlatformIP6Address clat_address_6_committed; - /* The NAT64 prefix discovered via RA */ - struct in6_addr clat_pref64; - /* If NULL, the BPF program hasn't been loaded or attached */ struct clat_bpf *clat_bpf; int clat_socket; @@ -387,7 +384,6 @@ typedef struct _NML3CfgPrivate { bool clat_address_6_valid : 1; bool clat_address_6_committed_valid : 1; - bool clat_pref64_valid : 1; } NML3CfgPrivate; struct _NML3CfgClass { @@ -5589,50 +5585,6 @@ _l3_commit_one(NML3Cfg *self, } #if HAVE_CLAT -static void -_l3_get_pref64_config(NML3Cfg *self, - struct clat_v4_config_key *v4_key, - struct clat_v4_config_value *v4_value, - struct clat_v6_config_key *v6_key, - struct clat_v6_config_value *v6_value, - gboolean committed) -{ - const NML3ConfigData *l3cd = self->priv.p->combined_l3cd_commited; - struct in6_addr pref64; - guint32 pref64_plen; - - memset(v4_key, 0, sizeof(*v4_key)); - memset(v6_key, 0, sizeof(*v6_key)); - memset(v4_value, 0, sizeof(*v4_value)); - memset(v6_value, 0, sizeof(*v6_value)); - - v4_key->ifindex = v6_key->ifindex = self->priv.ifindex; - - if (committed) { - if (self->priv.p->clat_address_4_committed) { - v6_value->local_v4.s_addr = v4_key->local_v4.s_addr = - self->priv.p->clat_address_4_committed->addr; - } - if (self->priv.p->clat_address_6_committed_valid) { - v4_value->local_v6 = v6_key->local_v6 = self->priv.p->clat_address_6_committed.address; - } - if (self->priv.p->clat_pref64_valid) { - v6_key->pref64 = v4_value->pref64 = self->priv.p->clat_pref64; - } - } else { - if (self->priv.p->clat_address_4) { - v6_value->local_v4.s_addr = v4_key->local_v4.s_addr = - self->priv.p->clat_address_4->addr; - } - if (self->priv.p->clat_address_6_valid) { - v4_value->local_v6 = v6_key->local_v6 = self->priv.p->clat_address_6.address; - } - if (nm_l3_config_data_get_pref64(l3cd, &pref64, &pref64_plen)) { - v6_key->pref64 = v4_value->pref64 = pref64; - } - } -} - static void _l3_clat_destroy(NML3Cfg *self) { @@ -5668,17 +5620,14 @@ _l3_clat_destroy(NML3Cfg *self) static void _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) { - int err = 0; - const NML3ConfigData *l3cd = self->priv.p->combined_l3cd_commited; - struct in6_addr _l3cd_pref64_inner; - const struct in6_addr *l3cd_pref64 = NULL; - guint32 l3cd_pref64_plen; - char buf[100]; - struct clat_v6_config_key v6_key_committed, v6_key_new; - struct clat_v4_config_key v4_key_committed, v4_key_new; - struct clat_v6_config_value v6_value_committed, v6_value_new; - struct clat_v4_config_value v4_value_committed, v4_value_new; - gboolean v6_changed; + int err = 0; + const NML3ConfigData *l3cd = self->priv.p->combined_l3cd_commited; + struct in6_addr _l3cd_pref64_inner; + const struct in6_addr *l3cd_pref64 = NULL; + guint32 l3cd_pref64_plen; + char buf[100]; + struct clat_config clat_config; + gboolean v6_changed; DECLARE_LIBBPF_OPTS(bpf_tc_hook, hook, .attach_point = BPF_TC_INGRESS | BPF_TC_EGRESS, @@ -5703,10 +5652,6 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) return; } - /* Set up maps */ - bpf_map__set_max_entries(self->priv.p->clat_bpf->maps.v4_config_map, 16); - bpf_map__set_max_entries(self->priv.p->clat_bpf->maps.v6_config_map, 16); - err = clat_bpf__load(self->priv.p->clat_bpf); if (err) { libbpf_strerror(err, buf, sizeof(buf)); @@ -5764,41 +5709,12 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) self->priv.p->clat_attach_egress = attach_egress; } - _l3_get_pref64_config(self, - &v4_key_committed, - &v4_value_committed, - &v6_key_committed, - &v6_value_committed, - TRUE); - _l3_get_pref64_config(self, &v4_key_new, &v4_value_new, &v6_key_new, &v6_value_new, FALSE); - - if (memcmp(&v4_key_committed, &v4_key_new, sizeof(v4_key_new))) { - bpf_map_delete_elem(bpf_map__fd(self->priv.p->clat_bpf->maps.v4_config_map), - &v4_key_committed); - } - if (memcmp(&v6_key_committed, &v6_key_new, sizeof(v6_key_new))) { - bpf_map_delete_elem(bpf_map__fd(self->priv.p->clat_bpf->maps.v6_config_map), - &v6_key_committed); - } - if (memcmp(&v4_value_committed, &v4_value_new, sizeof(v4_value_new))) { - bpf_map_update_elem(bpf_map__fd(self->priv.p->clat_bpf->maps.v4_config_map), - &v4_key_new, - &v4_value_new, - BPF_ANY); - } - if (memcmp(&v6_value_committed, &v6_value_new, sizeof(v6_value_new))) { - bpf_map_update_elem(bpf_map__fd(self->priv.p->clat_bpf->maps.v6_config_map), - &v6_key_new, - &v6_value_new, - BPF_ANY); - } - - if (l3cd_pref64) { - self->priv.p->clat_pref64_valid = TRUE; - self->priv.p->clat_pref64 = *l3cd_pref64; - } else { - self->priv.p->clat_pref64_valid = FALSE; - } + /* Pass configuration to the BPF program */ + memset(&clat_config, 0, sizeof(clat_config)); + clat_config.local_v4.s_addr = self->priv.p->clat_address_4->addr; + clat_config.local_v6 = self->priv.p->clat_address_6.address; + clat_config.pref64 = *l3cd_pref64; + self->priv.p->clat_bpf->bss->config = clat_config; if (self->priv.p->clat_socket < 0) { self->priv.p->clat_socket = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); From 6f293055751d769611feab371f7d078f3e931dab Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 15 Dec 2025 19:21:22 +0100 Subject: [PATCH 110/153] clat: support all pref64 lengths Support all the prefix lengths defined in RFC 6052. --- src/core/bpf/clat.bpf.c | 183 +++++++++++++++++++++++++++++++-- src/core/bpf/clat.h | 3 +- src/core/ndisc/nm-lndp-ndisc.c | 8 +- src/core/nm-l3cfg.c | 1 + 4 files changed, 179 insertions(+), 16 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 46e552583f..a74310e55b 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -279,6 +279,170 @@ rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) return 0; } +/* + * Convert an IPv4 address to the corresponding "IPv4-Embedded IPv6 Address" + * according to RFC 6052 2.2. + * + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |PL| 0-------------32--40--48--56--64--72--80--88--96--104---------| + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |32| prefix |v4(32) | u | suffix | + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |40| prefix |v4(24) | u |(8)| suffix | + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |48| prefix |v4(16) | u | (16) | suffix | + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |56| prefix |(8)| u | v4(24) | suffix | + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |64| prefix | u | v4(32) | suffix | + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |96| prefix | v4(32) | + * +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * + */ +static __always_inline bool +v4addr_to_v6(__be32 addr4, struct in6_addr *addr6, const struct in6_addr *pref64, int pref64_len) +{ + union { + __be32 a32; + __u8 a8[4]; + } u; + + u.a32 = addr4; + + addr6->s6_addr32[0] = 0; + addr6->s6_addr32[1] = 0; + addr6->s6_addr32[2] = 0; + addr6->s6_addr32[3] = 0; + + switch (pref64_len) { + case 96: + addr6->s6_addr32[0] = pref64->s6_addr32[0]; + addr6->s6_addr32[1] = pref64->s6_addr32[1]; + addr6->s6_addr32[2] = pref64->s6_addr32[2]; + addr6->s6_addr32[3] = addr4; + break; + case 64: + addr6->s6_addr32[0] = pref64->s6_addr32[0]; + addr6->s6_addr32[1] = pref64->s6_addr32[1]; + addr6->s6_addr[9] = u.a8[0]; + addr6->s6_addr[10] = u.a8[1]; + addr6->s6_addr[11] = u.a8[2]; + addr6->s6_addr[12] = u.a8[3]; + break; + case 56: + addr6->s6_addr32[0] = pref64->s6_addr32[0]; + addr6->s6_addr32[1] = pref64->s6_addr32[1]; + addr6->s6_addr[7] = u.a8[0]; + addr6->s6_addr[9] = u.a8[1]; + addr6->s6_addr[10] = u.a8[2]; + addr6->s6_addr[11] = u.a8[3]; + break; + case 48: + addr6->s6_addr32[0] = pref64->s6_addr32[0]; + addr6->s6_addr16[2] = pref64->s6_addr16[2]; + addr6->s6_addr[6] = u.a8[0]; + addr6->s6_addr[7] = u.a8[1]; + addr6->s6_addr[9] = u.a8[2]; + addr6->s6_addr[10] = u.a8[3]; + break; + case 40: + addr6->s6_addr32[0] = pref64->s6_addr32[0]; + addr6->s6_addr[4] = pref64->s6_addr[4]; + addr6->s6_addr[5] = u.a8[0]; + addr6->s6_addr[6] = u.a8[1]; + addr6->s6_addr[7] = u.a8[2]; + addr6->s6_addr[9] = u.a8[3]; + break; + case 32: + addr6->s6_addr32[0] = pref64->s6_addr32[0]; + addr6->s6_addr32[1] = addr4; + break; + default: + return false; + } + return true; +} + +/* + * Extract the IPv4 address @addr4 and the NAT64 prefix @pref64 from an IPv6 address, + * given the known prefix length @pref64_len. See the table above. + */ +static __always_inline bool +v6addr_to_v4(const struct in6_addr *addr6, int pref64_len, __be32 *addr4, struct in6_addr *pref64) +{ + union { + __be32 a32; + __u8 a8[4]; + } u; + + pref64->s6_addr32[0] = 0; + pref64->s6_addr32[1] = 0; + pref64->s6_addr32[2] = 0; + pref64->s6_addr32[3] = 0; + + switch (pref64_len) { + case 96: + u.a32 = addr6->s6_addr32[3]; + + pref64->s6_addr32[0] = addr6->s6_addr32[0]; + pref64->s6_addr32[1] = addr6->s6_addr32[1]; + pref64->s6_addr32[2] = addr6->s6_addr32[2]; + break; + case 64: + u.a8[0] = addr6->s6_addr[9]; + u.a8[1] = addr6->s6_addr[10]; + u.a8[2] = addr6->s6_addr[11]; + u.a8[3] = addr6->s6_addr[12]; + + pref64->s6_addr32[0] = addr6->s6_addr32[0]; + pref64->s6_addr32[1] = addr6->s6_addr32[1]; + break; + case 56: + u.a8[0] = addr6->s6_addr[7]; + u.a8[1] = addr6->s6_addr[9]; + u.a8[2] = addr6->s6_addr[10]; + u.a8[3] = addr6->s6_addr[11]; + + pref64->s6_addr32[0] = addr6->s6_addr32[0]; + pref64->s6_addr32[1] = addr6->s6_addr32[1]; + pref64->s6_addr[7] = 0; + break; + case 48: + u.a8[0] = addr6->s6_addr[6]; + u.a8[1] = addr6->s6_addr[7]; + u.a8[2] = addr6->s6_addr[9]; + u.a8[3] = addr6->s6_addr[10]; + + pref64->s6_addr32[0] = addr6->s6_addr32[0]; + pref64->s6_addr32[1] = addr6->s6_addr32[1]; + pref64->s6_addr16[3] = 0; + break; + case 40: + u.a8[0] = addr6->s6_addr[5]; + u.a8[1] = addr6->s6_addr[6]; + u.a8[2] = addr6->s6_addr[7]; + u.a8[3] = addr6->s6_addr[9]; + + pref64->s6_addr32[0] = addr6->s6_addr32[0]; + pref64->s6_addr32[1] = addr6->s6_addr32[1]; + pref64->s6_addr16[3] = 0; + pref64->s6_addr[5] = 0; + + break; + case 32: + u.a32 = addr6->s6_addr32[1]; + + pref64->s6_addr32[0] = addr6->s6_addr32[0]; + break; + default: + return false; + } + + *addr4 = u.a32; + return true; +} + /* ipv4 traffic in from application on this device, needs to be translated to v6 and sent to PLAT */ static int clat_handle_v4(struct __sk_buff *skb) @@ -320,12 +484,12 @@ clat_handle_v4(struct __sk_buff *skb) goto out; } - /* src v4 as last octet of clat address */ - dst_hdr.saddr = config.local_v6; - dst_hdr.daddr = config.pref64; - dst_hdr.daddr.s6_addr32[3] = iph->daddr; - dst_hdr.nexthdr = iph->protocol; - dst_hdr.hop_limit = iph->ttl; + if (!v4addr_to_v6(iph->daddr, &dst_hdr.daddr, &config.pref64, config.pref64_len)) + goto out; + + dst_hdr.saddr = config.local_v6; + dst_hdr.nexthdr = iph->protocol; + dst_hdr.hop_limit = iph->ttl; /* weird definition in ipv6hdr */ dst_hdr.priority = (iph->tos & 0x70) >> 4; dst_hdr.flow_lbl[0] = iph->tos << 4; @@ -502,6 +666,7 @@ clat_handle_v6(struct __sk_buff *skb) int ret = TC_ACT_OK; void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); + __be32 saddr4; struct in6_addr subnet_v6; struct ethhdr *eth; struct iphdr *iph; @@ -519,8 +684,8 @@ clat_handle_v6(struct __sk_buff *skb) if (!v6addr_equal(&ip6h->daddr, &config.local_v6)) goto out; - subnet_v6 = ip6h->saddr; - subnet_v6.s6_addr32[3] = 0; /* prefix len is always 96 for now */ + if (!v6addr_to_v4(&ip6h->saddr, config.pref64_len, &saddr4, &subnet_v6)) + goto out; if (!v6addr_equal(&subnet_v6, &config.pref64)) goto out; @@ -536,7 +701,7 @@ clat_handle_v6(struct __sk_buff *skb) goto out; dst_hdr.daddr = config.local_v4.s_addr; - dst_hdr.saddr = ip6h->saddr.s6_addr32[3]; + dst_hdr.saddr = saddr4; dst_hdr.protocol = ip6h->nexthdr; dst_hdr.ttl = ip6h->hop_limit; dst_hdr.tos = ip6h->priority << 4 | (ip6h->flow_lbl[0] >> 4); diff --git a/src/core/bpf/clat.h b/src/core/bpf/clat.h index 2748946392..3d926b527f 100644 --- a/src/core/bpf/clat.h +++ b/src/core/bpf/clat.h @@ -7,7 +7,8 @@ struct clat_config { struct in6_addr local_v6; struct in6_addr pref64; - struct in_addr local_v4; + struct in_addr local_v4; + unsigned pref64_len; }; #endif diff --git a/src/core/ndisc/nm-lndp-ndisc.c b/src/core/ndisc/nm-lndp-ndisc.c index 980bc597bb..69cb733a77 100644 --- a/src/core/ndisc/nm-lndp-ndisc.c +++ b/src/core/ndisc/nm-lndp-ndisc.c @@ -409,12 +409,8 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) gint64 expiry_msec = _nm_ndisc_lifetime_to_expiry(now_msec, ndp_msg_opt_pref64_lifetime(msg, offset)); - /* Currently, only /96 is supported */ - if (pref64_length != 96) { - _LOGW("Ignored PREF64 for unsupported prefix length: %d (only /96 is supported)", - pref64_length); - continue; - } + /* libndp should only return lengths defined in RFC 8781 */ + nm_assert(NM_IN_SET(pref64_length, 96, 64, 56, 48, 40, 32)); /* Newer RA has more up to date information, prefer it: */ if (!pref64_found) { diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 005339446e..560a4874fa 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -5714,6 +5714,7 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) clat_config.local_v4.s_addr = self->priv.p->clat_address_4->addr; clat_config.local_v6 = self->priv.p->clat_address_6.address; clat_config.pref64 = *l3cd_pref64; + clat_config.pref64_len = l3cd_pref64_plen; self->priv.p->clat_bpf->bss->config = clat_config; if (self->priv.p->clat_socket < 0) { From c93ce654671c4dadad4acb867e82ee4304b06c9a Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 24 Dec 2025 16:40:53 +0100 Subject: [PATCH 111/153] bpf: clat: translate inner headers of incoming ICMPv6 errors ICMPv6 error messages contain a copy of the original packet that caused the error. In a 464XLAT deployment, this inner packet is an IPv6 packet (as translated by the PLAT), while the local host expects to see the original IPv4 packet it generated. Without translation, the local host can't match the error to an active socket. This breaks functionality like Path MTU Discovery (PMTUD), traceroute, and error reporting for connected UDP sockets. This commit implements the translation of the inner headers from IPv6 to IPv4 for incoming ICMPv6 errors. Some implementation notes: - this only handles incoming ICMPv6; outgoing ICMPv4 is not yet implemented, but it seems less important. - the program uses different functions for rewriting the outer and inner header. I tried using recursion but the verifier didn't seem to like it. - after rewriting the inner headers, the ICMP checksum is incrementally updated based on difference of all the individual modifications done to the inner headers. This has the advantage that all the operations are fixed-size. But probably it would be easier and faster to just calculate the checksum from scratch. --- src/core/bpf/clat.bpf.c | 396 ++++++++++++++++++++++++++++++++-------- 1 file changed, 321 insertions(+), 75 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index a74310e55b..c0fcbd2552 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 */ /* Copyright 2021 Toke Høiland-Jørgensen */ /* Copyright 2025 Mary Strodl */ +/* Copyright 2026 Beniamino Galvani */ /** * This is an implementation of a CLAT in eBPF. BPF is a different environment @@ -67,16 +68,20 @@ struct icmpv6_pseudo { __u8 nh; } __attribute__((packed)); -static void +/* This function must be declared as inline because the BPF calling + * convention only supports up to 5 function arguments. */ +static __always_inline void update_l4_checksum(struct __sk_buff *skb, struct ipv6hdr *ip6h, struct iphdr *iph, - int ip_type, - bool v4to6) + bool v4to6, + bool is_inner, + __u32 *csum_diff) { int flags = BPF_F_PSEUDO_HDR; __u16 offset; __u32 csum; + int ip_type; if (v4to6) { void *from_ptr = &iph->saddr; @@ -84,12 +89,18 @@ update_l4_checksum(struct __sk_buff *skb, csum = bpf_csum_diff(from_ptr, 2 * sizeof(__u32), to_ptr, 2 * sizeof(struct in6_addr), 0); offset = sizeof(struct ethhdr) + sizeof(struct iphdr); + ip_type = ip6h->nexthdr; } else { void *from_ptr = &ip6h->saddr; void *to_ptr = &iph->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(struct in6_addr), to_ptr, 2 * sizeof(__u32), 0); offset = sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + ip_type = iph->protocol; + + if (is_inner) { + offset = offset + sizeof(struct icmp6hdr) + sizeof(struct ipv6hdr); + } } switch (ip_type) { @@ -105,14 +116,20 @@ update_l4_checksum(struct __sk_buff *skb, } bpf_l4_csum_replace(skb, offset, 0, csum, flags); + + if (csum_diff) { + *csum_diff = bpf_csum_diff((__be32 *) &csum, sizeof(csum), 0, 0, *csum_diff); + } } -static void +static __always_inline void update_icmp_checksum(struct __sk_buff *skb, const struct ipv6hdr *ip6h, void *icmp_before, void *icmp_after, - bool v4to6) + bool v4to6, + bool is_inner, + __u32 seed) { struct icmpv6_pseudo ph = {.nh = IPPROTO_ICMPV6, .len = ip6h->payload_len}; __u16 h_before; @@ -138,9 +155,15 @@ update_icmp_checksum(struct __sk_buff *skb, v4to6 ? 0 : sizeof(ph), (__be32 *) &ph, v4to6 ? sizeof(ph) : 0, - 0); + seed); - offset = sizeof(struct ethhdr) + (v4to6 ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) + 2; + if (v4to6) { + offset = sizeof(struct ethhdr) + sizeof(struct iphdr) + 2; + } else { + offset = sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + 2; + if (is_inner) + offset += sizeof(struct icmp6hdr) + sizeof(struct ipv6hdr); + } /* first two bytes of ICMP header, type and code */ h_before = *(__u16 *) icmp_before; @@ -272,7 +295,7 @@ rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) } *icmp6 = icmp6_buf; - update_icmp_checksum(skb, ip6h, &icmp_buf, icmp6, true); + update_icmp_checksum(skb, ip6h, &icmp_buf, icmp6, true, false, 0); /* FIXME: also need to rewrite IP header embedded in ICMP error */ @@ -505,7 +528,7 @@ clat_handle_v4(struct __sk_buff *skb) break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, &dst_hdr, iph, dst_hdr.nexthdr, true); + update_l4_checksum(skb, &dst_hdr, iph, true, false, NULL); break; default: break; @@ -554,93 +577,102 @@ v6addr_equal(const struct in6_addr *a, const struct in6_addr *b) return true; } -static int -rewrite_icmpv6(struct __sk_buff *skb) +static __always_inline void +translate_ipv6_header(const struct ipv6hdr *ip6, struct iphdr *ip, __be32 saddr, __be32 daddr) { - void *data_end = SKB_DATA_END(skb); - void *data = SKB_DATA(skb); - struct icmp6hdr *icmp6; - struct icmphdr *icmp; - struct icmphdr icmp_buf; /* buffer for the new ICMPv4 header */ - struct icmp6hdr icmp6_buf; /* copy of the old ICMPv6 header */ - struct ipv6hdr *ip6h; - __u32 mtu; - __u32 ptr; + *ip = (struct iphdr) { + .version = 4, + .ihl = 5, + .tos = ip6->priority << 4 | (ip6->flow_lbl[0] >> 4), + .frag_off = bpf_htons(1 << 14), + .ttl = ip6->hop_limit, + .protocol = ip6->nexthdr == IPPROTO_ICMPV6 ? IPPROTO_ICMP : ip6->nexthdr, + .saddr = saddr, + .daddr = daddr, + .tot_len = bpf_htons(bpf_ntohs(ip6->payload_len) + sizeof(struct iphdr)), + }; - icmp6 = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); - if (icmp6 + 1 > data_end) - return -1; - - icmp6_buf = *icmp6; - icmp = (void *) icmp6; - icmp_buf = *icmp; + ip->check = + csum_fold_helper(bpf_csum_diff((__be32 *) ip, 0, (__be32 *) ip, sizeof(struct iphdr), 0)); +} +static __always_inline int +translate_icmpv6_header(const struct icmp6hdr *icmp6, struct icmphdr *icmp) +{ /* These translations are defined in RFC6145 section 5.2 */ switch (icmp6->icmp6_type) { case ICMPV6_ECHO_REQUEST: - icmp_buf.type = ICMP_ECHO; + icmp->type = ICMP_ECHO; break; case ICMPV6_ECHO_REPLY: - icmp_buf.type = ICMP_ECHOREPLY; + icmp->type = ICMP_ECHOREPLY; break; case ICMPV6_DEST_UNREACH: - icmp_buf.type = ICMP_DEST_UNREACH; + icmp->type = ICMP_DEST_UNREACH; switch (icmp6->icmp6_code) { case ICMPV6_NOROUTE: case ICMPV6_NOT_NEIGHBOUR: case ICMPV6_ADDR_UNREACH: - icmp_buf.code = ICMP_HOST_UNREACH; + icmp->code = ICMP_HOST_UNREACH; break; case ICMPV6_ADM_PROHIBITED: - icmp_buf.code = ICMP_HOST_ANO; + icmp->code = ICMP_HOST_ANO; break; case ICMPV6_PORT_UNREACH: - icmp_buf.code = ICMP_PORT_UNREACH; + icmp->code = ICMP_PORT_UNREACH; break; default: return -1; } break; case ICMPV6_PKT_TOOBIG: - icmp_buf.type = ICMP_DEST_UNREACH; - icmp_buf.code = ICMP_FRAG_NEEDED; + { + __u32 mtu; + + icmp->type = ICMP_DEST_UNREACH; + icmp->code = ICMP_FRAG_NEEDED; mtu = bpf_ntohl(icmp6->icmp6_mtu) - 20; if (mtu > 0xffff) return -1; - icmp_buf.un.frag.mtu = bpf_htons(mtu); + icmp->un.frag.mtu = bpf_htons(mtu); break; + } case ICMPV6_TIME_EXCEED: - icmp_buf.type = ICMP_TIME_EXCEEDED; + icmp->type = ICMP_TIME_EXCEEDED; break; case ICMPV6_PARAMPROB: switch (icmp6->icmp6_code) { case 0: - icmp_buf.type = ICMP_PARAMETERPROB; - icmp_buf.code = 0; + { + __u32 ptr; + icmp->type = ICMP_PARAMETERPROB; + icmp->code = 0; + + ptr = bpf_ntohl(icmp6->icmp6_pointer); /* Figure 6 in RFC6145 - using if statements b/c of * range at the bottom */ - ptr = bpf_ntohl(icmp6->icmp6_pointer); if (ptr == 0 || ptr == 1) - icmp_buf.un.reserved[0] = ptr; + icmp->un.reserved[0] = ptr; else if (ptr == 4 || ptr == 5) - icmp_buf.un.reserved[0] = 2; + icmp->un.reserved[0] = 2; else if (ptr == 6) - icmp_buf.un.reserved[0] = 9; + icmp->un.reserved[0] = 9; else if (ptr == 7) - icmp_buf.un.reserved[0] = 8; + icmp->un.reserved[0] = 8; else if (ptr >= 8 && ptr <= 23) - icmp_buf.un.reserved[0] = 12; + icmp->un.reserved[0] = 12; else if (ptr >= 24 && ptr <= 39) - icmp_buf.un.reserved[0] = 16; + icmp->un.reserved[0] = 16; else return -1; break; + } case 1: - icmp_buf.type = ICMP_DEST_UNREACH; - icmp_buf.code = ICMP_PROT_UNREACH; + icmp->type = ICMP_DEST_UNREACH; + icmp->code = ICMP_PROT_UNREACH; break; default: return -1; @@ -650,11 +682,214 @@ rewrite_icmpv6(struct __sk_buff *skb) return -1; } - *icmp = icmp_buf; - ip6h = data + sizeof(struct ethhdr); - update_icmp_checksum(skb, ip6h, &icmp6_buf, icmp, false); + return 0; +} - /* FIXME: also need to rewrite IP header embedded in ICMP error */ +static int +rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) +{ + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); + struct icmphdr *icmp; + struct icmp6hdr *icmp6; + struct icmphdr icmp_buf; /* buffer for the new ICMPv4 header */ + struct icmp6hdr icmp6_buf; /* copy of the old ICMPv6 header */ + + /* + * icmp6: v + * ------------------------------------------------------------------------- + * | Ethernet | IPv6 | ICMPv6 | IPv6 | ICMPv6 | ... + * ------------------------------------------------------------------------- + */ + + icmp6 = data + sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); + if (icmp6 + 1 > data_end) + return -1; + + icmp6_buf = *icmp6; + icmp = (void *) icmp6; + icmp_buf = *icmp; + + if (translate_icmpv6_header(icmp6, &icmp_buf)) + return -1; + + *icmp = icmp_buf; + update_icmp_checksum(skb, + (struct ipv6hdr *) (data + sizeof(struct ethhdr)), + &icmp6_buf, + icmp, + false, + true, + 0); + + if (csum_diff) { + data_end = SKB_DATA_END(skb); + data = SKB_DATA(skb); + + icmp = data + sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); + if (icmp + 1 > data_end) + return -1; + + /* Compute the checksum difference between the old ICMPv6 header and the new ICMPv4 one */ + *csum_diff = bpf_csum_diff((__be32 *) &icmp6_buf, + sizeof(struct icmp6hdr), + (__be32 *) &icmp6_buf, + 0, + *csum_diff); + *csum_diff = + bpf_csum_diff((__be32 *) icmp, 0, (__be32 *) icmp, sizeof(struct icmphdr), *csum_diff); + } + return 0; +} + +static int +rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_diff) +{ + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); + struct ipv6hdr *ip6h; + __be32 addr4; + struct in6_addr subnet_v6; + + /* + * ip6h: v + * ---------------------------------------------------------------- + * | Ethernet | IPv6 | ICMPv6 | IPv6 | ... + * ---------------------------------------------------------------- + */ + + ip6h = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); + if (ip6h + 1 > data_end) + return -1; + + if (!v6addr_equal(&ip6h->saddr, &config.local_v6)) + return -1; + if (!v6addr_to_v4(&ip6h->daddr, config.pref64_len, &addr4, &subnet_v6)) + return -1; + if (!v6addr_equal(&subnet_v6, &config.pref64)) + return -1; + + translate_ipv6_header(ip6h, dst_hdr, config.local_v4.s_addr, addr4); + + if (csum_diff) { + /* Checksum difference between the old IPv6 header and the new IPv4 one */ + *csum_diff = + bpf_csum_diff((__be32 *) ip6h, sizeof(struct ipv6hdr), (__be32 *) ip6h, 0, *csum_diff); + + *csum_diff = bpf_csum_diff((__be32 *) dst_hdr, + 0, + (__be32 *) dst_hdr, + sizeof(struct iphdr), + *csum_diff); + } + + switch (dst_hdr->protocol) { + case IPPROTO_ICMP: + if (rewrite_icmpv6_inner(skb, csum_diff)) + return -1; + break; + case IPPROTO_TCP: + case IPPROTO_UDP: + update_l4_checksum(skb, ip6h, dst_hdr, false, true, csum_diff); + break; + default: + break; + } + + return 0; +} + +static int +rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) +{ + void *data_end = SKB_DATA_END(skb); + void *data = SKB_DATA(skb); + struct iphdr *ip; + struct icmp6hdr *icmp6; + struct icmphdr *icmp; + struct icmphdr icmp_buf; /* buffer for the new ICMPv4 header */ + struct icmp6hdr icmp6_buf; /* copy of the old ICMPv6 header */ + struct iphdr ip_in_buf; /* buffer for the new inner IPv4 header */ + __u32 csum_diff = 0; + + /* + * icmp6: v + * --------------------------------------------- + * | Ethernet | IPv6 | ICMPv6 | ... + * --------------------------------------------- + */ + + icmp6 = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + if (icmp6 + 1 > data_end) + return -1; + + icmp6_buf = *icmp6; + icmp = (void *) icmp6; + icmp_buf = *icmp; + + if (translate_icmpv6_header(icmp6, &icmp_buf)) + return -1; + + if (icmp6->icmp6_type >= 128) { + /* ICMPv6 non-error message: only translate the header */ + *icmp = icmp_buf; + update_icmp_checksum(skb, + (struct ipv6hdr *) (data + sizeof(struct ethhdr)), + &icmp6_buf, + icmp, + false, + false, + 0); + return 0; + } + + /* ICMPv6 error messages: we need to rewrite the headers in the inner packet. + * Track in csum_diff the incremental changes to the checksum for the ICMPv4 + * header. */ + + if (rewrite_ipv6_inner(skb, &ip_in_buf, &csum_diff)) + return -1; + + /* The inner IP header shrinks from 40 (IPv6) to 20 (IPv4) bytes; we need to move + * the L4 header and payload. BPF programs don't have an easy way to move a variable + * amount of packet data; use bpf_skb_adjust_room() which can add or remove data + * inside a packet. It doesn't support arbitrary offsets, but we can use BPF_ADJ_ROOM_NET + * to remove the bytes just after the L3 header, and rewrite the ICMP and the inner + * IP headers. + */ + if (bpf_skb_adjust_room(skb, + (int) sizeof(struct iphdr) - (int) sizeof(struct ipv6hdr), + BPF_ADJ_ROOM_NET, + 0)) + return -1; + + *out_length_diff = (int) sizeof(struct iphdr) - (int) sizeof(struct ipv6hdr); + + data_end = SKB_DATA_END(skb); + data = SKB_DATA(skb); + + /* Rewrite the ICMPv6 header with the translated ICMPv4 one */ + icmp = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + if (icmp + 1 > data_end) + return -1; + + *icmp = icmp_buf; + + /* Rewrite the inner IPv6 header with the translated IPv4 one */ + ip = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmphdr); + if (ip + 1 > data_end) + return -1; + + *ip = ip_in_buf; + + /* Update the ICMPv4 checksum according to all the changes in headers */ + update_icmp_checksum(skb, + (struct ipv6hdr *) (data + sizeof(struct ethhdr)), + &icmp6_buf, + icmp, + false, + false, + csum_diff); return 0; } @@ -666,16 +901,20 @@ clat_handle_v6(struct __sk_buff *skb) int ret = TC_ACT_OK; void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); - __be32 saddr4; - struct in6_addr subnet_v6; struct ethhdr *eth; - struct iphdr *iph; struct ipv6hdr *ip6h; - struct iphdr dst_hdr = { - .version = 4, - .ihl = 5, - .frag_off = bpf_htons(1 << 14), /* set Don't Fragment bit */ - }; + struct iphdr *iph; + struct iphdr dst_hdr; + struct in6_addr subnet_v6; + __be32 addr4; + int length_diff = 0; + + /* + * ip6h: v + * ------------------------------------ + * | Ethernet | IPv6 | ... + * ------------------------------------ + */ ip6h = data + sizeof(struct ethhdr); if (ip6h + 1 > data_end) @@ -683,10 +922,8 @@ clat_handle_v6(struct __sk_buff *skb) if (!v6addr_equal(&ip6h->daddr, &config.local_v6)) goto out; - - if (!v6addr_to_v4(&ip6h->saddr, config.pref64_len, &saddr4, &subnet_v6)) + if (!v6addr_to_v4(&ip6h->saddr, config.pref64_len, &addr4, &subnet_v6)) goto out; - if (!v6addr_equal(&subnet_v6, &config.pref64)) goto out; @@ -700,29 +937,38 @@ clat_handle_v6(struct __sk_buff *skb) && ip6h->nexthdr != IPPROTO_ICMPV6) goto out; - dst_hdr.daddr = config.local_v4.s_addr; - dst_hdr.saddr = saddr4; - dst_hdr.protocol = ip6h->nexthdr; - dst_hdr.ttl = ip6h->hop_limit; - dst_hdr.tos = ip6h->priority << 4 | (ip6h->flow_lbl[0] >> 4); - dst_hdr.tot_len = bpf_htons(bpf_ntohs(ip6h->payload_len) + sizeof(struct iphdr)); + translate_ipv6_header(ip6h, &dst_hdr, addr4, config.local_v4.s_addr); switch (dst_hdr.protocol) { - case IPPROTO_ICMPV6: - if (rewrite_icmpv6(skb)) + case IPPROTO_ICMP: + if (rewrite_icmpv6(skb, &length_diff)) goto out; - dst_hdr.protocol = IPPROTO_ICMP; break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, ip6h, &dst_hdr, dst_hdr.protocol, false); + update_l4_checksum(skb, ip6h, &dst_hdr, false, false, NULL); break; default: break; } - dst_hdr.check = csum_fold_helper( - bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, sizeof(dst_hdr), 0)); + /* rewrite_icmpv6() can change the payload length when it rewrites the content of + * an ICMPv6 error packet. Update the length and the checksum. */ + if (length_diff != 0) { + data = SKB_DATA(skb); + data_end = SKB_DATA_END(skb); + + ip6h = data + sizeof(struct ethhdr); + if (ip6h + 1 > data_end) + goto out; + + dst_hdr.tot_len = + bpf_htons(bpf_ntohs(ip6h->payload_len) + length_diff + sizeof(struct iphdr)); + + dst_hdr.check = 0; + dst_hdr.check = csum_fold_helper( + bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, sizeof(struct iphdr), 0)); + } if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IP), 0)) goto out; From 193e37b4104721fd214e445a3dfa9a43497b86dd Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 17 Dec 2025 18:25:12 +0100 Subject: [PATCH 112/153] bpf: clat: improve debug messages --- src/core/bpf/clat.bpf.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index c0fcbd2552..add180cb01 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -35,6 +35,9 @@ char _license[] SEC("license") = "GPL"; struct clat_config config; #ifdef DEBUG +/* Note: when enabling debugging, you also need to add CAP_PERFMON + * to the CapabilityBoundingSet of the NM systemd unit. The messages + * will be printed to /sys/kernel/debug/tracing/trace_pipe */ #define DBG(fmt, ...) \ ({ \ char ____fmt[] = "clat: " fmt; \ @@ -502,8 +505,8 @@ clat_handle_v4(struct __sk_buff *skb) if (iph->ihl != 5 || (iph->frag_off & ~bpf_htons(1 << 14))) { DBG("v4: pkt src/dst %pI4/%pI4 has IP options or is fragmented, dropping\n", - &iph->daddr, - &iph->saddr); + &iph->saddr, + &iph->daddr); goto out; } @@ -518,7 +521,7 @@ clat_handle_v4(struct __sk_buff *skb) dst_hdr.flow_lbl[0] = iph->tos << 4; dst_hdr.payload_len = bpf_htons(bpf_ntohs(iph->tot_len) - sizeof(struct iphdr)); - DBG("v4: Found mapping for dst %pI4 to %pI6c\n", &iph->daddr, &dst_hdr.daddr); + DBG("v4: outgoing pkt to dst %pI4 (%pI6c)\n", &iph->daddr, &dst_hdr.daddr); switch (dst_hdr.nexthdr) { case IPPROTO_ICMP: @@ -934,8 +937,12 @@ clat_handle_v6(struct __sk_buff *skb) /* drop packets with extension headers */ if (ip6h->nexthdr != IPPROTO_TCP && ip6h->nexthdr != IPPROTO_UDP - && ip6h->nexthdr != IPPROTO_ICMPV6) + && ip6h->nexthdr != IPPROTO_ICMPV6) { + DBG("v6: pkt src/dst %pI6c/%pI6c has nexthdr %u, dropping\n", &ip6h->saddr, &ip6h->daddr); goto out; + } + + DBG("v6: incoming pkt from src %pI6c (%pI4)\n", &ip6h->saddr, &addr4); translate_ipv6_header(ip6h, &dst_hdr, addr4, config.local_v4.s_addr); From 13cf12dd6e2a8230da21e9f889b25c4945a18cbb Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 5 Oct 2025 12:02:51 +0200 Subject: [PATCH 113/153] ipv4: enable by default ipv4.dhcp-ipv6-only-preferred when CLAT is on When CLAT is enabled, we want to also enable and honor by default DHCP option 108 (IPv6-only preferred), so that the host can avoid requesting an IPv4 address and go IPv6-only. --- NEWS | 3 ++ man/NetworkManager.conf.xml | 2 +- src/core/devices/nm-device.c | 31 +++++++++++++------ src/libnm-core-impl/nm-setting-ip4-config.c | 13 ++++++-- src/libnm-core-public/nm-setting-ip4-config.h | 3 ++ src/libnmc-setting/settings-docs.h.in | 2 +- .../gen-metadata-nm-settings-nmcli.xml.in | 4 +-- 7 files changed, 42 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index b2bbbe1d4d..e38470b041 100644 --- a/NEWS +++ b/NEWS @@ -41,6 +41,9 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! available devices when creating connection profiles for physical interfaces (Ethernet, Wi-Fi, etc.). * Add support for CLAT (464XLAT) using a BPF program. +* Change the default value of the ipv4.dhcp-ipv6-only-preferred property + to a new value "auto" which automatically enables the option when CLAT + is enabled ("yes" or "auto") in the connection profile. ============================================= NetworkManager-1.56 diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index 52f09300fb..2a14e160fd 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -976,7 +976,7 @@ ipv6.ip6-privacy=0 ipv4.dhcp-ipv6-only-preferred - If left unspecified, the "IPv6-only preferred" DHCPv4 option is disabled. + If left unspecified, it defaults to "auto". ipv4.dhcp-hostname-flags diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 96b50f882e..d1869a4bbf 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -1966,16 +1966,29 @@ _prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self) return FALSE; ipv6_only = nm_setting_ip4_config_get_dhcp_ipv6_only_preferred(s_ip4); - if (ipv6_only != NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT) - return ipv6_only; + if (ipv6_only == NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT) { + ipv6_only = nm_config_data_get_connection_default_int64( + NM_CONFIG_GET_DATA, + NM_CON_DEFAULT("ipv4.dhcp-ipv6-only-preferred"), + self, + NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO, + NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_AUTO, + NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_AUTO); + } - return nm_config_data_get_connection_default_int64( - NM_CONFIG_GET_DATA, - NM_CON_DEFAULT("ipv4.dhcp-ipv6-only-preferred"), - self, - NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO, - NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES, - NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO); + if (NM_IN_SET(ipv6_only, + NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES, + NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO)) + return ipv6_only == NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES; + + /* auto */ + if (nm_streq0(nm_device_get_effective_ip_config_method(self, AF_INET6), + NM_SETTING_IP6_CONFIG_METHOD_AUTO) + && _prop_get_ipv4_clat(self) != NM_SETTING_IP4_CONFIG_CLAT_NO) { + return TRUE; + } + + return FALSE; } /** diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c index 5f16d6dae9..e9ae5a5348 100644 --- a/src/libnm-core-impl/nm-setting-ip4-config.c +++ b/src/libnm-core-impl/nm-setting-ip4-config.c @@ -1376,18 +1376,25 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) /** * NMSettingIP4Config:dhcp-ipv6-only-preferred * - * Controls the "IPv6-Only Preferred" DHCPv4 option (RFC 8925). + * Controls the "IPv6-Only Preferred" DHCPv4 option (option 108 - RFC 8925). * * When set to %NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES, 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. + * applications are IPv6-only capable or there is a form of CLAT (464XLAT) + * deployed. + * + * If set to %NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_AUTO, the option is + * automatically turned on when the IPv6 method is "auto" and the connection + * profile has ipv4.clat set to "yes" or "auto". If these two conditions are + * met, the host can operate in IPv6-only mode and therefore it is safe to + * disable DHCPv4 when the network also supports it. * * When set to %NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT, the actual value * is looked up in the global configuration; if not specified, it defaults to - * %NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO. + * %NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_AUTO. * * If the connection has IPv6 method set to "disabled", this property does not * have effect and the "IPv6-Only Preferred" option is always disabled. diff --git a/src/libnm-core-public/nm-setting-ip4-config.h b/src/libnm-core-public/nm-setting-ip4-config.h index 941f4e74f6..f42247479f 100644 --- a/src/libnm-core-public/nm-setting-ip4-config.h +++ b/src/libnm-core-public/nm-setting-ip4-config.h @@ -110,6 +110,8 @@ typedef enum { * @NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT: use the global default value * @NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO: the option is disabled * @NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES: the option is enabled + * @NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_AUTO: the option is enabled when + * the IPv6 method is "auto" and CLAT is enabled. Since: 1.58 * * #NMSettingIP4DhcpIpv6OnlyPreferred values specify if the "IPv6-Only Preferred" * option (RFC 8925) for DHCPv4 is enabled. @@ -120,6 +122,7 @@ typedef enum { NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT = -1, NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO = 0, NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES = 1, + NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_AUTO = 2, } NMSettingIP4DhcpIpv6OnlyPreferred; /** diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index 1615b98ab5..0df43b0794 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -194,7 +194,7 @@ #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME N_("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-fqdn\" are mutually exclusive and cannot be set at the same time.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME_FLAGS N_("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 flags are \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) and \"fqdn-no-update\" (0x4). When no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is not set, the standard FQDN flags are set in the request: \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) for IPv4 and \"fqdn-serv-update\" (0x1) for IPv6. When this property is set to the default value \"none\" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also \"none\" (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_IAID N_("A string containing the \"Identity Association Identifier\" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values \"mac\", \"perm-mac\", \"ifname\" or \"stable\". When set to \"mac\" (or \"perm-mac\"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to \"ifname\", the IAID is computed by hashing the interface name. The special value \"stable\" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be \"ifname\". For DHCPv4, the IAID is only used with \"ipv4.dhcp-client-id\" values \"duid\" and \"ipv6-duid\" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the \"internal\" DHCPv6 plugin. The \"dhclient\" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_IPV6_ONLY_PREFERRED N_("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.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_IPV6_ONLY_PREFERRED N_("Controls the \"IPv6-Only Preferred\" DHCPv4 option (option 108 - 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 CLAT (464XLAT) deployed. If set to \"auto\" (2), the option is automatically turned on when the IPv6 method is \"auto\" and the connection profile has ipv4.clat set to \"yes\" or \"auto\". If these two conditions are met, the host can operate in IPv6-only mode and therefore it is safe to disable DHCPv4 when the network also supports it. When set to \"default\" (-1), the actual value is looked up in the global configuration; if not specified, it defaults to \"auto\" (2). If the connection has IPv6 method set to \"disabled\", this property does not have effect and the \"IPv6-Only Preferred\" option is always disabled.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_REJECT_SERVERS N_("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 DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. \"192.168.122.0/24\"). This property is currently not implemented for DHCPv6.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME N_("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.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME_V2 N_("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. 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.") diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in index d9105bfe88..7b718c9e1f 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in @@ -1452,9 +1452,9 @@ nmcli-description="The Vendor Class Identifier DHCP option (60). Special characters in the data string may be escaped using C-style escapes, nevertheless this property cannot contain nul bytes. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the DHCP option is not sent to the server." format="string" /> + values="default (-1), no (0), yes (1), auto (2)" /> Date: Sun, 5 Oct 2025 12:03:08 +0200 Subject: [PATCH 114/153] ipv4: improve logging for ipv4.dhcp-ipv6-only-preferred --- src/core/devices/nm-device.c | 17 ++++++++++++----- src/core/dhcp/nm-dhcp-client.c | 4 +++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index d1869a4bbf..b5fe2b15fd 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -1956,11 +1956,13 @@ _prop_get_ipvx_may_fail_cached(NMDevice *self, int addr_family, NMTernary *cache } static gboolean -_prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self) +_prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self, gboolean *out_is_auto) { NMSettingIP4Config *s_ip4; NMSettingIP4DhcpIpv6OnlyPreferred ipv6_only; + NM_SET_OUT(out_is_auto, FALSE); + s_ip4 = nm_device_get_applied_setting(self, NM_TYPE_SETTING_IP4_CONFIG); if (!s_ip4) return FALSE; @@ -1982,6 +1984,8 @@ _prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self) return ipv6_only == NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES; /* auto */ + NM_SET_OUT(out_is_auto, TRUE); + if (nm_streq0(nm_device_get_effective_ip_config_method(self, AF_INET6), NM_SETTING_IP6_CONFIG_METHOD_AUTO) && _prop_get_ipv4_clat(self) != NM_SETTING_IP4_CONFIG_CLAT_NO) { @@ -11826,8 +11830,9 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family) gboolean hostname_is_fqdn; gboolean send_client_id; guint8 dscp; - gboolean dscp_explicit = FALSE; - gboolean ipv6_only_pref = FALSE; + gboolean dscp_explicit = FALSE; + gboolean ipv6_only_pref = FALSE; + gboolean ipv6_only_pref_auto = FALSE; client_id = _prop_get_ipv4_dhcp_client_id(self, connection, hwaddr, &send_client_id); dscp = _prop_get_ipv4_dhcp_dscp(self, &dscp_explicit); @@ -11846,13 +11851,15 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family) hostname = nm_setting_ip_config_get_dhcp_hostname(s_ip); } - if (_prop_get_ipv4_dhcp_ipv6_only_preferred(self)) { + if (_prop_get_ipv4_dhcp_ipv6_only_preferred(self, &ipv6_only_pref_auto)) { if (nm_streq0(priv->ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_DISABLED)) { _LOGI_ipdhcp( addr_family, "not requesting the \"IPv6-only preferred\" option because IPv6 is disabled"); } else { - _LOGD_ipdhcp(addr_family, "requesting the \"IPv6-only preferred\" option"); + _LOGD_ipdhcp(addr_family, + "requesting the \"IPv6-only preferred\" option (%s enabled)", + ipv6_only_pref_auto ? "automatically" : "explicitly"); ipv6_only_pref = TRUE; } } diff --git a/src/core/dhcp/nm-dhcp-client.c b/src/core/dhcp/nm-dhcp-client.c index 18ad4024b4..cc6dccdfa4 100644 --- a/src/core/dhcp/nm-dhcp-client.c +++ b/src/core/dhcp/nm-dhcp-client.c @@ -1460,7 +1460,9 @@ nm_dhcp_client_schedule_ipv6_only_restart(NMDhcpClient *self, guint timeout) nm_assert(!priv->is_stopped); timeout = NM_MAX(priv->v4.ipv6_only_min_wait, timeout); - _LOGI("received option \"ipv6-only-preferred\": stopping DHCPv4 for %u seconds", timeout); + _LOGI("received option \"ipv6-only-preferred\": stopping DHCPv4 for %u seconds. Set " + "ipv4.dhcp-ipv6-only-preferred=no to force the use of IPv4 on this IPv6-mostly network", + timeout); nm_dhcp_client_stop(self, FALSE); nm_clear_g_source_inst(&priv->no_lease_timeout_source); From 6ec321d21b9b8a27226e9b110cdd1fd39b4f63f5 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 7 Jan 2026 15:05:21 +0100 Subject: [PATCH 115/153] l3cfg: use the tcx attachment for the clat program The TCX attachment type was added in kernel 6.6 (October 2023) and it replaces the Traffic Control (TC) BPF attachment, providing better usability. Convert the l3cfg code to use it. --- src/core/nm-l3cfg.c | 128 ++++++++++++++------------------------------ 1 file changed, 41 insertions(+), 87 deletions(-) diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 560a4874fa..60319a4362 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -311,10 +311,11 @@ typedef struct _NML3CfgPrivate { NMPlatformIP6Address clat_address_6_committed; /* If NULL, the BPF program hasn't been loaded or attached */ - struct clat_bpf *clat_bpf; - int clat_socket; - struct bpf_tc_opts clat_attach_ingress; - struct bpf_tc_opts clat_attach_egress; + struct clat_bpf *clat_bpf; + struct bpf_link *clat_ingress_link; + struct bpf_link *clat_egress_link; + + int clat_socket; #endif /* HAVE_CLAT */ /* Whether we earlier configured MPTCP endpoints for the interface. */ @@ -5588,31 +5589,26 @@ _l3_commit_one(NML3Cfg *self, static void _l3_clat_destroy(NML3Cfg *self) { - DECLARE_LIBBPF_OPTS(bpf_tc_hook, - hook, - .attach_point = BPF_TC_INGRESS | BPF_TC_EGRESS, - .ifindex = self->priv.ifindex); - int err = 0; char buf[100]; + int err; - hook.attach_point = BPF_TC_INGRESS; - self->priv.p->clat_attach_ingress.prog_fd = 0; - self->priv.p->clat_attach_ingress.prog_id = 0; - err = bpf_tc_detach(&hook, &self->priv.p->clat_attach_ingress); - if (err) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("failed to tear down CLAT BPF ingress hook: %s", buf); - } - hook.attach_point = BPF_TC_EGRESS; - self->priv.p->clat_attach_egress.prog_fd = 0; - self->priv.p->clat_attach_egress.prog_id = 0; - err = bpf_tc_detach(&hook, &self->priv.p->clat_attach_egress); - if (err) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("failed to tear down CLAT BPF egress hook: %s", buf); + if (self->priv.p->clat_ingress_link) { + err = bpf_link__destroy(self->priv.p->clat_ingress_link); + if (err != 0) { + libbpf_strerror(err, buf, sizeof(buf)); + _LOGD("clat: failed to destroy the ingress link"); + } + self->priv.p->clat_ingress_link = NULL; } - bpf_tc_hook_destroy(&hook); + if (self->priv.p->clat_egress_link) { + err = bpf_link__destroy(self->priv.p->clat_egress_link); + if (err != 0) { + libbpf_strerror(err, buf, sizeof(buf)); + _LOGD("clat: failed to destroy the egress link"); + } + self->priv.p->clat_egress_link = NULL; + } nm_clear_pointer(&self->priv.p->clat_bpf, clat_bpf__destroy); } @@ -5628,12 +5624,6 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) char buf[100]; struct clat_config clat_config; gboolean v6_changed; - DECLARE_LIBBPF_OPTS(bpf_tc_hook, - hook, - .attach_point = BPF_TC_INGRESS | BPF_TC_EGRESS, - .ifindex = self->priv.ifindex); - DECLARE_LIBBPF_OPTS(bpf_tc_opts, attach_egress); - DECLARE_LIBBPF_OPTS(bpf_tc_opts, attach_ingress); if (l3cd && nm_l3_config_data_get_pref64(l3cd, &_l3cd_pref64_inner, &l3cd_pref64_plen)) { l3cd_pref64 = &_l3cd_pref64_inner; @@ -5642,71 +5632,35 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) if (l3cd_pref64 && self->priv.p->clat_address_4 && self->priv.p->clat_address_6_valid) { if (!self->priv.p->clat_bpf) { _LOGT("clat: attaching the BPF program"); - self->priv.p->clat_bpf = clat_bpf__open(); - err = libbpf_get_error(self->priv.p->clat_bpf); - if (err) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("clat: failed to open the BPF program: %s", buf); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; + + self->priv.p->clat_bpf = clat_bpf__open_and_load(); + if (!self->priv.p->clat_bpf) { + libbpf_strerror(errno, buf, sizeof(buf)); + _LOGW("clat: failed to open and load the BPF program: %s", buf); return; } - err = clat_bpf__load(self->priv.p->clat_bpf); - if (err) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("clat: failed to load the BPF program: %s", buf); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; + self->priv.p->clat_ingress_link = + bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.clat_ingress, + self->priv.ifindex, + NULL); + if (!self->priv.p->clat_ingress_link) { + libbpf_strerror(errno, buf, sizeof(buf)); + _LOGW("clat: failed to attach the ingress program: %s", buf); return; } - err = bpf_tc_hook_create(&hook); - if (err && err != -EEXIST) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("clat: failed to create the BPF hook: %s", buf); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; + self->priv.p->clat_egress_link = + bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.clat_egress, + self->priv.ifindex, + NULL); + if (!self->priv.p->clat_egress_link) { + libbpf_strerror(errno, buf, sizeof(buf)); + _LOGW("clat: failed to attach the egress program: %s", buf); return; } - attach_ingress.prog_fd = bpf_program__fd(self->priv.p->clat_bpf->progs.clat_ingress); - if (attach_ingress.prog_fd < 0) { - _LOGW("clat: couldn't find the BPF ingress"); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; - return; - } - - attach_egress.prog_fd = bpf_program__fd(self->priv.p->clat_bpf->progs.clat_egress); - if (attach_egress.prog_fd < 0) { - _LOGW("clat: couldn't find the BPF egress"); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; - return; - } - - hook.attach_point = BPF_TC_INGRESS; - err = bpf_tc_attach(&hook, &attach_ingress); - if (err) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("clat: failed to attach ingress to BPF hook: %s", buf); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; - return; - } - self->priv.p->clat_attach_ingress = attach_ingress; - - hook.attach_point = BPF_TC_EGRESS; - err = bpf_tc_attach(&hook, &attach_egress); - if (err) { - libbpf_strerror(err, buf, sizeof(buf)); - _LOGW("clat: failed to attach ingress to BPF hook: %s", buf); - clat_bpf__destroy(self->priv.p->clat_bpf); - self->priv.p->clat_bpf = NULL; - return; - } - self->priv.p->clat_attach_egress = attach_egress; + _LOGT("clat: program attached successfully"); } /* Pass configuration to the BPF program */ From 6ac6d4f14e1eedf606b394c7d723077de408f686 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 9 Jan 2026 14:52:28 +0100 Subject: [PATCH 116/153] rpm: disable CLAT on i686 There is no bpftool compiled for i686. --- contrib/fedora/rpm/NetworkManager.spec | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index f37444949f..7b5d0ab177 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -105,7 +105,12 @@ Release: __RELEASE_VERSION__%{?dist} %else %bcond_with polkit_noauth_group %endif - +%ifarch %{ix86} +# there is no bpftool in i686 +%bcond_with clat +%else +%bcond_without clat +%endif ############################################################################### %global dbus_version 1.9.18 @@ -182,7 +187,10 @@ Requires(postun): systemd Requires: dbus >= %{dbus_version} Requires: glib2 >= %{glib2_version} Requires: %{name}-libnm%{?_isa} = %{epoch}:%{version}-%{release} + +%if %{with clat} Requires: libbpf +%endif %if 0%{?rhel} == 8 # Older libndp versions use select() (rh#1933041). On well known distros, @@ -286,8 +294,10 @@ BuildRequires: firewalld-filesystem BuildRequires: iproute BuildRequires: iproute-tc BuildRequires: libnvme-devel >= 1.5 +%if %{with clat} BuildRequires: libbpf-devel BuildRequires: bpftool +%endif Provides: %{name}-dispatcher%{?_isa} = %{epoch}:%{version}-%{release} @@ -616,6 +626,11 @@ Preferably use nmcli instead. %else -Diwd=false \ %endif +%if %{with clat} + -Dclat=true \ +%else + -Dclat=false \ +%endif %if %{with bluetooth} -Dbluez5_dun=true \ %else From 2888d4c8005d0c08e686b8c4768ac60b13d446db Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 11 Jan 2026 23:11:48 +0100 Subject: [PATCH 117/153] bpf: clat: fix redirect for outgoing packets bpf_redirect_neigh() looks up the next hop in the routing table and then redirects the packet to the given ifindex. The problem is that the routing table might contain a default route with lower metric on a different device; in that case the FIB lookup returns a next hop on the other device, and the packet can't be delivered. Use bpf_redirect() instead; the IPv4 already has the right L2 destination because the IPv4 default route points to the IPv6 gateway. Reported-by: DasSkelett --- src/core/bpf/clat.bpf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index add180cb01..5da4d7a27d 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -554,7 +554,7 @@ clat_handle_v4(struct __sk_buff *skb) eth->h_proto = bpf_htons(ETH_P_IPV6); *ip6h = dst_hdr; - ret = bpf_redirect_neigh(skb->ifindex, NULL, 0, 0); + ret = bpf_redirect(skb->ifindex, 0); out: return ret; } From 3699558106a76e60f60669b7ec6cc923eed7ab3d Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 12 Jan 2026 23:33:12 +0100 Subject: [PATCH 118/153] bpf: clat: use IPv4 dummy address for ICMPv6 messages with native source When running a traceroute for an IPv4 address, the nodes before the NAT64 gateway return ICMPv6 Time Exceeded messages with a source IPv6 address not belonging to the NAT64 prefix. Such messages would be normally dropped by the CLAT because the source address can't be translated. This behavior complicates troubleshooting. Follow the recommendation of draft-ietf-v6ops-icmpext-xlat-v6only-source-01 and translate the source address to the dummy IPv4 192.0.0.8. --- src/core/bpf/clat.bpf.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 5da4d7a27d..6e83901edf 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -927,8 +927,35 @@ clat_handle_v6(struct __sk_buff *skb) goto out; if (!v6addr_to_v4(&ip6h->saddr, config.pref64_len, &addr4, &subnet_v6)) goto out; - if (!v6addr_equal(&subnet_v6, &config.pref64)) - goto out; + if (!v6addr_equal(&subnet_v6, &config.pref64)) { + struct icmp6hdr *icmp6; + + /* Follow draft-ietf-v6ops-icmpext-xlat-v6only-source-01: + * + * "Whenever a translator translates an ICMPv6 Destination Unreachable, + * ICMPv6 Time Exceeded or ICMPv6 Packet Too Big ([RFC4443]) to the + * corresponding ICMPv4 ([RFC0792]) message, and the IPv6 source + * address in the outermost IPv6 header is untranslatable, the + * translator SHOULD use the dummy IPv4 address (192.0.0.8) as the IPv4 + * source address for the translated packet." + */ + if (ip6h->nexthdr != IPPROTO_ICMPV6) + goto out; + + icmp6 = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + if (icmp6 + 1 > data_end) + goto out; + + if (icmp6->icmp6_type != ICMPV6_DEST_UNREACH && icmp6->icmp6_type != ICMPV6_TIME_EXCEED + && icmp6->icmp6_type != ICMPV6_PKT_TOOBIG) + goto out; + + DBG("v6: icmpv6 type %u from native address %pI6c, translating src to dummy ipv4\n", + icmp6->icmp6_type, + &ip6h->saddr); + + addr4 = __cpu_to_be32(INADDR_DUMMY); + } /* At this point we know the packet needs translation. If we can't * rewrite it, it should be dropped. From 5cbd79a9ba1108e39cce0fa97e24d0fe5bba73d2 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 14 Jan 2026 18:42:48 +0100 Subject: [PATCH 119/153] core: introduce separate ipv6 mtu values in l3cd The current "ip6_mtu" field of a l3cd is the IPv6 MTU received via RA. Rename it accordingly and introduce another "ip6_mtu_static" field that contains the value set in the ipv6.mtu connection property. It's not used yet, but it will be in a following commit. --- src/core/devices/nm-device.c | 2 +- src/core/ndisc/nm-ndisc.c | 2 +- src/core/nm-l3-config-data.c | 53 ++++++++++++++++++++++++++++-------- src/core/nm-l3-config-data.h | 8 ++++-- 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index b5fe2b15fd..ad6602c05a 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -4976,7 +4976,7 @@ _dev_l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, N if (state >= NM_DEVICE_STATE_IP_CONFIG && state < NM_DEVICE_STATE_DEACTIVATING) { /* FIXME(l3cfg): MTU handling should be moved to l3cfg. */ if (l3cd) - priv->ip6_mtu = nm_l3_config_data_get_ip6_mtu(l3cd); + priv->ip6_mtu = nm_l3_config_data_get_ip6_mtu_ra(l3cd); _commit_mtu(self); } _dev_ipll4_check_fallback(self, l3cd); diff --git a/src/core/ndisc/nm-ndisc.c b/src/core/ndisc/nm-ndisc.c index 311c76eb61..bbd2a14f9a 100644 --- a/src/core/ndisc/nm-ndisc.c +++ b/src/core/ndisc/nm-ndisc.c @@ -222,7 +222,7 @@ nm_ndisc_data_to_l3cd(NMDedupMultiIndex *multi_idx, nm_l3_config_data_set_ndisc_reachable_time_msec(l3cd, rdata->reachable_time_ms); nm_l3_config_data_set_ndisc_retrans_timer_msec(l3cd, rdata->retrans_timer_ms); - nm_l3_config_data_set_ip6_mtu(l3cd, rdata->mtu); + nm_l3_config_data_set_ip6_mtu_ra(l3cd, rdata->mtu); if (token) nm_l3_config_data_set_ip6_token(l3cd, *token); if (network_id) diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index dd7892d417..8d1d6ec926 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -135,7 +135,8 @@ struct _NML3ConfigData { int ndisc_hop_limit_val; guint32 mtu; - guint32 ip6_mtu; + guint32 ip6_mtu_static; /* IPv6 MTU from the connection profile */ + guint32 ip6_mtu_ra; /* IPv6 MTU from Router Advertisement */ guint32 ndisc_reachable_time_msec_val; guint32 ndisc_retrans_timer_msec_val; @@ -397,8 +398,11 @@ nm_l3_config_data_log(const NML3ConfigData *self, : "", !self->is_sealed ? ", not-sealed" : ""); - if (self->mtu != 0 || self->ip6_mtu != 0) { - _L("mtu: %u, ip6-mtu: %u", self->mtu, self->ip6_mtu); + if (self->mtu != 0 || self->ip6_mtu_static != 0 || self->ip6_mtu_ra != 0) { + _L("mtu: %u, ip6-mtu-static: %u, ip6-mtu-ra %u", + self->mtu, + self->ip6_mtu_static, + self->ip6_mtu_ra); } for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { @@ -1917,22 +1921,42 @@ nm_l3_config_data_set_mtu(NML3ConfigData *self, guint32 mtu) } guint32 -nm_l3_config_data_get_ip6_mtu(const NML3ConfigData *self) +nm_l3_config_data_get_ip6_mtu_static(const NML3ConfigData *self) { nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); - return self->ip6_mtu; + return self->ip6_mtu_static; } gboolean -nm_l3_config_data_set_ip6_mtu(NML3ConfigData *self, guint32 ip6_mtu) +nm_l3_config_data_set_ip6_mtu_static(NML3ConfigData *self, guint32 ip6_mtu) { nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); - if (self->ip6_mtu == ip6_mtu) + if (self->ip6_mtu_static == ip6_mtu) return FALSE; - self->ip6_mtu = ip6_mtu; + self->ip6_mtu_static = ip6_mtu; + return TRUE; +} + +guint32 +nm_l3_config_data_get_ip6_mtu_ra(const NML3ConfigData *self) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); + + return self->ip6_mtu_ra; +} + +gboolean +nm_l3_config_data_set_ip6_mtu_ra(NML3ConfigData *self, guint32 ip6_mtu) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); + + if (self->ip6_mtu_ra == ip6_mtu) + return FALSE; + + self->ip6_mtu_ra = ip6_mtu; return TRUE; } @@ -2599,7 +2623,8 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a, NM_CMP_DIRECT(a->ip6_token.id, b->ip6_token.id); NM_CMP_DIRECT_REF_STRING(a->network_id, b->network_id); NM_CMP_DIRECT(a->mtu, b->mtu); - NM_CMP_DIRECT(a->ip6_mtu, b->ip6_mtu); + NM_CMP_DIRECT(a->ip6_mtu_static, b->ip6_mtu_static); + NM_CMP_DIRECT(a->ip6_mtu_ra, b->ip6_mtu_ra); NM_CMP_DIRECT_UNSAFE(a->metered, b->metered); NM_CMP_DIRECT_UNSAFE(a->proxy_browser_only, b->proxy_browser_only); NM_CMP_DIRECT_UNSAFE(a->proxy_method, b->proxy_method); @@ -3155,6 +3180,9 @@ _init_from_connection_ip(NML3ConfigData *self, int addr_family, NMConnection *co nm_l3_config_data_set_ip6_privacy( self, nm_setting_ip6_config_get_ip6_privacy(NM_SETTING_IP6_CONFIG(s_ip))); + nm_l3_config_data_set_ip6_mtu_static( + self, + nm_setting_ip6_config_get_mtu(NM_SETTING_IP6_CONFIG(s_ip))); } } @@ -3672,8 +3700,11 @@ nm_l3_config_data_merge(NML3ConfigData *self, if (self->mtu == 0u) self->mtu = src->mtu; - if (self->ip6_mtu == 0u) - self->ip6_mtu = src->ip6_mtu; + if (self->ip6_mtu_static == 0u) + self->ip6_mtu_static = src->ip6_mtu_static; + + if (self->ip6_mtu_ra == 0u) + self->ip6_mtu_ra = src->ip6_mtu_ra; if (NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_CLONE)) { _nm_unused nm_auto_unref_dhcplease NMDhcpLease *dhcp_lease_6 = diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index 750960bd35..5fbc6c7b03 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -487,9 +487,13 @@ guint32 nm_l3_config_data_get_mtu(const NML3ConfigData *self); gboolean nm_l3_config_data_set_mtu(NML3ConfigData *self, guint32 mtu); -guint32 nm_l3_config_data_get_ip6_mtu(const NML3ConfigData *self); +guint32 nm_l3_config_data_get_ip6_mtu_static(const NML3ConfigData *self); -gboolean nm_l3_config_data_set_ip6_mtu(NML3ConfigData *self, guint32 ip6_mtu); +gboolean nm_l3_config_data_set_ip6_mtu_static(NML3ConfigData *self, guint32 ip6_mtu); + +guint32 nm_l3_config_data_get_ip6_mtu_ra(const NML3ConfigData *self); + +gboolean nm_l3_config_data_set_ip6_mtu_ra(NML3ConfigData *self, guint32 ip6_mtu); NMUtilsIPv6IfaceId nm_l3_config_data_get_ip6_token(const NML3ConfigData *self); From 616e18e61b11f02fe6b1ffb4612d773edffdbccb Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 14 Jan 2026 08:40:44 +0100 Subject: [PATCH 120/153] l3cfg: fix CLAT MTU handling The current code takes the IPv6 MTU value from the IPv6 default route. However, that value is always zero because NM doesn't set it usually. Instead, it should use the IPv6 MTU sysctl value. The problem is that at this point NM hasn't written the sysctl yet, and we need some logic to find the actual value. Reported-by: DasSkelett --- src/core/nm-l3cfg.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 60319a4362..c15ffbec64 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4361,7 +4361,6 @@ _l3cfg_update_combined_config(NML3Cfg *self, nm_l3_config_data_get_best_default_route(l3cd, AF_INET6)); } if (best_v6_route) { - int mtu; NMPlatformIP4Address addr = { .ifindex = self->priv.ifindex, .address = self->priv.p->clat_address_4->addr, @@ -4369,18 +4368,39 @@ _l3cfg_update_combined_config(NML3Cfg *self, .addr_source = NM_IP_CONFIG_SOURCE_CLAT, .plen = 32, }; + const NMPlatformLink *pllink; + guint mtu = 0; + guint val = 0; best_v6_gateway.addr_family = AF_INET6; best_v6_gateway.addr.addr6 = best_v6_route->gateway; - mtu = best_v6_route->mtu; + /* Determine the IPv6 MTU of the interface. Unfortunately, + * the logic to set the MTU is in NMDevice and here we need + * some duplication to find the actual value. + * TODO: move the MTU handling into l3cfg. */ - if (!mtu || mtu > 1500) { - /* v4 Internet MTU */ + /* Get the link MTU */ + pllink = nm_l3cfg_get_pllink(self, TRUE); + if (pllink) + mtu = pllink->mtu; + if (mtu == 0) mtu = 1500; + + /* Update it with the IPv6 MTU value from the connection + * or from RA */ + val = nm_l3_config_data_get_ip6_mtu_static(l3cd); + if (val == 0) { + val = nm_l3_config_data_get_ip6_mtu_ra(l3cd); } - /* 20 for the ipv6 vs ipv4 header plus 8 for a potential - fragmentation extension header */ + if (val != 0 && val < mtu) { + mtu = val; + } + if (mtu < 1280) + mtu = 1280; + + /* Leave 20 additional bytes for the ipv4 -> ipv6 header translation, + * plus 8 for a potential fragmentation extension header */ mtu -= 28; rx.r4 = (NMPlatformIP4Route) { From 2d4171103347fa4905674b5d98305a724a3a8b2c Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 15 Jan 2026 15:17:46 +0100 Subject: [PATCH 121/153] bpf: clat: support the IPv6 fragment header Convert IPv6 fragments into IPv4. The PLAT fragments IPv4 packets larger than the IPv6 MTU size into smaller IPv6 packets. The safest IPv6 MTU value to configure on a PLAT is the minimum IPv6 MTU, 1280. Therefore, we can expect IPv6 fragments to be quite common. --- src/core/bpf/clat.bpf.c | 90 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 11 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 6e83901edf..d10a64bceb 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -71,6 +71,13 @@ struct icmpv6_pseudo { __u8 nh; } __attribute__((packed)); +struct ip6_frag { + __u8 nexthdr; + __u8 reserved; + __u16 offset; + __u32 identification; +} __attribute__((packed)); + /* This function must be declared as inline because the BPF calling * convention only supports up to 5 function arguments. */ static __always_inline void @@ -79,6 +86,7 @@ update_l4_checksum(struct __sk_buff *skb, struct iphdr *iph, bool v4to6, bool is_inner, + bool is_v6_fragment, __u32 *csum_diff) { int flags = BPF_F_PSEUDO_HDR; @@ -106,6 +114,10 @@ update_l4_checksum(struct __sk_buff *skb, } } + if (is_v6_fragment) { + offset += sizeof(struct ip6_frag); + } + switch (ip_type) { case IPPROTO_TCP: offset += offsetof(struct tcphdr, check); @@ -497,7 +509,7 @@ clat_handle_v4(struct __sk_buff *skb) /* we don't bother dealing with IP options or fragmented packets. The * latter are identified by the 'frag_off' field having a value (either - * the MF bit, or the fragmet offset, or both). However, this field also + * the MF bit, or the fragment offset, or both). However, this field also * contains the "don't fragment" (DF) bit, which we ignore, so mask that * out. The DF is the second-most-significant bit (as bit 0 is * reserved). @@ -531,7 +543,7 @@ clat_handle_v4(struct __sk_buff *skb) break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, &dst_hdr, iph, true, false, NULL); + update_l4_checksum(skb, &dst_hdr, iph, true, false, false, NULL); break; default: break; @@ -793,7 +805,7 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, ip6h, dst_hdr, false, true, csum_diff); + update_l4_checksum(skb, ip6h, dst_hdr, false, true, false, csum_diff); break; default: break; @@ -911,6 +923,7 @@ clat_handle_v6(struct __sk_buff *skb) struct in6_addr subnet_v6; __be32 addr4; int length_diff = 0; + bool fragmented = false; /* * ip6h: v @@ -962,25 +975,74 @@ clat_handle_v6(struct __sk_buff *skb) */ ret = TC_ACT_SHOT; - /* drop packets with extension headers */ - if (ip6h->nexthdr != IPPROTO_TCP && ip6h->nexthdr != IPPROTO_UDP - && ip6h->nexthdr != IPPROTO_ICMPV6) { + if (ip6h->nexthdr == IPPROTO_TCP || ip6h->nexthdr == IPPROTO_UDP + || ip6h->nexthdr == IPPROTO_ICMPV6) { + translate_ipv6_header(ip6h, &dst_hdr, addr4, config.local_v4.s_addr); + DBG("v6: incoming pkt from src %pI6c (%pI4)\n", &ip6h->saddr, &addr4); + } else if (ip6h->nexthdr == IPPROTO_FRAGMENT) { + struct ip6_frag *frag = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + int tot_len; + __u16 offset; + + if (frag + 1 > data_end) + goto out; + + /* Translate into an IPv4 fragmented packet, RFC 6145 5.1.1 */ + + tot_len = bpf_ntohs(ip6h->payload_len) + sizeof(struct iphdr) - sizeof(struct ip6_frag); + + offset = bpf_ntohs(frag->offset); + offset = ((offset & 1) << 13) | /* More Fragments flag */ + (offset >> 3); /* Offset in 8-octet units */ + + dst_hdr = (struct iphdr) { + .version = 4, + .ihl = 5, + .id = bpf_htons(bpf_ntohl(frag->identification) & 0xffff), + .tos = ip6h->priority << 4 | (ip6h->flow_lbl[0] >> 4), + .frag_off = bpf_htons(offset), + .ttl = ip6h->hop_limit, + .protocol = frag->nexthdr == IPPROTO_ICMPV6 ? IPPROTO_ICMP : frag->nexthdr, + .saddr = addr4, + .daddr = config.local_v4.s_addr, + .tot_len = bpf_htons(tot_len), + }; + + dst_hdr.check = csum_fold_helper( + bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, sizeof(struct iphdr), 0)); + + fragmented = true; + + DBG("v6: incoming fragmented pkt from src %pI6c (%pI4), id 0x%x\n", + &ip6h->saddr, + &addr4, + bpf_ntohs(dst_hdr.id)); + } else { DBG("v6: pkt src/dst %pI6c/%pI6c has nexthdr %u, dropping\n", &ip6h->saddr, &ip6h->daddr); goto out; } - DBG("v6: incoming pkt from src %pI6c (%pI4)\n", &ip6h->saddr, &addr4); - - translate_ipv6_header(ip6h, &dst_hdr, addr4, config.local_v4.s_addr); - switch (dst_hdr.protocol) { case IPPROTO_ICMP: + /* We can't update the checksum of ICMP fragmented packets: ICMPv4 doesn't use + * a pseudo header, while the ICMPv6 pseudo-header includes the total payload + * length, which is not known when parsing the first fragment. This makes it + * impossible for a stateless translator to compute the checksum delta. TCP and + * UDP don't have this problem because both the v4 and v6 pseudo-headers include + * the total length. */ + if (fragmented) + goto out; + if (rewrite_icmpv6(skb, &length_diff)) goto out; break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, ip6h, &dst_hdr, false, false, NULL); + /* Update the L4 headers only for non-fragmented packets or for the first + * fragment, which contains the L4 header. */ + if (!fragmented || (bpf_ntohs(dst_hdr.frag_off) & 0x1FFF) == 0) { + update_l4_checksum(skb, ip6h, &dst_hdr, false, false, fragmented, NULL); + } break; default: break; @@ -1007,6 +1069,12 @@ clat_handle_v6(struct __sk_buff *skb) if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IP), 0)) goto out; + if (fragmented) { + /* Remove the IPv6 fragment header */ + if (bpf_skb_adjust_room(skb, -(__s32) sizeof(struct ip6_frag), BPF_ADJ_ROOM_NET, 0)) + goto out; + } + data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); From 0731d8f3e02878a3002b14c1a198f1749bd06f7d Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 18 Jan 2026 10:12:16 +0100 Subject: [PATCH 122/153] bpf: clat: drop clat_handler() Avoid the additional function call and perform the needed checks directly in clat_handle_v4() and clat_handle_v6(). It will make easier to check that the packet is linear is the next commit. --- src/core/bpf/clat.bpf.c | 43 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index d10a64bceb..f5bd83514c 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -495,6 +495,12 @@ clat_handle_v4(struct __sk_buff *skb) struct iphdr *iph; struct ethhdr *eth; + eth = data; + if (eth + 1 > data_end) + goto out; + if (eth->h_proto != bpf_htons(ETH_P_IP)) + goto out; + iph = data + sizeof(struct ethhdr); if (iph + 1 > data_end) goto out; @@ -925,12 +931,11 @@ clat_handle_v6(struct __sk_buff *skb) int length_diff = 0; bool fragmented = false; - /* - * ip6h: v - * ------------------------------------ - * | Ethernet | IPv6 | ... - * ------------------------------------ - */ + eth = data; + if (eth + 1 > data_end) + goto out; + if (eth->h_proto != bpf_htons(ETH_P_IPV6)) + goto out; ip6h = data + sizeof(struct ethhdr); if (ip6h + 1 > data_end) @@ -1094,38 +1099,16 @@ out: return ret; } -static int -clat_handler(struct __sk_buff *skb, bool egress) -{ - void *data = SKB_DATA(skb); - void *data_end = SKB_DATA_END(skb); - struct ethhdr *eth; - - eth = data; - if (eth + 1 > data_end) - return TC_ACT_OK; - - /* Don't explicitly handle Ethernet types 8021Q and 8021AD - * because we don't expect to receive VLAN-tagged packets - * on the interface. */ - - if (eth->h_proto == bpf_htons(ETH_P_IP) && egress) - return clat_handle_v4(skb); - else if (eth->h_proto == bpf_htons(ETH_P_IPV6) && !egress) - return clat_handle_v6(skb); - - return TC_ACT_OK; -} SEC("tcx/egress") int clat_egress(struct __sk_buff *skb) { - return clat_handler(skb, true); + return clat_handle_v4(skb); } SEC("tcx/ingress") int clat_ingress(struct __sk_buff *skb) { - return clat_handler(skb, false); + return clat_handle_v6(skb); } From 29eb48d7f918054bf962411c750a2636591c8046 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 18 Jan 2026 10:12:26 +0100 Subject: [PATCH 123/153] bpf: clat: ensure data is pulled for direct packet access There is no guarantee that the part of the packet we want to read or write via direct packet access is linear. From the documentation of bpf_skb_pull_data(): For direct packet access, testing that offsets to access are within packet boundaries (test on skb->data_end) is susceptible to fail if offsets are invalid, or if the requested data is in non-linear parts of the skb. On failure the program can just bail out, or in the case of a non-linear buffer, use a helper to make the data available. The bpf_skb_load_bytes() helper is a first solution to access the data. Another one consists in using bpf_skb_pull_data to pull in once the non-linear parts, then retesting and eventually access the data. See: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2107#note_3288979 Reported-by: DasSkelett --- src/core/bpf/clat.bpf.c | 135 ++++++++++++++++++++++++++-------------- 1 file changed, 87 insertions(+), 48 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index f5bd83514c..1e43300fbd 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -78,6 +78,36 @@ struct ip6_frag { __u32 identification; } __attribute__((packed)); +#define ensure_header(header, skb, data, data_end, offset) \ + _ensure_header((void **) header, (skb), (data), (data_end), sizeof(**(header)), (offset)) + +/* + * Verifies that the header at offset @offset and with size @size can + * be accessed, and assigns the pointer to @header. In case the data + * is not available, the function tries to pull it. Note that all packet + * pointers must be refreshed after calling this function. + */ +static __always_inline bool +_ensure_header(void **header, + struct __sk_buff *skb, + void **data, + void **data_end, + unsigned size, + unsigned offset) +{ + if (*data + offset + size > *data_end) { + bpf_skb_pull_data(skb, offset + size); + *data = SKB_DATA(skb); + *data_end = SKB_DATA_END(skb); + } + + if (*data + offset + size > *data_end) + return false; + + *header = *data + offset; + return true; +} + /* This function must be declared as inline because the BPF calling * convention only supports up to 5 function arguments. */ static __always_inline void @@ -206,8 +236,7 @@ rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) struct icmp6hdr *icmp6; __u32 mtu; - icmp = data + sizeof(struct ethhdr) + sizeof(struct iphdr); - if ((icmp + 1) > data_end) + if (!ensure_header(&icmp, skb, &data, &data_end, sizeof(struct ethhdr) + sizeof(struct iphdr))) return -1; icmp_buf = *icmp; @@ -495,14 +524,11 @@ clat_handle_v4(struct __sk_buff *skb) struct iphdr *iph; struct ethhdr *eth; - eth = data; - if (eth + 1 > data_end) - goto out; - if (eth->h_proto != bpf_htons(ETH_P_IP)) + if (!ensure_header(&iph, skb, &data, &data_end, sizeof(struct ethhdr))) goto out; - iph = data + sizeof(struct ethhdr); - if (iph + 1 > data_end) + eth = data; + if (eth->h_proto != bpf_htons(ETH_P_IP)) goto out; if (iph->saddr != config.local_v4.s_addr) @@ -561,14 +587,10 @@ clat_handle_v4(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - eth = data; - if (eth + 1 > data_end) - goto out; - - ip6h = (void *) (eth + 1); - if (ip6h + 1 > data_end) + if (!ensure_header(&ip6h, skb, &data, &data_end, sizeof(struct ethhdr))) goto out; + eth = data; eth->h_proto = bpf_htons(ETH_P_IPV6); *ip6h = dst_hdr; @@ -723,8 +745,12 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) * ------------------------------------------------------------------------- */ - icmp6 = data + sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); - if (icmp6 + 1 > data_end) + if (!ensure_header(&icmp6, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) + + sizeof(struct icmp6hdr))) return -1; icmp6_buf = *icmp6; @@ -747,8 +773,12 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) data_end = SKB_DATA_END(skb); data = SKB_DATA(skb); - icmp = data + sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); - if (icmp + 1 > data_end) + if (!ensure_header(&icmp, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) + + sizeof(struct icmp6hdr))) return -1; /* Compute the checksum difference between the old ICMPv6 header and the new ICMPv4 one */ @@ -779,8 +809,11 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif * ---------------------------------------------------------------- */ - ip6h = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); - if (ip6h + 1 > data_end) + if (!ensure_header(&ip6h, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr))) return -1; if (!v6addr_equal(&ip6h->saddr, &config.local_v6)) @@ -840,8 +873,11 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) * --------------------------------------------- */ - icmp6 = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); - if (icmp6 + 1 > data_end) + if (!ensure_header(&icmp6, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + sizeof(struct ipv6hdr))) return -1; icmp6_buf = *icmp6; @@ -889,18 +925,18 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) data_end = SKB_DATA_END(skb); data = SKB_DATA(skb); - /* Rewrite the ICMPv6 header with the translated ICMPv4 one */ + if (!ensure_header(&ip, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmphdr))) + return -1; + icmp = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); - if (icmp + 1 > data_end) - return -1; + /* Rewrite the ICMPv6 header with the translated ICMPv4 one */ *icmp = icmp_buf; - /* Rewrite the inner IPv6 header with the translated IPv4 one */ - ip = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmphdr); - if (ip + 1 > data_end) - return -1; - *ip = ip_in_buf; /* Update the ICMPv4 checksum according to all the changes in headers */ @@ -931,14 +967,11 @@ clat_handle_v6(struct __sk_buff *skb) int length_diff = 0; bool fragmented = false; - eth = data; - if (eth + 1 > data_end) - goto out; - if (eth->h_proto != bpf_htons(ETH_P_IPV6)) + if (!ensure_header(&ip6h, skb, &data, &data_end, sizeof(struct ethhdr))) goto out; - ip6h = data + sizeof(struct ethhdr); - if (ip6h + 1 > data_end) + eth = data; + if (eth->h_proto != bpf_htons(ETH_P_IPV6)) goto out; if (!v6addr_equal(&ip6h->daddr, &config.local_v6)) @@ -960,10 +993,15 @@ clat_handle_v6(struct __sk_buff *skb) if (ip6h->nexthdr != IPPROTO_ICMPV6) goto out; - icmp6 = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); - if (icmp6 + 1 > data_end) + if (!ensure_header(&icmp6, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + sizeof(struct ipv6hdr))) goto out; + ip6h = data + sizeof(struct ethhdr); + if (icmp6->icmp6_type != ICMPV6_DEST_UNREACH && icmp6->icmp6_type != ICMPV6_TIME_EXCEED && icmp6->icmp6_type != ICMPV6_PKT_TOOBIG) goto out; @@ -985,13 +1023,19 @@ clat_handle_v6(struct __sk_buff *skb) translate_ipv6_header(ip6h, &dst_hdr, addr4, config.local_v4.s_addr); DBG("v6: incoming pkt from src %pI6c (%pI4)\n", &ip6h->saddr, &addr4); } else if (ip6h->nexthdr == IPPROTO_FRAGMENT) { - struct ip6_frag *frag = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + struct ip6_frag *frag; int tot_len; __u16 offset; - if (frag + 1 > data_end) + if (!ensure_header(&frag, + skb, + &data, + &data_end, + sizeof(struct ethhdr) + sizeof(struct ipv6hdr))) goto out; + ip6h = data + sizeof(struct ethhdr); + /* Translate into an IPv4 fragmented packet, RFC 6145 5.1.1 */ tot_len = bpf_ntohs(ip6h->payload_len) + sizeof(struct iphdr) - sizeof(struct ip6_frag); @@ -1059,8 +1103,7 @@ clat_handle_v6(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - ip6h = data + sizeof(struct ethhdr); - if (ip6h + 1 > data_end) + if (!ensure_header(&ip6h, skb, &data, &data_end, sizeof(struct ethhdr))) goto out; dst_hdr.tot_len = @@ -1083,14 +1126,10 @@ clat_handle_v6(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - eth = data; - if (eth + 1 > data_end) - goto out; - - iph = (void *) (eth + 1); - if (iph + 1 > data_end) + if (!ensure_header(&iph, skb, &data, &data_end, sizeof(struct ethhdr))) goto out; + eth = data; eth->h_proto = bpf_htons(ETH_P_IP); *iph = dst_hdr; From 2c896713b8b24d94969beefa5e2d6ac29f75c044 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 18 Jan 2026 10:12:39 +0100 Subject: [PATCH 124/153] bpf: clat: add macros for header sizes They make the code more compact and readable. --- src/core/bpf/clat.bpf.c | 131 ++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 84 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 1e43300fbd..56d09a7176 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -78,6 +78,13 @@ struct ip6_frag { __u32 identification; } __attribute__((packed)); +#define ETH_H_LEN (sizeof(struct ethhdr)) +#define IP_H_LEN (sizeof(struct iphdr)) +#define IP6_H_LEN (sizeof(struct ipv6hdr)) +#define IP6_FRAG_H_LEN (sizeof(struct ip6_frag)) +#define ICMP_H_LEN (sizeof(struct icmphdr)) +#define ICMP6_H_LEN (sizeof(struct icmp6hdr)) + #define ensure_header(header, skb, data, data_end, offset) \ _ensure_header((void **) header, (skb), (data), (data_end), sizeof(**(header)), (offset)) @@ -129,23 +136,23 @@ update_l4_checksum(struct __sk_buff *skb, void *to_ptr = &ip6h->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(__u32), to_ptr, 2 * sizeof(struct in6_addr), 0); - offset = sizeof(struct ethhdr) + sizeof(struct iphdr); + offset = ETH_H_LEN + IP_H_LEN; ip_type = ip6h->nexthdr; } else { void *from_ptr = &ip6h->saddr; void *to_ptr = &iph->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(struct in6_addr), to_ptr, 2 * sizeof(__u32), 0); - offset = sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + offset = ETH_H_LEN + IP6_H_LEN; ip_type = iph->protocol; if (is_inner) { - offset = offset + sizeof(struct icmp6hdr) + sizeof(struct ipv6hdr); + offset = offset + ICMP6_H_LEN + IP6_H_LEN; } } if (is_v6_fragment) { - offset += sizeof(struct ip6_frag); + offset += IP6_FRAG_H_LEN; } switch (ip_type) { @@ -203,11 +210,11 @@ update_icmp_checksum(struct __sk_buff *skb, seed); if (v4to6) { - offset = sizeof(struct ethhdr) + sizeof(struct iphdr) + 2; + offset = ETH_H_LEN + IP_H_LEN + 2; } else { - offset = sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + 2; + offset = ETH_H_LEN + IP6_H_LEN + 2; if (is_inner) - offset += sizeof(struct icmp6hdr) + sizeof(struct ipv6hdr); + offset += ICMP6_H_LEN + IP6_H_LEN; } /* first two bytes of ICMP header, type and code */ @@ -236,7 +243,7 @@ rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) struct icmp6hdr *icmp6; __u32 mtu; - if (!ensure_header(&icmp, skb, &data, &data_end, sizeof(struct ethhdr) + sizeof(struct iphdr))) + if (!ensure_header(&icmp, skb, &data, &data_end, ETH_H_LEN + IP_H_LEN)) return -1; icmp_buf = *icmp; @@ -524,7 +531,7 @@ clat_handle_v4(struct __sk_buff *skb) struct iphdr *iph; struct ethhdr *eth; - if (!ensure_header(&iph, skb, &data, &data_end, sizeof(struct ethhdr))) + if (!ensure_header(&iph, skb, &data, &data_end, ETH_H_LEN)) goto out; eth = data; @@ -563,7 +570,7 @@ clat_handle_v4(struct __sk_buff *skb) /* weird definition in ipv6hdr */ dst_hdr.priority = (iph->tos & 0x70) >> 4; dst_hdr.flow_lbl[0] = iph->tos << 4; - dst_hdr.payload_len = bpf_htons(bpf_ntohs(iph->tot_len) - sizeof(struct iphdr)); + dst_hdr.payload_len = bpf_htons(bpf_ntohs(iph->tot_len) - IP_H_LEN); DBG("v4: outgoing pkt to dst %pI4 (%pI6c)\n", &iph->daddr, &dst_hdr.daddr); @@ -587,7 +594,7 @@ clat_handle_v4(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - if (!ensure_header(&ip6h, skb, &data, &data_end, sizeof(struct ethhdr))) + if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN)) goto out; eth = data; @@ -632,11 +639,10 @@ translate_ipv6_header(const struct ipv6hdr *ip6, struct iphdr *ip, __be32 saddr, .protocol = ip6->nexthdr == IPPROTO_ICMPV6 ? IPPROTO_ICMP : ip6->nexthdr, .saddr = saddr, .daddr = daddr, - .tot_len = bpf_htons(bpf_ntohs(ip6->payload_len) + sizeof(struct iphdr)), + .tot_len = bpf_htons(bpf_ntohs(ip6->payload_len) + IP_H_LEN), }; - ip->check = - csum_fold_helper(bpf_csum_diff((__be32 *) ip, 0, (__be32 *) ip, sizeof(struct iphdr), 0)); + ip->check = csum_fold_helper(bpf_csum_diff((__be32 *) ip, 0, (__be32 *) ip, IP_H_LEN, 0)); } static __always_inline int @@ -745,12 +751,7 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) * ------------------------------------------------------------------------- */ - if (!ensure_header(&icmp6, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) - + sizeof(struct icmp6hdr))) + if (!ensure_header(&icmp6, skb, &data, &data_end, ETH_H_LEN + 2 * IP6_H_LEN + ICMP6_H_LEN)) return -1; icmp6_buf = *icmp6; @@ -762,7 +763,7 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) *icmp = icmp_buf; update_icmp_checksum(skb, - (struct ipv6hdr *) (data + sizeof(struct ethhdr)), + (struct ipv6hdr *) (data + ETH_H_LEN), &icmp6_buf, icmp, false, @@ -773,22 +774,13 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) data_end = SKB_DATA_END(skb); data = SKB_DATA(skb); - if (!ensure_header(&icmp, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + 2 * sizeof(struct ipv6hdr) - + sizeof(struct icmp6hdr))) + if (!ensure_header(&icmp, skb, &data, &data_end, ETH_H_LEN + 2 * IP6_H_LEN + ICMP6_H_LEN)) return -1; /* Compute the checksum difference between the old ICMPv6 header and the new ICMPv4 one */ - *csum_diff = bpf_csum_diff((__be32 *) &icmp6_buf, - sizeof(struct icmp6hdr), - (__be32 *) &icmp6_buf, - 0, - *csum_diff); *csum_diff = - bpf_csum_diff((__be32 *) icmp, 0, (__be32 *) icmp, sizeof(struct icmphdr), *csum_diff); + bpf_csum_diff((__be32 *) &icmp6_buf, ICMP6_H_LEN, (__be32 *) &icmp6_buf, 0, *csum_diff); + *csum_diff = bpf_csum_diff((__be32 *) icmp, 0, (__be32 *) icmp, ICMP_H_LEN, *csum_diff); } return 0; } @@ -809,11 +801,7 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif * ---------------------------------------------------------------- */ - if (!ensure_header(&ip6h, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr))) + if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN + ICMP6_H_LEN)) return -1; if (!v6addr_equal(&ip6h->saddr, &config.local_v6)) @@ -827,14 +815,9 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif if (csum_diff) { /* Checksum difference between the old IPv6 header and the new IPv4 one */ - *csum_diff = - bpf_csum_diff((__be32 *) ip6h, sizeof(struct ipv6hdr), (__be32 *) ip6h, 0, *csum_diff); + *csum_diff = bpf_csum_diff((__be32 *) ip6h, IP6_H_LEN, (__be32 *) ip6h, 0, *csum_diff); - *csum_diff = bpf_csum_diff((__be32 *) dst_hdr, - 0, - (__be32 *) dst_hdr, - sizeof(struct iphdr), - *csum_diff); + *csum_diff = bpf_csum_diff((__be32 *) dst_hdr, 0, (__be32 *) dst_hdr, IP_H_LEN, *csum_diff); } switch (dst_hdr->protocol) { @@ -873,11 +856,7 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) * --------------------------------------------- */ - if (!ensure_header(&icmp6, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + sizeof(struct ipv6hdr))) + if (!ensure_header(&icmp6, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN)) return -1; icmp6_buf = *icmp6; @@ -891,7 +870,7 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) /* ICMPv6 non-error message: only translate the header */ *icmp = icmp_buf; update_icmp_checksum(skb, - (struct ipv6hdr *) (data + sizeof(struct ethhdr)), + (struct ipv6hdr *) (data + ETH_H_LEN), &icmp6_buf, icmp, false, @@ -914,25 +893,18 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) * to remove the bytes just after the L3 header, and rewrite the ICMP and the inner * IP headers. */ - if (bpf_skb_adjust_room(skb, - (int) sizeof(struct iphdr) - (int) sizeof(struct ipv6hdr), - BPF_ADJ_ROOM_NET, - 0)) + if (bpf_skb_adjust_room(skb, (int) IP_H_LEN - (int) IP6_H_LEN, BPF_ADJ_ROOM_NET, 0)) return -1; - *out_length_diff = (int) sizeof(struct iphdr) - (int) sizeof(struct ipv6hdr); + *out_length_diff = (int) IP_H_LEN - (int) IP6_H_LEN; data_end = SKB_DATA_END(skb); data = SKB_DATA(skb); - if (!ensure_header(&ip, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + sizeof(struct ipv6hdr) + sizeof(struct icmphdr))) + if (!ensure_header(&ip, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN + ICMP_H_LEN)) return -1; - icmp = data + sizeof(struct ethhdr) + sizeof(struct ipv6hdr); + icmp = data + ETH_H_LEN + IP6_H_LEN; /* Rewrite the ICMPv6 header with the translated ICMPv4 one */ *icmp = icmp_buf; @@ -941,7 +913,7 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) /* Update the ICMPv4 checksum according to all the changes in headers */ update_icmp_checksum(skb, - (struct ipv6hdr *) (data + sizeof(struct ethhdr)), + (struct ipv6hdr *) (data + ETH_H_LEN), &icmp6_buf, icmp, false, @@ -967,7 +939,7 @@ clat_handle_v6(struct __sk_buff *skb) int length_diff = 0; bool fragmented = false; - if (!ensure_header(&ip6h, skb, &data, &data_end, sizeof(struct ethhdr))) + if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN)) goto out; eth = data; @@ -993,14 +965,10 @@ clat_handle_v6(struct __sk_buff *skb) if (ip6h->nexthdr != IPPROTO_ICMPV6) goto out; - if (!ensure_header(&icmp6, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + sizeof(struct ipv6hdr))) + if (!ensure_header(&icmp6, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN)) goto out; - ip6h = data + sizeof(struct ethhdr); + ip6h = data + ETH_H_LEN; if (icmp6->icmp6_type != ICMPV6_DEST_UNREACH && icmp6->icmp6_type != ICMPV6_TIME_EXCEED && icmp6->icmp6_type != ICMPV6_PKT_TOOBIG) @@ -1027,18 +995,14 @@ clat_handle_v6(struct __sk_buff *skb) int tot_len; __u16 offset; - if (!ensure_header(&frag, - skb, - &data, - &data_end, - sizeof(struct ethhdr) + sizeof(struct ipv6hdr))) + if (!ensure_header(&frag, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN)) goto out; - ip6h = data + sizeof(struct ethhdr); + ip6h = data + ETH_H_LEN; /* Translate into an IPv4 fragmented packet, RFC 6145 5.1.1 */ - tot_len = bpf_ntohs(ip6h->payload_len) + sizeof(struct iphdr) - sizeof(struct ip6_frag); + tot_len = bpf_ntohs(ip6h->payload_len) + IP_H_LEN - IP6_FRAG_H_LEN; offset = bpf_ntohs(frag->offset); offset = ((offset & 1) << 13) | /* More Fragments flag */ @@ -1058,7 +1022,7 @@ clat_handle_v6(struct __sk_buff *skb) }; dst_hdr.check = csum_fold_helper( - bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, sizeof(struct iphdr), 0)); + bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, IP_H_LEN, 0)); fragmented = true; @@ -1103,15 +1067,14 @@ clat_handle_v6(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - if (!ensure_header(&ip6h, skb, &data, &data_end, sizeof(struct ethhdr))) + if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN)) goto out; - dst_hdr.tot_len = - bpf_htons(bpf_ntohs(ip6h->payload_len) + length_diff + sizeof(struct iphdr)); + dst_hdr.tot_len = bpf_htons(bpf_ntohs(ip6h->payload_len) + length_diff + IP_H_LEN); dst_hdr.check = 0; dst_hdr.check = csum_fold_helper( - bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, sizeof(struct iphdr), 0)); + bpf_csum_diff((__be32 *) &dst_hdr, 0, (__be32 *) &dst_hdr, IP_H_LEN, 0)); } if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IP), 0)) @@ -1119,14 +1082,14 @@ clat_handle_v6(struct __sk_buff *skb) if (fragmented) { /* Remove the IPv6 fragment header */ - if (bpf_skb_adjust_room(skb, -(__s32) sizeof(struct ip6_frag), BPF_ADJ_ROOM_NET, 0)) + if (bpf_skb_adjust_room(skb, -(__s32) IP6_FRAG_H_LEN, BPF_ADJ_ROOM_NET, 0)) goto out; } data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - if (!ensure_header(&iph, skb, &data, &data_end, sizeof(struct ethhdr))) + if (!ensure_header(&iph, skb, &data, &data_end, ETH_H_LEN)) goto out; eth = data; From c32f0fb71f03e10d2fcfb983b2f2d370c49de042 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 19 Jan 2026 14:41:00 +0100 Subject: [PATCH 125/153] l3cfg: fix the metric of the CLAT default route Previously the metric of the CLAT default route was set to the IPv6 route metric plus 50. Instead: - If there is another non-CLAT default route on the device, use the same metric plus 1, so that native connectivity is always preferred. - Otherwise, use the metric from the "ipv4.route-metric" property of the connection profile. --- src/core/nm-l3cfg.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index c15ffbec64..1230e620d0 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4291,6 +4291,7 @@ _l3cfg_update_combined_config(NML3Cfg *self, struct in6_addr ip6; const char *network_id; char buf[512]; + guint32 route4_metric = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4; /* If we have a valid NAT64 prefix, configure in kernel: * @@ -4353,6 +4354,38 @@ _l3cfg_update_combined_config(NML3Cfg *self, NM_NETNS_IP_RESERVATION_TYPE_CLAT); } + { + const NMPlatformIP4Route *r4; + guint32 metric = 0; + guint32 penalty = 0; + + /* Find the IPv4 metric for the CLAT default route. + * If there is another non-CLAT default route on the device, use the + * same metric + 1, so that native connectivity is always preferred. + * Otherwise, use the metric from the connection profile. + */ + + r4 = NMP_OBJECT_CAST_IP4_ROUTE( + nm_l3_config_data_get_best_default_route(l3cd, AF_INET)); + + if (r4) { + route4_metric = nm_add_clamped_u32(r4->metric, 1u); + } else { + for (i = 0; i < l3_config_datas_len; i++) { + const L3ConfigData *l3cd_data = l3_config_datas_arr[i]; + + if (l3cd_data->default_route_metric_4 + != NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4) { + metric = l3cd_data->default_route_metric_4; + } + if (l3cd_data->default_route_penalty_4 != 0) { + penalty = l3cd_data->default_route_penalty_4; + } + } + route4_metric = nm_add_clamped_u32(metric, penalty); + } + } + if (self->priv.p->clat_address_4) { best_v6_route = NMP_OBJECT_CAST_IP6_ROUTE( nm_l3_config_data_get_direct_route_for_host(l3cd, AF_INET6, &pref64)); @@ -4413,10 +4446,8 @@ _l3cfg_update_combined_config(NML3Cfg *self, .type_coerced = nm_platform_route_type_coerce(RTN_UNICAST), .pref_src = self->priv.p->clat_address_4->addr, .via = best_v6_gateway, - /* If real v4 connectivity is available from another interface, - that should probably be preferred */ - .metric = best_v6_route->metric + 50, - .mtu = mtu, + .metric = route4_metric, + .mtu = mtu, }; nm_platform_ip_route_normalize(AF_INET, &rx.rx); if (!nm_l3_config_data_lookup_route(l3cd, AF_INET, &rx.rx)) { From d56cd26aeabe452e5b72f68a2b3a4fa876c3c7e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 23 Dec 2025 11:57:14 +0100 Subject: [PATCH 126/153] release.sh: add comments --- contrib/fedora/rpm/release.sh | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/contrib/fedora/rpm/release.sh b/contrib/fedora/rpm/release.sh index ce98e22e35..74ab4347cc 100755 --- a/contrib/fedora/rpm/release.sh +++ b/contrib/fedora/rpm/release.sh @@ -409,11 +409,8 @@ if [ $CHECK_GITLAB = 1 ]; then fi fi -PUSH_REFS=() -BUILD_VERSION= - +# Work on a temporary branch CLEANUP_CHECKOUT_BRANCH="$CUR_BRANCH" - git checkout -B "$TMP_BRANCH" CLEANUP_REFS+=("refs/heads/$TMP_BRANCH") @@ -463,6 +460,7 @@ build_version() { local TAR_FILE="NetworkManager-$BUILD_VERSION.tar.xz" local SUM_FILE="$TAR_FILE.sha256sum" + # Bump version and tag the release set_version_number "$BUILD_VERSION" git commit -m "release: bump version to $BUILD_VERSION_DESCR" -a || die "failed to commit release" git tag -s -a -m "Release $BUILD_VERSION_DESCR" "$BUILD_VERSION" HEAD || die "failed to tag release" @@ -470,35 +468,43 @@ build_version() { PUSH_REFS+=("$BUILD_VERSION") CLEANUP_REFS+=("refs/tags/$BUILD_VERSION") - git checkout "$BUILD_VERSION" || die "failed to checkout $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 + # Store the release version for later use RELEASE_VERSIONS+=("$BUILD_VERSION") } +# Build and create tarball. Bump version as needed. +PUSH_REFS=() RELEASE_VERSIONS=() if [ -n "$BUILD_VERSION" ]; then build_version "$BUILD_VERSION" "${BUILD_VERSION_DESCR:-$BUILD_VERSION}" fi -git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH" +# 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 [ "$RELEASE_MODE" = rc1 ]; then - git branch "$RELEASE_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_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" ) + # Work on the temporary branch again git checkout "$TMP_BRANCH" + # Second release for rc1: create new dev version on main BUILD_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 2)).0" BUILD_VERSION_DESCR="$BUILD_VERSION (development)" BUILD_VERSION="${BUILD_VERSION}-dev" build_version "$BUILD_VERSION" "$BUILD_VERSION_DESCR" + # Work was done on the temporary branch, advance the real branch git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH" fi @@ -514,8 +520,10 @@ if [ -z "$GITLAB_USER_ID" ] || [ "$GITLAB_USER_ID" = "null" ]; then die "failed to authenticate to gitlab.freedesktop.org with the private token" fi +# 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 BUILD_VERSION in "${RELEASE_VERSIONS[@]}"; do TAR_FILE="NetworkManager-$BUILD_VERSION.tar.xz" From 3a3a8ea59d6cf5e3df0976c1d6591bf77e7230fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 23 Dec 2025 12:13:19 +0100 Subject: [PATCH 127/153] release.sh: assume that the version is already the right one Don't bump the version before tagging the release. Instead, assume that it's already correctly set. This is in preparation for the next commit where we will bump the version after the release, not before. But don't assume that in the case of rc1 and major releases. For rc1 we switch from devel releases to RC releases, and in major we switch from RC releases to stable releases. For example, when we are going to release 1.58-rc1, the current version will be 1.57.X-dev, so we need to bump to 1.58-rc1. When we're going to release 1.58.0, the current version will be 1.58-rcX, so we need to bump to 1.58.0. --- contrib/fedora/rpm/release.sh | 44 +++++++++++++++-------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/contrib/fedora/rpm/release.sh b/contrib/fedora/rpm/release.sh index 74ab4347cc..ad673dd918 100755 --- a/contrib/fedora/rpm/release.sh +++ b/contrib/fedora/rpm/release.sh @@ -415,21 +415,16 @@ git checkout -B "$TMP_BRANCH" CLEANUP_REFS+=("refs/heads/$TMP_BRANCH") case "$RELEASE_MODE" in - minor) - BUILD_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))" - ;; - devel) - BUILD_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))" - BUILD_VERSION_DESCR="$BUILD_VERSION (development)" - BUILD_VERSION="${BUILD_VERSION}-dev" + minor|devel|rc) + # Version is already correct in meson.build + BUILD_VERSION="$VERSION_STR" ;; rc1) + # Current version is wrong (dev version), need to set rc1 version BUILD_VERSION="${VERSION_ARR[0]}.$(("${VERSION_ARR[1]}" + 1))-rc1" ;; - rc) - BUILD_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}-rc$(( $RC_VERSION + 1 ))" - ;; major) + # Current version is wrong (rc version), need to set major version BUILD_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.0" ;; major-post) @@ -445,9 +440,8 @@ case "$RELEASE_MODE" in 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!" - BUILD_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$(("${VERSION_ARR[2]}" + 1))" - BUILD_VERSION_DESCR="$BUILD_VERSION (development)" - BUILD_VERSION="${BUILD_VERSION}-dev" + # Version is already correct in meson.build + BUILD_VERSION="$VERSION_STR" ;; *) die "Release mode $RELEASE_MODE not yet implemented" @@ -455,16 +449,20 @@ case "$RELEASE_MODE" in esac build_version() { + local CURR_VERSION="$(get_version)" local BUILD_VERSION="$1" - local BUILD_VERSION_DESCR="$2" + local BUILD_VERSION_DESCR="${BUILD_VERSION/-dev/ (development)}" local TAR_FILE="NetworkManager-$BUILD_VERSION.tar.xz" local SUM_FILE="$TAR_FILE.sha256sum" - # Bump version and tag the release - set_version_number "$BUILD_VERSION" - git commit -m "release: bump version to $BUILD_VERSION_DESCR" -a || die "failed to commit release" - git tag -s -a -m "Release $BUILD_VERSION_DESCR" "$BUILD_VERSION" HEAD || die "failed to tag release" + # 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") @@ -481,9 +479,7 @@ build_version() { # Build and create tarball. Bump version as needed. PUSH_REFS=() RELEASE_VERSIONS=() -if [ -n "$BUILD_VERSION" ]; then - build_version "$BUILD_VERSION" "${BUILD_VERSION_DESCR:-$BUILD_VERSION}" -fi +build_version "$BUILD_VERSION" # Work was done on the temporary branch, advance the real branch git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH" @@ -499,10 +495,8 @@ if [ "$RELEASE_MODE" = rc1 ]; then git checkout "$TMP_BRANCH" # Second release for rc1: create new dev version on main - BUILD_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 2)).0" - BUILD_VERSION_DESCR="$BUILD_VERSION (development)" - BUILD_VERSION="${BUILD_VERSION}-dev" - build_version "$BUILD_VERSION" "$BUILD_VERSION_DESCR" + BUILD_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 2)).0-dev" + build_version "$BUILD_VERSION" # Work was done on the temporary branch, advance the real branch git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH" From 5666407f156fcd7b328dff6838038ee6993e9f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 23 Dec 2025 12:49:11 +0100 Subject: [PATCH 128/153] release.sh: bump version after release After tagging a release, create a commit bumping to the next version. This effectively ends the change in the logic initiated in the previous commit, from "bump version, then release" to "release, then bump version". The purpose of this is to have the right version set in nm_version.h and nm_version_macros.h between two releases. Without this change, when we introduced a new symbol, thus using the NM_AVAILABLE_IN_1_XX annotations, we got compilation warnings until we did the next release (making the CI to be red when configured the compilation to fail on warnings). --- contrib/fedora/rpm/release.sh | 45 +++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/contrib/fedora/rpm/release.sh b/contrib/fedora/rpm/release.sh index ad673dd918..2c21b4d98d 100755 --- a/contrib/fedora/rpm/release.sh +++ b/contrib/fedora/rpm/release.sh @@ -415,17 +415,30 @@ git checkout -B "$TMP_BRANCH" CLEANUP_REFS+=("refs/heads/$TMP_BRANCH") case "$RELEASE_MODE" in - minor|devel|rc) + minor) # Version is already correct in meson.build BUILD_VERSION="$VERSION_STR" + NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}.$((${VERSION_ARR[2]} + 1))" + ;; + devel) + # 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) + # Version is already correct in meson.build + BUILD_VERSION="$VERSION_STR" + NEXT_VERSION="${VERSION_ARR[0]}.${VERSION_ARR[1]}-rc$((RC_VERSION + 1))" ;; rc1) # Current version is wrong (dev version), need to set rc1 version - BUILD_VERSION="${VERSION_ARR[0]}.$(("${VERSION_ARR[1]}" + 1))-rc1" + BUILD_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1))-rc1" + NEXT_VERSION="${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1))-rc2" ;; major) # 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 @@ -442,6 +455,7 @@ case "$RELEASE_MODE" in # 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" @@ -451,7 +465,9 @@ esac 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" @@ -474,16 +490,17 @@ build_version() { # Store the release version for later use RELEASE_VERSIONS+=("$BUILD_VERSION") + + # 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" - -# 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" ) +build_version "$BUILD_VERSION" "$NEXT_VERSION" if [ "$RELEASE_MODE" = rc1 ]; then # Create the release branch (nm-1-xx) @@ -491,17 +508,19 @@ if [ "$RELEASE_MODE" = rc1 ]; then PUSH_REFS+=( "$RELEASE_BRANCH" ) CLEANUP_REFS+=( "refs/heads/$RELEASE_BRANCH" ) - # Work on the temporary branch again - git checkout "$TMP_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" - build_version "$BUILD_VERSION" - - # Work was done on the temporary branch, advance the real branch - git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH" + 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) From 9a3462af99dfaefdfcee63426ed142fda290c462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Wed, 24 Dec 2025 10:32:16 +0100 Subject: [PATCH 129/153] release.sh: fix a few small bugs and typos Fix typo freedestkop -> freedesktop. Removed unused argument of check_news (additionally, it was incorrectly using @ instead of $). Fixed incorrect use of `$? = 0` that was always successful. --- contrib/fedora/rpm/release.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/contrib/fedora/rpm/release.sh b/contrib/fedora/rpm/release.sh index 2c21b4d98d..6caf1100cb 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. @@ -155,8 +155,6 @@ set_version_number() { check_news() { local mode="$1" - shift - local ver_arr=("$@") case "$mode" in major|minor) @@ -361,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 @@ -592,7 +590,7 @@ for BUILD_VERSION in "${RELEASE_VERSIONS[@]}"; do END )" || FAIL=1 - if [[ $? != 0 ]]; then + if [[ $FAIL = 1 ]]; then fail_msg "failed to create NetworkManager $BUILD_VERSION release" CREATE_RELEASE_FAIL=1 continue From c0fe80ff87373bfb76de26613a0f69a15c43214d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 23 Dec 2025 15:55:16 +0100 Subject: [PATCH 130/153] release: (manually) bump version to 1.57.2-dev After the previous commits, release.sh bumps the version after tagging the release, and not before. Therefore, it expects that the version is already the next one when doing the release. Manually bump the version this time so release.sh sees the right value the next time it's executed after these changes. --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 913d7431be..39fb1aed9a 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ 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.57.1-dev', + version: '1.57.2-dev', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', From 36275bc51caae466af1952666df2b5d37a2db718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 23 Dec 2025 16:05:03 +0100 Subject: [PATCH 131/153] nm-version.h: use the right value of NM_API_VERSION After the changes in release.sh in previous commits, during development the value of NM_VERSION will always be the next version, not the latest released one. As a consequence, we don't need to set MICRO+1 in NM_API_VERSION, which was a temporary workaround. --- src/libnm-core-public/nm-version-macros.h.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libnm-core-public/nm-version-macros.h.in b/src/libnm-core-public/nm-version-macros.h.in index e4050e692a..c1e0ba540c 100644 --- a/src/libnm-core-public/nm-version-macros.h.in +++ b/src/libnm-core-public/nm-version-macros.h.in @@ -83,15 +83,15 @@ /* 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 From f849163e827290329564377e009e763cb134beaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= Date: Tue, 23 Dec 2025 16:09:39 +0100 Subject: [PATCH 132/153] nm-version: allow to define NM_VERSION_MAX_ALLOWED alone Previously, if NM_VERSION_MIN_REQUIRED was not defined, it defaulted to NM_VERSION. As a consequence, if NM_VERSION_MAX_ALLOWED was defined we got a compilation error because MAX_ALLOWED < MIN_REQUIRED. MAX_ALLOWED is used to get compilation warnings if you unintentionally use a libnm's symbol introduced in a newer version. MIN_REQUIRED is used to get rid of warnings about symbol deprecations. Libnm users may want to use MAX_ALLOWED alone, because using a too new symbol would fail to compile with older libnm. But they might want to get deprecation warnings as soon as possible, so they want to leave MIN_REQUIRED empty. --- src/libnm-core-public/nm-version.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libnm-core-public/nm-version.h b/src/libnm-core-public/nm-version.h index bc3d70749f..f99851194b 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" From a3267aaf7bfab66604b2a6e69973301bb7f9b867 Mon Sep 17 00:00:00 2001 From: Jan Fooken Date: Tue, 4 Nov 2025 09:32:58 +0100 Subject: [PATCH 133/153] device: add private getter for property auth-retries --- src/core/devices/nm-device.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index ad6602c05a..03343f3fef 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -18905,14 +18905,14 @@ nm_device_get_supplicant_timeout(NMDevice *self) SUPPLICANT_DEFAULT_TIMEOUT); } -gboolean -nm_device_auth_retries_try_next(NMDevice *self) +static int +_device_get_auth_retries(NMDevice *self) { NMDevicePrivate *priv; NMSettingConnection *s_con; int auth_retries; - g_return_val_if_fail(NM_IS_DEVICE(self), FALSE); + g_return_val_if_fail(NM_IS_DEVICE(self), 0); priv = NM_DEVICE_GET_PRIVATE(self); auth_retries = priv->auth_retries; @@ -18944,13 +18944,29 @@ nm_device_auth_retries_try_next(NMDevice *self) priv->auth_retries = auth_retries; } + return auth_retries; +} + +gboolean +nm_device_auth_retries_try_next(NMDevice *self) +{ + NMDevicePrivate *priv; + int auth_retries; + + g_return_val_if_fail(NM_IS_DEVICE(self), FALSE); + + priv = NM_DEVICE_GET_PRIVATE(self); + auth_retries = _device_get_auth_retries(self); + if (auth_retries == NM_DEVICE_AUTH_RETRIES_INFINITY) return TRUE; if (auth_retries <= 0) { nm_assert(auth_retries == 0); return FALSE; } + priv->auth_retries--; + return TRUE; } From 6dc51ddf01afe790bcf48d93192a0e535987334e Mon Sep 17 00:00:00 2001 From: Jan Fooken Date: Tue, 4 Nov 2025 09:35:27 +0100 Subject: [PATCH 134/153] device: add public method nm_device_auth_retries_has_next Devices don't know whether they have authentication retries left, so they can only make decisions ad-hoc after calling nm_device_auth_retries_try_next. Giving devices a way to determine whether the current attempt is their last attempt, allows them to make decisions before failing a connection. --- src/core/devices/nm-device.c | 18 ++++++++++++++++++ src/core/devices/nm-device.h | 1 + 2 files changed, 19 insertions(+) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 03343f3fef..a00f04b579 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -18947,6 +18947,24 @@ _device_get_auth_retries(NMDevice *self) return auth_retries; } +gboolean +nm_device_auth_retries_has_next(NMDevice *self) +{ + int auth_retries; + + g_return_val_if_fail(NM_IS_DEVICE(self), FALSE); + + auth_retries = _device_get_auth_retries(self); + + if (auth_retries == NM_DEVICE_AUTH_RETRIES_INFINITY) + return TRUE; + + if (auth_retries > 0) + return TRUE; + + return FALSE; +} + gboolean nm_device_auth_retries_try_next(NMDevice *self) { diff --git a/src/core/devices/nm-device.h b/src/core/devices/nm-device.h index 2f287953eb..c8069d7c1d 100644 --- a/src/core/devices/nm-device.h +++ b/src/core/devices/nm-device.h @@ -791,6 +791,7 @@ void nm_device_update_permanent_hw_address(NMDevice *self, gboolean force_fr void nm_device_update_dynamic_ip_setup(NMDevice *self, const char *reason); guint nm_device_get_supplicant_timeout(NMDevice *self); +gboolean nm_device_auth_retries_has_next(NMDevice *self); gboolean nm_device_auth_retries_try_next(NMDevice *self); gboolean nm_device_hw_addr_get_cloned(NMDevice *self, From 746a5902ad85ec0611a3e6ebfd7b68b45621a40b Mon Sep 17 00:00:00 2001 From: Jan Fooken Date: Tue, 4 Nov 2025 09:43:06 +0100 Subject: [PATCH 135/153] wifi: use authentication retry mechanism While NetworkManager tries it's best to determine whether a new PSK is needed, it can still run into edge cases. One of these edge cases is that a device can leave the range of an access point and therefore fail a 4-way handshake. Because these cases can't be confidently detected, a device which was previously connected, should try to exhaust it's authentication retries before requesting new secrets. This leads to less user-facing prompts while increasing the time from PSK change to prompt. --- src/core/devices/wifi/nm-device-wifi.c | 90 ++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 12 deletions(-) diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c index 1fd096426e..6a9e5655c8 100644 --- a/src/core/devices/wifi/nm-device-wifi.c +++ b/src/core/devices/wifi/nm-device-wifi.c @@ -2251,6 +2251,26 @@ wps_timeout_cb(gpointer user_data) return G_SOURCE_REMOVE; } +static gboolean +wifi_connection_is_new(NMDeviceWifi *self) +{ + NMDevice *device = NM_DEVICE(self); + NMActRequest *req; + NMSettingsConnection *connection; + guint64 timestamp = 0; + + req = nm_device_get_act_request(device); + g_return_val_if_fail(NM_IS_ACT_REQUEST(req), TRUE); + + connection = nm_act_request_get_settings_connection(req); + g_return_val_if_fail(NM_IS_SETTINGS_CONNECTION(connection), TRUE); + + if (nm_settings_connection_get_timestamp(connection, ×tamp) && timestamp != 0) + return FALSE; + + return TRUE; +} + static void wifi_secrets_get_secrets(NMDeviceWifi *self, const char *setting_name, @@ -2405,10 +2425,11 @@ handle_8021x_or_psk_auth_fail(NMDeviceWifi *self, NMSupplicantInterfaceState old_state, int disconnect_reason) { - NMDevice *device = NM_DEVICE(self); - NMActRequest *req; - const char *setting_name = NULL; - gboolean handled = FALSE; + NMDevice *device = NM_DEVICE(self); + NMActRequest *req; + const char *setting_name = NULL; + NMSecretAgentGetSecretsFlags secret_flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION + | NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW; g_return_val_if_fail(new_state == NM_SUPPLICANT_INTERFACE_STATE_DISCONNECTED, FALSE); @@ -2418,8 +2439,7 @@ handle_8021x_or_psk_auth_fail(NMDeviceWifi *self, req = nm_device_get_act_request(NM_DEVICE(self)); g_return_val_if_fail(req != NULL, FALSE); - if (need_new_8021x_secrets(self, old_state, &setting_name) - || need_new_wpa_psk(self, old_state, disconnect_reason, &setting_name)) { + if (need_new_8021x_secrets(self, old_state, &setting_name)) { nm_act_request_clear_secrets(req); _LOGI(LOGD_DEVICE | LOGD_WIFI, @@ -2429,14 +2449,54 @@ handle_8021x_or_psk_auth_fail(NMDeviceWifi *self, 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); - handled = TRUE; + wifi_secrets_get_secrets(self, setting_name, secret_flags); + return TRUE; } - return handled; + if (need_new_wpa_psk(self, old_state, disconnect_reason, &setting_name)) { + nm_act_request_clear_secrets(req); + cleanup_association_attempt(self, TRUE); + + if (wifi_connection_is_new(self)) { + _LOGI(LOGD_DEVICE | LOGD_WIFI, + "Activation: (wifi) new connection disconnected during association, asking for " + "new key"); + nm_device_state_changed(device, + NM_DEVICE_STATE_NEED_AUTH, + NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT); + wifi_secrets_get_secrets(self, setting_name, secret_flags); + return TRUE; + } + + if (!nm_device_auth_retries_try_next(device)) { + nm_device_state_changed(device, + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_NO_SECRETS); + return TRUE; + } + + if (nm_device_auth_retries_has_next(device)) { + secret_flags &= ~NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW; + _LOGI( + LOGD_DEVICE | LOGD_WIFI, + "Activation: (wifi) disconnected during association, reauthenticating connection"); + } else { + _LOGI(LOGD_DEVICE | LOGD_WIFI, + "Activation: (wifi) disconnected during association, asking for new key"); + } + + nm_device_state_changed(device, + NM_DEVICE_STATE_NEED_AUTH, + NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT); + wifi_secrets_get_secrets(self, setting_name, secret_flags); + + return TRUE; + } + + _LOGI(LOGD_DEVICE | LOGD_WIFI, + "Activation: (wifi) disconnected during association, retrying connection"); + + return FALSE; } static gboolean @@ -2868,6 +2928,12 @@ supplicant_iface_notify_wpa_psk_mismatch_cb(NMSupplicantInterface *iface, NMDevi if (nm_device_get_state(device) != NM_DEVICE_STATE_CONFIG) return; + if (!wifi_connection_is_new(self) && nm_device_auth_retries_has_next(device)) { + _LOGI(LOGD_DEVICE | LOGD_WIFI, + "Activation: (wifi) psk mismatch reported by supplicant, retrying connection"); + return; + } + _LOGI(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) psk mismatch reported by supplicant, asking for new key"); From b4fc8550f5f3242f9b69071997dda73148b539ad Mon Sep 17 00:00:00 2001 From: Jan Fooken Date: Mon, 10 Nov 2025 10:25:34 +0100 Subject: [PATCH 136/153] man: wifi: Document connection.auth-retry for WPA connections Remove the mentioned limitation of limiting authentication retires to 802.1X connections and add information about the introduced secret prompting behaviour. --- src/libnm-core-impl/nm-setting-connection.c | 5 ++--- src/libnmc-setting/settings-docs.h.in | 2 +- src/nmcli/gen-metadata-nm-settings-nmcli.xml.in | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index 0ad97846df..96dff14601 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -3328,9 +3328,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * * The number of retries for the authentication. Zero means to try indefinitely; -1 means * to use a global default. If the global default is not set, the authentication - * retries for 3 times before failing the connection. - * - * Currently, this only applies to 802-1x authentication. + * retries for 3 times before failing the connection. Connections using a pre-shared key + * to authenticate will only prompt for a new key during the last authentication attempt. * * Since: 1.10 **/ diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index 0df43b0794..e02a93e43d 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -1,6 +1,6 @@ /* Generated file. Do not edit. */ -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTH_RETRIES N_("The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Currently, this only applies to 802-1x authentication.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTH_RETRIES N_("The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Connections using a pre-shared key to authenticate will only prompt for a new key during the last authentication attempt.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT N_("Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See \"secondaries\" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better \"connection.autoconnect-priority\" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their \"connection.timestamp\" is identical, the choice is undefined. Depending on \"connection.multi-connect\", a profile can (auto)connect only once at a time or multiple times.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PORTS 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-ports is read to determine the real value. If it is default as well, this fallbacks to 0.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY N_("The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.") diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in index 7b718c9e1f..8733cc995b 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in @@ -653,7 +653,7 @@ format="choice (NMConnectionMultiConnect)" values="default (0), single (1), manual-multiple (2), multiple (3)" /> Date: Mon, 10 Nov 2025 10:27:46 +0100 Subject: [PATCH 137/153] NEWS: WPA connections now respect connection.auth-retry --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index e38470b041..65260a14dc 100644 --- a/NEWS +++ b/NEWS @@ -44,6 +44,9 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! * Change the default value of the ipv4.dhcp-ipv6-only-preferred property to a new value "auto" which automatically enables the option when CLAT is enabled ("yes" or "auto") in the connection profile. +* WIFI connections using wpa-psk respect the setting connection.auth-retry + and only prompt for new secrets during the last authentication attempt before + failing. ============================================= NetworkManager-1.56 From cb0929163507ecad0b907cb9ae3c1695d25d93aa Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 2 Feb 2026 16:20:21 +0100 Subject: [PATCH 138/153] nmcli: fix hiding default values A property should be hidden when it has the default value and one of the following conditions is met: - nmcli is called in "overview" mode (with flag -o) - the property has the HIDE flag Previously, properties with the HIDE flag were always hidden. Fix that. --- src/nmcli/utils.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/nmcli/utils.c b/src/nmcli/utils.c index a613c28fc6..e52941f40f 100644 --- a/src/nmcli/utils.c +++ b/src/nmcli/utils.c @@ -1103,8 +1103,9 @@ _print_fill(const NmcConfig *nmc_config, nm_assert(!to_free || value == to_free); - if ((is_default && nmc_config->overview) - || NM_FLAGS_HAS(text_out_flags, NM_META_ACCESSOR_GET_OUT_FLAGS_HIDE)) { + if (is_default + && (nmc_config->overview + || NM_FLAGS_HAS(text_out_flags, NM_META_ACCESSOR_GET_OUT_FLAGS_HIDE))) { /* don't mark the entry for display. This is to shorten the output in case * the property is the default value. But we only do that, if the user * opts in to this behavior (-overview), or of the property marks itself From f2ced1e115ecad8132c2d1758e5ff0cd62268706 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 26 Jan 2026 15:56:02 +0100 Subject: [PATCH 139/153] l3cfg: split updating CLAT config to a separate function Split the CLAT code from _l3cfg_update_combined_config() so that the function can be followed more easily. --- src/core/nm-l3cfg.c | 429 ++++++++++++++++++++++---------------------- 1 file changed, 217 insertions(+), 212 deletions(-) diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 1230e620d0..89a2a6090f 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4139,6 +4139,222 @@ update_routes: } } +static void +_l3cfg_update_clat_config(NML3Cfg *self, + NML3ConfigData *l3cd, + const L3ConfigData **l3_config_datas_arr, + guint l3_config_datas_len) +{ +#if !HAVE_CLAT + return; +#else + struct in6_addr pref64; + guint32 pref64_plen; + gboolean clat_enabled = FALSE; + const NMPlatformIP4Route *ip4_route; + NMDedupMultiIter iter; + + switch (nm_l3_config_data_get_clat(l3cd)) { + case NM_SETTING_IP4_CONFIG_CLAT_FORCE: + clat_enabled = TRUE; + break; + case NM_SETTING_IP4_CONFIG_CLAT_NO: + clat_enabled = FALSE; + break; + case NM_SETTING_IP4_CONFIG_CLAT_AUTO: + clat_enabled = TRUE; + /* disable if there is a native IPv4 gateway */ + nm_l3_config_data_iter_ip4_route_for_each (&iter, l3cd, &ip4_route) { + if (ip4_route->network == INADDR_ANY && ip4_route->plen == 0 + && ip4_route->gateway != INADDR_ANY) + clat_enabled = FALSE; + break; + } + break; + case NM_SETTING_IP4_CONFIG_CLAT_DEFAULT: + nm_assert_not_reached(); + clat_enabled = TRUE; + break; + } + + if (clat_enabled && nm_l3_config_data_get_pref64_valid(l3cd)) { + NMPlatformIPXRoute rx; + NMIPAddrTyped best_v6_gateway; + const NMPlatformIP6Route *best_v6_route; + const NMPlatformIP6Address *ip6_entry; + struct in6_addr ip6; + const char *network_id; + char buf[512]; + guint32 route4_metric = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4; + guint i; + + /* If we have a valid NAT64 prefix, configure in kernel: + * + * - a CLAT IPv4 address (192.0.0.x) + * - a IPv4 default route via the best IPv6 gateway + * + * We also set clat_address_6 as an additional /64 IPv6 address + * determined according to https://www.rfc-editor.org/rfc/rfc6877#section-6.3 . + * This address is used for sending and receiving translated packets, + * but is not configured in kernel to avoid that it gets used by applications. + * Later in _l3_commit_pref64() we use IPV6_JOIN_ANYCAST to let the kernel + * handle ND for the address. + */ + + nm_l3_config_data_get_pref64(l3cd, &pref64, &pref64_plen); + network_id = nm_l3_config_data_get_network_id(l3cd); + + if (!self->priv.p->clat_address_6_valid && network_id) { + nm_l3_config_data_iter_ip6_address_for_each (&iter, l3cd, &ip6_entry) { + if (ip6_entry->addr_source == NM_IP_CONFIG_SOURCE_NDISC && ip6_entry->plen == 64) { + ip6 = ip6_entry->address; + + nm_utils_ipv6_addr_set_stable_privacy(NM_UTILS_STABLE_TYPE_CLAT, + &ip6, + nm_l3cfg_get_ifname(self, TRUE), + network_id, + 0); + self->priv.p->clat_address_6 = (NMPlatformIP6Address) { + .ifindex = self->priv.ifindex, + .address = ip6, + .peer_address = ip6, + .addr_source = NM_IP_CONFIG_SOURCE_CLAT, + .plen = ip6_entry->plen, + }; + + _LOGT("clat: using IPv6 address %s", nm_inet6_ntop(&ip6, buf)); + + self->priv.p->clat_address_6_valid = TRUE; + break; + } + } + } + + /* Don't get a v4 address if we have no v6 address (otherwise, we could + * potentially create broken v4 connectivity) */ + if (!self->priv.p->clat_address_6_valid) { + _LOGW("CLAT is currently only supported when SLAAC is in use."); + /* Deallocate the v4 address unless it's the committed one */ + if (self->priv.p->clat_address_4 != self->priv.p->clat_address_4_committed) { + nm_clear_pointer(&self->priv.p->clat_address_4, nm_netns_ip_reservation_release); + } else { + self->priv.p->clat_address_4 = NULL; + } + } else if (!self->priv.p->clat_address_4) { + /* We need a v4 /32 */ + self->priv.p->clat_address_4 = + nm_netns_ip_reservation_get(self->priv.netns, NM_NETNS_IP_RESERVATION_TYPE_CLAT); + } + + { + const NMPlatformIP4Route *r4; + guint32 metric = 0; + guint32 penalty = 0; + + /* Find the IPv4 metric for the CLAT default route. + * If there is another non-CLAT default route on the device, use the + * same metric + 1, so that native connectivity is always preferred. + * Otherwise, use the metric from the connection profile. + */ + + r4 = NMP_OBJECT_CAST_IP4_ROUTE(nm_l3_config_data_get_best_default_route(l3cd, AF_INET)); + + if (r4) { + route4_metric = nm_add_clamped_u32(r4->metric, 1u); + } else { + for (i = 0; i < l3_config_datas_len; i++) { + const L3ConfigData *l3cd_data = l3_config_datas_arr[i]; + + if (l3cd_data->default_route_metric_4 != NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4) { + metric = l3cd_data->default_route_metric_4; + } + if (l3cd_data->default_route_penalty_4 != 0) { + penalty = l3cd_data->default_route_penalty_4; + } + } + route4_metric = nm_add_clamped_u32(metric, penalty); + } + } + + if (self->priv.p->clat_address_4) { + best_v6_route = NMP_OBJECT_CAST_IP6_ROUTE( + nm_l3_config_data_get_direct_route_for_host(l3cd, AF_INET6, &pref64)); + if (!best_v6_route) { + best_v6_route = NMP_OBJECT_CAST_IP6_ROUTE( + nm_l3_config_data_get_best_default_route(l3cd, AF_INET6)); + } + if (best_v6_route) { + NMPlatformIP4Address addr = { + .ifindex = self->priv.ifindex, + .address = self->priv.p->clat_address_4->addr, + .peer_address = self->priv.p->clat_address_4->addr, + .addr_source = NM_IP_CONFIG_SOURCE_CLAT, + .plen = 32, + }; + const NMPlatformLink *pllink; + guint mtu = 0; + guint val = 0; + + best_v6_gateway.addr_family = AF_INET6; + best_v6_gateway.addr.addr6 = best_v6_route->gateway; + + /* Determine the IPv6 MTU of the interface. Unfortunately, + * the logic to set the MTU is in NMDevice and here we need + * some duplication to find the actual value. + * TODO: move the MTU handling into l3cfg. */ + + /* Get the link MTU */ + pllink = nm_l3cfg_get_pllink(self, TRUE); + if (pllink) + mtu = pllink->mtu; + if (mtu == 0) + mtu = 1500; + + /* Update it with the IPv6 MTU value from the connection + * or from RA */ + val = nm_l3_config_data_get_ip6_mtu_static(l3cd); + if (val == 0) { + val = nm_l3_config_data_get_ip6_mtu_ra(l3cd); + } + if (val != 0 && val < mtu) { + mtu = val; + } + if (mtu < 1280) + mtu = 1280; + + /* Leave 20 additional bytes for the ipv4 -> ipv6 header translation, + * plus 8 for a potential fragmentation extension header */ + mtu -= 28; + + rx.r4 = (NMPlatformIP4Route) { + .ifindex = self->priv.ifindex, + .rt_source = NM_IP_CONFIG_SOURCE_CLAT, + .network = 0, /* default route */ + .plen = 0, + .table_coerced = nm_platform_route_table_coerce(RT_TABLE_MAIN), + .scope_inv = nm_platform_route_scope_inv(RT_SCOPE_UNIVERSE), + .type_coerced = nm_platform_route_type_coerce(RTN_UNICAST), + .pref_src = self->priv.p->clat_address_4->addr, + .via = best_v6_gateway, + .metric = route4_metric, + .mtu = mtu, + }; + nm_platform_ip_route_normalize(AF_INET, &rx.rx); + if (!nm_l3_config_data_lookup_route(l3cd, AF_INET, &rx.rx)) { + nm_l3_config_data_add_route_4(l3cd, &rx.r4); + } + + _LOGT("clat: route %s", nm_platform_ip4_route_to_string(&rx.r4, buf, sizeof(buf))); + + nm_l3_config_data_add_address_4(l3cd, &addr); + } else { + _LOGW("Couldn't find a good ipv6 route! Unable to set up CLAT!"); + } + } + } +#endif /* HAVE_CLAT */ +} + static void _l3cfg_update_combined_config(NML3Cfg *self, gboolean to_commit, @@ -4155,13 +4371,6 @@ _l3cfg_update_combined_config(NML3Cfg *self, guint i; gboolean merged_changed = FALSE; gboolean commited_changed = FALSE; -#if HAVE_CLAT - struct in6_addr pref64; - guint32 pref64_plen; - gboolean clat_enabled = FALSE; - const NMPlatformIP4Route *ip4_route; - NMDedupMultiIter iter; -#endif nm_assert(NM_IS_L3CFG(self)); nm_assert(!out_old || !*out_old); @@ -4259,211 +4468,7 @@ _l3cfg_update_combined_config(NML3Cfg *self, &hook_data); } -#if HAVE_CLAT - switch (nm_l3_config_data_get_clat(l3cd)) { - case NM_SETTING_IP4_CONFIG_CLAT_FORCE: - clat_enabled = TRUE; - break; - case NM_SETTING_IP4_CONFIG_CLAT_NO: - clat_enabled = FALSE; - break; - case NM_SETTING_IP4_CONFIG_CLAT_AUTO: - clat_enabled = TRUE; - /* disable if there is a native IPv4 gateway */ - nm_l3_config_data_iter_ip4_route_for_each (&iter, l3cd, &ip4_route) { - if (ip4_route->network == INADDR_ANY && ip4_route->plen == 0 - && ip4_route->gateway != INADDR_ANY) - clat_enabled = FALSE; - break; - } - break; - case NM_SETTING_IP4_CONFIG_CLAT_DEFAULT: - nm_assert_not_reached(); - clat_enabled = TRUE; - break; - } - - if (clat_enabled && nm_l3_config_data_get_pref64_valid(l3cd)) { - NMPlatformIPXRoute rx; - NMIPAddrTyped best_v6_gateway; - const NMPlatformIP6Route *best_v6_route; - const NMPlatformIP6Address *ip6_entry; - struct in6_addr ip6; - const char *network_id; - char buf[512]; - guint32 route4_metric = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4; - - /* If we have a valid NAT64 prefix, configure in kernel: - * - * - a CLAT IPv4 address (192.0.0.x) - * - a IPv4 default route via the best IPv6 gateway - * - * We also set clat_address_6 as an additional /64 IPv6 address - * determined according to https://www.rfc-editor.org/rfc/rfc6877#section-6.3 . - * This address is used for sending and receiving translated packets, - * but is not configured in kernel to avoid that it gets used by applications. - * Later in _l3_commit_pref64() we use IPV6_JOIN_ANYCAST to let the kernel - * handle ND for the address. - */ - - nm_l3_config_data_get_pref64(l3cd, &pref64, &pref64_plen); - network_id = nm_l3_config_data_get_network_id(l3cd); - - if (!self->priv.p->clat_address_6_valid && network_id) { - nm_l3_config_data_iter_ip6_address_for_each (&iter, l3cd, &ip6_entry) { - if (ip6_entry->addr_source == NM_IP_CONFIG_SOURCE_NDISC - && ip6_entry->plen == 64) { - ip6 = ip6_entry->address; - - nm_utils_ipv6_addr_set_stable_privacy(NM_UTILS_STABLE_TYPE_CLAT, - &ip6, - nm_l3cfg_get_ifname(self, TRUE), - network_id, - 0); - self->priv.p->clat_address_6 = (NMPlatformIP6Address) { - .ifindex = self->priv.ifindex, - .address = ip6, - .peer_address = ip6, - .addr_source = NM_IP_CONFIG_SOURCE_CLAT, - .plen = ip6_entry->plen, - }; - - _LOGT("clat: using IPv6 address %s", nm_inet6_ntop(&ip6, buf)); - - self->priv.p->clat_address_6_valid = TRUE; - break; - } - } - } - - /* Don't get a v4 address if we have no v6 address (otherwise, we could - potentially create broken v4 connectivity) */ - if (!self->priv.p->clat_address_6_valid) { - _LOGW("CLAT is currently only supported when SLAAC is in use."); - /* Deallocate the v4 address unless it's the committed one */ - if (self->priv.p->clat_address_4 != self->priv.p->clat_address_4_committed) { - nm_clear_pointer(&self->priv.p->clat_address_4, - nm_netns_ip_reservation_release); - } else { - self->priv.p->clat_address_4 = NULL; - } - } else if (!self->priv.p->clat_address_4) { - /* We need a v4 /32 */ - self->priv.p->clat_address_4 = - nm_netns_ip_reservation_get(self->priv.netns, - NM_NETNS_IP_RESERVATION_TYPE_CLAT); - } - - { - const NMPlatformIP4Route *r4; - guint32 metric = 0; - guint32 penalty = 0; - - /* Find the IPv4 metric for the CLAT default route. - * If there is another non-CLAT default route on the device, use the - * same metric + 1, so that native connectivity is always preferred. - * Otherwise, use the metric from the connection profile. - */ - - r4 = NMP_OBJECT_CAST_IP4_ROUTE( - nm_l3_config_data_get_best_default_route(l3cd, AF_INET)); - - if (r4) { - route4_metric = nm_add_clamped_u32(r4->metric, 1u); - } else { - for (i = 0; i < l3_config_datas_len; i++) { - const L3ConfigData *l3cd_data = l3_config_datas_arr[i]; - - if (l3cd_data->default_route_metric_4 - != NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4) { - metric = l3cd_data->default_route_metric_4; - } - if (l3cd_data->default_route_penalty_4 != 0) { - penalty = l3cd_data->default_route_penalty_4; - } - } - route4_metric = nm_add_clamped_u32(metric, penalty); - } - } - - if (self->priv.p->clat_address_4) { - best_v6_route = NMP_OBJECT_CAST_IP6_ROUTE( - nm_l3_config_data_get_direct_route_for_host(l3cd, AF_INET6, &pref64)); - if (!best_v6_route) { - best_v6_route = NMP_OBJECT_CAST_IP6_ROUTE( - nm_l3_config_data_get_best_default_route(l3cd, AF_INET6)); - } - if (best_v6_route) { - NMPlatformIP4Address addr = { - .ifindex = self->priv.ifindex, - .address = self->priv.p->clat_address_4->addr, - .peer_address = self->priv.p->clat_address_4->addr, - .addr_source = NM_IP_CONFIG_SOURCE_CLAT, - .plen = 32, - }; - const NMPlatformLink *pllink; - guint mtu = 0; - guint val = 0; - - best_v6_gateway.addr_family = AF_INET6; - best_v6_gateway.addr.addr6 = best_v6_route->gateway; - - /* Determine the IPv6 MTU of the interface. Unfortunately, - * the logic to set the MTU is in NMDevice and here we need - * some duplication to find the actual value. - * TODO: move the MTU handling into l3cfg. */ - - /* Get the link MTU */ - pllink = nm_l3cfg_get_pllink(self, TRUE); - if (pllink) - mtu = pllink->mtu; - if (mtu == 0) - mtu = 1500; - - /* Update it with the IPv6 MTU value from the connection - * or from RA */ - val = nm_l3_config_data_get_ip6_mtu_static(l3cd); - if (val == 0) { - val = nm_l3_config_data_get_ip6_mtu_ra(l3cd); - } - if (val != 0 && val < mtu) { - mtu = val; - } - if (mtu < 1280) - mtu = 1280; - - /* Leave 20 additional bytes for the ipv4 -> ipv6 header translation, - * plus 8 for a potential fragmentation extension header */ - mtu -= 28; - - rx.r4 = (NMPlatformIP4Route) { - .ifindex = self->priv.ifindex, - .rt_source = NM_IP_CONFIG_SOURCE_CLAT, - .network = 0, /* default route */ - .plen = 0, - .table_coerced = nm_platform_route_table_coerce(RT_TABLE_MAIN), - .scope_inv = nm_platform_route_scope_inv(RT_SCOPE_UNIVERSE), - .type_coerced = nm_platform_route_type_coerce(RTN_UNICAST), - .pref_src = self->priv.p->clat_address_4->addr, - .via = best_v6_gateway, - .metric = route4_metric, - .mtu = mtu, - }; - nm_platform_ip_route_normalize(AF_INET, &rx.rx); - if (!nm_l3_config_data_lookup_route(l3cd, AF_INET, &rx.rx)) { - nm_l3_config_data_add_route_4(l3cd, &rx.r4); - } - - _LOGT("clat: route %s", - nm_platform_ip4_route_to_string(&rx.r4, buf, sizeof(buf))); - - nm_l3_config_data_add_address_4(l3cd, &addr); - } else { - _LOGW("Couldn't find a good ipv6 route! Unable to set up CLAT!"); - } - } - } -#endif /* HAVE_CLAT */ + _l3cfg_update_clat_config(self, l3cd, l3_config_datas_arr, l3_config_datas_len); if (self->priv.ifindex == NM_LOOPBACK_IFINDEX) { NMPlatformIPXAddress ax; From de42acd3fd51e94064ab0eea7514f18cfae9eb0d Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 28 Jan 2026 09:34:35 +0100 Subject: [PATCH 140/153] core: print whether CLAT support is compiled in At startup, print whether CLAT support is compiled in; it is useful when debugging. --- src/core/main.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/core/main.c b/src/core/main.c index 8d519c00f0..911aeba9a3 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -461,14 +461,8 @@ main(int argc, char *argv[]) /* the first access to State causes the file to be read (and possibly print a warning) */ nm_config_state_get(config); - nm_log_dbg(LOGD_CORE, - "WEXT support is %s", -#if HAVE_WEXT - "enabled" -#else - "disabled" -#endif - ); + nm_log_dbg(LOGD_CORE, "WEXT support is %s", HAVE_WEXT ? "enabled" : "disabled"); + nm_log_dbg(LOGD_CORE, "CLAT support is %s", HAVE_CLAT ? "enabled" : "disabled"); if (!_dbus_manager_init(config)) goto done_no_manager; From aeeb52ab668b92251f897a8cb3d14a86bdb55b96 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 28 Jan 2026 09:56:10 +0100 Subject: [PATCH 141/153] core: log message if CLAT is enabled but not supported If CLAT is not supported (disabled at build time) and the configuration enables it, log a message. --- src/core/devices/nm-device.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index a00f04b579..9ca6651bde 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -1525,7 +1525,7 @@ _prop_get_connection_dnssec(NMDevice *self, NMConnection *connection) } static NMSettingIp4ConfigClat -_prop_get_ipv4_clat(NMDevice *self) +_prop_get_ipv4_clat(NMDevice *self, gboolean do_log) { NMSettingIP4Config *s_ip4 = NULL; NMSettingIp4ConfigClat clat; @@ -1555,6 +1555,16 @@ _prop_get_ipv4_clat(NMDevice *self) clat = NM_SETTING_IP4_CONFIG_CLAT_NO; } + if (!HAVE_CLAT + && NM_IN_SET(clat, NM_SETTING_IP4_CONFIG_CLAT_AUTO, NM_SETTING_IP4_CONFIG_CLAT_FORCE)) { + if (do_log) { + _NMLOG(clat == NM_SETTING_IP4_CONFIG_CLAT_FORCE ? LOGL_WARN : LOGL_TRACE, + LOGD_DEVICE, + "CLAT will not work because it is disabled at build time"); + } + clat = NM_SETTING_IP4_CONFIG_CLAT_NO; + } + return clat; } @@ -1988,7 +1998,7 @@ _prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self, gboolean *out_is_auto) if (nm_streq0(nm_device_get_effective_ip_config_method(self, AF_INET6), NM_SETTING_IP6_CONFIG_METHOD_AUTO) - && _prop_get_ipv4_clat(self) != NM_SETTING_IP4_CONFIG_CLAT_NO) { + && _prop_get_ipv4_clat(self, FALSE) != NM_SETTING_IP4_CONFIG_CLAT_NO) { return TRUE; } @@ -11521,7 +11531,7 @@ _dev_ipmanual_start(NMDevice *self) nm_l3_config_data_set_routed_dns(l3cd, AF_INET6, TRUE); } - nm_l3_config_data_set_clat(l3cd, _prop_get_ipv4_clat(self)); + nm_l3_config_data_set_clat(l3cd, _prop_get_ipv4_clat(self, TRUE)); } if (!l3cd) { From fbfb5afec0385fcec9d14b2d2554e29ce0276d47 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 28 Jan 2026 09:58:28 +0100 Subject: [PATCH 142/153] build: move the CLAT line in the meson summary Move the CLAT line from the Miscellaneous section to the Features one. --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 39fb1aed9a..507462b205 100644 --- a/meson.build +++ b/meson.build @@ -1153,6 +1153,7 @@ output += ' ofono: ' + enable_ofono.to_string() + '\n' output += ' concheck: ' + enable_concheck.to_string() + '\n' output += ' libteamdctl: ' + enable_teamdctl.to_string() + '\n' output += ' ovs: ' + enable_ovs.to_string() + '\n' +output += ' clat: ' + enable_clat.to_string() + '\n' output += ' nmcli: ' + enable_nmcli.to_string() + '\n' output += ' nmtui: ' + enable_nmtui.to_string() + '\n' output += ' nm-cloud-setup: ' + enable_nm_cloud_setup.to_string() + '\n' @@ -1189,6 +1190,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 += ' clat: ' + enable_clat.to_string() + '\n' output += ' readline: ' + with_readline + '\n' message(output) From 6d44237ed30f3add1b38a138aec644bba419a540 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 28 Jan 2026 15:48:54 +0100 Subject: [PATCH 143/153] ndisc: track multiple PREF64 options Previously the NMNDisc instance always used the last received NAT64 prefix. If a network advertises multiple NAT64 prefixes, NetworkManager would constantly flip between them. Change this and keep a list of valid PREF64. Most importantly, stick with the same PREF64 unless a new one appears from a router with higher priority, or the current PREF64 expires. --- src/core/ndisc/nm-lndp-ndisc.c | 30 ++++----- src/core/ndisc/nm-ndisc-private.h | 3 +- src/core/ndisc/nm-ndisc.c | 106 ++++++++++++++++++++++++++++-- src/core/ndisc/nm-ndisc.h | 14 ++-- 4 files changed, 123 insertions(+), 30 deletions(-) diff --git a/src/core/ndisc/nm-lndp-ndisc.c b/src/core/ndisc/nm-lndp-ndisc.c index 69cb733a77..c004e80136 100644 --- a/src/core/ndisc/nm-lndp-ndisc.c +++ b/src/core/ndisc/nm-lndp-ndisc.c @@ -162,7 +162,6 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) int offset; int hop_limit; guint32 val; - gboolean pref64_found = FALSE; /* Router discovery is subject to the following RFC documents: * @@ -404,25 +403,22 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) /* PREF64 */ ndp_msg_opt_for_each_offset (offset, msg, NDP_MSG_OPT_PREF64) { - struct in6_addr pref64_prefix = *ndp_msg_opt_pref64_prefix(msg, offset); - guint8 pref64_length = ndp_msg_opt_pref64_prefix_length(msg, offset); - gint64 expiry_msec = - _nm_ndisc_lifetime_to_expiry(now_msec, ndp_msg_opt_pref64_lifetime(msg, offset)); + NMNDiscPref64 pref64; + + pref64 = (NMNDiscPref64) { + .prefix = *ndp_msg_opt_pref64_prefix(msg, offset), + .plen = ndp_msg_opt_pref64_prefix_length(msg, offset), + .gateway = gateway.address, + .gateway_preference = gateway.preference, + .expiry_msec = + _nm_ndisc_lifetime_to_expiry(now_msec, ndp_msg_opt_pref64_lifetime(msg, offset)), + .gateway_expiry_msec = gateway.expiry_msec, + }; /* libndp should only return lengths defined in RFC 8781 */ - nm_assert(NM_IN_SET(pref64_length, 96, 64, 56, 48, 40, 32)); + nm_assert(NM_IN_SET(pref64.plen, 96, 64, 56, 48, 40, 32)); - /* Newer RA has more up to date information, prefer it: */ - if (!pref64_found) { - pref64_found = TRUE; - rdata->public.pref64.expiry_msec = 0; - } - - if (expiry_msec >= rdata->public.pref64.expiry_msec) { - rdata->public.pref64.network = pref64_prefix; - rdata->public.pref64.expiry_msec = expiry_msec; - rdata->public.pref64.plen = pref64_length; - rdata->public.pref64.valid = TRUE; + if (nm_ndisc_add_pref64(ndisc, &pref64, now_msec)) { changed |= NM_NDISC_CONFIG_PREF64; } } diff --git a/src/core/ndisc/nm-ndisc-private.h b/src/core/ndisc/nm-ndisc-private.h index 697700eb26..90ec032d77 100644 --- a/src/core/ndisc/nm-ndisc-private.h +++ b/src/core/ndisc/nm-ndisc-private.h @@ -14,7 +14,7 @@ struct _NMNDiscDataInternal { NMNDiscData public; GArray *gateways; GArray *addresses; - GArray *clat_addresses; + GArray *pref64; GArray *routes; GArray *dns_servers; GArray *dns_domains; @@ -29,6 +29,7 @@ gboolean nm_ndisc_add_gateway(NMNDisc *ndisc, const NMNDiscGateway *new_item, gi gboolean nm_ndisc_complete_and_add_address(NMNDisc *ndisc, const NMNDiscAddress *new_item, gint64 now_msec); gboolean nm_ndisc_add_route(NMNDisc *ndisc, const NMNDiscRoute *new_item, gint64 now_msec); +gboolean nm_ndisc_add_pref64(NMNDisc *ndisc, const NMNDiscPref64 *new_item, gint64 now_msec); gboolean nm_ndisc_add_dns_server(NMNDisc *ndisc, const NMNDiscDNSServer *new_item, gint64 now_msec); gboolean nm_ndisc_add_dns_domain(NMNDisc *ndisc, const NMNDiscDNSDomain *new_item, gint64 now_msec); diff --git a/src/core/ndisc/nm-ndisc.c b/src/core/ndisc/nm-ndisc.c index bbd2a14f9a..ed34f088a0 100644 --- a/src/core/ndisc/nm-ndisc.c +++ b/src/core/ndisc/nm-ndisc.c @@ -34,6 +34,7 @@ #define _SIZE_MAX_ROUTES 1000u #define _SIZE_MAX_DNS_SERVERS 64u #define _SIZE_MAX_DNS_DOMAINS 64u +#define _SIZE_MAX_PREF64 8u /*****************************************************************************/ @@ -212,8 +213,8 @@ nm_ndisc_data_to_l3cd(NMDedupMultiIndex *multi_idx, for (i = 0; i < rdata->dns_domains_n; i++) nm_l3_config_data_add_search(l3cd, AF_INET6, rdata->dns_domains[i].domain); - if (rdata->pref64.valid) { - nm_l3_config_data_set_pref64(l3cd, rdata->pref64.network, rdata->pref64.plen); + if (rdata->pref64_n > 0) { + nm_l3_config_data_set_pref64(l3cd, rdata->pref64[0].prefix, rdata->pref64[0].plen); } else { nm_l3_config_data_set_pref64_valid(l3cd, FALSE); } @@ -425,6 +426,7 @@ _data_complete(NMNDiscDataInternal *data) _SET(data, gateways); _SET(data, addresses); _SET(data, routes); + _SET(data, pref64); _SET(data, dns_servers); _SET(data, dns_domains); #undef _SET @@ -770,6 +772,59 @@ nm_ndisc_add_route(NMNDisc *ndisc, const NMNDiscRoute *new_item, gint64 now_msec return TRUE; } +gboolean +nm_ndisc_add_pref64(NMNDisc *ndisc, const NMNDiscPref64 *new_item, gint64 now_msec) +{ + NMNDiscDataInternal *rdata = &NM_NDISC_GET_PRIVATE(ndisc)->rdata; + guint i; + guint insert_idx = G_MAXUINT; + + for (i = 0; i < rdata->pref64->len;) { + NMNDiscPref64 *item = &nm_g_array_index(rdata->pref64, NMNDiscPref64, i); + + if (item->plen == new_item->plen && IN6_ARE_ADDR_EQUAL(&item->prefix, &new_item->prefix) + && IN6_ARE_ADDR_EQUAL(&item->gateway, &new_item->gateway)) { + if (new_item->expiry_msec <= now_msec) { + g_array_remove_index(rdata->pref64, i); + return TRUE; + } + + if (item->gateway_preference != new_item->gateway_preference) { + g_array_remove_index(rdata->pref64, i); + continue; + } + + item->gateway_expiry_msec = new_item->gateway_expiry_msec; + + if (item->expiry_msec == new_item->expiry_msec) + return FALSE; + + item->expiry_msec = new_item->expiry_msec; + return TRUE; + } + + /* Put before less preferable gateways. */ + if (_preference_to_priority(item->gateway_preference) + < _preference_to_priority(new_item->gateway_preference) + && insert_idx == G_MAXUINT) + insert_idx = i; + + i++; + } + + if (rdata->pref64->len >= _SIZE_MAX_PREF64) + return FALSE; + + if (new_item->expiry_msec <= now_msec) + return FALSE; + + g_array_insert_val(rdata->pref64, + insert_idx == G_MAXUINT ? rdata->pref64->len : insert_idx, + *new_item); + + return TRUE; +} + gboolean nm_ndisc_add_dns_server(NMNDisc *ndisc, const NMNDiscDNSServer *new_item, gint64 now_msec) { @@ -1410,6 +1465,17 @@ _config_changed_log(NMNDisc *ndisc, NMNDiscConfigMap changed) nm_icmpv6_router_pref_to_string(route->preference, str_pref, sizeof(str_pref)), get_exp(str_exp, now_msec, route)); } + for (i = 0; i < rdata->pref64->len; i++) { + const NMNDiscPref64 *pref64 = &nm_g_array_index(rdata->pref64, NMNDiscPref64, i); + char addrstr2[NM_INET_ADDRSTRLEN]; + + _LOGD(" pref64 %s/%u via %s exp %s", + nm_inet6_ntop(&pref64->prefix, addrstr), + pref64->plen, + nm_inet6_ntop(&pref64->gateway, addrstr2), + get_exp(str_exp, now_msec, pref64)); + } + for (i = 0; i < rdata->dns_servers->len; i++) { const NMNDiscDNSServer *dns_server = &nm_g_array_index(rdata->dns_servers, NMNDiscDNSServer, i); @@ -1538,13 +1604,39 @@ static void clean_pref64(NMNDisc *ndisc, gint64 now_msec, NMNDiscConfigMap *changed, gint64 *next_msec) { NMNDiscDataInternal *rdata = &NM_NDISC_GET_PRIVATE(ndisc)->rdata; + NMNDiscPref64 *arr; + guint i; + guint j; - if (!rdata->public.pref64.valid) + if (rdata->pref64->len == 0) return; - if (!expiry_next(now_msec, rdata->public.pref64.expiry_msec, next_msec)) { - rdata->public.pref64.valid = FALSE; - *changed |= NM_NDISC_CONFIG_PREF64; + + arr = &nm_g_array_first(rdata->pref64, NMNDiscPref64); + + for (i = 0, j = 0; i < rdata->pref64->len; i++) { + if (!expiry_next(now_msec, arr[i].expiry_msec, next_msec) + || !expiry_next(now_msec, + arr[i].gateway_expiry_msec, + next_msec)) { /* no gateway no party */ + if (i == 0) { + /* Emit the changed signal only when the first PREF64 expires, + * because only the first item is exported into the l3cd. Changes + * in other PREF64s are not relevant. */ + *changed |= NM_NDISC_CONFIG_PREF64; + } + continue; + } + + if (i != j) + arr[j] = arr[i]; + j++; } + + if (i != j) { + g_array_set_size(rdata->pref64, j); + } + + _array_set_size_max(rdata->pref64, _SIZE_MAX_PREF64); } static void @@ -1943,6 +2035,7 @@ nm_ndisc_init(NMNDisc *ndisc) rdata->gateways = g_array_new(FALSE, FALSE, sizeof(NMNDiscGateway)); rdata->addresses = g_array_new(FALSE, FALSE, sizeof(NMNDiscAddress)); rdata->routes = g_array_new(FALSE, FALSE, sizeof(NMNDiscRoute)); + rdata->pref64 = g_array_new(FALSE, FALSE, sizeof(NMNDiscPref64)); rdata->dns_servers = g_array_new(FALSE, FALSE, sizeof(NMNDiscDNSServer)); rdata->dns_domains = g_array_new(FALSE, FALSE, sizeof(NMNDiscDNSDomain)); g_array_set_clear_func(rdata->dns_domains, dns_domain_free); @@ -1975,6 +2068,7 @@ finalize(GObject *object) g_array_unref(rdata->gateways); g_array_unref(rdata->addresses); g_array_unref(rdata->routes); + g_array_unref(rdata->pref64); g_array_unref(rdata->dns_servers); g_array_unref(rdata->dns_domains); diff --git a/src/core/ndisc/nm-ndisc.h b/src/core/ndisc/nm-ndisc.h index 416c319117..5b2efde569 100644 --- a/src/core/ndisc/nm-ndisc.h +++ b/src/core/ndisc/nm-ndisc.h @@ -120,10 +120,12 @@ typedef struct _NMNDiscRoute { } NMNDiscRoute; typedef struct _NMNDiscPref64 { - struct in6_addr network; - gint64 expiry_msec; - guint8 plen; - bool valid : 1; + struct in6_addr prefix; + struct in6_addr gateway; + gint64 expiry_msec; + gint64 gateway_expiry_msec; + NMIcmpv6RouterPref gateway_preference; + guint8 plen; } NMNDiscPref64; typedef struct { @@ -196,16 +198,16 @@ typedef struct { guint gateways_n; guint addresses_n; guint routes_n; + guint pref64_n; guint dns_servers_n; guint dns_domains_n; const NMNDiscGateway *gateways; const NMNDiscAddress *addresses; const NMNDiscRoute *routes; + const NMNDiscPref64 *pref64; const NMNDiscDNSServer *dns_servers; const NMNDiscDNSDomain *dns_domains; - - NMNDiscPref64 pref64; } NMNDiscData; /** From 5c041cb891997171a5385777e35a7eb92142798a Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Wed, 28 Jan 2026 19:42:26 +0100 Subject: [PATCH 144/153] l3cfg: send DAD solicitation for the IPv6 CLAT address As per draft-ietf-v6ops-claton-14, hosts must perform duplicate addresses detection (DAD) on the generated CLAT IPv6 address. This is necessary not only to avoid address collisions but also because some networks drop traffic from addresses that have not done DAD. Since doing true DAD adds complexity, adopt the same approach as Android: start DAD by sending a neighbor solicitation and don't wait for any reply. This avoids the problem with dropped traffic; it doesn't help with collisions, but collisions are anyway very unlikely because the interface identifier is a random 64-bit value. https://android.googlesource.com/platform/packages/modules/Connectivity/+/5ae193ae36ec7621a5f7bcf387997c5081e9c239/clatd/main.c#363 --- src/core/nm-core-utils.c | 163 +++++++++++++++++++++++++++++++++++++ src/core/nm-core-utils.h | 4 + src/core/nm-l3cfg.c | 12 +++ src/core/tests/test-core.c | 53 ++++++++++++ 4 files changed, 232 insertions(+) diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 219964f0f6..096ba73e63 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include "libnm-glib-aux/nm-uuid.h" #include "libnm-platform/nmp-base.h" @@ -5295,6 +5297,167 @@ nm_utils_ping_host_finish(GAsyncResult *result, GError **error) /*****************************************************************************/ +/* + * nm_utils_icmp6_checksum: + * @ip6_src: pointer to the IPv6 source address + * @data_len: length of the data + * @data: the data on which to compute the checksum + * + * Computes the ICMP6 checksum over @data (with length @data_len) and the IPv6 + * pseudo-header. @ip6_src points to the source address in the IPv6 header. + */ +uint16_t +nm_utils_icmp6_checksum(const void *ip6_src, size_t data_len, const void *data) +{ + uint32_t sum = 0; + const uint16_t *ptr; + const uint8_t *ptr8; + size_t i; + + /* Pseudo-header: source address */ + ptr = (const uint16_t *) ip6_src; + for (i = 0; i < 8; i++) + sum += *ptr++; + + /* Pseudo-header: destination address */ + for (i = 0; i < 8; i++) + sum += *ptr++; + + /* Pseudo-header: payload length */ + sum += htons(data_len); + + /* Pseudo-header: next header */ + sum += htons(IPPROTO_ICMPV6); + + /* ICMPv6 data */ + ptr = (const uint16_t *) data; + for (i = 0; i < data_len / 2; i++) + sum += ptr[i]; + + /* Handle odd byte */ + if (data_len % 2) { + ptr8 = &((const uint8_t *) data)[data_len - 1]; + sum += htons((guint16) (*ptr8) << 8); + } + + /* Fold 32-bit sum to 16 bits */ + while (sum >> 16) + sum = (sum & 0xffff) + (sum >> 16); + + return (uint16_t) ~sum; +} + +/* + * nm_utils_ipv6_dad_send: + * @addr: the target IPv6 address + * @ifindex: the interface index + * + * Send an IPv6 Duplicate Address Detection (DAD) Neighbor Solicitation + * for the given address. + * + * Returns: %TRUE if the packet was sent successfully, %FALSE on error + */ +gboolean +nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex) +{ + /* DAD packet: IPv6 header + ICMPv6 NS + nonce option (RFC 3971) */ + struct _nm_packed { + struct ip6_hdr ip6h; + struct nd_neighbor_solicit ns; + guint8 ns_opt_nr; + guint8 ns_opt_len; + guint8 ns_opt_nonce[6]; + } dad_pkt; + nm_auto_close int fd = -1; + int errsv; + char sbuf[NM_INET_ADDRSTRLEN]; + + nm_assert(addr); + nm_assert(ifindex > 0); + + /* IPv6 header */ + dad_pkt.ip6h = (struct ip6_hdr) { + .ip6_flow = htonl(6 << 28), /* version 6, tclass 0, flowlabel 0 */ + .ip6_plen = htons(sizeof(dad_pkt) - sizeof(struct ip6_hdr)), + .ip6_nxt = IPPROTO_ICMPV6, + .ip6_hlim = 255, + .ip6_src = IN6ADDR_ANY_INIT, + .ip6_dst.s6_addr = {0xff, + 0x02, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x01, + 0xff, + addr->s6_addr[13], + addr->s6_addr[14], + addr->s6_addr[15]}, + }; + + /* ICMPv6 Neighbor Solicitation */ + dad_pkt.ns = (struct nd_neighbor_solicit) { + .nd_ns_type = ND_NEIGHBOR_SOLICIT, + .nd_ns_target = *addr, + }; + + /* Nonce option (RFC 3971) */ + dad_pkt.ns_opt_nr = 14; + dad_pkt.ns_opt_len = 1; /* in units of 8 bytes */ + nm_random_get_bytes(dad_pkt.ns_opt_nonce, sizeof(dad_pkt.ns_opt_nonce)); + + /* Compute the ICMPv6 checksum */ + dad_pkt.ns.nd_ns_cksum = nm_utils_icmp6_checksum(&dad_pkt.ip6h.ip6_src, + sizeof(dad_pkt) - sizeof(struct ip6_hdr), + &dad_pkt.ns); + + /* We need a ETH_P_IPV6 socket because we need to use a zero IPv6 source address */ + fd = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC, htons(ETH_P_IPV6)); + if (fd < 0) { + errsv = errno; + nm_log_warn(LOGD_CORE, + "ipv6-dad: failed to create socket for %s: %s", + nm_inet6_ntop(addr, sbuf), + nm_strerror_native(errsv)); + return FALSE; + } + + /* Build link-layer destination address for solicited-node multicast */ + { + struct sockaddr_ll dst_ll = { + .sll_family = AF_PACKET, + .sll_protocol = htons(ETH_P_IPV6), + .sll_ifindex = ifindex, + .sll_halen = ETH_ALEN, + .sll_addr = {0x33, 0x33, 0xff, addr->s6_addr[13], addr->s6_addr[14], addr->s6_addr[15]}, + }; + + if (sendto(fd, &dad_pkt, sizeof(dad_pkt), 0, (struct sockaddr *) &dst_ll, sizeof(dst_ll)) + < 0) { + errsv = errno; + nm_log_warn(LOGD_CORE, + "ipv6-dad: failed to send DAD NS for %s: %s", + nm_inet6_ntop(addr, sbuf), + nm_strerror_native(errsv)); + return FALSE; + } + } + + nm_log_dbg(LOGD_CORE, + "ipv6-dad: sent DAD NS for %s on ifindex %d", + nm_inet6_ntop(addr, sbuf), + ifindex); + + return TRUE; +} + +/*****************************************************************************/ + typedef struct { GPid pid; GTask *task; diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index b288ed2b6e..b98b30a2e8 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -532,4 +532,8 @@ void nm_utils_ping_host(NMIPAddrTyped address, gboolean nm_utils_ping_host_finish(GAsyncResult *result, GError **error); +uint16_t nm_utils_icmp6_checksum(const void *ip6_src, size_t data_len, const void *data); + +gboolean nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex); + #endif /* __NM_CORE_UTILS_H__ */ diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 89a2a6090f..3963173745 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -5768,6 +5768,18 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) } if (self->priv.p->clat_address_6_valid) { + /* As per draft-ietf-v6ops-claton-14, hosts must perform duplicate + * addresses detection (DAD) on the generated CLAT IPv6 address. This is + * necessary not only to avoid address collisions but also because some + * networks drop traffic from addresses that have not done DAD. + * Since doing true DAD adds complexity, adopt the same approach as + * Android: start DAD by sending a neighbor solicitation and don't wait + * for any reply. This avoids the problem with dropped traffic; it + * doesn't help with collisions, but collisions are anyway very unlikely + * because the interface identifier is a random 64-bit value. + */ + nm_utils_ipv6_dad_send(&self->priv.p->clat_address_6.address, self->priv.ifindex); + mreq.ipv6mr_multiaddr = self->priv.p->clat_address_6.address; err = setsockopt(self->priv.p->clat_socket, diff --git a/src/core/tests/test-core.c b/src/core/tests/test-core.c index e08296c20f..cb09ac3862 100644 --- a/src/core/tests/test-core.c +++ b/src/core/tests/test-core.c @@ -7,6 +7,7 @@ #include #include +#include /* need math.h for isinf() and INFINITY. No need to link with -lm */ #include @@ -2770,6 +2771,56 @@ test_nm_firewall_nft_stdio_mlag(void) "nm-mlag-bond0\012delete table netdev nm-mlag-bond0\012"); } +static void +test_icmp6_checksum(void) +{ + struct ip6_hdr ip6h = {}; + guint8 *data; + guint16 c; + + ip6h.ip6_src = NM_IN6ADDR_INIT(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + ip6h.ip6_dst = NM_IN6ADDR_INIT(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + data = (guint8[]) {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + c = nm_utils_icmp6_checksum(&ip6h.ip6_src, 12, data); + g_assert_cmpint(c, ==, htons(0xffb9)); + + ip6h.ip6_src = NM_IN6ADDR_INIT(0xfe, + 0x80, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x60, + 0x8c, + 0xaf, + 0xf6, + 0x9b, + 0xe4, + 0x1a); + ip6h.ip6_dst = NM_IN6ADDR_INIT(0x20, + 0x02, + 0xaa, + 0xaa, + 0x00, + 0x00, + 0x00, + 0x00, + 0x64, + 0xd4, + 0x29, + 0x32, + 0x35, + 0x85, + 0x7c, + 0x89); + data = (guint8[]) {0xdc, 0x74, 0x1a, 0xcc, 0xd3, 0x8e, 0xca, 0x34}; + c = nm_utils_icmp6_checksum(&ip6h.ip6_src, 8, data); + g_assert_cmpint(c, ==, htons(0x39af)); +} + /*****************************************************************************/ NMTST_DEFINE(); @@ -2848,5 +2899,7 @@ main(int argc, char **argv) g_test_add_func("/core/test_nm_firewall_nft_stdio_mlag", test_nm_firewall_nft_stdio_mlag); + g_test_add_func("/core/general/test_icmp6_checksum", test_icmp6_checksum); + return g_test_run(); } From 72cb5839fc8a0f7ac6963e3e91860014b0ab7f72 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 29 Jan 2026 10:26:32 +0100 Subject: [PATCH 145/153] core: l3cd: store the CLAT state In the l3cd we already stored the CLAT administrative state (whether we want to enable it or not) and the selected PREF64. Also store the other current CLAT parameters, so that we can export them to clients via D-Bus. --- src/core/nm-l3-config-data.c | 72 +++++++++++++++++++++++++++++++++++- src/core/nm-l3-config-data.h | 13 +++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 8d1d6ec926..b2996e1c52 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -125,8 +125,18 @@ struct _NML3ConfigData { NMSettingConnectionDnsOverTls dns_over_tls; NMSettingConnectionDnssec dnssec; NMUtilsIPv6IfaceId ip6_token; - NMSettingIp4ConfigClat clat; NMRefString *network_id; + NMSettingIp4ConfigClat clat; /* this indicates the 'administrative' CLAT state, i.e. whether + * CLAT will be started once we receive a PREF64 */ + + /* The runtime CLAT state */ + struct { + struct in6_addr ip6; + struct in6_addr pref64; + in_addr_t ip4; + guint8 pref64_plen; + bool enabled; + } clat_state; NML3ConfigDatFlags flags; @@ -535,6 +545,14 @@ nm_l3_config_data_log(const NML3ConfigData *self, _L("clat: auto"); else if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_FORCE) _L("clat: force"); + + if (self->clat_state.enabled) { + _L("clat-state: ip4=%s/32, pref64=%s/%u, ip6=%s/64", + nm_inet4_ntop(self->clat_state.ip4, sbuf + NM_INET_ADDRSTRLEN), + nm_inet6_ntop(&self->clat_state.pref64, sbuf), + self->clat_state.pref64_plen, + nm_inet6_ntop(&self->clat_state.ip6, sbuf_addr)); + } } if (!IS_IPv4 && self->pref64_valid) { @@ -2047,6 +2065,46 @@ nm_l3_config_data_get_clat(const NML3ConfigData *self) return self->clat; } +gboolean +nm_l3_config_data_get_clat_state(const NML3ConfigData *self, + struct in6_addr *out_ip6, + struct in6_addr *out_pref64, + guint8 *out_pref64_plen, + in_addr_t *out_ip4) +{ + if (!self || !self->clat_state.enabled) + return FALSE; + NM_SET_OUT(out_ip6, self->clat_state.ip6); + NM_SET_OUT(out_pref64, self->clat_state.pref64); + NM_SET_OUT(out_pref64_plen, self->clat_state.pref64_plen); + NM_SET_OUT(out_ip4, self->clat_state.ip4); + return TRUE; +} + +void +nm_l3_config_data_set_clat_state(NML3ConfigData *self, + gboolean enabled, + const struct in6_addr *ip6, + const struct in6_addr *pref64, + guint8 pref64_plen, + in_addr_t ip4) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); + + self->clat_state.enabled = enabled; + if (enabled) { + self->clat_state.ip6 = *ip6; + self->clat_state.pref64 = *pref64; + self->clat_state.pref64_plen = pref64_plen; + self->clat_state.ip4 = ip4; + } else { + self->clat_state.ip6 = in6addr_any; + self->clat_state.pref64 = in6addr_any; + self->clat_state.pref64_plen = 0; + self->clat_state.ip4 = 0; + } +} + gboolean nm_l3_config_data_set_pref64_valid(NML3ConfigData *self, gboolean val) { @@ -2650,6 +2708,14 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a, NM_CMP_DIRECT_UNSAFE(a->clat, b->clat); + NM_CMP_DIRECT(!!a->clat_state.enabled, !!b->clat_state.enabled); + if (a->clat_state.enabled) { + NM_CMP_DIRECT_IN6ADDR(&a->clat_state.ip6, &b->clat_state.ip6); + NM_CMP_DIRECT_IN6ADDR(&a->clat_state.pref64, &b->clat_state.pref64); + NM_CMP_DIRECT(a->clat_state.pref64_plen, b->clat_state.pref64_plen); + NM_CMP_DIRECT(a->clat_state.ip4, b->clat_state.ip4); + } + NM_CMP_DIRECT(!!a->pref64_valid, !!b->pref64_valid); if (a->pref64_valid) { NM_CMP_DIRECT(a->pref64_plen, b->pref64_plen); @@ -3735,6 +3801,10 @@ nm_l3_config_data_merge(NML3ConfigData *self, self->clat = src->clat; } + if (!self->clat_state.enabled && src->clat_state.enabled) { + self->clat_state = src->clat_state; + } + if (src->pref64_valid) { self->pref64_prefix = src->pref64_prefix; self->pref64_plen = src->pref64_plen; diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index 5fbc6c7b03..cc340f9d3d 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -507,6 +507,19 @@ gboolean nm_l3_config_data_set_clat(NML3ConfigData *self, NMSettingIp4ConfigClat NMSettingIp4ConfigClat nm_l3_config_data_get_clat(const NML3ConfigData *self); +gboolean nm_l3_config_data_get_clat_state(const NML3ConfigData *self, + struct in6_addr *out_ip6, + struct in6_addr *out_pref64, + guint8 *out_pref64_plen, + in_addr_t *out_ip4); + +void nm_l3_config_data_set_clat_state(NML3ConfigData *self, + gboolean enabled, + const struct in6_addr *ip6, + const struct in6_addr *pref64, + guint8 pref64_plen, + in_addr_t ip4); + gboolean nm_l3_config_data_set_pref64_valid(NML3ConfigData *self, gboolean val); gboolean nm_l3_config_data_get_pref64_valid(const NML3ConfigData *self); From f00030d79acf8a4a0b491646be814f279bd7ae9c Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 29 Jan 2026 18:58:32 +0100 Subject: [PATCH 146/153] core: export the CLAT state over D-Bus Export over D-Bus the CLAT state: the IPv4 and IPv6 CLAT addresses and the NAT64 prefix. --- src/core/nm-ip-config.c | 111 +++++++++++++++++++++++++++++++++++++++- src/core/nm-l3cfg.c | 11 ++++ 2 files changed, 121 insertions(+), 1 deletion(-) diff --git a/src/core/nm-ip-config.c b/src/core/nm-ip-config.c index 975ae20d45..51a069f801 100644 --- a/src/core/nm-ip-config.c +++ b/src/core/nm-ip-config.c @@ -26,6 +26,7 @@ GType nm_ip6_config_get_type(void); /*****************************************************************************/ #define NM_IP_CONFIG_ADDRESS_DATA "address-data" +#define NM_IP_CONFIG_CLAT_ADDRESS "clat-address" #define NM_IP_CONFIG_DNS_OPTIONS "dns-options" #define NM_IP_CONFIG_DNS_PRIORITY "dns-priority" #define NM_IP_CONFIG_DOMAINS "domains" @@ -41,6 +42,7 @@ NM_GOBJECT_PROPERTIES_DEFINE_FULL(_ip, NMIPConfig, PROP_IP_L3CFG, PROP_IP_ADDRESS_DATA, + PROP_IP_CLAT_ADDRESS, PROP_IP_GATEWAY, PROP_IP_ROUTE_DATA, PROP_IP_DOMAINS, @@ -164,6 +166,8 @@ get_property_ip(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec const int addr_family = nm_ip_config_get_addr_family(self); char **to_free = NULL; char sbuf_addr[NM_INET_ADDRSTRLEN]; + in_addr_t addr4; + struct in6_addr addr6; const char *const *strv; guint len; int v_i; @@ -218,6 +222,20 @@ get_property_ip(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec strv = nm_l3_config_data_get_dns_options(priv->l3cd, addr_family, &len); _value_set_variant_as(value, strv, len); break; + case PROP_IP_CLAT_ADDRESS: + if (nm_l3_config_data_get_clat_state(priv->l3cd, &addr6, NULL, NULL, &addr4)) { + if (addr_family == AF_INET) { + g_value_set_variant(value, + g_variant_new_string(nm_inet_ntop(AF_INET, &addr4, sbuf_addr))); + } else { + g_value_set_variant( + value, + g_variant_new_string(nm_inet_ntop(AF_INET6, &addr6, sbuf_addr))); + } + } else { + g_value_set_variant(value, nm_g_variant_singleton_s_empty()); + } + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -336,6 +354,13 @@ nm_ip_config_class_init(NMIPConfigClass *klass) G_VARIANT_TYPE("aa{sv}"), NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties_ip[PROP_IP_CLAT_ADDRESS] = + g_param_spec_variant(NM_IP_CONFIG_CLAT_ADDRESS, + "", + "", + G_VARIANT_TYPE("s"), + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); obj_properties_ip[PROP_IP_GATEWAY] = g_param_spec_variant(NM_IP_CONFIG_GATEWAY, "", @@ -512,6 +537,9 @@ static const NMDBusInterfaceInfoExtended interface_info_ip4_config = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("AddressData", "aa{sv}", NM_IP_CONFIG_ADDRESS_DATA), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("ClatAddress", + "s", + NM_IP_CONFIG_CLAT_ADDRESS), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Gateway", "s", NM_IP_CONFIG_GATEWAY), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( "Routes", @@ -614,6 +642,7 @@ nm_ip4_config_class_init(NMIP4ConfigClass *klass) /*****************************************************************************/ /* public */ +#define NM_IP6_CONFIG_CLAT_PREF64 "clat-pref64" #define NM_IP6_CONFIG_NAMESERVERS "nameservers" /* deprecated */ @@ -625,6 +654,7 @@ typedef struct _NMIP6ConfigClass NMIP6ConfigClass; NM_GOBJECT_PROPERTIES_DEFINE_FULL(_ip6, NMIP6Config, + PROP_IP6_CLAT_PREF64, PROP_IP6_NAMESERVERS, PROP_IP6_ADDRESSES, PROP_IP6_ROUTES, ); @@ -651,6 +681,12 @@ static const NMDBusInterfaceInfoExtended interface_info_ip6_config = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("AddressData", "aa{sv}", NM_IP_CONFIG_ADDRESS_DATA), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("ClatAddress", + "s", + NM_IP_CONFIG_CLAT_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("ClatPref64", + "s", + NM_IP6_CONFIG_CLAT_PREF64), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Gateway", "s", NM_IP_CONFIG_GATEWAY), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( "Routes", @@ -682,11 +718,24 @@ get_property_ip6(GObject *object, guint prop_id, GValue *value, GParamSpec *pspe guint len; guint i; const char *const *strarr; + guint8 plen; + struct in6_addr addr6; + char sbuf[NM_UTILS_INET_ADDRSTRLEN]; switch (prop_id) { case PROP_IP6_ADDRESSES: g_value_set_variant(value, priv->v_addresses); break; + case PROP_IP6_CLAT_PREF64: + if (nm_l3_config_data_get_clat_state(priv->l3cd, NULL, &addr6, &plen, NULL)) { + nm_inet6_ntop(&addr6, sbuf); + g_value_set_variant(value, + g_variant_new_string( + nm_sprintf_bufa(NM_INET_ADDRSTRLEN + 32, "%s/%u", sbuf, plen))); + } else { + g_value_set_variant(value, nm_g_variant_singleton_s_empty()); + } + break; case PROP_IP6_ROUTES: g_value_set_variant(value, priv->v_routes); break; @@ -740,6 +789,13 @@ nm_ip6_config_class_init(NMIP6ConfigClass *klass) G_VARIANT_TYPE("a(ayuay)"), NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties_ip6[PROP_IP6_CLAT_PREF64] = + g_param_spec_variant(NM_IP6_CONFIG_CLAT_PREF64, + "", + "", + G_VARIANT_TYPE("s"), + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); obj_properties_ip6[PROP_IP6_ROUTES] = g_param_spec_variant(NM_IP6_CONFIG_ROUTES, "", @@ -787,7 +843,7 @@ _handle_l3cd_changed(NMIPConfig *self, const NML3ConfigData *l3cd) const int IS_IPv4 = NM_IS_IPv4(addr_family); NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); nm_auto_unref_l3cd const NML3ConfigData *l3cd_old = NULL; - GParamSpec *changed_params[8]; + GParamSpec *changed_params[10]; guint n_changed_params = 0; const char *const *strarr; const char *const *strarr_old; @@ -840,6 +896,59 @@ _handle_l3cd_changed(NMIPConfig *self, const NML3ConfigData *l3cd) } } + /* CLAT state */ + { + struct in6_addr clat_ip6; + struct in6_addr clat_pref64; + guint8 clat_pref64_plen; + in_addr_t clat_ip4; + gboolean clat_enabled; + struct in6_addr clat_ip6_old; + struct in6_addr clat_pref64_old; + guint8 clat_pref64_plen_old; + in_addr_t clat_ip4_old; + gboolean clat_enabled_old; + gboolean changed; + + clat_enabled_old = nm_l3_config_data_get_clat_state(l3cd_old, + &clat_ip6_old, + &clat_pref64_old, + &clat_pref64_plen_old, + &clat_ip4_old); + clat_enabled = nm_l3_config_data_get_clat_state(priv->l3cd, + &clat_ip6, + &clat_pref64, + &clat_pref64_plen, + &clat_ip4); + + /* CLAT address */ + if (clat_enabled != clat_enabled_old) { + changed = TRUE; + } else if (!clat_enabled) { + changed = FALSE; + } else if (IS_IPv4) { + changed = (clat_ip4 != clat_ip4_old); + } else { + changed = !IN6_ARE_ADDR_EQUAL(&clat_ip6, &clat_ip6_old); + } + if (changed) + changed_params[n_changed_params++] = obj_properties_ip[PROP_IP_CLAT_ADDRESS]; + + /* PREF64 */ + if (!IS_IPv4) { + if (clat_enabled != clat_enabled_old) { + changed = TRUE; + } else if (!clat_enabled) { + changed = FALSE; + } else { + changed = (clat_pref64_plen != clat_pref64_plen_old) + || (!IN6_ARE_ADDR_EQUAL(&clat_pref64, &clat_pref64_old)); + } + if (changed) + changed_params[n_changed_params++] = obj_properties_ip6[PROP_IP6_CLAT_PREF64]; + } + } + _notify_all(self, changed_params, n_changed_params); } diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 3963173745..209ebd9c33 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4351,6 +4351,17 @@ _l3cfg_update_clat_config(NML3Cfg *self, _LOGW("Couldn't find a good ipv6 route! Unable to set up CLAT!"); } } + + if (self->priv.p->clat_address_4 && self->priv.p->clat_address_6_valid) { + nm_l3_config_data_set_clat_state(l3cd, + TRUE, + &self->priv.p->clat_address_6.address, + &pref64, + pref64_plen, + self->priv.p->clat_address_4->addr); + } else { + nm_l3_config_data_set_clat_state(l3cd, FALSE, NULL, NULL, 0, INADDR_ANY); + } } #endif /* HAVE_CLAT */ } From d1598a10ece7ac89bd92eeb1f87204b77602c8e3 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 29 Jan 2026 18:58:39 +0100 Subject: [PATCH 147/153] libnm: support the CLAT state Make available the CLAT state in the NMIPConfig libnm objects. --- src/libnm-client-impl/libnm.ver | 2 + src/libnm-client-impl/nm-ip-config.c | 90 +++++++++++++++++++++++++- src/libnm-client-public/nm-ip-config.h | 10 ++- 3 files changed, 99 insertions(+), 3 deletions(-) diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver index 64e2155d60..5678a90d09 100644 --- a/src/libnm-client-impl/libnm.ver +++ b/src/libnm-client-impl/libnm.ver @@ -2106,6 +2106,8 @@ global: libnm_1_58_0 { global: + nm_ip_config_get_clat_address; + nm_ip_config_get_clat_pref64; nm_setting_ip4_config_clat_get_type; nm_setting_ip4_config_get_clat; nm_utils_wifi_6ghz_freqs; diff --git a/src/libnm-client-impl/nm-ip-config.c b/src/libnm-client-impl/nm-ip-config.c index ef3dcca1a5..40f2f7f0e7 100644 --- a/src/libnm-client-impl/nm-ip-config.c +++ b/src/libnm-client-impl/nm-ip-config.c @@ -26,7 +26,9 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMIPConfig, PROP_NAMESERVERS, PROP_DOMAINS, PROP_SEARCHES, - PROP_WINS_SERVERS, ); + PROP_WINS_SERVERS, + PROP_CLAT_ADDRESS, + PROP_CLAT_PREF64, ); typedef struct _NMIPConfigPrivate { GPtrArray *addresses; @@ -36,6 +38,8 @@ typedef struct _NMIPConfigPrivate { char **searches; char **wins_servers; char *gateway; + char *clat_address; + char *clat_pref64; bool addresses_new_style : 1; bool routes_new_style : 1; @@ -256,6 +260,12 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) case PROP_GATEWAY: g_value_set_string(value, nm_ip_config_get_gateway(self)); break; + case PROP_CLAT_ADDRESS: + g_value_set_string(value, nm_ip_config_get_clat_address(self)); + break; + case PROP_CLAT_PREF64: + g_value_set_string(value, nm_ip_config_get_clat_pref64(self)); + break; case PROP_ADDRESSES: g_value_take_boxed(value, _nm_utils_copy_array(nm_ip_config_get_addresses(self), @@ -307,6 +317,8 @@ finalize(GObject *object) NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(object); g_free(priv->gateway); + g_free(priv->clat_address); + g_free(priv->clat_pref64); g_ptr_array_unref(priv->routes); g_ptr_array_unref(priv->addresses); @@ -333,6 +345,10 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip4config = NML_DBUS_META_IFACE_I "aau", _notify_update_prop_addresses, .obj_property_no_reverse_idx = TRUE), + NML_DBUS_META_PROPERTY_INIT_S("ClatAddress", + PROP_CLAT_ADDRESS, + NMIPConfigPrivate, + clat_address), NML_DBUS_META_PROPERTY_INIT_TODO("DnsOptions", "as"), NML_DBUS_META_PROPERTY_INIT_TODO("DnsPriority", "i"), NML_DBUS_META_PROPERTY_INIT_AS("Domains", PROP_DOMAINS, NMIPConfigPrivate, domains), @@ -381,6 +397,14 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip6config = NML_DBUS_META_IFACE_I "a(ayuay)", _notify_update_prop_addresses, .obj_property_no_reverse_idx = TRUE), + NML_DBUS_META_PROPERTY_INIT_S("ClatAddress", + PROP_CLAT_ADDRESS, + NMIPConfigPrivate, + clat_address), + NML_DBUS_META_PROPERTY_INIT_S("ClatPref64", + PROP_CLAT_PREF64, + NMIPConfigPrivate, + clat_pref64), NML_DBUS_META_PROPERTY_INIT_TODO("DnsOptions", "as"), NML_DBUS_META_PROPERTY_INIT_TODO("DnsPriority", "i"), NML_DBUS_META_PROPERTY_INIT_AS("Domains", PROP_DOMAINS, NMIPConfigPrivate, domains), @@ -436,6 +460,34 @@ nm_ip_config_class_init(NMIPConfigClass *config_class) NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + /** + * NMIPConfig:clat-address: + * + * The IP address used by CLAT. + * + * Since: 1.58 + **/ + obj_properties[PROP_CLAT_ADDRESS] = + g_param_spec_string(NM_IP_CONFIG_CLAT_ADDRESS, + "", + "", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMIPConfig:clat-pref64: + * + * The NAT64 prefix used by CLAT. + * + * Since: 1.58 + **/ + obj_properties[PROP_CLAT_PREF64] = + g_param_spec_string(NM_IP_CONFIG_CLAT_PREF64, + "", + "", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + /** * NMIPConfig:addresses: * @@ -543,6 +595,42 @@ nm_ip_config_get_gateway(NMIPConfig *config) return _nml_coerce_property_str_not_empty(NM_IP_CONFIG_GET_PRIVATE(config)->gateway); } +/** + * nm_ip_config_get_clat_address: + * @config: a #NMIPConfig + * + * Gets the CLAT IP address. + * + * Returns: (transfer none): the CLAT IP address. + * + * Since: 1.58 + **/ +const char * +nm_ip_config_get_clat_address(NMIPConfig *config) +{ + g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); + + return _nml_coerce_property_str_not_empty(NM_IP_CONFIG_GET_PRIVATE(config)->clat_address); +} + +/** + * nm_ip_config_get_clat_pref64: + * @config: a #NMIPConfig + * + * Gets the NAT64 prefix used by CLAT. + * + * Returns: (transfer none): the NAT64 prefix. + * + * Since: 1.58 + **/ +const char * +nm_ip_config_get_clat_pref64(NMIPConfig *config) +{ + g_return_val_if_fail(NM_IS_IP_CONFIG(config), NULL); + + return _nml_coerce_property_str_not_empty(NM_IP_CONFIG_GET_PRIVATE(config)->clat_pref64); +} + /** * nm_ip_config_get_addresses: * @config: a #NMIPConfig diff --git a/src/libnm-client-public/nm-ip-config.h b/src/libnm-client-public/nm-ip-config.h index 9ad15d30dc..56eb29a0f7 100644 --- a/src/libnm-client-public/nm-ip-config.h +++ b/src/libnm-client-public/nm-ip-config.h @@ -38,11 +38,17 @@ typedef struct _NMIPConfigClass NMIPConfigClass; #define NM_IP_CONFIG_DOMAINS "domains" #define NM_IP_CONFIG_SEARCHES "searches" #define NM_IP_CONFIG_WINS_SERVERS "wins-servers" +#define NM_IP_CONFIG_CLAT_ADDRESS "clat-address" +#define NM_IP_CONFIG_CLAT_PREF64 "clat-pref64" GType nm_ip_config_get_type(void); -int nm_ip_config_get_family(NMIPConfig *config); -const char *nm_ip_config_get_gateway(NMIPConfig *config); +int nm_ip_config_get_family(NMIPConfig *config); +const char *nm_ip_config_get_gateway(NMIPConfig *config); +NM_AVAILABLE_IN_1_58 +const char *nm_ip_config_get_clat_address(NMIPConfig *config); +NM_AVAILABLE_IN_1_58 +const char *nm_ip_config_get_clat_pref64(NMIPConfig *config); GPtrArray *nm_ip_config_get_addresses(NMIPConfig *config); GPtrArray *nm_ip_config_get_routes(NMIPConfig *config); const char *const *nm_ip_config_get_nameservers(NMIPConfig *config); From c86d23451669024e834eccdfcb46c73df29059f2 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 29 Jan 2026 18:58:43 +0100 Subject: [PATCH 148/153] nmcli: show the CLAT state It is useful to show that the CLAT is enabled and which addresses and prefix it is using. Add this information to the overview and to the device/connection output. Example: $ nmcli veth0: connected to clat "veth0" ethernet (veth), 4A:37:01:56:9D:AE, sw, mtu 1500 ip4 default inet4 192.0.0.5/32 route4 default metric 101 inet6 2002:aaaa::64d4:2932:3585:7c89/64 inet6 fe80::c060:8caf:f69b:e41a/64 route6 fe80::/64 metric 1024 route6 2002:aaaa::/64 metric 101 route6 default via fe80::871:7ff:fe14:b7b9 metric 101 clat inet4 192.0.0.5 inet6 2002:aaaa::2c0d:1e71:ef87:fac7 pref64 64:ff9b::/96 $ nmcli connection show clat ... IP4.ADDRESS[1]: 192.0.0.5/32 IP4.GATEWAY: 0.0.0.0 IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 0.0.0.0, mt = 101 IP4.CLAT-ADDRESS: 192.0.0.5 IP6.ADDRESS[1]: 2002:aaaa::64d4:2932:3585:7c89/64 IP6.ADDRESS[2]: fe80::c060:8caf:f69b:e41a/64 IP6.GATEWAY: fe80::871:7ff:fe14:b7b9 IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024 IP6.ROUTE[2]: dst = 2002:aaaa::/64, nh = ::, mt = 101 IP6.ROUTE[3]: dst = ::/0, nh = fe80::871:7ff:fe14:b7b9, mt = 101 IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 IP6.CLAT-PREF64: 64:ff9b::/96 Note how the IPv4 CLAT address is displayed both in IP4.ADDRESS and IP4.CLAT-ADDRESS. That's because it is also configured in kernel. The IPv6 CLAT address is not displayed in IP6.ADDRESS because it's not configured in kernel. --- src/nmcli/common.c | 18 + src/nmcli/general.c | 18 + src/nmcli/utils.h | 3 + .../test_003.expected | 680 +++++++++++------- tools/test-networkmanager-service.py | 18 + 5 files changed, 481 insertions(+), 256 deletions(-) diff --git a/src/nmcli/common.c b/src/nmcli/common.c index 15a7927bf5..5940f2f0bd 100644 --- a/src/nmcli/common.c +++ b/src/nmcli/common.c @@ -156,6 +156,11 @@ _metagen_ip4_config_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARGS) return NULL; arrc = nm_ip_config_get_wins_servers(cfg4); goto arrc_out; + case NMC_GENERIC_INFO_TYPE_IP4_CONFIG_CLAT_ADDRESS: + *out_flags |= NM_META_ACCESSOR_GET_OUT_FLAGS_HIDE; + str = nm_ip_config_get_clat_address(cfg4); + NM_SET_OUT(out_is_default, !str); + return str; default: break; } @@ -184,6 +189,7 @@ const NmcMetaGenericInfo *const metagen_ip4_config[_NMC_GENERIC_INFO_TYPE_IP4_CO _METAGEN_IP4_CONFIG(NMC_GENERIC_INFO_TYPE_IP4_CONFIG_DOMAIN, "DOMAIN"), _METAGEN_IP4_CONFIG(NMC_GENERIC_INFO_TYPE_IP4_CONFIG_SEARCHES, "SEARCHES"), _METAGEN_IP4_CONFIG(NMC_GENERIC_INFO_TYPE_IP4_CONFIG_WINS, "WINS"), + _METAGEN_IP4_CONFIG(NMC_GENERIC_INFO_TYPE_IP4_CONFIG_CLAT_ADDRESS, "CLAT-ADDRESS"), }; /*****************************************************************************/ @@ -245,6 +251,16 @@ _metagen_ip6_config_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARGS) return NULL; arrc = nm_ip_config_get_searches(cfg6); goto arrc_out; + case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_CLAT_ADDRESS: + *out_flags |= NM_META_ACCESSOR_GET_OUT_FLAGS_HIDE; + str = nm_ip_config_get_clat_address(cfg6); + NM_SET_OUT(out_is_default, !str); + return str; + case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_CLAT_PREF64: + *out_flags |= NM_META_ACCESSOR_GET_OUT_FLAGS_HIDE; + str = nm_ip_config_get_clat_pref64(cfg6); + NM_SET_OUT(out_is_default, !str); + return str; default: break; } @@ -272,6 +288,8 @@ const NmcMetaGenericInfo *const metagen_ip6_config[_NMC_GENERIC_INFO_TYPE_IP6_CO _METAGEN_IP6_CONFIG(NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DNS, "DNS"), _METAGEN_IP6_CONFIG(NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DOMAIN, "DOMAIN"), _METAGEN_IP6_CONFIG(NMC_GENERIC_INFO_TYPE_IP6_CONFIG_SEARCHES, "SEARCHES"), + _METAGEN_IP6_CONFIG(NMC_GENERIC_INFO_TYPE_IP6_CONFIG_CLAT_ADDRESS, "CLAT-ADDRESS"), + _METAGEN_IP6_CONFIG(NMC_GENERIC_INFO_TYPE_IP6_CONFIG_CLAT_PREF64, "CLAT-PREF64"), }; /*****************************************************************************/ diff --git a/src/nmcli/general.c b/src/nmcli/general.c index a2772ca32a..11704020bd 100644 --- a/src/nmcli/general.c +++ b/src/nmcli/general.c @@ -1486,6 +1486,24 @@ ac_overview(NmCli *nmc, NMActiveConnection *ac) } } } + + { + NMIPConfig *ip4 = nm_active_connection_get_ip4_config(ac); + NMIPConfig *ip6 = nm_active_connection_get_ip6_config(ac); + const char *clat4; + const char *clat6; + const char *pref64; + + if (ip4 && ip6) { + clat4 = nm_ip_config_get_clat_address(ip4); + clat6 = nm_ip_config_get_clat_address(ip6); + pref64 = nm_ip_config_get_clat_pref64(ip6); + + if (clat4 && clat6 && pref64) { + nmc_print("\tclat inet4 %s inet6 %s pref64 %s\n", clat4, clat6, pref64); + } + } + } } void diff --git a/src/nmcli/utils.h b/src/nmcli/utils.h index b2539bf440..e7b7abf199 100644 --- a/src/nmcli/utils.h +++ b/src/nmcli/utils.h @@ -111,6 +111,7 @@ typedef enum { NMC_GENERIC_INFO_TYPE_IP4_CONFIG_DOMAIN, NMC_GENERIC_INFO_TYPE_IP4_CONFIG_SEARCHES, NMC_GENERIC_INFO_TYPE_IP4_CONFIG_WINS, + NMC_GENERIC_INFO_TYPE_IP4_CONFIG_CLAT_ADDRESS, _NMC_GENERIC_INFO_TYPE_IP4_CONFIG_NUM, NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ADDRESS = 0, @@ -119,6 +120,8 @@ typedef enum { NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DNS, NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DOMAIN, NMC_GENERIC_INFO_TYPE_IP6_CONFIG_SEARCHES, + NMC_GENERIC_INFO_TYPE_IP6_CONFIG_CLAT_ADDRESS, + NMC_GENERIC_INFO_TYPE_IP6_CONFIG_CLAT_PREF64, _NMC_GENERIC_INFO_TYPE_IP6_CONFIG_NUM, NMC_GENERIC_INFO_TYPE_DHCP_CONFIG_OPTION = 0, 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 2f1ad168b8..e9d5504236 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 @@ -1954,12 +1954,12 @@ stderr: 54 bytes Błąd: nieprawidłowy dodatkowy parametr „eth0”. <<< -size: 3792 +size: 3966 location: src/tests/client/test-client.py:test_003()/47 cmd: $NMCLI -f ALL dev show eth0 lang: C returncode: 0 -stdout: 3653 bytes +stdout: 3827 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -2006,6 +2006,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -2016,6 +2017,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -2026,12 +2029,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3830 +size: 4004 location: src/tests/client/test-client.py:test_003()/48 cmd: $NMCLI -f ALL dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3681 bytes +stdout: 3855 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -2078,6 +2081,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -2088,6 +2092,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -2098,12 +2104,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2420 +size: 2524 location: src/tests/client/test-client.py:test_003()/49 cmd: $NMCLI -f ALL -t dev show eth0 lang: C returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -2150,6 +2156,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -2160,6 +2167,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -2170,12 +2179,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2430 +size: 2534 location: src/tests/client/test-client.py:test_003()/50 cmd: $NMCLI -f ALL -t dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -2222,6 +2231,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -2232,6 +2242,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -3058,12 +3070,12 @@ stderr: 54 bytes Błąd: nieprawidłowy dodatkowy parametr „eth0”. <<< -size: 3792 +size: 3966 location: src/tests/client/test-client.py:test_003()/72 cmd: $NMCLI -f ALL dev show eth0 lang: C returncode: 0 -stdout: 3653 bytes +stdout: 3827 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -3110,6 +3122,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -3120,6 +3133,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -3130,12 +3145,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3830 +size: 4004 location: src/tests/client/test-client.py:test_003()/73 cmd: $NMCLI -f ALL dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3681 bytes +stdout: 3855 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -3182,6 +3197,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -3192,6 +3208,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -3202,12 +3220,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2420 +size: 2524 location: src/tests/client/test-client.py:test_003()/74 cmd: $NMCLI -f ALL -t dev show eth0 lang: C returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -3254,6 +3272,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -3264,6 +3283,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -3274,12 +3295,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2430 +size: 2534 location: src/tests/client/test-client.py:test_003()/75 cmd: $NMCLI -f ALL -t dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -3326,6 +3347,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -3336,6 +3358,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -4136,12 +4160,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3792 +size: 3966 location: src/tests/client/test-client.py:test_003()/88 cmd: $NMCLI -f all dev show eth0 lang: C returncode: 0 -stdout: 3653 bytes +stdout: 3827 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -4188,6 +4212,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -4198,6 +4223,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -4208,12 +4235,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3830 +size: 4004 location: src/tests/client/test-client.py:test_003()/89 cmd: $NMCLI -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3681 bytes +stdout: 3855 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -4260,6 +4287,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -4270,6 +4298,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -4966,12 +4996,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3804 +size: 3978 location: src/tests/client/test-client.py:test_003()/98 cmd: $NMCLI --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3653 bytes +stdout: 3827 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -5018,6 +5048,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -5028,6 +5059,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -5038,12 +5071,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3842 +size: 4016 location: src/tests/client/test-client.py:test_003()/99 cmd: $NMCLI --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3681 bytes +stdout: 3855 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -5090,6 +5123,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -5100,6 +5134,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -5868,12 +5904,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4733 +size: 4907 location: src/tests/client/test-client.py:test_003()/108 cmd: $NMCLI --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4584 bytes +stdout: 4758 bytes >>> =============================================================================== Device details (eth0) @@ -5927,6 +5963,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -5939,6 +5976,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -5952,12 +5991,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4777 +size: 4951 location: src/tests/client/test-client.py:test_003()/109 cmd: $NMCLI --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4618 bytes +stdout: 4792 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -6011,6 +6050,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -6023,6 +6063,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -6794,12 +6836,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4745 +size: 4919 location: src/tests/client/test-client.py:test_003()/118 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4584 bytes +stdout: 4758 bytes >>> =============================================================================== Device details (eth0) @@ -6853,6 +6895,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -6865,6 +6908,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -6878,12 +6923,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4789 +size: 4963 location: src/tests/client/test-client.py:test_003()/119 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4618 bytes +stdout: 4792 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -6937,6 +6982,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -6949,6 +6995,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -7644,12 +7692,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2426 +size: 2530 location: src/tests/client/test-client.py:test_003()/128 cmd: $NMCLI --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -7696,6 +7744,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -7706,6 +7755,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -7716,12 +7767,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2436 +size: 2540 location: src/tests/client/test-client.py:test_003()/129 cmd: $NMCLI --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -7768,6 +7819,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -7778,6 +7830,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -8470,12 +8524,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2438 +size: 2542 location: src/tests/client/test-client.py:test_003()/138 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -8522,6 +8576,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -8532,6 +8587,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -8542,12 +8599,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2448 +size: 2552 location: src/tests/client/test-client.py:test_003()/139 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -8594,6 +8651,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -8604,6 +8662,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -8796,12 +8856,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3207 +size: 3327 location: src/tests/client/test-client.py:test_003()/148 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: C returncode: 0 -stdout: 3052 bytes +stdout: 3172 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown @@ -8815,14 +8875,14 @@ INTERFACE-FLAGS yes yes no no NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -8831,12 +8891,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3237 +size: 3357 location: src/tests/client/test-client.py:test_003()/149 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3072 bytes +stdout: 3192 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane @@ -8850,14 +8910,14 @@ INTERFACE-FLAGS tak tak nie nie NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -9048,12 +9108,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3219 +size: 3339 location: src/tests/client/test-client.py:test_003()/158 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3052 bytes +stdout: 3172 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown @@ -9067,14 +9127,14 @@ INTERFACE-FLAGS yes yes no no NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -9083,12 +9143,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3249 +size: 3369 location: src/tests/client/test-client.py:test_003()/159 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3072 bytes +stdout: 3192 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane @@ -9102,14 +9162,14 @@ INTERFACE-FLAGS tak tak nie nie NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -9372,12 +9432,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 4823 +size: 5003 location: src/tests/client/test-client.py:test_003()/168 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4659 bytes +stdout: 4839 bytes >>> ========================= Device details (eth0) @@ -9398,17 +9458,17 @@ NAME CARRIER S390-SUBCHANNELS --------------------------------------------- WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -9419,12 +9479,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 4889 +size: 5069 location: src/tests/client/test-client.py:test_003()/169 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4715 bytes +stdout: 4895 bytes >>> ================================== Informacje o urządzeniu (eth0) @@ -9445,17 +9505,17 @@ NAME CARRIER S390-SUBCHANNELS ---------------------------------------------- WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -9720,12 +9780,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 4835 +size: 5015 location: src/tests/client/test-client.py:test_003()/178 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4659 bytes +stdout: 4839 bytes >>> ========================= Device details (eth0) @@ -9746,17 +9806,17 @@ NAME CARRIER S390-SUBCHANNELS --------------------------------------------- WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -9767,12 +9827,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 4901 +size: 5081 location: src/tests/client/test-client.py:test_003()/179 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4715 bytes +stdout: 4895 bytes >>> ================================== Informacje o urządzeniu (eth0) @@ -9793,17 +9853,17 @@ NAME CARRIER S390-SUBCHANNELS ---------------------------------------------- WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -9940,38 +10000,38 @@ 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: 1451 +size: 1514 location: src/tests/client/test-client.py:test_003()/188 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 1288 bytes +stdout: 1351 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 1461 +size: 1524 location: src/tests/client/test-client.py:test_003()/189 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1288 bytes +stdout: 1351 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet @@ -10102,38 +10162,38 @@ 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: 1463 +size: 1526 location: src/tests/client/test-client.py:test_003()/198 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 1288 bytes +stdout: 1351 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 1473 +size: 1536 location: src/tests/client/test-client.py:test_003()/199 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1288 bytes +stdout: 1351 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet @@ -11028,12 +11088,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3810 +size: 3984 location: src/tests/client/test-client.py:test_003()/208 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: C returncode: 0 -stdout: 3653 bytes +stdout: 3827 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -11080,6 +11140,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -11090,6 +11151,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -11100,12 +11163,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3848 +size: 4022 location: src/tests/client/test-client.py:test_003()/209 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3681 bytes +stdout: 3855 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -11152,6 +11215,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -11162,6 +11226,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -12062,12 +12128,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3822 +size: 3996 location: src/tests/client/test-client.py:test_003()/218 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3653 bytes +stdout: 3827 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -12114,6 +12180,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -12124,6 +12191,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -12134,12 +12203,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3860 +size: 4034 location: src/tests/client/test-client.py:test_003()/219 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3681 bytes +stdout: 3855 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -12186,6 +12255,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -12196,6 +12266,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -13190,12 +13262,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4750 +size: 4924 location: src/tests/client/test-client.py:test_003()/228 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4584 bytes +stdout: 4758 bytes >>> =============================================================================== Device details (eth0) @@ -13249,6 +13321,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -13261,6 +13334,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -13274,12 +13349,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4794 +size: 4968 location: src/tests/client/test-client.py:test_003()/229 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4618 bytes +stdout: 4792 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -13333,6 +13408,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -13345,6 +13421,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -14342,12 +14420,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4762 +size: 4936 location: src/tests/client/test-client.py:test_003()/238 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4584 bytes +stdout: 4758 bytes >>> =============================================================================== Device details (eth0) @@ -14401,6 +14479,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -14413,6 +14492,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -14426,12 +14507,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4806 +size: 4980 location: src/tests/client/test-client.py:test_003()/239 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4618 bytes +stdout: 4792 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -14485,6 +14566,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -14497,6 +14579,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -15400,12 +15484,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2443 +size: 2547 location: src/tests/client/test-client.py:test_003()/248 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -15452,6 +15536,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -15462,6 +15547,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -15472,12 +15559,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2453 +size: 2557 location: src/tests/client/test-client.py:test_003()/249 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -15524,6 +15611,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -15534,6 +15622,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -16434,12 +16524,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2455 +size: 2559 location: src/tests/client/test-client.py:test_003()/258 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -16486,6 +16576,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -16496,6 +16587,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -16506,12 +16599,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2465 +size: 2569 location: src/tests/client/test-client.py:test_003()/259 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2278 bytes +stdout: 2382 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -16558,6 +16651,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -16568,6 +16662,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -16706,12 +16802,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3813 +size: 3987 location: src/tests/client/test-client.py:test_003()/268 cmd: $NMCLI -f all dev show eth0 lang: C returncode: 0 -stdout: 3673 bytes +stdout: 3847 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -16758,6 +16854,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -16768,6 +16865,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -16778,12 +16877,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 3853 +size: 4027 location: src/tests/client/test-client.py:test_003()/269 cmd: $NMCLI -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3703 bytes +stdout: 3877 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -16830,6 +16929,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -16840,6 +16940,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -16978,12 +17080,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3825 +size: 3999 location: src/tests/client/test-client.py:test_003()/278 cmd: $NMCLI --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3673 bytes +stdout: 3847 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -17030,6 +17132,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -17040,6 +17143,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -17050,12 +17155,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 3865 +size: 4039 location: src/tests/client/test-client.py:test_003()/279 cmd: $NMCLI --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3703 bytes +stdout: 3877 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -17102,6 +17207,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -17112,6 +17218,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -17280,12 +17388,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4753 +size: 4927 location: src/tests/client/test-client.py:test_003()/288 cmd: $NMCLI --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4604 bytes +stdout: 4778 bytes >>> =============================================================================== Device details (eth0) @@ -17339,6 +17447,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -17351,6 +17460,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -17364,12 +17475,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4799 +size: 4973 location: src/tests/client/test-client.py:test_003()/289 cmd: $NMCLI --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4640 bytes +stdout: 4814 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -17423,6 +17534,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -17435,6 +17547,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -17606,12 +17720,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4765 +size: 4939 location: src/tests/client/test-client.py:test_003()/298 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4604 bytes +stdout: 4778 bytes >>> =============================================================================== Device details (eth0) @@ -17665,6 +17779,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -17677,6 +17792,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -17690,12 +17807,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4811 +size: 4985 location: src/tests/client/test-client.py:test_003()/299 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4640 bytes +stdout: 4814 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -17749,6 +17866,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -17761,6 +17879,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -17898,12 +18018,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2446 +size: 2550 location: src/tests/client/test-client.py:test_003()/308 cmd: $NMCLI --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -17950,6 +18070,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -17960,6 +18081,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -17970,12 +18093,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 2456 +size: 2560 location: src/tests/client/test-client.py:test_003()/309 cmd: $NMCLI --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -18022,6 +18145,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -18032,6 +18156,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -18166,12 +18292,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2458 +size: 2562 location: src/tests/client/test-client.py:test_003()/318 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -18218,6 +18344,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -18228,6 +18355,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -18238,12 +18367,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 2468 +size: 2572 location: src/tests/client/test-client.py:test_003()/319 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -18290,6 +18419,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -18300,6 +18430,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -18418,12 +18550,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3247 +size: 3367 location: src/tests/client/test-client.py:test_003()/328 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: C returncode: 0 -stdout: 3092 bytes +stdout: 3212 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown @@ -18437,14 +18569,14 @@ INTERFACE-FLAGS yes yes no no NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -18453,12 +18585,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 3281 +size: 3401 location: src/tests/client/test-client.py:test_003()/329 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3116 bytes +stdout: 3236 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane @@ -18472,14 +18604,14 @@ INTERFACE-FLAGS tak tak nie nie NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -18596,12 +18728,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3259 +size: 3379 location: src/tests/client/test-client.py:test_003()/338 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3092 bytes +stdout: 3212 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown @@ -18615,14 +18747,14 @@ INTERFACE-FLAGS yes yes no no NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -18631,12 +18763,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 3293 +size: 3413 location: src/tests/client/test-client.py:test_003()/339 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3116 bytes +stdout: 3236 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane @@ -18650,14 +18782,14 @@ INTERFACE-FLAGS tak tak nie nie NAME CARRIER S390-SUBCHANNELS WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION DHCP6 dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 @@ -18804,12 +18936,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 4883 +size: 5063 location: src/tests/client/test-client.py:test_003()/348 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4719 bytes +stdout: 4899 bytes >>> ========================= Device details (eth0) @@ -18830,17 +18962,17 @@ NAME CARRIER S390-SUBCHANNELS --------------------------------------------- WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -18851,12 +18983,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 4955 +size: 5135 location: src/tests/client/test-client.py:test_003()/349 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4781 bytes +stdout: 4961 bytes >>> ================================== Informacje o urządzeniu (eth0) @@ -18877,17 +19009,17 @@ NAME CARRIER S390-SUBCHANNELS ---------------------------------------------- WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -19036,12 +19168,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 4895 +size: 5075 location: src/tests/client/test-client.py:test_003()/358 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4719 bytes +stdout: 4899 bytes >>> ========================= Device details (eth0) @@ -19062,17 +19194,17 @@ NAME CARRIER S390-SUBCHANNELS --------------------------------------------- WIRED-PROPERTIES on -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -19083,12 +19215,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 4967 +size: 5147 location: src/tests/client/test-client.py:test_003()/359 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4781 bytes +stdout: 4961 bytes >>> ================================== Informacje o urządzeniu (eth0) @@ -19109,17 +19241,17 @@ NAME CARRIER S390-SUBCHANNELS ---------------------------------------------- WIRED-PROPERTIES włączone -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES WINS CLAT-ADDRESS +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar -- 192.168.156.115 | 192.168.8.33 192.0.0.1 GROUP OPTION --------------- DHCP4 -- -GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- +GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN SEARCHES CLAT-ADDRESS CLAT-PREF64 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +IP6 2001:a::29c0:62b9:2e01:30a/69 | 2001:a::6433:6420:34f9:3801/115 | 2001:a::8191:ed6b:8ce:b60/103 2001:a::2b50:64d1:9a91:23b4 dst = 2001:a::5ecb:f5ee:fb96:856c/100, nh = ::, mt = 4249082794 2001:a::1323:9a78:2b82:d16b | 2001:a::4e1:24e6:b8c1:91bb | 2001:a::bd96:3bed:fbd6:19c5 sear6.fo.x.y | sear6.foo4.bar -- 2002:aaaa::2c0d:1e71:ef87:fac7 64:ff9b::/96 GROUP OPTION -------------------------------------------------------------------------------------------------- @@ -19230,38 +19362,38 @@ stdout: 194 bytes 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: 1471 +size: 1534 location: src/tests/client/test-client.py:test_003()/368 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 1308 bytes +stdout: 1371 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 1481 +size: 1544 location: src/tests/client/test-client.py:test_003()/369 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1308 bytes +stdout: 1371 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 @@ -19366,38 +19498,38 @@ stdout: 194 bytes 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: 1483 +size: 1546 location: src/tests/client/test-client.py:test_003()/378 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 1308 bytes +stdout: 1371 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 1493 +size: 1556 location: src/tests/client/test-client.py:test_003()/379 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1308 bytes +stdout: 1371 bytes >>> GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no WIRED-PROPERTIES:on: -IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33 +IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar::192.168.156.115 | 192.168.8.33:192.0.0.1 DHCP4: -IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar: +IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar::2002\:aaaa\:\:2c0d\:1e71\:ef87\:fac7:64\:ff9b\:\:/96 DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | | /org/freedesktop/NetworkManager/Settings/Connection/6 @@ -19732,12 +19864,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3830 +size: 4004 location: src/tests/client/test-client.py:test_003()/388 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: C returncode: 0 -stdout: 3673 bytes +stdout: 3847 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -19784,6 +19916,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -19794,6 +19927,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -19804,12 +19939,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 3870 +size: 4044 location: src/tests/client/test-client.py:test_003()/389 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3703 bytes +stdout: 3877 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -19856,6 +19991,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -19866,6 +20002,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -20206,12 +20344,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 3842 +size: 4016 location: src/tests/client/test-client.py:test_003()/398 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3673 bytes +stdout: 3847 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -20258,6 +20396,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -20268,6 +20407,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -20278,12 +20419,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 3882 +size: 4056 location: src/tests/client/test-client.py:test_003()/399 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3703 bytes +stdout: 3877 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -20330,6 +20471,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]: 2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]: 2001:a::8191:ed6b:8ce:b60/103 @@ -20340,6 +20482,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]: dhcp-6-opt-6 = val-6 @@ -20730,12 +20874,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4770 +size: 4944 location: src/tests/client/test-client.py:test_003()/408 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4604 bytes +stdout: 4778 bytes >>> =============================================================================== Device details (eth0) @@ -20789,6 +20933,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -20801,6 +20946,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -20814,12 +20961,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4816 +size: 4990 location: src/tests/client/test-client.py:test_003()/409 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4640 bytes +stdout: 4814 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -20873,6 +21020,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -20885,6 +21033,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -21278,12 +21428,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 4782 +size: 4956 location: src/tests/client/test-client.py:test_003()/418 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4604 bytes +stdout: 4778 bytes >>> =============================================================================== Device details (eth0) @@ -21337,6 +21487,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -21349,6 +21500,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -21362,12 +21515,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4828 +size: 5002 location: src/tests/client/test-client.py:test_003()/419 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4640 bytes +stdout: 4814 bytes >>> =============================================================================== Informacje o urządzeniu (eth0) @@ -21421,6 +21574,7 @@ IP4.DNS[1]: 192.168.213.113 IP4.DOMAIN[1]: sear4.foo4.bar IP4.WINS[1]: 192.168.156.115 IP4.WINS[2]: 192.168.8.33 +IP4.CLAT-ADDRESS: 192.0.0.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- IP6.ADDRESS[1]: 2001:a::29c0:62b9:2e01:30a/69 @@ -21433,6 +21587,8 @@ IP6.DNS[2]: 2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]: 2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]: sear6.fo.x.y IP6.DOMAIN[2]: sear6.foo4.bar +IP6.CLAT-ADDRESS: 2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64: 64:ff9b::/96 ------------------------------------------------------------------------------- DHCP6.OPTION[1]: dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]: dhcp-6-opt-5 = val-5 @@ -21776,12 +21932,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2463 +size: 2567 location: src/tests/client/test-client.py:test_003()/428 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -21828,6 +21984,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -21838,6 +21995,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -21848,12 +22007,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 2473 +size: 2577 location: src/tests/client/test-client.py:test_003()/429 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -21900,6 +22059,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -21910,6 +22070,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -22250,12 +22412,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2475 +size: 2579 location: src/tests/client/test-client.py:test_003()/438 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -22302,6 +22464,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -22312,6 +22475,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 @@ -22322,12 +22487,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]: | /org/freedesktop/NetworkManager/Settings/Connection/6 <<< -size: 2485 +size: 2589 location: src/tests/client/test-client.py:test_003()/439 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2402 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -22374,6 +22539,7 @@ IP4.DNS[1]:192.168.213.113 IP4.DOMAIN[1]:sear4.foo4.bar IP4.WINS[1]:192.168.156.115 IP4.WINS[2]:192.168.8.33 +IP4.CLAT-ADDRESS:192.0.0.1 IP6.ADDRESS[1]:2001:a::29c0:62b9:2e01:30a/69 IP6.ADDRESS[2]:2001:a::6433:6420:34f9:3801/115 IP6.ADDRESS[3]:2001:a::8191:ed6b:8ce:b60/103 @@ -22384,6 +22550,8 @@ IP6.DNS[2]:2001:a::4e1:24e6:b8c1:91bb IP6.DNS[3]:2001:a::bd96:3bed:fbd6:19c5 IP6.DOMAIN[1]:sear6.fo.x.y IP6.DOMAIN[2]:sear6.foo4.bar +IP6.CLAT-ADDRESS:2002:aaaa::2c0d:1e71:ef87:fac7 +IP6.CLAT-PREF64:64:ff9b::/96 DHCP6.OPTION[1]:dhcp-6-opt-1 = val-1 DHCP6.OPTION[2]:dhcp-6-opt-5 = val-5 DHCP6.OPTION[3]:dhcp-6-opt-6 = val-6 diff --git a/tools/test-networkmanager-service.py b/tools/test-networkmanager-service.py index 1bd180b60d..b6308b3d11 100755 --- a/tools/test-networkmanager-service.py +++ b/tools/test-networkmanager-service.py @@ -1046,6 +1046,18 @@ class Device(ExportedObj): PRP_DEVICE_DHCP6_CONFIG, ExportedObj.to_path(self.dhcp6_config), ) + if Util.random_int(self.path, 100) > 80: + self.ip4_config._dbus_property_set( + IFACE_IP4_CONFIG, PRP_IP4_CONFIG_CLAT_ADDRESS, "192.0.0.1" + ) + self.ip6_config._dbus_property_set( + IFACE_IP6_CONFIG, + PRP_IP6_CONFIG_CLAT_ADDRESS, + "2002:aaaa::2c0d:1e71:ef87:fac7", + ) + self.ip6_config._dbus_property_set( + IFACE_IP6_CONFIG, PRP_IP6_CONFIG_CLAT_PREF64, "64:ff9b::/96" + ) def stop(self): self._dbus_property_set( @@ -2446,6 +2458,7 @@ PRP_IP4_CONFIG_SEARCHES = "Searches" PRP_IP4_CONFIG_DNSOPTIONS = "DnsOptions" PRP_IP4_CONFIG_DNSPRIORITY = "DnsPriority" PRP_IP4_CONFIG_WINSSERVERS = "WinsServers" +PRP_IP4_CONFIG_CLAT_ADDRESS = "ClatAddress" class IP4Config(ExportedObj): @@ -2624,6 +2637,7 @@ class IP4Config(ExportedObj): PRP_IP4_CONFIG_WINSSERVERS: dbus.Array( [dbus.UInt32(Util.ip4_addr_be32(n)) for n in winsservers], "u" ), + PRP_IP4_CONFIG_CLAT_ADDRESS: dbus.String(""), } def props_regenerate(self, generate_seed): @@ -2648,6 +2662,8 @@ PRP_IP6_CONFIG_DOMAINS = "Domains" PRP_IP6_CONFIG_SEARCHES = "Searches" PRP_IP6_CONFIG_DNSOPTIONS = "DnsOptions" PRP_IP6_CONFIG_DNSPRIORITY = "DnsPriority" +PRP_IP6_CONFIG_CLAT_ADDRESS = "ClatAddress" +PRP_IP6_CONFIG_CLAT_PREF64 = "ClatPref64" class IP6Config(ExportedObj): @@ -2814,6 +2830,8 @@ class IP6Config(ExportedObj): PRP_IP6_CONFIG_SEARCHES: dbus.Array(searches, "s"), PRP_IP6_CONFIG_DNSOPTIONS: dbus.Array(dnsoptions, "s"), PRP_IP6_CONFIG_DNSPRIORITY: dbus.Int32(dnspriority), + PRP_IP6_CONFIG_CLAT_ADDRESS: dbus.String(""), + PRP_IP6_CONFIG_CLAT_PREF64: dbus.String(""), } def props_regenerate(self, generate_seed): From e2cdd5c4dc2dae6b4fae19744f7b94f5de601dc5 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 2 Feb 2026 11:22:32 +0100 Subject: [PATCH 149/153] build: don't require libndp >= 1.9 if CLAT is disabled libndp >= 1.9 is only required to parse the PREF64 option needed for CLAT. When building NM in an enviroment with an older libndp, still allow building without CLAT support. --- meson.build | 4 +++- src/core/ndisc/nm-lndp-ndisc.c | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/meson.build b/meson.build index 507462b205..733f545885 100644 --- a/meson.build +++ b/meson.build @@ -288,7 +288,7 @@ uuid_dep = dependency('uuid') libelogind_dep = dependency('libelogind', version: '>= 219', required: false) libudev_dep = dependency('libudev', version: '>= 175') dbus_dep = dependency('dbus-1', version: '>= 1.1') -libndp_dep = dependency('libndp', version: '>= 1.9') +libndp_dep = dependency('libndp') jansson_dep = dependency('jansson', version: '>= 2.7', required: false) config_h.set10('WITH_JANSSON', jansson_dep.found()) @@ -519,6 +519,8 @@ enable_clat = get_option('clat') if enable_clat libbpf = dependency('libbpf', version: '>= 0.1.0', required: false) assert(libbpf.found(), 'You must have libbpf installed to build. Use -Dclat=false to disable use of it') + libndp_dep = dependency('libndp', version: '>= 1.9', required: false) + assert(libndp_dep.found(), 'You must have libndp >= 1.9 installed to build with CLAT support. Use -Dclat=false to disable it') endif config_h.set10('HAVE_CLAT', enable_clat) diff --git a/src/core/ndisc/nm-lndp-ndisc.c b/src/core/ndisc/nm-lndp-ndisc.c index c004e80136..66ee477b29 100644 --- a/src/core/ndisc/nm-lndp-ndisc.c +++ b/src/core/ndisc/nm-lndp-ndisc.c @@ -401,14 +401,15 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) } } +#if HAVE_CLAT /* PREF64 */ ndp_msg_opt_for_each_offset (offset, msg, NDP_MSG_OPT_PREF64) { NMNDiscPref64 pref64; pref64 = (NMNDiscPref64) { - .prefix = *ndp_msg_opt_pref64_prefix(msg, offset), - .plen = ndp_msg_opt_pref64_prefix_length(msg, offset), - .gateway = gateway.address, + .prefix = *ndp_msg_opt_pref64_prefix(msg, offset), + .plen = ndp_msg_opt_pref64_prefix_length(msg, offset), + .gateway = gateway.address, .gateway_preference = gateway.preference, .expiry_msec = _nm_ndisc_lifetime_to_expiry(now_msec, ndp_msg_opt_pref64_lifetime(msg, offset)), @@ -422,6 +423,7 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) changed |= NM_NDISC_CONFIG_PREF64; } } +#endif nm_ndisc_ra_received(ndisc, now_msec, changed); return 0; From f9b20833940d0a0a1d74347a27c579883d73ab4e Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 2 Feb 2026 19:35:42 +0100 Subject: [PATCH 150/153] l3cd: rename "clat" to "clat_config" The member indicates if CLAT is enabled in the configuration. Use a clearer name. --- src/core/devices/nm-device.c | 2 +- src/core/nm-l3-config-data.c | 35 ++++++++++++++++++----------------- src/core/nm-l3-config-data.h | 4 ++-- src/core/nm-l3cfg.c | 2 +- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 9ca6651bde..434683d6b4 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -11531,7 +11531,7 @@ _dev_ipmanual_start(NMDevice *self) nm_l3_config_data_set_routed_dns(l3cd, AF_INET6, TRUE); } - nm_l3_config_data_set_clat(l3cd, _prop_get_ipv4_clat(self, TRUE)); + nm_l3_config_data_set_clat_config(l3cd, _prop_get_ipv4_clat(self, TRUE)); } if (!l3cd) { diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index b2996e1c52..0b2804fa72 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -126,8 +126,9 @@ struct _NML3ConfigData { NMSettingConnectionDnssec dnssec; NMUtilsIPv6IfaceId ip6_token; NMRefString *network_id; - NMSettingIp4ConfigClat clat; /* this indicates the 'administrative' CLAT state, i.e. whether - * CLAT will be started once we receive a PREF64 */ + NMSettingIp4ConfigClat clat_config; /* this indicates the 'administrative' CLAT + * state, i.e. whether CLAT will be started + * once we receive a PREF64 */ /* The runtime CLAT state */ struct { @@ -541,10 +542,10 @@ nm_l3_config_data_log(const NML3ConfigData *self, } if (!IS_IPv4) { - if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_AUTO) - _L("clat: auto"); - else if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_FORCE) - _L("clat: force"); + if (self->clat_config == NM_SETTING_IP4_CONFIG_CLAT_AUTO) + _L("clat-config: auto"); + else if (self->clat_config == NM_SETTING_IP4_CONFIG_CLAT_FORCE) + _L("clat-config: force"); if (self->clat_state.enabled) { _L("clat-state: ip4=%s/32, pref64=%s/%u, ip6=%s/64", @@ -755,7 +756,7 @@ nm_l3_config_data_new(NMDedupMultiIndex *multi_idx, int ifindex, NMIPConfigSourc .flags = NM_L3_CONFIG_DAT_FLAGS_NONE, .metered = NM_TERNARY_DEFAULT, .proxy_browser_only = NM_TERNARY_DEFAULT, - .clat = NM_SETTING_IP4_CONFIG_CLAT_NO, + .clat_config = NM_SETTING_IP4_CONFIG_CLAT_NO, .proxy_method = NM_PROXY_CONFIG_METHOD_UNKNOWN, .route_table_sync_4 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE, .route_table_sync_6 = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE, @@ -2043,7 +2044,7 @@ nm_l3_config_data_set_network_id(NML3ConfigData *self, const char *value) } gboolean -nm_l3_config_data_set_clat(NML3ConfigData *self, NMSettingIp4ConfigClat val) +nm_l3_config_data_set_clat_config(NML3ConfigData *self, NMSettingIp4ConfigClat val) { nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); nm_assert(NM_IN_SET(val, @@ -2051,18 +2052,18 @@ nm_l3_config_data_set_clat(NML3ConfigData *self, NMSettingIp4ConfigClat val) NM_SETTING_IP4_CONFIG_CLAT_FORCE, NM_SETTING_IP4_CONFIG_CLAT_AUTO)); - if (self->clat == val) + if (self->clat_config == val) return FALSE; - self->clat = val; + self->clat_config = val; return TRUE; } NMSettingIp4ConfigClat -nm_l3_config_data_get_clat(const NML3ConfigData *self) +nm_l3_config_data_get_clat_config(const NML3ConfigData *self) { nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); - return self->clat; + return self->clat_config; } gboolean @@ -2706,7 +2707,7 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a, NM_CMP_DIRECT_UNSAFE(a->routed_dns_4, b->routed_dns_4); NM_CMP_DIRECT_UNSAFE(a->routed_dns_6, b->routed_dns_6); - NM_CMP_DIRECT_UNSAFE(a->clat, b->clat); + NM_CMP_DIRECT_UNSAFE(a->clat_config, b->clat_config); NM_CMP_DIRECT(!!a->clat_state.enabled, !!b->clat_state.enabled); if (a->clat_state.enabled) { @@ -3793,12 +3794,12 @@ nm_l3_config_data_merge(NML3ConfigData *self, if (src->routed_dns_6) self->routed_dns_6 = TRUE; - if (self->clat == NM_SETTING_IP4_CONFIG_CLAT_NO) { + if (self->clat_config == NM_SETTING_IP4_CONFIG_CLAT_NO) { /* 'no' always loses to 'force' and 'auto' */ - self->clat = src->clat; - } else if (src->clat == NM_SETTING_IP4_CONFIG_CLAT_FORCE) { + self->clat_config = src->clat_config; + } else if (src->clat_config == NM_SETTING_IP4_CONFIG_CLAT_FORCE) { /* 'force' always takes precedence */ - self->clat = src->clat; + self->clat_config = src->clat_config; } if (!self->clat_state.enabled && src->clat_state.enabled) { diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index cc340f9d3d..b76e11f9b1 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -503,9 +503,9 @@ gboolean nm_l3_config_data_set_network_id(NML3ConfigData *self, const char *netw const char *nm_l3_config_data_get_network_id(const NML3ConfigData *self); -gboolean nm_l3_config_data_set_clat(NML3ConfigData *self, NMSettingIp4ConfigClat val); +gboolean nm_l3_config_data_set_clat_config(NML3ConfigData *self, NMSettingIp4ConfigClat val); -NMSettingIp4ConfigClat nm_l3_config_data_get_clat(const NML3ConfigData *self); +NMSettingIp4ConfigClat nm_l3_config_data_get_clat_config(const NML3ConfigData *self); gboolean nm_l3_config_data_get_clat_state(const NML3ConfigData *self, struct in6_addr *out_ip6, diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 209ebd9c33..9ed560ec64 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4154,7 +4154,7 @@ _l3cfg_update_clat_config(NML3Cfg *self, const NMPlatformIP4Route *ip4_route; NMDedupMultiIter iter; - switch (nm_l3_config_data_get_clat(l3cd)) { + switch (nm_l3_config_data_get_clat_config(l3cd)) { case NM_SETTING_IP4_CONFIG_CLAT_FORCE: clat_enabled = TRUE; break; From d7edc806b60f3c027406f5b0329052758bade05f Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 2 Feb 2026 22:26:45 +0100 Subject: [PATCH 151/153] core: clat: add the "nm" prefix to ebpf program names The program names are displayed in the "bpftool prog" output. It is easier to recognize NM programs if they have the "nm" prefix. --- src/core/bpf/clat.bpf.c | 4 ++-- src/core/nm-l3cfg.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 56d09a7176..3e192e99db 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -1103,14 +1103,14 @@ out: SEC("tcx/egress") int -clat_egress(struct __sk_buff *skb) +nm_clat_egress(struct __sk_buff *skb) { return clat_handle_v4(skb); } SEC("tcx/ingress") int -clat_ingress(struct __sk_buff *skb) +nm_clat_ingress(struct __sk_buff *skb) { return clat_handle_v6(skb); } diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 9ed560ec64..61575a4b93 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -5708,7 +5708,7 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) } self->priv.p->clat_ingress_link = - bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.clat_ingress, + bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.nm_clat_ingress, self->priv.ifindex, NULL); if (!self->priv.p->clat_ingress_link) { @@ -5718,7 +5718,7 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) } self->priv.p->clat_egress_link = - bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.clat_egress, + bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.nm_clat_egress, self->priv.ifindex, NULL); if (!self->priv.p->clat_egress_link) { From 112190d09a4bc7f117859c5c5551682534a96821 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 5 Feb 2026 18:58:52 +0100 Subject: [PATCH 152/153] clat: support layer3 interfaces When running the CLAT over an interface that doesn't use the Ethernet header, like an IP tunnel, there are some changes needed. The BPF program must compute offsets differently. Also, the DAD packet should not include an Ethernet header. --- src/core/bpf/clat.bpf.c | 176 +++++++++++++++++++++++++-------------- src/core/nm-core-utils.c | 19 ++++- src/core/nm-core-utils.h | 2 +- src/core/nm-l3cfg.c | 66 ++++++++++++--- 4 files changed, 184 insertions(+), 79 deletions(-) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index 3e192e99db..e44817fc3a 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -78,12 +78,12 @@ struct ip6_frag { __u32 identification; } __attribute__((packed)); -#define ETH_H_LEN (sizeof(struct ethhdr)) -#define IP_H_LEN (sizeof(struct iphdr)) -#define IP6_H_LEN (sizeof(struct ipv6hdr)) -#define IP6_FRAG_H_LEN (sizeof(struct ip6_frag)) -#define ICMP_H_LEN (sizeof(struct icmphdr)) -#define ICMP6_H_LEN (sizeof(struct icmp6hdr)) +#define L2_H_LEN(has_eth) (has_eth ? sizeof(struct ethhdr) : 0) +#define IP_H_LEN (sizeof(struct iphdr)) +#define IP6_H_LEN (sizeof(struct ipv6hdr)) +#define IP6_FRAG_H_LEN (sizeof(struct ip6_frag)) +#define ICMP_H_LEN (sizeof(struct icmphdr)) +#define ICMP6_H_LEN (sizeof(struct icmp6hdr)) #define ensure_header(header, skb, data, data_end, offset) \ _ensure_header((void **) header, (skb), (data), (data_end), sizeof(**(header)), (offset)) @@ -121,6 +121,7 @@ static __always_inline void update_l4_checksum(struct __sk_buff *skb, struct ipv6hdr *ip6h, struct iphdr *iph, + bool has_eth, bool v4to6, bool is_inner, bool is_v6_fragment, @@ -136,14 +137,14 @@ update_l4_checksum(struct __sk_buff *skb, void *to_ptr = &ip6h->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(__u32), to_ptr, 2 * sizeof(struct in6_addr), 0); - offset = ETH_H_LEN + IP_H_LEN; + offset = L2_H_LEN(has_eth) + IP_H_LEN; ip_type = ip6h->nexthdr; } else { void *from_ptr = &ip6h->saddr; void *to_ptr = &iph->saddr; csum = bpf_csum_diff(from_ptr, 2 * sizeof(struct in6_addr), to_ptr, 2 * sizeof(__u32), 0); - offset = ETH_H_LEN + IP6_H_LEN; + offset = L2_H_LEN(has_eth) + IP6_H_LEN; ip_type = iph->protocol; if (is_inner) { @@ -179,6 +180,7 @@ update_icmp_checksum(struct __sk_buff *skb, const struct ipv6hdr *ip6h, void *icmp_before, void *icmp_after, + bool has_eth, bool v4to6, bool is_inner, __u32 seed) @@ -210,9 +212,9 @@ update_icmp_checksum(struct __sk_buff *skb, seed); if (v4to6) { - offset = ETH_H_LEN + IP_H_LEN + 2; + offset = L2_H_LEN(has_eth) + IP_H_LEN + 2; } else { - offset = ETH_H_LEN + IP6_H_LEN + 2; + offset = L2_H_LEN(has_eth) + IP6_H_LEN + 2; if (is_inner) offset += ICMP6_H_LEN + IP6_H_LEN; } @@ -232,8 +234,8 @@ update_icmp_checksum(struct __sk_buff *skb, bpf_l4_csum_replace(skb, offset, u_before, u_after, 4); } -static int -rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) +static __always_inline int +rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h, bool has_eth) { void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); @@ -243,7 +245,7 @@ rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) struct icmp6hdr *icmp6; __u32 mtu; - if (!ensure_header(&icmp, skb, &data, &data_end, ETH_H_LEN + IP_H_LEN)) + if (!ensure_header(&icmp, skb, &data, &data_end, L2_H_LEN(has_eth) + IP_H_LEN)) return -1; icmp_buf = *icmp; @@ -346,7 +348,7 @@ rewrite_icmp(struct __sk_buff *skb, const struct ipv6hdr *ip6h) } *icmp6 = icmp6_buf; - update_icmp_checksum(skb, ip6h, &icmp_buf, icmp6, true, false, 0); + update_icmp_checksum(skb, ip6h, &icmp_buf, icmp6, has_eth, true, false, 0); /* FIXME: also need to rewrite IP header embedded in ICMP error */ @@ -518,8 +520,8 @@ v6addr_to_v4(const struct in6_addr *addr6, int pref64_len, __be32 *addr4, struct } /* ipv4 traffic in from application on this device, needs to be translated to v6 and sent to PLAT */ -static int -clat_handle_v4(struct __sk_buff *skb) +static __always_inline int +clat_handle_v4(struct __sk_buff *skb, bool has_eth) { int ret = TC_ACT_OK; void *data_end = SKB_DATA_END(skb); @@ -531,11 +533,16 @@ clat_handle_v4(struct __sk_buff *skb) struct iphdr *iph; struct ethhdr *eth; - if (!ensure_header(&iph, skb, &data, &data_end, ETH_H_LEN)) + if (!ensure_header(&iph, skb, &data, &data_end, L2_H_LEN(has_eth))) goto out; - eth = data; - if (eth->h_proto != bpf_htons(ETH_P_IP)) + if (has_eth) { + eth = data; + if (eth->h_proto != bpf_htons(ETH_P_IP)) + goto out; + } + + if (iph->version != 4) goto out; if (iph->saddr != config.local_v4.s_addr) @@ -576,13 +583,13 @@ clat_handle_v4(struct __sk_buff *skb) switch (dst_hdr.nexthdr) { case IPPROTO_ICMP: - if (rewrite_icmp(skb, &dst_hdr)) + if (rewrite_icmp(skb, &dst_hdr, has_eth)) goto out; dst_hdr.nexthdr = IPPROTO_ICMPV6; break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, &dst_hdr, iph, true, false, false, NULL); + update_l4_checksum(skb, &dst_hdr, iph, has_eth, true, false, false, NULL); break; default: break; @@ -594,12 +601,15 @@ clat_handle_v4(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN)) + if (!ensure_header(&ip6h, skb, &data, &data_end, L2_H_LEN(has_eth))) goto out; - eth = data; - eth->h_proto = bpf_htons(ETH_P_IPV6); - *ip6h = dst_hdr; + if (has_eth) { + eth = data; + eth->h_proto = bpf_htons(ETH_P_IPV6); + } + + *ip6h = dst_hdr; ret = bpf_redirect(skb->ifindex, 0); out: @@ -734,8 +744,8 @@ translate_icmpv6_header(const struct icmp6hdr *icmp6, struct icmphdr *icmp) return 0; } -static int -rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) +static __always_inline int +rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff, bool has_eth) { void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); @@ -751,7 +761,11 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) * ------------------------------------------------------------------------- */ - if (!ensure_header(&icmp6, skb, &data, &data_end, ETH_H_LEN + 2 * IP6_H_LEN + ICMP6_H_LEN)) + if (!ensure_header(&icmp6, + skb, + &data, + &data_end, + L2_H_LEN(has_eth) + 2 * IP6_H_LEN + ICMP6_H_LEN)) return -1; icmp6_buf = *icmp6; @@ -763,9 +777,10 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) *icmp = icmp_buf; update_icmp_checksum(skb, - (struct ipv6hdr *) (data + ETH_H_LEN), + (struct ipv6hdr *) (data + L2_H_LEN(has_eth)), &icmp6_buf, icmp, + has_eth, false, true, 0); @@ -774,7 +789,11 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) data_end = SKB_DATA_END(skb); data = SKB_DATA(skb); - if (!ensure_header(&icmp, skb, &data, &data_end, ETH_H_LEN + 2 * IP6_H_LEN + ICMP6_H_LEN)) + if (!ensure_header(&icmp, + skb, + &data, + &data_end, + L2_H_LEN(has_eth) + 2 * IP6_H_LEN + ICMP6_H_LEN)) return -1; /* Compute the checksum difference between the old ICMPv6 header and the new ICMPv4 one */ @@ -785,8 +804,8 @@ rewrite_icmpv6_inner(struct __sk_buff *skb, __u32 *csum_diff) return 0; } -static int -rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_diff) +static __always_inline int +rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_diff, bool has_eth) { void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); @@ -801,7 +820,7 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif * ---------------------------------------------------------------- */ - if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN + ICMP6_H_LEN)) + if (!ensure_header(&ip6h, skb, &data, &data_end, L2_H_LEN(has_eth) + IP6_H_LEN + ICMP6_H_LEN)) return -1; if (!v6addr_equal(&ip6h->saddr, &config.local_v6)) @@ -822,12 +841,12 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif switch (dst_hdr->protocol) { case IPPROTO_ICMP: - if (rewrite_icmpv6_inner(skb, csum_diff)) + if (rewrite_icmpv6_inner(skb, csum_diff, has_eth)) return -1; break; case IPPROTO_TCP: case IPPROTO_UDP: - update_l4_checksum(skb, ip6h, dst_hdr, false, true, false, csum_diff); + update_l4_checksum(skb, ip6h, dst_hdr, has_eth, false, true, false, csum_diff); break; default: break; @@ -836,8 +855,8 @@ rewrite_ipv6_inner(struct __sk_buff *skb, struct iphdr *dst_hdr, __u32 *csum_dif return 0; } -static int -rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) +static __always_inline int +rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff, bool has_eth) { void *data_end = SKB_DATA_END(skb); void *data = SKB_DATA(skb); @@ -856,7 +875,7 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) * --------------------------------------------- */ - if (!ensure_header(&icmp6, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN)) + if (!ensure_header(&icmp6, skb, &data, &data_end, L2_H_LEN(has_eth) + IP6_H_LEN)) return -1; icmp6_buf = *icmp6; @@ -870,9 +889,10 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) /* ICMPv6 non-error message: only translate the header */ *icmp = icmp_buf; update_icmp_checksum(skb, - (struct ipv6hdr *) (data + ETH_H_LEN), + (struct ipv6hdr *) (data + L2_H_LEN(has_eth)), &icmp6_buf, icmp, + has_eth, false, false, 0); @@ -883,7 +903,7 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) * Track in csum_diff the incremental changes to the checksum for the ICMPv4 * header. */ - if (rewrite_ipv6_inner(skb, &ip_in_buf, &csum_diff)) + if (rewrite_ipv6_inner(skb, &ip_in_buf, &csum_diff, has_eth)) return -1; /* The inner IP header shrinks from 40 (IPv6) to 20 (IPv4) bytes; we need to move @@ -901,10 +921,10 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) data_end = SKB_DATA_END(skb); data = SKB_DATA(skb); - if (!ensure_header(&ip, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN + ICMP_H_LEN)) + if (!ensure_header(&ip, skb, &data, &data_end, L2_H_LEN(has_eth) + IP6_H_LEN + ICMP_H_LEN)) return -1; - icmp = data + ETH_H_LEN + IP6_H_LEN; + icmp = data + L2_H_LEN(has_eth) + IP6_H_LEN; /* Rewrite the ICMPv6 header with the translated ICMPv4 one */ *icmp = icmp_buf; @@ -913,9 +933,10 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) /* Update the ICMPv4 checksum according to all the changes in headers */ update_icmp_checksum(skb, - (struct ipv6hdr *) (data + ETH_H_LEN), + (struct ipv6hdr *) (data + L2_H_LEN(has_eth)), &icmp6_buf, icmp, + has_eth, false, false, csum_diff); @@ -924,8 +945,8 @@ rewrite_icmpv6(struct __sk_buff *skb, int *out_length_diff) } /* ipv6 traffic from the PLAT, to be translated into ipv4 and sent to an application */ -static int -clat_handle_v6(struct __sk_buff *skb) +static __always_inline int +clat_handle_v6(struct __sk_buff *skb, bool has_eth) { int ret = TC_ACT_OK; void *data_end = SKB_DATA_END(skb); @@ -939,11 +960,16 @@ clat_handle_v6(struct __sk_buff *skb) int length_diff = 0; bool fragmented = false; - if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN)) + if (!ensure_header(&ip6h, skb, &data, &data_end, L2_H_LEN(has_eth))) goto out; - eth = data; - if (eth->h_proto != bpf_htons(ETH_P_IPV6)) + if (has_eth) { + eth = data; + if (eth->h_proto != bpf_htons(ETH_P_IPV6)) + goto out; + } + + if (ip6h->version != 6) goto out; if (!v6addr_equal(&ip6h->daddr, &config.local_v6)) @@ -965,10 +991,10 @@ clat_handle_v6(struct __sk_buff *skb) if (ip6h->nexthdr != IPPROTO_ICMPV6) goto out; - if (!ensure_header(&icmp6, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN)) + if (!ensure_header(&icmp6, skb, &data, &data_end, L2_H_LEN(has_eth) + IP6_H_LEN)) goto out; - ip6h = data + ETH_H_LEN; + ip6h = data + L2_H_LEN(has_eth); if (icmp6->icmp6_type != ICMPV6_DEST_UNREACH && icmp6->icmp6_type != ICMPV6_TIME_EXCEED && icmp6->icmp6_type != ICMPV6_PKT_TOOBIG) @@ -995,10 +1021,10 @@ clat_handle_v6(struct __sk_buff *skb) int tot_len; __u16 offset; - if (!ensure_header(&frag, skb, &data, &data_end, ETH_H_LEN + IP6_H_LEN)) + if (!ensure_header(&frag, skb, &data, &data_end, L2_H_LEN(has_eth) + IP6_H_LEN)) goto out; - ip6h = data + ETH_H_LEN; + ip6h = data + L2_H_LEN(has_eth); /* Translate into an IPv4 fragmented packet, RFC 6145 5.1.1 */ @@ -1046,7 +1072,7 @@ clat_handle_v6(struct __sk_buff *skb) if (fragmented) goto out; - if (rewrite_icmpv6(skb, &length_diff)) + if (rewrite_icmpv6(skb, &length_diff, has_eth)) goto out; break; case IPPROTO_TCP: @@ -1054,7 +1080,7 @@ clat_handle_v6(struct __sk_buff *skb) /* Update the L4 headers only for non-fragmented packets or for the first * fragment, which contains the L4 header. */ if (!fragmented || (bpf_ntohs(dst_hdr.frag_off) & 0x1FFF) == 0) { - update_l4_checksum(skb, ip6h, &dst_hdr, false, false, fragmented, NULL); + update_l4_checksum(skb, ip6h, &dst_hdr, has_eth, false, false, fragmented, NULL); } break; default: @@ -1067,7 +1093,7 @@ clat_handle_v6(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - if (!ensure_header(&ip6h, skb, &data, &data_end, ETH_H_LEN)) + if (!ensure_header(&ip6h, skb, &data, &data_end, L2_H_LEN(has_eth))) goto out; dst_hdr.tot_len = bpf_htons(bpf_ntohs(ip6h->payload_len) + length_diff + IP_H_LEN); @@ -1089,28 +1115,52 @@ clat_handle_v6(struct __sk_buff *skb) data = SKB_DATA(skb); data_end = SKB_DATA_END(skb); - if (!ensure_header(&iph, skb, &data, &data_end, ETH_H_LEN)) + if (!ensure_header(&iph, skb, &data, &data_end, L2_H_LEN(has_eth))) goto out; - eth = data; - eth->h_proto = bpf_htons(ETH_P_IP); - *iph = dst_hdr; + if (has_eth) { + eth = data; + eth->h_proto = bpf_htons(ETH_P_IP); + } + + *iph = dst_hdr; ret = bpf_redirect(skb->ifindex, BPF_F_INGRESS); out: return ret; } +/* Use separate entry points for interfaces with and without an + * Ethernet header. Since all functions are now marked as inline, + * the compiler is able to replace the value of the parametric + * L2_H_LEN() macros with an immediate constant. This avoids + * pointer arithmetic which is forbidden because we don't run with + * CAP_PERFMON. The loader attaches the right program pair based + * on the interface type. */ SEC("tcx/egress") int -nm_clat_egress(struct __sk_buff *skb) +nm_clat_egress_eth(struct __sk_buff *skb) { - return clat_handle_v4(skb); + return clat_handle_v4(skb, true); +} + +SEC("tcx/egress") +int +nm_clat_egress_rawip(struct __sk_buff *skb) +{ + return clat_handle_v4(skb, false); } SEC("tcx/ingress") int -nm_clat_ingress(struct __sk_buff *skb) +nm_clat_ingress_eth(struct __sk_buff *skb) { - return clat_handle_v6(skb); + return clat_handle_v6(skb, true); +} + +SEC("tcx/ingress") +int +nm_clat_ingress_rawip(struct __sk_buff *skb) +{ + return clat_handle_v6(skb, false); } diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 096ba73e63..ee05bedd01 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -5351,6 +5351,7 @@ nm_utils_icmp6_checksum(const void *ip6_src, size_t data_len, const void *data) * nm_utils_ipv6_dad_send: * @addr: the target IPv6 address * @ifindex: the interface index + * @arptype: the ARP hardware type of the interface (e.g. ARPHRD_ETHER, ARPHRD_NONE) * * Send an IPv6 Duplicate Address Detection (DAD) Neighbor Solicitation * for the given address. @@ -5358,7 +5359,7 @@ nm_utils_icmp6_checksum(const void *ip6_src, size_t data_len, const void *data) * Returns: %TRUE if the packet was sent successfully, %FALSE on error */ gboolean -nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex) +nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex, int arptype) { /* DAD packet: IPv6 header + ICMPv6 NS + nonce option (RFC 3971) */ struct _nm_packed { @@ -5427,16 +5428,26 @@ nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex) return FALSE; } - /* Build link-layer destination address for solicited-node multicast */ + /* Build link-layer destination address. For Ethernet, use the solicited-node + * multicast MAC address. For L3-only devices (ARPHRD_NONE, ARPHRD_RAWIP, etc.) + * there is no L2 header, so set sll_halen to 0. */ { struct sockaddr_ll dst_ll = { .sll_family = AF_PACKET, .sll_protocol = htons(ETH_P_IPV6), .sll_ifindex = ifindex, - .sll_halen = ETH_ALEN, - .sll_addr = {0x33, 0x33, 0xff, addr->s6_addr[13], addr->s6_addr[14], addr->s6_addr[15]}, }; + if (arptype == ARPHRD_ETHER) { + dst_ll.sll_halen = ETH_ALEN; + dst_ll.sll_addr[0] = 0x33; + dst_ll.sll_addr[1] = 0x33; + dst_ll.sll_addr[2] = 0xff; + dst_ll.sll_addr[3] = addr->s6_addr[13]; + dst_ll.sll_addr[4] = addr->s6_addr[14]; + dst_ll.sll_addr[5] = addr->s6_addr[15]; + } + if (sendto(fd, &dad_pkt, sizeof(dad_pkt), 0, (struct sockaddr *) &dst_ll, sizeof(dst_ll)) < 0) { errsv = errno; diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index b98b30a2e8..a1892b9993 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -534,6 +534,6 @@ gboolean nm_utils_ping_host_finish(GAsyncResult *result, GError **error); uint16_t nm_utils_icmp6_checksum(const void *ip6_src, size_t data_len, const void *data); -gboolean nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex); +gboolean nm_utils_ipv6_dad_send(const struct in6_addr *addr, int ifindex, int arptype); #endif /* __NM_CORE_UTILS_H__ */ diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 61575a4b93..dfb881ebc1 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -7,6 +7,7 @@ #include "libnm-std-aux/nm-linux-compat.h" #include +#include #include "nm-compat-headers/linux/if_addr.h" #include #include @@ -5691,36 +5692,77 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) char buf[100]; struct clat_config clat_config; gboolean v6_changed; + const NMPlatformLink *pllink; + gboolean has_ethernet_header = FALSE; if (l3cd && nm_l3_config_data_get_pref64(l3cd, &_l3cd_pref64_inner, &l3cd_pref64_plen)) { l3cd_pref64 = &_l3cd_pref64_inner; } if (l3cd_pref64 && self->priv.p->clat_address_4 && self->priv.p->clat_address_6_valid) { + pllink = nm_l3cfg_get_pllink(self, TRUE); + if (!pllink) { + has_ethernet_header = TRUE; + } else { + switch (pllink->arptype) { + case ARPHRD_ETHER: + has_ethernet_header = TRUE; + break; + case ARPHRD_NONE: + case ARPHRD_PPP: + case ARPHRD_RAWIP: + has_ethernet_header = FALSE; + break; + default: + _LOGD("clat: unknown ARP type %u, assuming the interface uses no L2 header", + pllink->arptype); + has_ethernet_header = FALSE; + } + } + if (!self->priv.p->clat_bpf) { _LOGT("clat: attaching the BPF program"); - self->priv.p->clat_bpf = clat_bpf__open_and_load(); + self->priv.p->clat_bpf = clat_bpf__open(); if (!self->priv.p->clat_bpf) { libbpf_strerror(errno, buf, sizeof(buf)); - _LOGW("clat: failed to open and load the BPF program: %s", buf); + _LOGW("clat: failed to open the BPF program: %s", buf); return; } - self->priv.p->clat_ingress_link = - bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.nm_clat_ingress, - self->priv.ifindex, - NULL); + /* Only load the programs for the right L2 type */ + bpf_program__set_autoload(self->priv.p->clat_bpf->progs.nm_clat_ingress_eth, + has_ethernet_header); + bpf_program__set_autoload(self->priv.p->clat_bpf->progs.nm_clat_egress_eth, + has_ethernet_header); + bpf_program__set_autoload(self->priv.p->clat_bpf->progs.nm_clat_ingress_rawip, + !has_ethernet_header); + bpf_program__set_autoload(self->priv.p->clat_bpf->progs.nm_clat_egress_rawip, + !has_ethernet_header); + + if (clat_bpf__load(self->priv.p->clat_bpf)) { + libbpf_strerror(errno, buf, sizeof(buf)); + _LOGW("clat: failed to load the BPF program: %s", buf); + nm_clear_pointer(&self->priv.p->clat_bpf, clat_bpf__destroy); + return; + } + + self->priv.p->clat_ingress_link = bpf_program__attach_tcx( + has_ethernet_header ? self->priv.p->clat_bpf->progs.nm_clat_ingress_eth + : self->priv.p->clat_bpf->progs.nm_clat_ingress_rawip, + self->priv.ifindex, + NULL); if (!self->priv.p->clat_ingress_link) { libbpf_strerror(errno, buf, sizeof(buf)); _LOGW("clat: failed to attach the ingress program: %s", buf); return; } - self->priv.p->clat_egress_link = - bpf_program__attach_tcx(self->priv.p->clat_bpf->progs.nm_clat_egress, - self->priv.ifindex, - NULL); + self->priv.p->clat_egress_link = bpf_program__attach_tcx( + has_ethernet_header ? self->priv.p->clat_bpf->progs.nm_clat_egress_eth + : self->priv.p->clat_bpf->progs.nm_clat_egress_rawip, + self->priv.ifindex, + NULL); if (!self->priv.p->clat_egress_link) { libbpf_strerror(errno, buf, sizeof(buf)); _LOGW("clat: failed to attach the egress program: %s", buf); @@ -5789,7 +5831,9 @@ _l3_commit_pref64(NML3Cfg *self, NML3CfgCommitType commit_type) * doesn't help with collisions, but collisions are anyway very unlikely * because the interface identifier is a random 64-bit value. */ - nm_utils_ipv6_dad_send(&self->priv.p->clat_address_6.address, self->priv.ifindex); + nm_utils_ipv6_dad_send(&self->priv.p->clat_address_6.address, + self->priv.ifindex, + pllink ? pllink->arptype : ARPHRD_ETHER); mreq.ipv6mr_multiaddr = self->priv.p->clat_address_6.address; From a4e30ee849c05d73bdebb0c963724fc3e61d567c Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 6 Feb 2026 17:32:42 +0100 Subject: [PATCH 153/153] clat: print translation statistics during deactivation Print some statistics about the translation when the connection goes down: clat: stats: egress (v4 to v6): tcp 1275, udp 191, icmp 9, other 0, dropped 2; ingress (v6 to v4): tcp 1669, udp 272, icmp 0, other 0, fragment 136, dropped 0 Those counters can be used to better understand what's going wrong in case of problems; for example, if the packets are being dropped in the ingress path or in the egress one. --- src/core/bpf/clat.bpf.c | 37 +++++++++++++++++++++++++++++++++++++ src/core/bpf/clat.h | 16 ++++++++++++++++ src/core/nm-l3cfg.c | 22 ++++++++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/src/core/bpf/clat.bpf.c b/src/core/bpf/clat.bpf.c index e44817fc3a..97d74a6191 100644 --- a/src/core/bpf/clat.bpf.c +++ b/src/core/bpf/clat.bpf.c @@ -33,6 +33,7 @@ char _license[] SEC("license") = "GPL"; struct clat_config config; +struct clat_stats stats; #ifdef DEBUG /* Note: when enabling debugging, you also need to add CAP_PERFMON @@ -611,8 +612,25 @@ clat_handle_v4(struct __sk_buff *skb, bool has_eth) *ip6h = dst_hdr; + switch (dst_hdr.nexthdr) { + case IPPROTO_ICMPV6: + __sync_fetch_and_add(&stats.egress_icmp, 1); + break; + case IPPROTO_TCP: + __sync_fetch_and_add(&stats.egress_tcp, 1); + break; + case IPPROTO_UDP: + __sync_fetch_and_add(&stats.egress_udp, 1); + break; + default: + __sync_fetch_and_add(&stats.egress_other, 1); + break; + } + ret = bpf_redirect(skb->ifindex, 0); out: + if (ret == TC_ACT_SHOT) + __sync_fetch_and_add(&stats.egress_dropped, 1); return ret; } @@ -1125,8 +1143,27 @@ clat_handle_v6(struct __sk_buff *skb, bool has_eth) *iph = dst_hdr; + if (fragmented) + __sync_fetch_and_add(&stats.ingress_fragment, 1); + switch (dst_hdr.protocol) { + case IPPROTO_ICMP: + __sync_fetch_and_add(&stats.ingress_icmp, 1); + break; + case IPPROTO_TCP: + __sync_fetch_and_add(&stats.ingress_tcp, 1); + break; + case IPPROTO_UDP: + __sync_fetch_and_add(&stats.ingress_udp, 1); + break; + default: + __sync_fetch_and_add(&stats.ingress_other, 1); + break; + } + ret = bpf_redirect(skb->ifindex, BPF_F_INGRESS); out: + if (ret == TC_ACT_SHOT) + __sync_fetch_and_add(&stats.ingress_dropped, 1); return ret; } diff --git a/src/core/bpf/clat.h b/src/core/bpf/clat.h index 3d926b527f..4a8adba58d 100644 --- a/src/core/bpf/clat.h +++ b/src/core/bpf/clat.h @@ -11,4 +11,20 @@ struct clat_config { unsigned pref64_len; }; +struct clat_stats { + /* egress: v4 to v6 */ + __u64 egress_tcp; + __u64 egress_udp; + __u64 egress_icmp; + __u64 egress_other; + __u64 egress_dropped; + /* ingress: v6 to v4 */ + __u64 ingress_tcp; + __u64 ingress_udp; + __u64 ingress_icmp; + __u64 ingress_other; + __u64 ingress_fragment; + __u64 ingress_dropped; +}; + #endif diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index dfb881ebc1..9bb272df10 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -5660,6 +5660,28 @@ _l3_clat_destroy(NML3Cfg *self) char buf[100]; int err; + if (self->priv.p->clat_bpf) { + const struct clat_stats *s = &self->priv.p->clat_bpf->bss->stats; + + _LOGT("clat: stats:" + " egress (v4 to v6): tcp %" G_GUINT64_FORMAT ", udp %" G_GUINT64_FORMAT + ", icmp %" G_GUINT64_FORMAT ", other %" G_GUINT64_FORMAT + ", dropped %" G_GUINT64_FORMAT "; ingress (v6 to v4): tcp %" G_GUINT64_FORMAT + ", udp %" G_GUINT64_FORMAT ", icmp %" G_GUINT64_FORMAT ", other %" G_GUINT64_FORMAT + ", fragment %" G_GUINT64_FORMAT ", dropped %" G_GUINT64_FORMAT, + (guint64) s->egress_tcp, + (guint64) s->egress_udp, + (guint64) s->egress_icmp, + (guint64) s->egress_other, + (guint64) s->egress_dropped, + (guint64) s->ingress_tcp, + (guint64) s->ingress_udp, + (guint64) s->ingress_icmp, + (guint64) s->ingress_other, + (guint64) s->ingress_fragment, + (guint64) s->ingress_dropped); + } + if (self->priv.p->clat_ingress_link) { err = bpf_link__destroy(self->priv.p->clat_ingress_link); if (err != 0) {