From 8a2e4519fb998e39077d00ed70ac8bfd85cb8da1 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 2 Nov 2021 03:51:04 -0400 Subject: [PATCH] import NetworkManager-1.30.0-13.el8_4 --- ...e-IPv6-multicast-route-added-by-kern.patch | 100 + ...r-feres-with-other-subnets-on-the-VM.patch | 1844 +++++ ...-set-IPv4-required-timeout-rh1961666.patch | 7181 +++++++++++++++++ ...ud-setup-azure-fix-gateway-rh1912236.patch | 461 ++ SPECS/NetworkManager.spec | 17 +- 5 files changed, 9602 insertions(+), 1 deletion(-) create mode 100644 SOURCES/1013-platform-preserve-IPv6-multicast-route-added-by-kern.patch create mode 100644 SOURCES/1014-default-route-inter-feres-with-other-subnets-on-the-VM.patch create mode 100644 SOURCES/1015-initrd-set-IPv4-required-timeout-rh1961666.patch create mode 100644 SOURCES/1016-cloud-setup-azure-fix-gateway-rh1912236.patch diff --git a/SOURCES/1013-platform-preserve-IPv6-multicast-route-added-by-kern.patch b/SOURCES/1013-platform-preserve-IPv6-multicast-route-added-by-kern.patch new file mode 100644 index 0000000..7c8efb6 --- /dev/null +++ b/SOURCES/1013-platform-preserve-IPv6-multicast-route-added-by-kern.patch @@ -0,0 +1,100 @@ +From d01912d2fc964af30b3c9a47e98c7925a5f60c07 Mon Sep 17 00:00:00 2001 +From: Beniamino Galvani +Date: Fri, 17 Sep 2021 13:53:18 +0200 +Subject: [PATCH] platform: preserve IPv6 multicast route added by kernel + +Kernels < 5.11 add a route like: + + unicast ff00::/8 dev $IFACE proto boot scope global metric 256 pref medium + +to allow sending and receiving IPv6 multicast traffic. Ensure it's not +removed it when we do a route sync in mode ALL. + +In kernel 5.11 there were commits: + + https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ceed9038b2783d14e0422bdc6fd04f70580efb4c + https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a826b04303a40d52439aa141035fca5654ccaccd + +After those the route looks like + + multicast ff00::/8 dev $IFACE proto kernel metric 256 pref medium + +As NM ignores routes with rtm_type multicast, the code in this commit +is not needed on newer kernels. + +https://bugzilla.redhat.com/show_bug.cgi?id=2004212 +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/984 +(cherry picked from commit 8003ca68f770c69e109c16f638abbcce44af9439) +(cherry picked from commit ce8eb446b4d9465a906bf8952c1b454dab8d0c7c) +(cherry picked from commit d01912d2fc964af30b3c9a47e98c7925a5f60c07) +--- + src/core/platform/nm-platform.c | 39 +++++++++++++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +diff --git a/src/core/platform/nm-platform.c b/src/core/platform/nm-platform.c +index 459a330717..febc3a8d6f 100644 +--- a/src/core/platform/nm-platform.c ++++ b/src/core/platform/nm-platform.c +@@ -4359,6 +4359,7 @@ nm_platform_ip_route_get_prune_list(NMPlatform * self, + CList * iter; + NMPlatformIP4Route rt_local4; + NMPlatformIP6Route rt_local6; ++ NMPlatformIP6Route rt_mcast6; + const NMPlatformLink * pllink; + const NMPlatformLnkVrf * lnk_vrf; + guint32 local_table; +@@ -4383,6 +4384,7 @@ nm_platform_ip_route_get_prune_list(NMPlatform * self, + + rt_local4.plen = 0; + rt_local6.plen = 0; ++ rt_mcast6.plen = 0; + + routes_prune = g_ptr_array_new_full(head_entry->len, (GDestroyNotify) nm_dedup_multi_obj_unref); + +@@ -4475,6 +4477,43 @@ nm_platform_ip_route_get_prune_list(NMPlatform * self, + == 0) + continue; + } ++ ++ /* Kernels < 5.11 add a route like: ++ * ++ * unicast ff00::/8 dev $IFACE proto boot scope global metric 256 pref medium ++ * ++ * to allow sending and receiving IPv6 multicast traffic. Don't remove it. ++ * Since kernel 5.11 the route looks like: ++ * ++ * multicast ff00::/8 dev $IFACE proto kernel metric 256 pref medium ++ * ++ * As NM ignores routes with rtm_type multicast, there is no need for the code ++ * below on newer kernels. ++ */ ++ if (nm_platform_ip_route_get_effective_table(&rt->rx) == local_table ++ && rt->rx.plen == 8 && rt->rx.rt_source == NM_IP_CONFIG_SOURCE_RTPROT_BOOT ++ && rt->rx.metric == 256 && rt->r6.rt_pref == NM_ICMPV6_ROUTER_PREF_MEDIUM ++ && IN6_IS_ADDR_UNSPECIFIED(&rt->r6.gateway)) { ++ if (rt_mcast6.plen == 0) { ++ rt_mcast6 = (NMPlatformIP6Route){ ++ .ifindex = ifindex, ++ .type_coerced = nm_platform_route_type_coerce(RTN_UNICAST), ++ .plen = 8, ++ .rt_source = NM_IP_CONFIG_SOURCE_RTPROT_BOOT, ++ .metric = 256, ++ .table_coerced = nm_platform_route_table_coerce(local_table), ++ .rt_pref = NM_ICMPV6_ROUTER_PREF_MEDIUM, ++ .gateway = IN6ADDR_ANY_INIT, ++ .network = {{{0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}, ++ }; ++ } ++ ++ if (nm_platform_ip6_route_cmp(&rt->r6, ++ &rt_mcast6, ++ NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) ++ == 0) ++ continue; ++ } + } + break; + +-- +2.31.1 + diff --git a/SOURCES/1014-default-route-inter-feres-with-other-subnets-on-the-VM.patch b/SOURCES/1014-default-route-inter-feres-with-other-subnets-on-the-VM.patch new file mode 100644 index 0000000..b12192f --- /dev/null +++ b/SOURCES/1014-default-route-inter-feres-with-other-subnets-on-the-VM.patch @@ -0,0 +1,1844 @@ +From 85d1baca1f12fb3d096bc6018d73747c31e2bd91 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 12:14:13 +0200 +Subject: [PATCH 01/15] glib-aux: add _nm_utils_ascii_str_to_int64_bin() helper + +(cherry picked from commit 70b7ad1a761405f4ac9398832d0365c47cd5aa0f) +(cherry picked from commit b8bb585052331a48764d6d5d21ee23e2f82f1078) +--- + shared/nm-glib-aux/nm-shared-utils.c | 39 ++++++++++++++++++++++++++++ + shared/nm-glib-aux/nm-shared-utils.h | 7 +++++ + 2 files changed, 46 insertions(+) + +diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c +index 3215a33b5b..30ef68874f 100644 +--- a/shared/nm-glib-aux/nm-shared-utils.c ++++ b/shared/nm-glib-aux/nm-shared-utils.c +@@ -1381,6 +1381,45 @@ _nm_utils_ascii_str_to_uint64(const char *str, + + /*****************************************************************************/ + ++gint64 ++_nm_utils_ascii_str_to_int64_bin(const char *str, ++ gssize len, ++ guint base, ++ gint64 min, ++ gint64 max, ++ gint64 fallback) ++{ ++ gs_free char *str_clone = NULL; ++ ++ /* This is like _nm_utils_ascii_str_to_int64(), but the user may provide ++ * an optional string length, in which case str is not assumed to be NUL ++ * terminated. In that case, any NUL characters inside the first len characters ++ * lead to a failure, except one last NUL character is allowed. */ ++ ++ if (len >= 0) { ++ gsize l = len; ++ ++ nm_assert(l == 0 || str); ++ ++ if (l > 0 && str[l - 1u] == '\0') { ++ /* we accept one '\0' at the end of the string. */ ++ l--; ++ } ++ ++ if (l > 0 && memchr(str, '\0', l)) { ++ /* but we don't accept other NUL characters in the middle. */ ++ errno = EINVAL; ++ return fallback; ++ } ++ ++ str = nm_strndup_a(300, str, len, &str_clone); ++ } ++ ++ return _nm_utils_ascii_str_to_int64(str, base, min, max, fallback); ++} ++ ++/*****************************************************************************/ ++ + int + nm_strcmp_with_data(gconstpointer a, gconstpointer b, gpointer user_data) + { +diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h +index 7d330458c1..ed4fcaf9c1 100644 +--- a/shared/nm-glib-aux/nm-shared-utils.h ++++ b/shared/nm-glib-aux/nm-shared-utils.h +@@ -760,6 +760,13 @@ guint64 _nm_utils_ascii_str_to_uint64(const char *str, + guint64 max, + guint64 fallback); + ++gint64 _nm_utils_ascii_str_to_int64_bin(const char *str, ++ gssize len, ++ guint base, ++ gint64 min, ++ gint64 max, ++ gint64 fallback); ++ + int _nm_utils_ascii_str_to_bool(const char *str, int default_value); + + /*****************************************************************************/ +-- +2.31.1 + + +From eb82099df0276babc2c7dd8fa44753741f1be891 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 15 Jun 2021 19:04:39 +0200 +Subject: [PATCH 02/15] libnm: expose nm_ip_address_dup(), nm_ip_route_dup() + API in libnm + +This fixes commit 21c8a6b20eff ('libnm-core, all: merge IPv4 and IPv6 +address/route types'), which introduced this API but didn't export it +in the library. In practice this API is thus only usable since 1.32.0. + +(cherry picked from commit 05f2a0b0247ee4aa3da371658f310bc655cbf1af) +(cherry picked from commit eea912dfb31a40909cad7b784a82bbfbe56ef486) +(cherry picked from commit 2585e34e598074e41445e4dd25d1b496ffbcea3f) +--- + libnm-core/nm-setting-ip-config.c | 12 ++++++++++++ + libnm-core/nm-setting-ip-config.h | 3 +++ + libnm/libnm.ver | 2 ++ + 3 files changed, 17 insertions(+) + +diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c +index 45ecbd8868..c121907cef 100644 +--- a/libnm-core/nm-setting-ip-config.c ++++ b/libnm-core/nm-setting-ip-config.c +@@ -363,6 +363,12 @@ nm_ip_address_equal(NMIPAddress *address, NMIPAddress *other) + * Creates a copy of @address + * + * Returns: (transfer full): a copy of @address ++ * ++ * This API was part of public headers before 1.32.0 but ++ * was erroneously not exported in the ABI. It is thus only ++ * usable since 1.32.0, 1.30.0. ++ * ++ * Since: 1.32, 1.30 + **/ + NMIPAddress * + nm_ip_address_dup(NMIPAddress *address) +@@ -820,6 +826,12 @@ nm_ip_route_equal(NMIPRoute *route, NMIPRoute *other) + * Creates a copy of @route + * + * Returns: (transfer full): a copy of @route ++ * ++ * This API was part of public headers before 1.32.0 but ++ * was erroneously not exported in the ABI. It is thus only ++ * usable since 1.32.0, 1.30.0. ++ * ++ * Since: 1.32, 1.30 + **/ + NMIPRoute * + nm_ip_route_dup(NMIPRoute *route) +diff --git a/libnm-core/nm-setting-ip-config.h b/libnm-core/nm-setting-ip-config.h +index 1cb1671714..1421402c76 100644 +--- a/libnm-core/nm-setting-ip-config.h ++++ b/libnm-core/nm-setting-ip-config.h +@@ -49,6 +49,8 @@ gboolean nm_ip_address_equal(NMIPAddress *address, NMIPAddress *other); + NM_AVAILABLE_IN_1_22 + int + nm_ip_address_cmp_full(const NMIPAddress *a, const NMIPAddress *b, NMIPAddressCmpFlags cmp_flags); ++ ++NM_AVAILABLE_IN_1_30 + NMIPAddress *nm_ip_address_dup(NMIPAddress *address); + + int nm_ip_address_get_family(NMIPAddress *address); +@@ -92,6 +94,7 @@ enum { /*< flags >*/ + NM_AVAILABLE_IN_1_10 + gboolean nm_ip_route_equal_full(NMIPRoute *route, NMIPRoute *other, guint cmp_flags); + ++NM_AVAILABLE_IN_1_30 + NMIPRoute *nm_ip_route_dup(NMIPRoute *route); + + int nm_ip_route_get_family(NMIPRoute *route); +diff --git a/libnm/libnm.ver b/libnm/libnm.ver +index c61792c749..516ff9cae0 100644 +--- a/libnm/libnm.ver ++++ b/libnm/libnm.ver +@@ -1759,6 +1759,8 @@ global: + libnm_1_30_0 { + global: + nm_device_veth_get_type; ++ nm_ip_address_dup; ++ nm_ip_route_dup; + nm_keyfile_handler_data_fail_with_error; + nm_keyfile_handler_data_get_context; + nm_keyfile_handler_data_warn_get; +-- +2.31.1 + + +From f7154197006b070de57d8a57d2887d30d4f7001b Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 09:30:29 +0200 +Subject: [PATCH 03/15] cloud-setup: return structure for get_config() result + instead of generic hash table + +Returning a struct seems easier to understand, because then the result +is typed. + +Also, we might return additional results, which are system wide and not +per-interface. + +(cherry picked from commit 323e18276894591712a5e29f6e907562c79c5216) +(cherry picked from commit c94b1c43d4b5c5b88d67d7966d23a005028e78d8) +(cherry picked from commit b2ed9e7d5df01dc20ae3ce18066f38f69fe31e9d) +--- + clients/cloud-setup/main.c | 54 +++++++++++++++-------------- + clients/cloud-setup/nmcs-provider.c | 28 +++++++++++++-- + clients/cloud-setup/nmcs-provider.h | 20 ++++++++++- + 3 files changed, 72 insertions(+), 30 deletions(-) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index 065901760a..c57c5ab5ca 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -198,30 +198,30 @@ _nmc_get_device_by_hwaddr(NMClient *nmc, const char *hwaddr) + /*****************************************************************************/ + + typedef struct { +- GMainLoop * main_loop; +- GHashTable *config_dict; ++ GMainLoop * main_loop; ++ NMCSProviderGetConfigResult *result; + } GetConfigData; + + static void +-_get_config_cb(GObject *source, GAsyncResult *result, gpointer user_data) ++_get_config_cb(GObject *source, GAsyncResult *res, gpointer user_data) + { +- GetConfigData * data = user_data; +- gs_unref_hashtable GHashTable *config_dict = NULL; +- gs_free_error GError *error = NULL; ++ GetConfigData * data = user_data; ++ nm_auto_free_nmcs_provider_get_config_result NMCSProviderGetConfigResult *result = NULL; ++ gs_free_error GError *error = NULL; + +- config_dict = nmcs_provider_get_config_finish(NMCS_PROVIDER(source), result, &error); ++ result = nmcs_provider_get_config_finish(NMCS_PROVIDER(source), res, &error); + +- if (!config_dict) { ++ if (!result) { + if (!nm_utils_error_is_cancelled(error)) + _LOGI("failure to get meta data: %s", error->message); + } else + _LOGD("meta data received"); + +- data->config_dict = g_steal_pointer(&config_dict); ++ data->result = g_steal_pointer(&result); + g_main_loop_quit(data->main_loop); + } + +-static GHashTable * ++static NMCSProviderGetConfigResult * + _get_config(GCancellable *sigterm_cancellable, NMCSProvider *provider, NMClient *nmc) + { + nm_auto_unref_gmainloop GMainLoop *main_loop = g_main_loop_new(NULL, FALSE); +@@ -241,7 +241,7 @@ _get_config(GCancellable *sigterm_cancellable, NMCSProvider *provider, NMClient + + g_main_loop_run(main_loop); + +- return data.config_dict; ++ return data.result; + } + + /*****************************************************************************/ +@@ -361,13 +361,13 @@ _nmc_mangle_connection(NMDevice * device, + /*****************************************************************************/ + + static guint +-_config_data_get_num_valid(GHashTable *config_dict) ++_config_data_get_num_valid(const NMCSProviderGetConfigResult *result) + { + const NMCSProviderGetConfigIfaceData *config_data; + GHashTableIter h_iter; + guint n = 0; + +- g_hash_table_iter_init(&h_iter, config_dict); ++ g_hash_table_iter_init(&h_iter, result->iface_datas); + while (g_hash_table_iter_next(&h_iter, NULL, (gpointer *) &config_data)) { + if (nmcs_provider_get_config_iface_data_is_valid(config_data)) + n++; +@@ -490,7 +490,9 @@ try_again: + } + + static gboolean +-_config_all(GCancellable *sigterm_cancellable, NMClient *nmc, GHashTable *config_dict) ++_config_all(GCancellable * sigterm_cancellable, ++ NMClient * nmc, ++ const NMCSProviderGetConfigResult *result) + { + GHashTableIter h_iter; + const NMCSProviderGetConfigIfaceData *c_config_data; +@@ -498,9 +500,9 @@ _config_all(GCancellable *sigterm_cancellable, NMClient *nmc, GHashTable *config + gboolean is_single_nic; + gboolean any_changes = FALSE; + +- is_single_nic = (_config_data_get_num_valid(config_dict) <= 1); ++ is_single_nic = (_config_data_get_num_valid(result) <= 1); + +- g_hash_table_iter_init(&h_iter, config_dict); ++ g_hash_table_iter_init(&h_iter, result->iface_datas); + while (g_hash_table_iter_next(&h_iter, (gpointer *) &c_hwaddr, (gpointer *) &c_config_data)) { + if (_config_one(sigterm_cancellable, nmc, is_single_nic, c_hwaddr, c_config_data)) + any_changes = TRUE; +@@ -529,12 +531,12 @@ sigterm_handler(gpointer user_data) + int + main(int argc, const char *const *argv) + { +- gs_unref_object GCancellable * sigterm_cancellable = NULL; +- nm_auto_destroy_and_unref_gsource GSource *sigterm_source = NULL; +- gs_unref_object NMCSProvider *provider = NULL; +- gs_unref_object NMClient *nmc = NULL; +- gs_unref_hashtable GHashTable *config_dict = NULL; +- gs_free_error GError *error = NULL; ++ gs_unref_object GCancellable * sigterm_cancellable = NULL; ++ nm_auto_destroy_and_unref_gsource GSource *sigterm_source = NULL; ++ gs_unref_object NMCSProvider *provider = NULL; ++ gs_unref_object NMClient * nmc = NULL; ++ nm_auto_free_nmcs_provider_get_config_result NMCSProviderGetConfigResult *result = NULL; ++ gs_free_error GError *error = NULL; + + _nm_logging_enabled_init(g_getenv(NMCS_ENV_VARIABLE("NM_CLOUD_SETUP_LOG"))); + +@@ -579,17 +581,17 @@ main(int argc, const char *const *argv) + goto done; + } + +- config_dict = _get_config(sigterm_cancellable, provider, nmc); +- if (!config_dict) ++ result = _get_config(sigterm_cancellable, provider, nmc); ++ if (!result) + goto done; + +- if (_config_all(sigterm_cancellable, nmc, config_dict)) ++ if (_config_all(sigterm_cancellable, nmc, result)) + _LOGI("some changes were applied for provider %s", nmcs_provider_get_name(provider)); + else + _LOGD("no changes were applied for provider %s", nmcs_provider_get_name(provider)); + + done: +- nm_clear_pointer(&config_dict, g_hash_table_unref); ++ nm_clear_pointer(&result, nmcs_provider_get_config_result_free); + g_clear_object(&nmc); + g_clear_object(&provider); + +diff --git a/clients/cloud-setup/nmcs-provider.c b/clients/cloud-setup/nmcs-provider.c +index c700d8e1a3..d335193166 100644 +--- a/clients/cloud-setup/nmcs-provider.c ++++ b/clients/cloud-setup/nmcs-provider.c +@@ -49,6 +49,28 @@ nmcs_provider_get_main_context(NMCSProvider *self) + + return nm_http_client_get_main_context(NMCS_PROVIDER_GET_PRIVATE(self)->http_client); + } ++/*****************************************************************************/ ++ ++static NMCSProviderGetConfigResult * ++nmcs_provider_get_config_result_new(GHashTable *iface_datas) ++{ ++ NMCSProviderGetConfigResult *result; ++ ++ result = g_new(NMCSProviderGetConfigResult, 1); ++ *result = (NMCSProviderGetConfigResult){ ++ .iface_datas = g_hash_table_ref(iface_datas), ++ }; ++ return result; ++} ++ ++void ++nmcs_provider_get_config_result_free(NMCSProviderGetConfigResult *result) ++{ ++ if (result) { ++ nm_g_hash_table_unref(result->iface_datas); ++ g_free(result); ++ } ++} + + /*****************************************************************************/ + +@@ -137,8 +159,8 @@ _get_config_task_maybe_return(NMCSProviderGetConfigTaskData *get_config_data, GE + } else { + _LOGD("get-config: success"); + g_task_return_pointer(get_config_data->task, +- g_hash_table_ref(get_config_data->result_dict), +- (GDestroyNotify) g_hash_table_unref); ++ nmcs_provider_get_config_result_new(get_config_data->result_dict), ++ (GDestroyNotify) nmcs_provider_get_config_result_free); + } + + nm_clear_g_signal_handler(g_task_get_cancellable(get_config_data->task), +@@ -217,7 +239,7 @@ nmcs_provider_get_config(NMCSProvider * self, + NMCS_PROVIDER_GET_CLASS(self)->get_config(self, get_config_data); + } + +-GHashTable * ++NMCSProviderGetConfigResult * + nmcs_provider_get_config_finish(NMCSProvider *self, GAsyncResult *result, GError **error) + { + g_return_val_if_fail(NMCS_IS_PROVIDER(self), FALSE); +diff --git a/clients/cloud-setup/nmcs-provider.h b/clients/cloud-setup/nmcs-provider.h +index 3b0c2529ed..81aca966e4 100644 +--- a/clients/cloud-setup/nmcs-provider.h ++++ b/clients/cloud-setup/nmcs-provider.h +@@ -41,6 +41,24 @@ nmcs_provider_get_config_iface_data_is_valid(const NMCSProviderGetConfigIfaceDat + + NMCSProviderGetConfigIfaceData *nmcs_provider_get_config_iface_data_new(gboolean was_requested); + ++/*****************************************************************************/ ++ ++typedef struct { ++ /* A dictionary of (const char *) -> (NMCSProviderGetConfigIfaceData *). ++ * This is the per-interface result of get_config(). */ ++ GHashTable *iface_datas; ++} NMCSProviderGetConfigResult; ++ ++void nmcs_provider_get_config_result_free(NMCSProviderGetConfigResult *result); ++ ++NM_AUTO_DEFINE_FCN0(NMCSProviderGetConfigResult *, ++ _nm_auto_free_nmcs_provider_get_config_result, ++ nmcs_provider_get_config_result_free); ++#define nm_auto_free_nmcs_provider_get_config_result \ ++ nm_auto(_nm_auto_free_nmcs_provider_get_config_result) ++ ++/*****************************************************************************/ ++ + typedef struct { + GTask *task; + +@@ -122,7 +140,7 @@ void nmcs_provider_get_config(NMCSProvider * provider, + GAsyncReadyCallback callback, + gpointer user_data); + +-GHashTable * ++NMCSProviderGetConfigResult * + nmcs_provider_get_config_finish(NMCSProvider *provider, GAsyncResult *result, GError **error); + + #endif /* __NMCS_PROVIDER_H__ */ +-- +2.31.1 + + +From dcd9ca4fb9280c80e810e1ec203459646b5ff387 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 09:42:37 +0200 +Subject: [PATCH 04/15] cloud-setup: cache number of valid interfaces in + get-config result + +Now that we return a struct from get_config(), we can have system-wide +properties returned. + +Let it count and cache the number of valid iface_datas. + +Currently that is not yet used, but it will be. + +(cherry picked from commit a3cd66d3fadcecab9b186cc7f634f6ec6a5a92ee) +(cherry picked from commit e74375fc3b68b07d1ed5f6ebca40cbe5b20ed47b) +(cherry picked from commit 7fcc89db6ee3701511f80efea5498bf1533dea8a) +--- + clients/cloud-setup/main.c | 22 +--------------------- + clients/cloud-setup/nmcs-provider.c | 15 +++++++++++++-- + clients/cloud-setup/nmcs-provider.h | 3 +++ + 3 files changed, 17 insertions(+), 23 deletions(-) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index c57c5ab5ca..32d29ef4fa 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -360,26 +360,9 @@ _nmc_mangle_connection(NMDevice * device, + + /*****************************************************************************/ + +-static guint +-_config_data_get_num_valid(const NMCSProviderGetConfigResult *result) +-{ +- const NMCSProviderGetConfigIfaceData *config_data; +- GHashTableIter h_iter; +- guint n = 0; +- +- g_hash_table_iter_init(&h_iter, result->iface_datas); +- while (g_hash_table_iter_next(&h_iter, NULL, (gpointer *) &config_data)) { +- if (nmcs_provider_get_config_iface_data_is_valid(config_data)) +- n++; +- } +- +- return n; +-} +- + static gboolean + _config_one(GCancellable * sigterm_cancellable, + NMClient * nmc, +- gboolean is_single_nic, + const char * hwaddr, + const NMCSProviderGetConfigIfaceData *config_data) + { +@@ -497,14 +480,11 @@ _config_all(GCancellable * sigterm_cancellable, + GHashTableIter h_iter; + const NMCSProviderGetConfigIfaceData *c_config_data; + const char * c_hwaddr; +- gboolean is_single_nic; + gboolean any_changes = FALSE; + +- is_single_nic = (_config_data_get_num_valid(result) <= 1); +- + g_hash_table_iter_init(&h_iter, result->iface_datas); + while (g_hash_table_iter_next(&h_iter, (gpointer *) &c_hwaddr, (gpointer *) &c_config_data)) { +- if (_config_one(sigterm_cancellable, nmc, is_single_nic, c_hwaddr, c_config_data)) ++ if (_config_one(sigterm_cancellable, nmc, c_hwaddr, c_config_data)) + any_changes = TRUE; + } + +diff --git a/clients/cloud-setup/nmcs-provider.c b/clients/cloud-setup/nmcs-provider.c +index d335193166..795532d344 100644 +--- a/clients/cloud-setup/nmcs-provider.c ++++ b/clients/cloud-setup/nmcs-provider.c +@@ -54,12 +54,23 @@ nmcs_provider_get_main_context(NMCSProvider *self) + static NMCSProviderGetConfigResult * + nmcs_provider_get_config_result_new(GHashTable *iface_datas) + { +- NMCSProviderGetConfigResult *result; ++ const NMCSProviderGetConfigIfaceData *iface_data; ++ NMCSProviderGetConfigResult * result; ++ GHashTableIter h_iter; ++ guint num_valid_ifaces = 0; ++ ++ g_hash_table_iter_init(&h_iter, iface_datas); ++ while (g_hash_table_iter_next(&h_iter, NULL, (gpointer *) &iface_data)) { ++ if (nmcs_provider_get_config_iface_data_is_valid(iface_data)) ++ num_valid_ifaces++; ++ } + + result = g_new(NMCSProviderGetConfigResult, 1); + *result = (NMCSProviderGetConfigResult){ +- .iface_datas = g_hash_table_ref(iface_datas), ++ .iface_datas = g_hash_table_ref(iface_datas), ++ .num_valid_ifaces = num_valid_ifaces, + }; ++ + return result; + } + +diff --git a/clients/cloud-setup/nmcs-provider.h b/clients/cloud-setup/nmcs-provider.h +index 81aca966e4..6832aa7f07 100644 +--- a/clients/cloud-setup/nmcs-provider.h ++++ b/clients/cloud-setup/nmcs-provider.h +@@ -47,6 +47,9 @@ typedef struct { + /* A dictionary of (const char *) -> (NMCSProviderGetConfigIfaceData *). + * This is the per-interface result of get_config(). */ + GHashTable *iface_datas; ++ ++ /* The number of iface_datas that are nmcs_provider_get_config_iface_data_is_valid(). */ ++ guint num_valid_ifaces; + } NMCSProviderGetConfigResult; + + void nmcs_provider_get_config_result_free(NMCSProviderGetConfigResult *result); +-- +2.31.1 + + +From 33934ae9315ee36f0aa49edbe459786f2b179cf1 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 10:11:31 +0200 +Subject: [PATCH 05/15] cloud-setup: count numbers of valid IPv4 addresses in + get-config result + +Will be used next. + +(cherry picked from commit 7969ae1a82b90c3a9dbe33875d138c7b55cf6ac8) +(cherry picked from commit ae504433f11480fde2436d3a5acba026db6c47bd) +(cherry picked from commit ef7a97977a9a0327f084eec9dfa34750c6ee7959) +--- + clients/cloud-setup/nmcs-provider.c | 6 +++++- + clients/cloud-setup/nmcs-provider.h | 3 +++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/clients/cloud-setup/nmcs-provider.c b/clients/cloud-setup/nmcs-provider.c +index 795532d344..152b874a15 100644 +--- a/clients/cloud-setup/nmcs-provider.c ++++ b/clients/cloud-setup/nmcs-provider.c +@@ -58,17 +58,21 @@ nmcs_provider_get_config_result_new(GHashTable *iface_datas) + NMCSProviderGetConfigResult * result; + GHashTableIter h_iter; + guint num_valid_ifaces = 0; ++ guint num_ipv4s = 0; + + g_hash_table_iter_init(&h_iter, iface_datas); + while (g_hash_table_iter_next(&h_iter, NULL, (gpointer *) &iface_data)) { +- if (nmcs_provider_get_config_iface_data_is_valid(iface_data)) ++ if (nmcs_provider_get_config_iface_data_is_valid(iface_data)) { + num_valid_ifaces++; ++ num_ipv4s += iface_data->ipv4s_len; ++ } + } + + result = g_new(NMCSProviderGetConfigResult, 1); + *result = (NMCSProviderGetConfigResult){ + .iface_datas = g_hash_table_ref(iface_datas), + .num_valid_ifaces = num_valid_ifaces, ++ .num_ipv4s = num_ipv4s, + }; + + return result; +diff --git a/clients/cloud-setup/nmcs-provider.h b/clients/cloud-setup/nmcs-provider.h +index 6832aa7f07..9e6fb2cb87 100644 +--- a/clients/cloud-setup/nmcs-provider.h ++++ b/clients/cloud-setup/nmcs-provider.h +@@ -50,6 +50,9 @@ typedef struct { + + /* The number of iface_datas that are nmcs_provider_get_config_iface_data_is_valid(). */ + guint num_valid_ifaces; ++ ++ /* the number of IPv4 addresses over all valid iface_datas. */ ++ guint num_ipv4s; + } NMCSProviderGetConfigResult; + + void nmcs_provider_get_config_result_free(NMCSProviderGetConfigResult *result); +-- +2.31.1 + + +From d73f141231ab795559ae54470569515bea585be3 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 10:15:37 +0200 +Subject: [PATCH 06/15] cloud-setup: skip configuring policy routing if there + is only one interface/address + +nm-cloud-setup automatically configures the network. That may conflict +with what the user wants. In case the user configures some specific +setup, they are encouraged to disable nm-cloud-setup (and its +automatism). + +Still, what we do by default matters, and should play as well with +user's expectations. Configuring policy routing and a higher priority +table (30400+) that hijacks the traffic can cause problems. + +If the system only has one IPv4 address and one interface, then there +is no point in configuring policy routing at all. Detect that, and skip +the change in that case. + +Note that of course we need to handle the case where previously multiple +IP addresses were configured and an update gives only one address. In +that case we need to clear the previously configured rules/routes. The +patch achieves this. + +(cherry picked from commit 5f047968d7a48999d20001f83e2005caa43c80ce) +(cherry picked from commit 8bc8a0f56b97c28cf26fd678a549db41399adcb7) +(cherry picked from commit 2e4b73c7fe8168701c2561dc6563c027ac92f456) +--- + clients/cloud-setup/main.c | 35 ++++++++++++++++++++++++++++------- + 1 file changed, 28 insertions(+), 7 deletions(-) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index 32d29ef4fa..3188418d7b 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -267,7 +267,9 @@ _nmc_skip_connection(NMConnection *connection) + static gboolean + _nmc_mangle_connection(NMDevice * device, + NMConnection * connection, ++ const NMCSProviderGetConfigResult * result, + const NMCSProviderGetConfigIfaceData *config_data, ++ gboolean * out_skipped_single_addr, + gboolean * out_changed) + { + NMSettingIPConfig *s_ip; +@@ -283,6 +285,9 @@ _nmc_mangle_connection(NMDevice * device, + gs_unref_ptrarray GPtrArray *rules_new = NULL; + gs_unref_ptrarray GPtrArray *routes_new = NULL; + ++ NM_SET_OUT(out_skipped_single_addr, FALSE); ++ NM_SET_OUT(out_changed, FALSE); ++ + if (!nm_streq0(nm_connection_get_connection_type(connection), NM_SETTING_WIRED_SETTING_NAME)) + return FALSE; + +@@ -363,6 +368,7 @@ _nmc_mangle_connection(NMDevice * device, + static gboolean + _config_one(GCancellable * sigterm_cancellable, + NMClient * nmc, ++ const NMCSProviderGetConfigResult * result, + const char * hwaddr, + const NMCSProviderGetConfigIfaceData *config_data) + { +@@ -371,6 +377,7 @@ _config_one(GCancellable * sigterm_cancellable, + guint64 applied_version_id; + gs_free_error GError *error = NULL; + gboolean changed; ++ gboolean skipped_single_addr; + gboolean version_id_changed; + guint try_count; + gboolean any_changes = FALSE; +@@ -419,16 +426,30 @@ try_again: + return any_changes; + } + +- if (!_nmc_mangle_connection(device, applied_connection, config_data, &changed)) { ++ if (!_nmc_mangle_connection(device, ++ applied_connection, ++ result, ++ config_data, ++ &skipped_single_addr, ++ &changed)) { + _LOGD("config device %s: device has no suitable applied connection. Skip", hwaddr); + return any_changes; + } + + if (!changed) { +- _LOGD("config device %s: device needs no update to applied connection \"%s\" (%s). Skip", +- hwaddr, +- nm_connection_get_id(applied_connection), +- nm_connection_get_uuid(applied_connection)); ++ if (skipped_single_addr) { ++ _LOGD("config device %s: device needs no update to applied connection \"%s\" (%s) " ++ "because there are not multiple IP addresses. Skip", ++ hwaddr, ++ nm_connection_get_id(applied_connection), ++ nm_connection_get_uuid(applied_connection)); ++ } else { ++ _LOGD( ++ "config device %s: device needs no update to applied connection \"%s\" (%s). Skip", ++ hwaddr, ++ nm_connection_get_id(applied_connection), ++ nm_connection_get_uuid(applied_connection)); ++ } + return any_changes; + } + +@@ -437,7 +458,7 @@ try_again: + nm_connection_get_id(applied_connection), + nm_connection_get_uuid(applied_connection)); + +- /* we are about to call Reapply(). If if that fails, it counts as if we changed something. */ ++ /* we are about to call Reapply(). Even if that fails, it counts as if we changed something. */ + any_changes = TRUE; + + if (!nmcs_device_reapply(device, +@@ -484,7 +505,7 @@ _config_all(GCancellable * sigterm_cancellable, + + g_hash_table_iter_init(&h_iter, result->iface_datas); + while (g_hash_table_iter_next(&h_iter, (gpointer *) &c_hwaddr, (gpointer *) &c_config_data)) { +- if (_config_one(sigterm_cancellable, nmc, c_hwaddr, c_config_data)) ++ if (_config_one(sigterm_cancellable, nmc, result, c_hwaddr, c_config_data)) + any_changes = TRUE; + } + +-- +2.31.1 + + +From 028dc267c53e9e92fcd8eebe01ed0dfd0a4c63d3 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 13:46:47 +0200 +Subject: [PATCH 07/15] cloud-setup: use _nm_utils_ascii_str_to_int64_bin() in + Azure's _get_config_fetch_done_cb() + +(cherry picked from commit a2fded3cee0f6d4da86962bfc671f03bfe4c5da4) +(cherry picked from commit 91ddd5f5bacf75f8819fbb014ff4bfd47c0c1ae3) +--- + clients/cloud-setup/nmcs-provider-azure.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index 0a5d522cc3..cedaad6b77 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -154,14 +154,9 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + iface_get_config->has_ipv4s = TRUE; + iface_get_config->ipv4s_len++; + } else { +- int tmp_prefix = -1; +- +- if (fip_len > 0 && memchr(fip_str, '\0', fip_len - 1)) { +- /* we have an embedded "\0" inside the string (except trailing). That is not +- * allowed*/ +- } else +- tmp_prefix = _nm_utils_ascii_str_to_int64(fip_str, 10, 0, 32, -1); ++ int tmp_prefix; + ++ tmp_prefix = _nm_utils_ascii_str_to_int64_bin(fip_str, fip_len, 10, 0, 32, -1); + if (tmp_prefix == -1) { + _LOGD("interface[%" G_GSSIZE_FORMAT "]: invalid prefix", iface_data->intern_iface_idx); + error = +@@ -244,7 +239,6 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + ((char *) line)[--line_len] = '\0'; + + ips_prefix_idx = _nm_utils_ascii_str_to_int64(line, 10, 0, G_MAXINT64, -1); +- + if (ips_prefix_idx < 0) + continue; + +-- +2.31.1 + + +From e4a643006a68d88f98e940508eb2a84ed4eed9a2 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 13:49:04 +0200 +Subject: [PATCH 08/15] cloud-setup/trivial: rename variables in Azure's + _get_config_fetch_done_cb() + +The previous name seem not very expressive/fitting. Naming is hard, but +I think these are better names. + +(cherry picked from commit 89f326785910ca7a4e6994b9d4052f8ab43fc63e) +(cherry picked from commit 8bad924931176c487776ab16c0768c54a6ab2002) +--- + clients/cloud-setup/nmcs-provider-azure.c | 26 +++++++++++------------ + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index cedaad6b77..33d94db94e 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -98,7 +98,7 @@ typedef struct { + NMCSProviderGetConfigIfaceData *iface_get_config; + gssize intern_iface_idx; + gssize extern_iface_idx; +- guint n_ips_prefix_pending; ++ guint n_iface_data_pending; + const char * hwaddr; + } AzureIfaceData; + +@@ -118,8 +118,8 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + NMCSProviderGetConfigIfaceData *iface_get_config; + gs_unref_bytes GBytes *response = NULL; + gs_free_error GError *error = NULL; +- const char * fip_str = NULL; +- gsize fip_len; ++ const char * resp_str = NULL; ++ gsize resp_len; + + nm_http_client_poll_get_finish(http_client, result, NULL, &response, &error); + +@@ -131,8 +131,8 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + if (error) + goto out_done; + +- fip_str = g_bytes_get_data(response, &fip_len); +- nm_assert(fip_str[fip_len] == '\0'); ++ resp_str = g_bytes_get_data(response, &resp_len); ++ nm_assert(resp_str[resp_len] == '\0'); + + iface_data->iface_get_config = + g_hash_table_lookup(get_config_data->result_dict, iface_data->hwaddr); +@@ -142,7 +142,7 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + char tmp_addr_str[NM_UTILS_INET_ADDRSTRLEN]; + in_addr_t tmp_addr; + +- if (!nmcs_utils_ipaddr_normalize_bin(AF_INET, fip_str, fip_len, NULL, &tmp_addr)) { ++ if (!nmcs_utils_ipaddr_normalize_bin(AF_INET, resp_str, resp_len, NULL, &tmp_addr)) { + error = + nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, "ip is not a valid private ip address"); + goto out_done; +@@ -156,7 +156,7 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + } else { + int tmp_prefix; + +- tmp_prefix = _nm_utils_ascii_str_to_int64_bin(fip_str, fip_len, 10, 0, 32, -1); ++ tmp_prefix = _nm_utils_ascii_str_to_int64_bin(resp_str, resp_len, 10, 0, 32, -1); + if (tmp_prefix == -1) { + _LOGD("interface[%" G_GSSIZE_FORMAT "]: invalid prefix", iface_data->intern_iface_idx); + error = +@@ -173,8 +173,8 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + + out_done: + if (!error) { +- --iface_data->n_ips_prefix_pending; +- if (iface_data->n_ips_prefix_pending > 0) ++ --iface_data->n_iface_data_pending; ++ if (iface_data->n_iface_data_pending > 0) + return; + } + +@@ -246,7 +246,7 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + gs_free const char *uri = NULL; + char buf[100]; + +- iface_data->n_ips_prefix_pending++; ++ iface_data->n_iface_data_pending++; + + nm_http_client_poll_get( + NM_HTTP_CLIENT(source), +@@ -269,13 +269,13 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + } + + iface_data->iface_get_config->ipv4s_len = 0; +- iface_data->iface_get_config->ipv4s_arr = g_new(in_addr_t, iface_data->n_ips_prefix_pending); ++ iface_data->iface_get_config->ipv4s_arr = g_new(in_addr_t, iface_data->n_iface_data_pending); + + { + gs_free const char *uri = NULL; + char buf[30]; + +- iface_data->n_ips_prefix_pending++; ++ iface_data->n_iface_data_pending++; + nm_http_client_poll_get( + NM_HTTP_CLIENT(source), + (uri = _azure_uri_interfaces( +@@ -439,7 +439,7 @@ _get_net_ifaces_list_cb(GObject *source, GAsyncResult *result, gpointer user_dat + .iface_get_config = NULL, + .intern_iface_idx = intern_iface_idx, + .extern_iface_idx = extern_iface_idx_cnt++, +- .n_ips_prefix_pending = 0, ++ .n_iface_data_pending = 0, + .hwaddr = NULL, + }; + g_ptr_array_add(ifaces_arr, iface_data); +-- +2.31.1 + + +From b3203a8ede6c828326859784971a0e8d9cb8b8cf Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 14:34:51 +0200 +Subject: [PATCH 09/15] cloud-setup: add "hwaddr" to + NMCSProviderGetConfigIfaceData struct + +get-config() gives a NMCSProviderGetConfigResult structure, and the +main part of data is the GHashTable of MAC addresses and +NMCSProviderGetConfigIfaceData instances. + +Let NMCSProviderGetConfigIfaceData also have a reference to the MAC +address. This way, I'll be able to create a (sorted) list of interface +datas, that also contain the MAC address. + +(cherry picked from commit ec56fe60fbf31768d0d1cae8bb325c1fdf7dbf07) +(cherry picked from commit cc289e53699872a3617aef321453ef6a885d0148) +(cherry picked from commit c36e42dbd9c0be96146888d610ad187fa57802e2) +--- + clients/cloud-setup/nmcs-provider-azure.c | 35 ++++++++++++++--------- + clients/cloud-setup/nmcs-provider-ec2.c | 27 +++++++---------- + clients/cloud-setup/nmcs-provider-gcp.c | 20 ++++++------- + clients/cloud-setup/nmcs-provider.c | 22 +++++++++----- + clients/cloud-setup/nmcs-provider.h | 12 ++++++-- + 5 files changed, 66 insertions(+), 50 deletions(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index 33d94db94e..3b923e4ce5 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -99,7 +99,6 @@ typedef struct { + gssize intern_iface_idx; + gssize extern_iface_idx; + guint n_iface_data_pending; +- const char * hwaddr; + } AzureIfaceData; + + static void +@@ -118,6 +117,7 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + NMCSProviderGetConfigIfaceData *iface_get_config; + gs_unref_bytes GBytes *response = NULL; + gs_free_error GError *error = NULL; ++ gs_free char * v_hwaddr = NULL; + const char * resp_str = NULL; + gsize resp_len; + +@@ -134,8 +134,17 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + resp_str = g_bytes_get_data(response, &resp_len); + nm_assert(resp_str[resp_len] == '\0'); + +- iface_data->iface_get_config = +- g_hash_table_lookup(get_config_data->result_dict, iface_data->hwaddr); ++ v_hwaddr = nmcs_utils_hwaddr_normalize_gbytes(response); ++ if (!v_hwaddr) { ++ _LOGI("interface[%" G_GSSIZE_FORMAT "]: invalid MAC address returned", ++ iface_data->intern_iface_idx); ++ error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, ++ "invalid MAC address for index %" G_GSSIZE_FORMAT, ++ iface_data->intern_iface_idx); ++ goto out_done; ++ } ++ ++ iface_data->iface_get_config = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); + iface_get_config = iface_data->iface_get_config; + + if (is_ipv4) { +@@ -330,25 +339,24 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) + goto out_done; + } + +- if (!g_hash_table_lookup_extended(get_config_data->result_dict, +- v_hwaddr, +- (gpointer *) &iface_data->hwaddr, +- (gpointer *) &iface_data->iface_get_config)) { ++ iface_data->iface_get_config = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); ++ ++ if (!iface_data->iface_get_config) { + if (!get_config_data->any) { + _LOGD("get-config: skip fetching meta data for %s (%" G_GSSIZE_FORMAT ")", + v_hwaddr, + iface_data->intern_iface_idx); + goto out_done; + } +- iface_data->iface_get_config = nmcs_provider_get_config_iface_data_new(FALSE); +- g_hash_table_insert(get_config_data->result_dict, +- (char *) (iface_data->hwaddr = g_steal_pointer(&v_hwaddr)), +- iface_data->iface_get_config); ++ iface_data->iface_get_config = ++ nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, ++ FALSE, ++ v_hwaddr); + } else { + if (iface_data->iface_get_config->iface_idx >= 0) { + _LOGI("interface[%" G_GSSIZE_FORMAT "]: duplicate MAC address %s returned", + iface_data->intern_iface_idx, +- iface_data->hwaddr); ++ iface_data->iface_get_config->hwaddr); + error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, + "duplicate MAC address for index %" G_GSSIZE_FORMAT, + iface_data->intern_iface_idx); +@@ -360,7 +368,7 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) + + _LOGD("interface[%" G_GSSIZE_FORMAT "]: found a matching device with hwaddr %s", + iface_data->intern_iface_idx, +- iface_data->hwaddr); ++ iface_data->iface_get_config->hwaddr); + + nm_sprintf_buf(buf, "%" G_GSSIZE_FORMAT "/ipv4/ipAddress/", iface_data->intern_iface_idx); + +@@ -440,7 +448,6 @@ _get_net_ifaces_list_cb(GObject *source, GAsyncResult *result, gpointer user_dat + .intern_iface_idx = intern_iface_idx, + .extern_iface_idx = extern_iface_idx_cnt++, + .n_iface_data_pending = 0, +- .hwaddr = NULL, + }; + g_ptr_array_add(ifaces_arr, iface_data); + } +diff --git a/clients/cloud-setup/nmcs-provider-ec2.c b/clients/cloud-setup/nmcs-provider-ec2.c +index 1e060034f5..ac449271fb 100644 +--- a/clients/cloud-setup/nmcs-provider-ec2.c ++++ b/clients/cloud-setup/nmcs-provider-ec2.c +@@ -136,14 +136,13 @@ _get_config_fetch_done_cb(NMHttpClient *http_client, + gboolean is_local_ipv4) + { + NMCSProviderGetConfigTaskData *get_config_data; +- const char * hwaddr = NULL; + gs_unref_bytes GBytes *response = NULL; + gs_free_error GError * error = NULL; + NMCSProviderGetConfigIfaceData *config_iface_data; + in_addr_t tmp_addr; + int tmp_prefix; + +- nm_utils_user_data_unpack(user_data, &get_config_data, &hwaddr); ++ nm_utils_user_data_unpack(user_data, &get_config_data, &config_iface_data); + + nm_http_client_poll_get_finish(http_client, result, NULL, &response, &error); + +@@ -153,8 +152,6 @@ _get_config_fetch_done_cb(NMHttpClient *http_client, + if (error) + goto out; + +- config_iface_data = g_hash_table_lookup(get_config_data->result_dict, hwaddr); +- + if (is_local_ipv4) { + gs_free const char **s_addrs = NULL; + gsize i, len; +@@ -250,22 +247,20 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us + NMCSProviderGetConfigIfaceData *config_iface_data; + gs_free char * uri1 = NULL; + gs_free char * uri2 = NULL; +- const char * hwaddr; + +- if (!g_hash_table_lookup_extended(get_config_data->result_dict, +- v_hwaddr, +- (gpointer *) &hwaddr, +- (gpointer *) &config_iface_data)) { ++ config_iface_data = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); ++ ++ if (!config_iface_data) { + if (!get_config_data->any) { + _LOGD("get-config: skip fetching meta data for %s (%s)", + v_hwaddr, + v_mac_data->path); + continue; + } +- config_iface_data = nmcs_provider_get_config_iface_data_new(FALSE); +- g_hash_table_insert(get_config_data->result_dict, +- (char *) (hwaddr = g_strdup(v_hwaddr)), +- config_iface_data); ++ config_iface_data = ++ nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, ++ FALSE, ++ v_hwaddr); + } + + nm_assert(config_iface_data->iface_idx == -1); +@@ -274,7 +269,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us + + _LOGD("get-config: start fetching meta data for #%" G_GSSIZE_FORMAT ", %s (%s)", + config_iface_data->iface_idx, +- hwaddr, ++ config_iface_data->hwaddr, + v_mac_data->path); + + get_config_data->n_pending++; +@@ -292,7 +287,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us + NULL, + NULL, + _get_config_fetch_done_cb_subnet_ipv4_cidr_block, +- nm_utils_user_data_pack(get_config_data, hwaddr)); ++ nm_utils_user_data_pack(get_config_data, config_iface_data)); + + get_config_data->n_pending++; + nm_http_client_poll_get( +@@ -309,7 +304,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us + NULL, + NULL, + _get_config_fetch_done_cb_local_ipv4s, +- nm_utils_user_data_pack(get_config_data, hwaddr)); ++ nm_utils_user_data_pack(get_config_data, config_iface_data)); + } + + _nmcs_provider_get_config_task_maybe_return(get_config_data, NULL); +diff --git a/clients/cloud-setup/nmcs-provider-gcp.c b/clients/cloud-setup/nmcs-provider-gcp.c +index 1deaea10f3..2389c9ee18 100644 +--- a/clients/cloud-setup/nmcs-provider-gcp.c ++++ b/clients/cloud-setup/nmcs-provider-gcp.c +@@ -247,7 +247,6 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) + GCPIfaceData * iface_data = user_data; + gs_free_error GError * error = NULL; + gs_free char * v_hwaddr = NULL; +- const char * hwaddr = NULL; + gs_free const char * uri = NULL; + char sbuf[100]; + NMCSProviderGetConfigTaskData *get_config_data; +@@ -273,26 +272,25 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) + goto out_done; + } + +- if (!g_hash_table_lookup_extended(get_config_data->result_dict, +- v_hwaddr, +- (gpointer *) &hwaddr, +- (gpointer *) &iface_data->iface_get_config)) { ++ iface_data->iface_get_config = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); ++ ++ if (!iface_data->iface_get_config) { + if (!get_config_data->any) { + _LOGD("get-config: skip fetching meta data for %s (%" G_GSSIZE_FORMAT ")", + v_hwaddr, + iface_data->intern_iface_idx); + goto out_done; + } +- iface_data->iface_get_config = nmcs_provider_get_config_iface_data_new(FALSE); +- g_hash_table_insert(get_config_data->result_dict, +- (char *) (hwaddr = g_steal_pointer(&v_hwaddr)), +- iface_data->iface_get_config); ++ iface_data->iface_get_config = ++ nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, ++ FALSE, ++ v_hwaddr); + is_requested = FALSE; + } else { + if (iface_data->iface_get_config->iface_idx >= 0) { + _LOGI("GCP interface[%" G_GSSIZE_FORMAT "]: duplicate MAC address %s returned", + iface_data->intern_iface_idx, +- hwaddr); ++ iface_data->iface_get_config->hwaddr); + error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, + "duplicate MAC address for index %" G_GSSIZE_FORMAT, + iface_data->intern_iface_idx); +@@ -306,7 +304,7 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) + _LOGI("GCP interface[%" G_GSSIZE_FORMAT "]: found a %sdevice with hwaddr %s", + iface_data->intern_iface_idx, + is_requested ? "requested " : "", +- hwaddr); ++ iface_data->iface_get_config->hwaddr); + + nm_sprintf_buf(sbuf, "%" G_GSSIZE_FORMAT "/forwarded-ips/", iface_data->intern_iface_idx); + +diff --git a/clients/cloud-setup/nmcs-provider.c b/clients/cloud-setup/nmcs-provider.c +index 152b874a15..1ac5cd42bb 100644 +--- a/clients/cloud-setup/nmcs-provider.c ++++ b/clients/cloud-setup/nmcs-provider.c +@@ -127,15 +127,25 @@ nmcs_provider_detect_finish(NMCSProvider *self, GAsyncResult *result, GError **e + /*****************************************************************************/ + + NMCSProviderGetConfigIfaceData * +-nmcs_provider_get_config_iface_data_new(gboolean was_requested) ++nmcs_provider_get_config_iface_data_create(GHashTable *iface_datas, ++ gboolean was_requested, ++ const char *hwaddr) + { + NMCSProviderGetConfigIfaceData *iface_data; + ++ nm_assert(hwaddr); ++ + iface_data = g_slice_new(NMCSProviderGetConfigIfaceData); + *iface_data = (NMCSProviderGetConfigIfaceData){ ++ .hwaddr = g_strdup(hwaddr), + .iface_idx = -1, + .was_requested = was_requested, + }; ++ ++ /* the has does not own the key (iface_datta->hwaddr), the lifetime of the ++ * key is associated with the iface_data instance. */ ++ g_hash_table_replace(iface_datas, (char *) iface_data->hwaddr, iface_data); ++ + return iface_data; + } + +@@ -146,6 +156,7 @@ _iface_data_free(gpointer data) + + g_free(iface_data->ipv4s_arr); + g_free(iface_data->iproutes_arr); ++ g_free((char *) iface_data->hwaddr); + + nm_g_slice_free(iface_data); + } +@@ -224,16 +235,13 @@ nmcs_provider_get_config(NMCSProvider * self, + *get_config_data = (NMCSProviderGetConfigTaskData){ + .task = nm_g_task_new(self, cancellable, nmcs_provider_get_config, callback, user_data), + .any = any, +- .result_dict = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, _iface_data_free), ++ .result_dict = g_hash_table_new_full(nm_str_hash, g_str_equal, NULL, _iface_data_free), + }; + + nmcs_wait_for_objects_register(get_config_data->task); + +- for (; hwaddrs && hwaddrs[0]; hwaddrs++) { +- g_hash_table_insert(get_config_data->result_dict, +- g_strdup(hwaddrs[0]), +- nmcs_provider_get_config_iface_data_new(TRUE)); +- } ++ for (; hwaddrs && hwaddrs[0]; hwaddrs++) ++ nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, TRUE, hwaddrs[0]); + + if (cancellable) { + gulong cancelled_id; +diff --git a/clients/cloud-setup/nmcs-provider.h b/clients/cloud-setup/nmcs-provider.h +index 9e6fb2cb87..19bf56bd05 100644 +--- a/clients/cloud-setup/nmcs-provider.h ++++ b/clients/cloud-setup/nmcs-provider.h +@@ -10,6 +10,10 @@ + /*****************************************************************************/ + + typedef struct { ++ /* And it's exactly the same pointer that is also the key for the iface_datas ++ * dictionary. */ ++ const char *hwaddr; ++ + in_addr_t *ipv4s_arr; + gsize ipv4s_len; + +@@ -39,13 +43,17 @@ nmcs_provider_get_config_iface_data_is_valid(const NMCSProviderGetConfigIfaceDat + && ((config_data->has_ipv4s && config_data->has_cidr) || config_data->iproutes_len); + } + +-NMCSProviderGetConfigIfaceData *nmcs_provider_get_config_iface_data_new(gboolean was_requested); ++NMCSProviderGetConfigIfaceData *nmcs_provider_get_config_iface_data_create(GHashTable *iface_datas, ++ gboolean was_requested, ++ const char *hwaddr); + + /*****************************************************************************/ + + typedef struct { + /* A dictionary of (const char *) -> (NMCSProviderGetConfigIfaceData *). +- * This is the per-interface result of get_config(). */ ++ * This is the per-interface result of get_config(). ++ * ++ * The key is the same pointer as NMCSProviderGetConfigIfaceData's hwaddr. */ + GHashTable *iface_datas; + + /* The number of iface_datas that are nmcs_provider_get_config_iface_data_is_valid(). */ +-- +2.31.1 + + +From cf729a3a821415913b8f40306dd31d6d76cd4a60 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 16:59:19 +0200 +Subject: [PATCH 10/15] cloud-setup: track sorted list of + NMCSProviderGetConfigIfaceData + +Sorted by iface_idx. The iface_idx is probably something useful and +stable, provided by the provider. E.g. it's the order in which +interfaces are exposed on the meta data. + +(cherry picked from commit 1c5cb9d3c2be5addd3b011873cfc6b99204955d1) +(cherry picked from commit 0a2ed627038349d838add8f3fd72e2d282e74693) +(cherry picked from commit 48e79fb4b29f297d29502e75a8956ffe65fe51db) +--- + clients/cloud-setup/nmcs-provider.c | 49 ++++++++++++++++++++++++++++- + clients/cloud-setup/nmcs-provider.h | 8 +++++ + 2 files changed, 56 insertions(+), 1 deletion(-) + +diff --git a/clients/cloud-setup/nmcs-provider.c b/clients/cloud-setup/nmcs-provider.c +index 1ac5cd42bb..8dd5cc1997 100644 +--- a/clients/cloud-setup/nmcs-provider.c ++++ b/clients/cloud-setup/nmcs-provider.c +@@ -51,6 +51,19 @@ nmcs_provider_get_main_context(NMCSProvider *self) + } + /*****************************************************************************/ + ++static int ++_result_new_sort_iface_data(gconstpointer pa, gconstpointer pb) ++{ ++ const NMCSProviderGetConfigIfaceData *a = *((const NMCSProviderGetConfigIfaceData *const *) pa); ++ const NMCSProviderGetConfigIfaceData *b = *((const NMCSProviderGetConfigIfaceData *const *) pb); ++ ++ /* negative iface_idx are sorted to the end. */ ++ NM_CMP_DIRECT((a->iface_idx < 0), (b->iface_idx < 0)); ++ ++ NM_CMP_FIELD(a, b, iface_idx); ++ return 0; ++} ++ + static NMCSProviderGetConfigResult * + nmcs_provider_get_config_result_new(GHashTable *iface_datas) + { +@@ -59,6 +72,12 @@ nmcs_provider_get_config_result_new(GHashTable *iface_datas) + GHashTableIter h_iter; + guint num_valid_ifaces = 0; + guint num_ipv4s = 0; ++ GPtrArray * ptrarr; ++ guint n_iface_datas; ++ ++ n_iface_datas = g_hash_table_size(iface_datas); ++ ++ ptrarr = g_ptr_array_sized_new(n_iface_datas + 1u); + + g_hash_table_iter_init(&h_iter, iface_datas); + while (g_hash_table_iter_next(&h_iter, NULL, (gpointer *) &iface_data)) { +@@ -66,15 +85,42 @@ nmcs_provider_get_config_result_new(GHashTable *iface_datas) + num_valid_ifaces++; + num_ipv4s += iface_data->ipv4s_len; + } ++ g_ptr_array_add(ptrarr, (gpointer) iface_data); + } + ++ g_ptr_array_sort(ptrarr, _result_new_sort_iface_data); ++ ++ nm_assert(n_iface_datas == ptrarr->len); ++ ++ g_ptr_array_add(ptrarr, NULL); ++ + result = g_new(NMCSProviderGetConfigResult, 1); + *result = (NMCSProviderGetConfigResult){ +- .iface_datas = g_hash_table_ref(iface_datas), ++ .iface_datas = g_hash_table_ref(iface_datas), ++ .n_iface_datas = n_iface_datas, ++ .iface_datas_arr = ++ (const NMCSProviderGetConfigIfaceData **) g_ptr_array_free(ptrarr, FALSE), + .num_valid_ifaces = num_valid_ifaces, + .num_ipv4s = num_ipv4s, + }; + ++#if NM_MORE_ASSERTS > 5 ++ { ++ gsize iface_idx_expected = 0; ++ guint i; ++ ++ for (i = 0; i < result->n_iface_datas; i++) { ++ if (result->iface_datas_arr[i]->iface_idx < 0) { ++ nm_assert(result->iface_datas_arr[i]->iface_idx == -1); ++ iface_idx_expected = -1; ++ continue; ++ } ++ nm_assert(result->iface_datas_arr[i]->iface_idx == iface_idx_expected); ++ iface_idx_expected++; ++ } ++ } ++#endif ++ + return result; + } + +@@ -83,6 +129,7 @@ nmcs_provider_get_config_result_free(NMCSProviderGetConfigResult *result) + { + if (result) { + nm_g_hash_table_unref(result->iface_datas); ++ g_free((gpointer) result->iface_datas_arr); + g_free(result); + } + } +diff --git a/clients/cloud-setup/nmcs-provider.h b/clients/cloud-setup/nmcs-provider.h +index 19bf56bd05..261f589f2f 100644 +--- a/clients/cloud-setup/nmcs-provider.h ++++ b/clients/cloud-setup/nmcs-provider.h +@@ -61,6 +61,14 @@ typedef struct { + + /* the number of IPv4 addresses over all valid iface_datas. */ + guint num_ipv4s; ++ ++ guint n_iface_datas; ++ ++ /* The sorted value of @iface_datas, sorted by iface_idx. ++ * ++ * Not found entries (iface_idx == -1) are sorted at the end. */ ++ const NMCSProviderGetConfigIfaceData *const *iface_datas_arr; ++ + } NMCSProviderGetConfigResult; + + void nmcs_provider_get_config_result_free(NMCSProviderGetConfigResult *result); +-- +2.31.1 + + +From 8ab1777edacf722c4ffa80e4d4380771cce99e5b Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 17:23:09 +0200 +Subject: [PATCH 11/15] cloud-setup: process iface-datas in sorted order + +The routes/rules that are configured are independent of the +order in which we process the devices. That is, because they +use the "iface_idx" for cases where there is ambiguity. + +Still, it feels nicer to always process them in a defined order. + +(cherry picked from commit a95ea0eb294d646f17b5e1cf4f17cb1540f8af3a) +(cherry picked from commit 6302cd416d92a8c2f5b4a6be9dded71af4cf7ced) +(cherry picked from commit 67a83b54cd58e44ef50e5e3a7c6a9463995235dd) +--- + clients/cloud-setup/main.c | 28 +++++++++++++--------------- + 1 file changed, 13 insertions(+), 15 deletions(-) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index 3188418d7b..3485034198 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -366,14 +366,15 @@ _nmc_mangle_connection(NMDevice * device, + /*****************************************************************************/ + + static gboolean +-_config_one(GCancellable * sigterm_cancellable, +- NMClient * nmc, +- const NMCSProviderGetConfigResult * result, +- const char * hwaddr, +- const NMCSProviderGetConfigIfaceData *config_data) ++_config_one(GCancellable * sigterm_cancellable, ++ NMClient * nmc, ++ const NMCSProviderGetConfigResult *result, ++ guint idx) + { +- gs_unref_object NMDevice *device = NULL; +- gs_unref_object NMConnection *applied_connection = NULL; ++ const NMCSProviderGetConfigIfaceData *config_data = result->iface_datas_arr[idx]; ++ const char * hwaddr = config_data->hwaddr; ++ gs_unref_object NMDevice *device = NULL; ++ gs_unref_object NMConnection *applied_connection = NULL; + guint64 applied_version_id; + gs_free_error GError *error = NULL; + gboolean changed; +@@ -498,14 +499,11 @@ _config_all(GCancellable * sigterm_cancellable, + NMClient * nmc, + const NMCSProviderGetConfigResult *result) + { +- GHashTableIter h_iter; +- const NMCSProviderGetConfigIfaceData *c_config_data; +- const char * c_hwaddr; +- gboolean any_changes = FALSE; +- +- g_hash_table_iter_init(&h_iter, result->iface_datas); +- while (g_hash_table_iter_next(&h_iter, (gpointer *) &c_hwaddr, (gpointer *) &c_config_data)) { +- if (_config_one(sigterm_cancellable, nmc, result, c_hwaddr, c_config_data)) ++ gboolean any_changes = FALSE; ++ guint i; ++ ++ for (i = 0; i < result->n_iface_datas; i++) { ++ if (_config_one(sigterm_cancellable, nmc, result, i)) + any_changes = TRUE; + } + +-- +2.31.1 + + +From 7aea4169bcf8b4f27eea7283d84a328cd5ea3cea Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 19:23:46 +0200 +Subject: [PATCH 12/15] cloud-setup: limit number of supported interfaces to + avoid overlapping table numbers + +The table number is chosen as 30400 + iface_idx. That is, the range is +limited and we shouldn't handle more than 100 devices. Add a check for +that and error out. + +(cherry picked from commit b68d694b78fd9b4b63b0592a2518f387aaa35f87) +(cherry picked from commit 292233e16ed1f60499c2676611d59c271352e2c3) +(cherry picked from commit 661da869b3419c0761296caaf12002e2eba25f48) +--- + clients/cloud-setup/main.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index 3485034198..5f27275c90 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -399,6 +399,14 @@ _config_one(GCancellable * sigterm_cancellable, + return FALSE; + } + ++ if (config_data->iface_idx >= 100) { ++ /* since we use the iface_idx to select a table number, the range is limited from ++ * 0 to 99. Note that the providers are required to provide increasing numbers, ++ * so this means we bail out after the first 100 devices. */ ++ _LOGD("config device %s: skip because number of supported interfaces reached", hwaddr); ++ return FALSE; ++ } ++ + _LOGD("config device %s: configuring \"%s\" (%s)...", + hwaddr, + nm_device_get_iface(device) ?: "/unknown/", +-- +2.31.1 + + +From defaccdd3924c12fe61ce1fb90007f1fa3c67f14 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Mon, 6 Sep 2021 10:35:36 +0200 +Subject: [PATCH 13/15] cloud-setup: cleanup configuring addresses/routes/rules + in _nmc_mangle_connection() + +(cherry picked from commit 0978be5e43f142ec5c6062dcfe1c2f4aa834464b) +(cherry picked from commit ce24b4bca5d3fbad65d4065325cfa80ac05fbfdb) +(cherry picked from commit b33eac5281935a6a07aa66938a9130cfd0b84180) +--- + clients/cloud-setup/main.c | 49 ++++++++++++++++---------------------- + 1 file changed, 20 insertions(+), 29 deletions(-) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index 5f27275c90..8b0f3ecc8f 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -274,10 +274,6 @@ _nmc_mangle_connection(NMDevice * device, + { + NMSettingIPConfig *s_ip; + gsize i; +- in_addr_t gateway; +- gint64 rt_metric; +- guint32 rt_table; +- NMIPRoute * route_entry; + gboolean addrs_changed = FALSE; + gboolean rules_changed = FALSE; + gboolean routes_changed = FALSE; +@@ -302,45 +298,40 @@ _nmc_mangle_connection(NMDevice * device, + (GDestroyNotify) nm_ip_route_unref); + + if (config_data->has_ipv4s && config_data->has_cidr) { ++ NMIPAddress * addr_entry; ++ NMIPRoute * route_entry; ++ NMIPRoutingRule *rule_entry; ++ in_addr_t gateway; ++ char sbuf[NM_UTILS_INET_ADDRSTRLEN]; ++ + for (i = 0; i < config_data->ipv4s_len; i++) { +- NMIPAddress *entry; +- +- entry = nm_ip_address_new_binary(AF_INET, +- &config_data->ipv4s_arr[i], +- config_data->cidr_prefix, +- NULL); +- if (entry) +- g_ptr_array_add(addrs_new, entry); ++ addr_entry = nm_ip_address_new_binary(AF_INET, ++ &config_data->ipv4s_arr[i], ++ config_data->cidr_prefix, ++ NULL); ++ nm_assert(addr_entry); ++ g_ptr_array_add(addrs_new, addr_entry); + } + + gateway = nm_utils_ip4_address_clear_host_address(config_data->cidr_addr, + config_data->cidr_prefix); + ((guint8 *) &gateway)[3] += 1; + +- rt_metric = 10; +- rt_table = 30400 + config_data->iface_idx; +- +- route_entry = +- nm_ip_route_new_binary(AF_INET, &nm_ip_addr_zero, 0, &gateway, rt_metric, NULL); ++ route_entry = nm_ip_route_new_binary(AF_INET, &nm_ip_addr_zero, 0, &gateway, 10, NULL); + nm_ip_route_set_attribute(route_entry, + NM_IP_ROUTE_ATTRIBUTE_TABLE, +- g_variant_new_uint32(rt_table)); ++ g_variant_new_uint32(30400 + config_data->iface_idx)); + g_ptr_array_add(routes_new, route_entry); + + for (i = 0; i < config_data->ipv4s_len; i++) { +- NMIPRoutingRule *entry; +- char sbuf[NM_UTILS_INET_ADDRSTRLEN]; +- +- entry = nm_ip_routing_rule_new(AF_INET); +- nm_ip_routing_rule_set_priority(entry, rt_table); +- nm_ip_routing_rule_set_from(entry, ++ rule_entry = nm_ip_routing_rule_new(AF_INET); ++ nm_ip_routing_rule_set_priority(rule_entry, 30400 + config_data->iface_idx); ++ nm_ip_routing_rule_set_from(rule_entry, + _nm_utils_inet4_ntop(config_data->ipv4s_arr[i], sbuf), + 32); +- nm_ip_routing_rule_set_table(entry, rt_table); +- +- nm_assert(nm_ip_routing_rule_validate(entry, NULL)); +- +- g_ptr_array_add(rules_new, entry); ++ nm_ip_routing_rule_set_table(rule_entry, 30400 + config_data->iface_idx); ++ nm_assert(nm_ip_routing_rule_validate(rule_entry, NULL)); ++ g_ptr_array_add(rules_new, rule_entry); + } + } + +-- +2.31.1 + + +From 5cbf31d758e9cd322420143383a9c31386e98ded Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 1 Sep 2021 10:31:55 +0200 +Subject: [PATCH 14/15] cloud-setup: use suppress_prefixlength rule to honor + non-default-routes in the main table + +Background +========== + +Imagine you run a container on your machine. Then the routing table +might look like: + + default via 10.0.10.1 dev eth0 proto dhcp metric 100 + 10.0.10.0/28 dev eth0 proto kernel scope link src 10.0.10.5 metric 100 + [...] + 10.42.0.0/24 via 10.42.0.0 dev flannel.1 onlink + 10.42.1.2 dev cali02ad7e68ce1 scope link + 10.42.1.3 dev cali8fcecf5aaff scope link + 10.42.2.0/24 via 10.42.2.0 dev flannel.1 onlink + 10.42.3.0/24 via 10.42.3.0 dev flannel.1 onlink + +That is, there are another interfaces with subnets and specific routes. + +If nm-cloud-setup now configures rules: + + 0: from all lookup local + 30400: from 10.0.10.5 lookup 30400 + 32766: from all lookup main + 32767: from all lookup default + +and + + default via 10.0.10.1 dev eth0 table 30400 proto static metric 10 + 10.0.10.1 dev eth0 table 30400 proto static scope link metric 10 + +then these other subnets will also be reached via the default route. + +This container example is just one case where this is a problem. In +general, if you have specific routes on another interface, then the +default route in the 30400+ table will interfere badly. + +The idea of nm-cloud-setup is to automatically configure the network for +secondary IP addresses. When the user has special requirements, then +they should disable nm-cloud-setup and configure whatever they want. +But the container use case is popular and important. It is not something +where the user actively configures the network. This case needs to work better, +out of the box. In general, nm-cloud-setup should work better with the +existing network configuration. + +Change +====== + +Add new routing tables 30200+ with the individual subnets of the +interface: + + 10.0.10.0/24 dev eth0 table 30200 proto static metric 10 + [...] + default via 10.0.10.1 dev eth0 table 30400 proto static metric 10 + 10.0.10.1 dev eth0 table 30400 proto static scope link metric 10 + +Also add more important routing rules with priority 30200+, which select +these tables based on the source address: + + 30200: from 10.0.10.5 lookup 30200 + +These will do source based routing for the subnets on these +interfaces. + +Then, add a rule with priority 30350 + + 30350: lookup main suppress_prefixlength 0 + +which processes the routes from the main table, but ignores the default +routes. 30350 was chosen, because it's in between the rules 30200+ and +30400+, leaving a range for the user to configure their own rules. + +Then, as before, the rules 30400+ again look at the corresponding 30400+ +table, to find a default route. + +Finally, process the main table again, this time honoring the default +route. That is for packets that have a different source address. + +This change means that the source based routing is used for the +subnets that are configured on the interface and for the default route. +Whereas, if there are any more specific routes in the main table, they will +be preferred over the default route. + +Apparently Amazon Linux solves this differently, by not configuring a +routing table for addresses on interface "eth0". That might be an +alternative, but it's not clear to me what is special about eth0 to +warrant this treatment. It also would imply that we somehow recognize +this primary interface. In practise that would be doable by selecting +the interface with "iface_idx" zero. + +Instead choose this approach. This is remotely similar to what WireGuard does +for configuring the default route ([1]), however WireGuard uses fwmark to match +the packets instead of the source address. + +[1] https://www.wireguard.com/netns/#improved-rule-based-routing + +(cherry picked from commit fe80b2d1ecd94639573a944633a5d960db316f60) +(cherry picked from commit 58e58361bd1666e5af822a4bc970bebb8a44bd6e) +(cherry picked from commit 6fef8c7235235011d83681e89e8fa02dc89ffb2c) +--- + clients/cloud-setup/main.c | 36 ++++++++++++++++++++++++++++++++++++ + man/nm-cloud-setup.xml | 30 ++++++++++++++++++------------ + 2 files changed, 54 insertions(+), 12 deletions(-) + +diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c +index 8b0f3ecc8f..aac7bdbf98 100644 +--- a/clients/cloud-setup/main.c ++++ b/clients/cloud-setup/main.c +@@ -4,6 +4,8 @@ + + #include "nm-libnm-aux/nm-libnm-aux.h" + ++#include ++ + #include "nm-cloud-setup-utils.h" + #include "nmcs-provider-ec2.h" + #include "nmcs-provider-gcp.h" +@@ -298,6 +300,8 @@ _nmc_mangle_connection(NMDevice * device, + (GDestroyNotify) nm_ip_route_unref); + + if (config_data->has_ipv4s && config_data->has_cidr) { ++ gs_unref_hashtable GHashTable *unique_subnets = ++ g_hash_table_new(nm_direct_hash, g_direct_equal); + NMIPAddress * addr_entry; + NMIPRoute * route_entry; + NMIPRoutingRule *rule_entry; +@@ -317,6 +321,38 @@ _nmc_mangle_connection(NMDevice * device, + config_data->cidr_prefix); + ((guint8 *) &gateway)[3] += 1; + ++ for (i = 0; i < config_data->ipv4s_len; i++) { ++ in_addr_t a = config_data->ipv4s_arr[i]; ++ ++ a = nm_utils_ip4_address_clear_host_address(a, config_data->cidr_prefix); ++ ++ G_STATIC_ASSERT_EXPR(sizeof(gsize) >= sizeof(in_addr_t)); ++ if (g_hash_table_add(unique_subnets, GSIZE_TO_POINTER(a))) { ++ route_entry = ++ nm_ip_route_new_binary(AF_INET, &a, config_data->cidr_prefix, NULL, 10, NULL); ++ nm_ip_route_set_attribute(route_entry, ++ NM_IP_ROUTE_ATTRIBUTE_TABLE, ++ g_variant_new_uint32(30200 + config_data->iface_idx)); ++ g_ptr_array_add(routes_new, route_entry); ++ } ++ ++ rule_entry = nm_ip_routing_rule_new(AF_INET); ++ nm_ip_routing_rule_set_priority(rule_entry, 30200 + config_data->iface_idx); ++ nm_ip_routing_rule_set_from(rule_entry, ++ _nm_utils_inet4_ntop(config_data->ipv4s_arr[i], sbuf), ++ 32); ++ nm_ip_routing_rule_set_table(rule_entry, 30200 + config_data->iface_idx); ++ nm_assert(nm_ip_routing_rule_validate(rule_entry, NULL)); ++ g_ptr_array_add(rules_new, rule_entry); ++ } ++ ++ rule_entry = nm_ip_routing_rule_new(AF_INET); ++ nm_ip_routing_rule_set_priority(rule_entry, 30350); ++ nm_ip_routing_rule_set_table(rule_entry, RT_TABLE_MAIN); ++ nm_ip_routing_rule_set_suppress_prefixlength(rule_entry, 0); ++ nm_assert(nm_ip_routing_rule_validate(rule_entry, NULL)); ++ g_ptr_array_add(rules_new, rule_entry); ++ + route_entry = nm_ip_route_new_binary(AF_INET, &nm_ip_addr_zero, 0, &gateway, 10, NULL); + nm_ip_route_set_attribute(route_entry, + NM_IP_ROUTE_ATTRIBUTE_TABLE, +diff --git a/man/nm-cloud-setup.xml b/man/nm-cloud-setup.xml +index 388ef3ba91..4ae4042f84 100644 +--- a/man/nm-cloud-setup.xml ++++ b/man/nm-cloud-setup.xml +@@ -221,7 +221,9 @@ + Also, if the device is currently not activated in NetworkManager or if the currently + activated profile has a user-data org.freedesktop.nm-cloud-setup.skip=yes, + it is skipped. +- Then, the tool will change the runtime configuration of the device. ++ If only one interface and one address is configured, then the tool does nothing ++ and leaves the automatic configuration that was obtained via DHCP. ++ Otherwise, the tool will change the runtime configuration of the device. + + + Add static IPv4 addresses for all the configured addresses from local-ipv4s with +@@ -232,15 +234,25 @@ + Choose a route table 30400 + the index of the interface and + add a default route 0.0.0.0/0. The gateway + is the first IP address in the CIDR subnet block. For +- example, we might get a route "0.0.0.0/0 172.16.5.1 10 table=30401". ++ example, we might get a route "0.0.0.0/0 172.16.5.1 10 table=30400". ++ Also choose a route table 30200 + the interface index. This ++ contains a direct routes to the subnets of this interface. + + + Finally, add a policy routing rule for each address. For example +- "priority 30401 from 172.16.5.3/32 table 30401, priority 30401 from 172.16.5.4/32 table 30401". ++ "priority 30200 from 172.16.5.3/32 table 30200, priority 30200 from 172.16.5.4/32 table 30200". ++ and ++ "priority 30400 from 172.16.5.3/32 table 30400, priority 30400 from 172.16.5.4/32 table 30400" ++ The 30200+ rules select the table to reach the subnet directly, while the 30400+ rules use the ++ default route. Also add a rule ++ "priority 30350 table main suppress_prefixlength 0". This has a priority between ++ the two previous rules and causes a lookup of routes in the main table while ignoring the default ++ route. The purpose of this is so that other specific routes in the main table are honored over ++ the default route in table 30400+. + + + With above example, this roughly corresponds for interface eth0 to +- nmcli device modify "eth0" ipv4.addresses "172.16.5.3/24,172.16.5.4/24" ipv4.routes "0.0.0.0/0 172.16.5.1 10 table=30401" ipv4.routing-rules "priority 30401 from 172.16.5.3/32 table 30401, priority 30401 from 172.16.5.4/32 table 30401". ++ nmcli device modify "eth0" ipv4.addresses "172.16.5.3/24,172.16.5.4/24" ipv4.routes "172.16.5.0/24 0.0.0.0 10 table=30200, 0.0.0.0/0 172.16.5.1 10 table=30400" ipv4.routing-rules "priority 30200 from 172.16.5.3/32 table 30200, priority 30200 from 172.16.5.4/32 table 30200, priority 20350 table main suppress_prefixlength 0, priority 30400 from 172.16.5.3/32 table 30400, priority 30400 from 172.16.5.4/32 table 30400". + Note that this replaces the previous addresses, routes and rules with the new information. + But also note that this only changes the run time configuration of the device. The + connection profile on disk is not affected. +@@ -323,14 +335,8 @@ + + + At this point, we have a list of all interfaces (by MAC address) and their configured IPv4 addresses. +- For each device, we lookup the currently applied connection in NetworkManager. That implies, that the device is currently activated +- in NetworkManager. If no such device was in NetworkManager, or if the profile has user-data org.freedesktop.nm-cloud-setup.skip=yes, +- we skip the device. Now for each found IP address we add a static address "$ADDR/$SUBNET_PREFIX". Also we configure policy routing +- by adding a static route "$ADDR/$SUBNET_PREFIX $GATEWAY 10, table=$TABLE" where $GATEWAY is the first IP address in the subnet and table +- is 30400 plus the interface index. Also we add a policy routing rule "priority $TABLE from $ADDR/32 table $TABLE". +- The effect is not unlike calling +- nmcli device modify "$DEVICE" ipv4.addresses "$ADDR/$SUBNET [,...]" ipv4.routes "$ADDR/32 $GATEWAY 10 table=$TABLE" ipv4.routing-rules "priority $TABLE from $ADDR/32 table $TABLE" +- for all relevant devices and all found addresses. ++ Then the tool configures the system like doing for AWS environment. That is, using source based policy routing ++ with the tables/rules 30200/30400. + + + +-- +2.31.1 + + +From a788d968b0e4efab18eefa1333df27846b5d5f04 Mon Sep 17 00:00:00 2001 +From: Fernando Fernandez Mancera +Date: Mon, 4 Oct 2021 18:26:11 +0200 +Subject: [PATCH 15/15] cloud-setup: follow the clang-format + +Signed-off-by: Fernando Fernandez Mancera +(cherry picked from commit 9cb01cdefd43c954653202eada0b094e61c86015) +--- + clients/cloud-setup/nmcs-provider-azure.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index 3b923e4ce5..a0e6076fd3 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -145,7 +145,7 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + } + + iface_data->iface_get_config = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); +- iface_get_config = iface_data->iface_get_config; ++ iface_get_config = iface_data->iface_get_config; + + if (is_ipv4) { + char tmp_addr_str[NM_UTILS_INET_ADDRSTRLEN]; +-- +2.31.1 + diff --git a/SOURCES/1015-initrd-set-IPv4-required-timeout-rh1961666.patch b/SOURCES/1015-initrd-set-IPv4-required-timeout-rh1961666.patch new file mode 100644 index 0000000..58d06d6 --- /dev/null +++ b/SOURCES/1015-initrd-set-IPv4-required-timeout-rh1961666.patch @@ -0,0 +1,7181 @@ +From 41d181842411924014af63bad28f8a7843040879 Mon Sep 17 00:00:00 2001 +From: Beniamino Galvani +Date: Fri, 20 Aug 2021 09:43:47 +0200 +Subject: [PATCH 1/9] libnm: add NM_VERSION_1_30_8 + +(cherry picked from commit ce02f563565d3221a1bd7f2db09a249d5034a30e) +--- + libnm-core/nm-version-macros.h.in | 1 + + libnm-core/nm-version.h | 6 ++++++ + 2 files changed, 7 insertions(+) + +diff --git a/libnm-core/nm-version-macros.h.in b/libnm-core/nm-version-macros.h.in +index 4a6f46e9f0..08486efc4e 100644 +--- a/libnm-core/nm-version-macros.h.in ++++ b/libnm-core/nm-version-macros.h.in +@@ -67,6 +67,7 @@ + #define NM_VERSION_1_26 (NM_ENCODE_VERSION (1, 26, 0)) + #define NM_VERSION_1_28 (NM_ENCODE_VERSION (1, 28, 0)) + #define NM_VERSION_1_30 (NM_ENCODE_VERSION (1, 30, 0)) ++#define NM_VERSION_1_30_8 (NM_ENCODE_VERSION (1, 30, 8)) + + /* For releases, NM_API_VERSION is equal to NM_VERSION. + * +diff --git a/libnm-core/nm-version.h b/libnm-core/nm-version.h +index 3f1ad3f2eb..7aa2b6fd1c 100644 +--- a/libnm-core/nm-version.h ++++ b/libnm-core/nm-version.h +@@ -271,6 +271,12 @@ + #define NM_AVAILABLE_IN_1_30 + #endif + ++#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_30_8 ++ #define NM_AVAILABLE_IN_1_30_8 G_UNAVAILABLE(1, 30.8) ++#else ++ #define NM_AVAILABLE_IN_1_30_8 ++#endif ++ + /* + * Synchronous API for calling D-Bus in libnm is deprecated. See + * https://developer.gnome.org/libnm/stable/usage.html#sync-api +-- +2.31.1 + +From c388085d13e39c819f3db20be8209cb2e7013dd9 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 16 Feb 2021 21:23:37 +0100 +Subject: [PATCH 2/9] initrd: cleanup parsing DNS in reader_parse_ip() + +(cherry picked from commit e258410c877ee081a19f38653d20d884d3923d04) +(cherry picked from commit f8645d6a86537f0094b6182bda950119f068ce05) +--- + src/core/initrd/nmi-cmdline-reader.c | 37 +++++++++++----------------- + 1 file changed, 15 insertions(+), 22 deletions(-) + +diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c +index eae75847ee..79156c9ea9 100644 +--- a/src/core/initrd/nmi-cmdline-reader.c ++++ b/src/core/initrd/nmi-cmdline-reader.c +@@ -411,10 +411,12 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) + int client_ip_family = AF_UNSPEC; + int client_ip_prefix = -1; + const char * dns[2] = { +- 0, ++ NULL, ++ NULL, + }; + int dns_addr_family[2] = { +- 0, ++ AF_UNSPEC, ++ AF_UNSPEC, + }; + int i; + GError *error = NULL; +@@ -472,11 +474,15 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) + tmp = get_word(&argument, ':'); + dns_addr_family[0] = get_ip_address_family(tmp, FALSE); + if (dns_addr_family[0] != AF_UNSPEC) { +- dns[0] = tmp; +- dns[1] = get_word(&argument, ':'); +- dns_addr_family[1] = get_ip_address_family(dns[1], FALSE); +- if (*argument) +- _LOGW(LOGD_CORE, "Ignoring extra: '%s'.", argument); ++ dns[0] = tmp; ++ dns[1] = get_word(&argument, ':'); ++ if (dns[1]) { ++ dns_addr_family[1] = get_ip_address_family(dns[1], FALSE); ++ if (dns_addr_family[1] == AF_UNSPEC) ++ _LOGW(LOGD_CORE, "Ignoring invalid DNS server: '%s'.", dns[1]); ++ if (*argument) ++ _LOGW(LOGD_CORE, "Ignoring extra: '%s'.", argument); ++ } + } else { + mtu = tmp; + macaddr = argument; +@@ -693,21 +699,8 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) + for (i = 0; i < 2; i++) { + if (dns_addr_family[i] == AF_UNSPEC) + break; +- if (nm_utils_ipaddr_is_valid(dns_addr_family[i], dns[i])) { +- switch (dns_addr_family[i]) { +- case AF_INET: +- nm_setting_ip_config_add_dns(s_ip4, dns[i]); +- break; +- case AF_INET6: +- nm_setting_ip_config_add_dns(s_ip6, dns[i]); +- break; +- default: +- _LOGW(LOGD_CORE, "Unknown address family: %s", dns[i]); +- break; +- } +- } else { +- _LOGW(LOGD_CORE, "Invalid name server: %s", dns[i]); +- } ++ nm_assert(nm_utils_ipaddr_is_valid(dns_addr_family[i], dns[i])); ++ nm_setting_ip_config_add_dns(NM_IS_IPv4(dns_addr_family[i]) ? s_ip4 : s_ip6, dns[i]); + } + + if (mtu && *mtu) +-- +2.31.1 + +From 8121af668e1a5b0a76433a4d116ffd6e457b340b Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 19 May 2021 23:17:43 +0200 +Subject: [PATCH 3/9] glib-aux: add nm_g_source_sentinel_get() util + +This helper is useful to get a dummy GSource instance that can be +refed, unrefed and destroyed. It can act as a replacement for +a timeout source with infinite timeout. + +(cherry picked from commit ce7c28c514c8ae1f1a9f5d9b56fbe503ec815109) +(cherry picked from commit 3a58255247aef2e6303713a764753cc70c0b36a5) +--- + shared/nm-glib-aux/nm-shared-utils.c | 27 ++++++++++ + shared/nm-glib-aux/nm-shared-utils.h | 25 +++++++++ + .../nm-glib-aux/tests/test-shared-general.c | 53 +++++++++++++++++++ + 3 files changed, 105 insertions(+) + +diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c +index 3215a33b5b..496294b184 100644 +--- a/shared/nm-glib-aux/nm-shared-utils.c ++++ b/shared/nm-glib-aux/nm-shared-utils.c +@@ -4682,6 +4682,33 @@ nm_utils_parse_debug_string(const char *string, const GDebugKey *keys, guint nke + + /*****************************************************************************/ + ++GSource *_nm_g_source_sentinel[] = { ++ NULL, ++}; ++ ++GSource * ++_nm_g_source_sentinel_get_init(GSource **p_source) ++{ ++ static const GSourceFuncs source_funcs = { ++ NULL, ++ }; ++ GSource *source; ++ ++again: ++ source = g_source_new((GSourceFuncs *) &source_funcs, sizeof(GSource)); ++ g_source_set_priority(source, G_PRIORITY_DEFAULT_IDLE); ++ g_source_set_name(source, "nm_g_source_sentinel"); ++ ++ if (!g_atomic_pointer_compare_and_exchange(p_source, NULL, source)) { ++ g_source_unref(source); ++ goto again; ++ } ++ ++ return source; ++} ++ ++/*****************************************************************************/ ++ + GSource * + nm_g_idle_source_new(int priority, + GSourceFunc func, +diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h +index 7d330458c1..9aa44cc62b 100644 +--- a/shared/nm-glib-aux/nm-shared-utils.h ++++ b/shared/nm-glib-aux/nm-shared-utils.h +@@ -1328,6 +1328,31 @@ nm_source_func_unref_gobject(gpointer user_data) + return G_SOURCE_REMOVE; + } + ++extern GSource *_nm_g_source_sentinel[1]; ++ ++GSource *_nm_g_source_sentinel_get_init(GSource **p_source); ++ ++/* Get a GSource sentinel (dummy instance). This instance should never be ++ * attached to a GMainContext. The only currently known purpose is to use it ++ * as dummy value instead of an infinity timeout. That is, if we configurably ++ * want to schedule a timeout that might be infinity, we might set the GSource ++ * instance to nm_g_source_sentinel_get(). On this instance, we still may ++ * call g_source_ref(), g_source_unref() and g_source_destroy(). But nothing ++ * else. */ ++#define nm_g_source_sentinel_get(idx) \ ++ ({ \ ++ GSource *_s; \ ++ \ ++ G_STATIC_ASSERT((idx) >= 0); \ ++ G_STATIC_ASSERT((idx) < G_N_ELEMENTS(_nm_g_source_sentinel)); \ ++ \ ++ _s = g_atomic_pointer_get(&_nm_g_source_sentinel[idx]); \ ++ if (G_UNLIKELY(!_s)) \ ++ _s = _nm_g_source_sentinel_get_init(&_nm_g_source_sentinel[idx]); \ ++ \ ++ _s; \ ++ }) ++ + GSource *nm_g_idle_source_new(int priority, + GSourceFunc func, + gpointer user_data, +diff --git a/shared/nm-glib-aux/tests/test-shared-general.c b/shared/nm-glib-aux/tests/test-shared-general.c +index f42c6fb108..3bf63d6df2 100644 +--- a/shared/nm-glib-aux/tests/test-shared-general.c ++++ b/shared/nm-glib-aux/tests/test-shared-general.c +@@ -1256,6 +1256,58 @@ again: + + /*****************************************************************************/ + ++static void ++test_nm_g_source_sentinel(void) ++{ ++ GSource *s1; ++ GSource *s2; ++ int n; ++ int i; ++ int refs; ++ ++ s1 = nm_g_source_sentinel_get(0); ++ g_assert_nonnull(s1); ++ g_assert_cmpint(g_atomic_int_get(&s1->ref_count), ==, 1); ++ ++ s2 = nm_g_source_sentinel_get(0); ++ g_assert_nonnull(s2); ++ g_assert(s2 == s1); ++ g_assert_cmpint(g_atomic_int_get(&s1->ref_count), ==, 1); ++ ++ n = nmtst_get_rand_uint32() % 7; ++ for (refs = 0, i = 0; i < n; i++) { ++ if (nmtst_get_rand_bool()) { ++ refs++; ++ g_source_ref(s1); ++ } ++ if (nmtst_get_rand_bool()) ++ g_source_destroy(s1); ++ if (refs > 0 && nmtst_get_rand_bool()) { ++ refs--; ++ g_source_unref(s1); ++ } ++ ++ if (nmtst_get_rand_bool()) { ++ s2 = nm_g_source_sentinel_get(0); ++ g_assert(s2 == s1); ++ g_assert_cmpint(g_atomic_int_get(&s1->ref_count), >=, 1); ++ } ++ } ++ ++ for (; refs > 0;) { ++ if (nmtst_get_rand_bool()) ++ g_source_destroy(s1); ++ if (nmtst_get_rand_bool()) { ++ refs--; ++ g_source_unref(s1); ++ } ++ } ++ ++ g_assert_cmpint(g_atomic_int_get(&s1->ref_count), ==, 1); ++} ++ ++/*****************************************************************************/ ++ + NMTST_DEFINE(); + + int +@@ -1284,6 +1336,7 @@ main(int argc, char **argv) + g_test_add_func("/general/test_is_specific_hostname", test_is_specific_hostname); + g_test_add_func("/general/test_strv_dup_packed", test_strv_dup_packed); + g_test_add_func("/general/test_utils_hashtable_cmp", test_utils_hashtable_cmp); ++ g_test_add_func("/general/test_nm_g_source_sentinel", test_nm_g_source_sentinel); + + return g_test_run(); + } +-- +2.31.1 + +From a76c65e1dec0d826ee407888513a7f87b3504da7 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 8 Jun 2021 13:32:29 +0200 +Subject: [PATCH 4/9] glib-aux/tests: avoid coverity warning in + test_nm_g_source_sentinel() + +Coverity wrongly think there is a use after free in the test: + + Error: USE_AFTER_FREE (CWE-416): [#def559] [important] + NetworkManager-1.31.90/src/libnm-glib-aux/tests/test-shared-general.c:1305: alias: Assigning: "s1" = "_s". Now both point to the same storage. + NetworkManager-1.31.90/src/libnm-glib-aux/tests/test-shared-general.c:1324: freed_arg: "g_source_unref" frees "s1". + NetworkManager-1.31.90/src/libnm-glib-aux/tests/test-shared-general.c:1330: deref_after_free: Dereferencing freed pointer "s1". + # 1328| s2 = nm_g_source_sentinel_get(0); + # 1329| g_assert(s2 == s1); + # 1330|-> g_assert_cmpint(g_atomic_int_get(&s1->ref_count), >=, 1); + # 1331| } + # 1332| } + +Rework the code in the hope to avoid the false warning. + +(cherry picked from commit 7825609f1f7bb0a0ea710a2fddba426f30a519de) +(cherry picked from commit c47c823c9dad6fb61014a71510b76ed82e72be84) +(cherry picked from commit bd7cbd57704233669b248b035391919272aa2edc) +--- + shared/nm-glib-aux/tests/test-shared-general.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/shared/nm-glib-aux/tests/test-shared-general.c b/shared/nm-glib-aux/tests/test-shared-general.c +index 3bf63d6df2..a6ad8dffdc 100644 +--- a/shared/nm-glib-aux/tests/test-shared-general.c ++++ b/shared/nm-glib-aux/tests/test-shared-general.c +@@ -1289,8 +1289,8 @@ test_nm_g_source_sentinel(void) + + if (nmtst_get_rand_bool()) { + s2 = nm_g_source_sentinel_get(0); ++ g_assert_cmpint(g_atomic_int_get(&s2->ref_count), >=, 1); + g_assert(s2 == s1); +- g_assert_cmpint(g_atomic_int_get(&s1->ref_count), >=, 1); + } + } + +-- +2.31.1 + +From 859e39fcb322304cf2689c1dd14238efde290d95 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Thu, 5 Aug 2021 08:38:07 +0200 +Subject: [PATCH 5/9] glib-aux: fix thread-safe initialization in + _nm_g_source_sentinel_get_init() + +Fixes: ce7c28c514c8 ('glib-aux: add nm_g_source_sentinel_get() util') +(cherry picked from commit 2140bbf7f52429a34993ed98098b2afb5443c676) +(cherry picked from commit c37f72acd314c707bdf6912f47e0fbdd4c6b3969) +(cherry picked from commit 660932163f7d0c5e9fe6af3dc867394775bbee4b) +--- + shared/nm-glib-aux/nm-shared-utils.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c +index 496294b184..154d9fc29b 100644 +--- a/shared/nm-glib-aux/nm-shared-utils.c ++++ b/shared/nm-glib-aux/nm-shared-utils.c +@@ -4694,14 +4694,14 @@ _nm_g_source_sentinel_get_init(GSource **p_source) + }; + GSource *source; + +-again: + source = g_source_new((GSourceFuncs *) &source_funcs, sizeof(GSource)); + g_source_set_priority(source, G_PRIORITY_DEFAULT_IDLE); + g_source_set_name(source, "nm_g_source_sentinel"); + + if (!g_atomic_pointer_compare_and_exchange(p_source, NULL, source)) { + g_source_unref(source); +- goto again; ++ source = g_atomic_pointer_get(p_source); ++ nm_assert(source); + } + + return source; +-- +2.31.1 + +From 896bc9d3c43626a247828ab69d994fba8db89308 Mon Sep 17 00:00:00 2001 +From: Beniamino Galvani +Date: Mon, 5 Jul 2021 09:48:54 +0200 +Subject: [PATCH 6/9] initrd: rename NMI_WAIT_DEVICE_TIMEOUT_MS to _MSEC + +(cherry picked from commit fa42ba9df267765cd6f7456707d932271e1252a0) +(cherry picked from commit f2d9f4bf66c0b459701cf9b6ab0a9f6690e3407b) +(cherry picked from commit 671dc82f94c24f25e3eb67680c7c0f17990e7815) +--- + src/core/initrd/nm-initrd-generator.h | 2 +- + src/core/initrd/nmi-cmdline-reader.c | 2 +- + src/core/initrd/tests/test-cmdline-reader.c | 10 +++++----- + 3 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/core/initrd/nm-initrd-generator.h b/src/core/initrd/nm-initrd-generator.h +index 56dcfd68f3..534edcb783 100644 +--- a/src/core/initrd/nm-initrd-generator.h ++++ b/src/core/initrd/nm-initrd-generator.h +@@ -9,7 +9,7 @@ + #include "nm-connection.h" + #include "nm-utils.h" + +-#define NMI_WAIT_DEVICE_TIMEOUT_MS 60000 ++#define NMI_WAIT_DEVICE_TIMEOUT_MSEC 60000 + + static inline int + get_ip_address_family(const char *str, gboolean with_prefix) +diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c +index 79156c9ea9..2202ab34ea 100644 +--- a/src/core/initrd/nmi-cmdline-reader.c ++++ b/src/core/initrd/nmi-cmdline-reader.c +@@ -1047,7 +1047,7 @@ connection_set_needed(NMConnection *connection) + + g_object_set(s_con, + NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT, +- (int) NMI_WAIT_DEVICE_TIMEOUT_MS, ++ (int) NMI_WAIT_DEVICE_TIMEOUT_MSEC, + NULL); + } + +diff --git a/src/core/initrd/tests/test-cmdline-reader.c b/src/core/initrd/tests/test-cmdline-reader.c +index 187d61c9dc..cffa607ce7 100644 +--- a/src/core/initrd/tests/test-cmdline-reader.c ++++ b/src/core/initrd/tests/test-cmdline-reader.c +@@ -704,7 +704,7 @@ test_multiple_bootdev(void) + g_assert(s_con); + g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), + ==, +- NMI_WAIT_DEVICE_TIMEOUT_MS); ++ NMI_WAIT_DEVICE_TIMEOUT_MSEC); + s_ip4 = nm_connection_get_setting_ip4_config(connection); + g_assert(s_ip4); + g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO); +@@ -746,7 +746,7 @@ test_bootdev(void) + g_assert_cmpstr(nm_setting_connection_get_interface_name(s_con), ==, "ens3"); + g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), + ==, +- NMI_WAIT_DEVICE_TIMEOUT_MS); ++ NMI_WAIT_DEVICE_TIMEOUT_MSEC); + + connection = g_hash_table_lookup(connections, "vlan2"); + nmtst_assert_connection_verifies_without_normalization(connection); +@@ -1924,7 +1924,7 @@ test_neednet(void) + g_assert_cmpstr(nm_setting_connection_get_interface_name(s_con), ==, "eno1"); + g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), + ==, +- NMI_WAIT_DEVICE_TIMEOUT_MS); ++ NMI_WAIT_DEVICE_TIMEOUT_MSEC); + + connection = g_hash_table_lookup(connections, "eno2"); + nmtst_assert_connection_verifies_without_normalization(connection); +@@ -1933,7 +1933,7 @@ test_neednet(void) + g_assert_cmpstr(nm_setting_connection_get_interface_name(s_con), ==, "eno2"); + g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), + ==, +- NMI_WAIT_DEVICE_TIMEOUT_MS); ++ NMI_WAIT_DEVICE_TIMEOUT_MSEC); + + connection = g_hash_table_lookup(connections, "eno3"); + nmtst_assert_connection_verifies_without_normalization(connection); +@@ -1942,7 +1942,7 @@ test_neednet(void) + g_assert_cmpstr(nm_setting_connection_get_interface_name(s_con), ==, "eno3"); + g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), + ==, +- NMI_WAIT_DEVICE_TIMEOUT_MS); ++ NMI_WAIT_DEVICE_TIMEOUT_MSEC); + + connection = g_hash_table_lookup(connections, "br0"); + nmtst_assert_connection_verifies_without_normalization(connection); +-- +2.31.1 + +From d405e8fe0ba9fda39ccab678a6a37c6083f64031 Mon Sep 17 00:00:00 2001 +From: Beniamino Galvani +Date: Wed, 23 Jun 2021 15:01:34 +0200 +Subject: [PATCH 7/9] all: add a new ipv{4,6}.required-timeout property + +Add a new property to specify the minimum time interval in +milliseconds for which dynamic IP configuration should be tried before +the connection succeeds. + +This property is useful for example if both IPv4 and IPv6 are enabled +and are allowed to fail. Normally the connection succeeds as soon as +one of the two address families completes; by setting a required +timeout for e.g. IPv4, one can ensure that even if IP6 succeeds +earlier than IPv4, NetworkManager waits some time for IPv4 before the +connection becomes active. + +(cherry picked from commit cb5960cef7fa170535903a9ca099094354f61b32) +(cherry picked from commit 08ce20481caa3ecb1fc4c522528f9b675c220a50) +(cherry picked from commit 253de76195171de6007ae2d7cda8cebf0cd498a7) +--- + .../generate-docs-nm-settings-nmcli.xml.in | 4 + + clients/common/nm-meta-setting-desc.c | 30 + + clients/common/settings-docs.h.in | 2 + + .../test_003.expected | 636 ++++++++----- + .../test_004.expected | 900 ++++++++++-------- + libnm-core/nm-setting-ip-config.c | 60 ++ + libnm-core/nm-setting-ip-config.h | 3 + + libnm-core/tests/test-general.c | 1 + + libnm/libnm.ver | 5 + + .../plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 4 + + .../plugins/ifcfg-rh/nms-ifcfg-rh-utils.c | 2 + + .../plugins/ifcfg-rh/nms-ifcfg-rh-utils.h | 2 +- + .../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 6 + + 13 files changed, 1022 insertions(+), 633 deletions(-) + +diff --git a/clients/cli/generate-docs-nm-settings-nmcli.xml.in b/clients/cli/generate-docs-nm-settings-nmcli.xml.in +index 0a75a0e681..2ce665241f 100644 +--- a/clients/cli/generate-docs-nm-settings-nmcli.xml.in ++++ b/clients/cli/generate-docs-nm-settings-nmcli.xml.in +@@ -675,6 +675,8 @@ + description="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." /> + ++ + + + ++ + + >> + connection.id: con-gsm1 + connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL +@@ -203,6 +203,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -221,6 +222,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -256,12 +258,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4563 ++size: 4669 + location: clients/tests/test-client.py:test_003()/13 + cmd: $NMCLI con s con-gsm1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4423 bytes ++stdout: 4529 bytes + >>> + connection.id: con-gsm1 + connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL +@@ -309,6 +311,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -327,6 +330,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -494,12 +498,12 @@ UUID NAME + UUID-ethernet-REPLACED-REPLACED-REPL ethernet + + <<< +-size: 4308 ++size: 4414 + location: clients/tests/test-client.py:test_003()/25 + cmd: $NMCLI -f ALL con s ethernet + lang: C + returncode: 0 +-stdout: 4171 bytes ++stdout: 4277 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -561,6 +565,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -579,6 +584,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -595,12 +601,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4336 ++size: 4442 + location: clients/tests/test-client.py:test_003()/26 + cmd: $NMCLI -f ALL con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4189 bytes ++stdout: 4295 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -662,6 +668,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -680,6 +687,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -716,12 +724,12 @@ stdout: 51 bytes + GENERAL.STATE: aktywowano + + <<< +-size: 5010 ++size: 5116 + location: clients/tests/test-client.py:test_003()/29 + cmd: $NMCLI con s ethernet + lang: C + returncode: 0 +-stdout: 4880 bytes ++stdout: 4986 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -783,6 +791,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -801,6 +810,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -830,12 +840,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5042 ++size: 5148 + location: clients/tests/test-client.py:test_003()/30 + cmd: $NMCLI con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4902 bytes ++stdout: 5008 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -897,6 +907,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -915,6 +926,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1418,12 +1430,12 @@ UUID NAME + UUID-ethernet-REPLACED-REPLACED-REPL ethernet + + <<< +-size: 4308 ++size: 4414 + location: clients/tests/test-client.py:test_003()/50 + cmd: $NMCLI -f ALL con s ethernet + lang: C + returncode: 0 +-stdout: 4171 bytes ++stdout: 4277 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -1485,6 +1497,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1503,6 +1516,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1519,12 +1533,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4336 ++size: 4442 + location: clients/tests/test-client.py:test_003()/51 + cmd: $NMCLI -f ALL con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4189 bytes ++stdout: 4295 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -1586,6 +1600,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1604,6 +1619,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1644,12 +1660,12 @@ GENERAL.STATE: aktywowano + GENERAL.STATE: aktywowano + + <<< +-size: 5720 ++size: 5826 + location: clients/tests/test-client.py:test_003()/54 + cmd: $NMCLI con s ethernet + lang: C + returncode: 0 +-stdout: 5590 bytes ++stdout: 5696 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -1711,6 +1727,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1729,6 +1746,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1772,12 +1790,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5756 ++size: 5862 + location: clients/tests/test-client.py:test_003()/55 + cmd: $NMCLI con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5616 bytes ++stdout: 5722 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -1839,6 +1857,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1857,6 +1876,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -2292,12 +2312,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 5723 ++size: 5829 + location: clients/tests/test-client.py:test_003()/68 + cmd: $NMCLI con s ethernet + lang: C + returncode: 0 +-stdout: 5593 bytes ++stdout: 5699 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -2359,6 +2379,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -2377,6 +2398,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -2420,12 +2442,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5760 ++size: 5866 + location: clients/tests/test-client.py:test_003()/69 + cmd: $NMCLI con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5620 bytes ++stdout: 5726 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -2487,6 +2509,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -2505,6 +2528,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -2548,12 +2572,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5053 ++size: 5159 + location: clients/tests/test-client.py:test_003()/70 + cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 4883 bytes ++stdout: 4989 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -2615,6 +2639,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -2633,6 +2658,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -2662,12 +2688,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5086 ++size: 5192 + location: clients/tests/test-client.py:test_003()/71 + cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4906 bytes ++stdout: 5012 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -2729,6 +2755,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -2747,6 +2774,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -2976,12 +3004,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 5735 ++size: 5841 + location: clients/tests/test-client.py:test_003()/78 + cmd: $NMCLI --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 5593 bytes ++stdout: 5699 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -3043,6 +3071,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -3061,6 +3090,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -3104,12 +3134,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5772 ++size: 5878 + location: clients/tests/test-client.py:test_003()/79 + cmd: $NMCLI --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5620 bytes ++stdout: 5726 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -3171,6 +3201,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -3189,6 +3220,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -3232,12 +3264,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5065 ++size: 5171 + location: clients/tests/test-client.py:test_003()/80 + cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 4883 bytes ++stdout: 4989 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -3299,6 +3331,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -3317,6 +3350,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -3346,12 +3380,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5098 ++size: 5204 + location: clients/tests/test-client.py:test_003()/81 + cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4906 bytes ++stdout: 5012 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -3413,6 +3447,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -3431,6 +3466,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -3676,12 +3712,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 6977 ++size: 7083 + location: clients/tests/test-client.py:test_003()/88 + cmd: $NMCLI --pretty con s ethernet + lang: C + returncode: 0 +-stdout: 6838 bytes ++stdout: 6944 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -3748,6 +3784,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -3767,6 +3804,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -3820,12 +3858,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 7033 ++size: 7139 + location: clients/tests/test-client.py:test_003()/89 + cmd: $NMCLI --pretty con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6884 bytes ++stdout: 6990 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -3892,6 +3930,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -3911,6 +3950,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -3964,12 +4004,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 5994 ++size: 6100 + location: clients/tests/test-client.py:test_003()/90 + cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 5815 bytes ++stdout: 5921 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -4036,6 +4076,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4055,6 +4096,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4090,12 +4132,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6039 ++size: 6145 + location: clients/tests/test-client.py:test_003()/91 + cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5850 bytes ++stdout: 5956 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -4162,6 +4204,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4181,6 +4224,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4456,12 +4500,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 6989 ++size: 7095 + location: clients/tests/test-client.py:test_003()/98 + cmd: $NMCLI --pretty --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 6838 bytes ++stdout: 6944 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -4528,6 +4572,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4547,6 +4592,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4600,12 +4646,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 7045 ++size: 7151 + location: clients/tests/test-client.py:test_003()/99 + cmd: $NMCLI --pretty --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6884 bytes ++stdout: 6990 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -4672,6 +4718,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4691,6 +4738,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4744,12 +4792,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6007 ++size: 6113 + location: clients/tests/test-client.py:test_003()/100 + cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 5815 bytes ++stdout: 5921 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -4816,6 +4864,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4835,6 +4884,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4870,12 +4920,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6052 ++size: 6158 + location: clients/tests/test-client.py:test_003()/101 + cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5850 bytes ++stdout: 5956 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -4942,6 +4992,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4961,6 +5012,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -5216,12 +5268,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet + + <<< +-size: 3070 ++size: 3120 + location: clients/tests/test-client.py:test_003()/108 + cmd: $NMCLI --terse con s ethernet + lang: C + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -5283,6 +5335,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -5301,6 +5354,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -5344,12 +5398,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 3080 ++size: 3130 + location: clients/tests/test-client.py:test_003()/109 + cmd: $NMCLI --terse con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -5411,6 +5465,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -5429,6 +5484,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -5472,12 +5528,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2720 ++size: 2770 + location: clients/tests/test-client.py:test_003()/110 + cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -5539,6 +5595,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -5557,6 +5614,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -5586,12 +5644,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2730 ++size: 2780 + location: clients/tests/test-client.py:test_003()/111 + cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -5653,6 +5711,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -5671,6 +5730,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -5896,12 +5956,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet + + <<< +-size: 3082 ++size: 3132 + location: clients/tests/test-client.py:test_003()/118 + cmd: $NMCLI --terse --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -5963,6 +6023,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -5981,6 +6042,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -6024,12 +6086,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 3092 ++size: 3142 + location: clients/tests/test-client.py:test_003()/119 + cmd: $NMCLI --terse --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -6091,6 +6153,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -6109,6 +6172,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -6152,12 +6216,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2732 ++size: 2782 + location: clients/tests/test-client.py:test_003()/120 + cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -6219,6 +6283,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -6237,6 +6302,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -6266,12 +6332,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2742 ++size: 2792 + location: clients/tests/test-client.py:test_003()/121 + cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -6333,6 +6399,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -6351,6 +6418,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -6580,12 +6648,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 3838 ++size: 3910 + location: clients/tests/test-client.py:test_003()/128 + cmd: $NMCLI --mode tabular con s ethernet + lang: C + returncode: 0 +-stdout: 3692 bytes ++stdout: 3764 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 +@@ -6593,11 +6661,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none no -- -- +@@ -6611,12 +6679,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 3872 ++size: 3944 + location: clients/tests/test-client.py:test_003()/129 + cmd: $NMCLI --mode tabular con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3716 bytes ++stdout: 3788 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 +@@ -6624,11 +6692,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none nie -- -- +@@ -6642,12 +6710,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza + + + <<< +-size: 3376 ++size: 3448 + location: clients/tests/test-client.py:test_003()/130 + cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 3190 bytes ++stdout: 3262 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 +@@ -6655,11 +6723,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none no -- -- +@@ -6669,12 +6737,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 3408 ++size: 3480 + location: clients/tests/test-client.py:test_003()/131 + cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3212 bytes ++stdout: 3284 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 +@@ -6682,11 +6750,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none nie -- -- +@@ -6824,12 +6892,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 3850 ++size: 3922 + location: clients/tests/test-client.py:test_003()/138 + cmd: $NMCLI --mode tabular --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 3692 bytes ++stdout: 3764 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 +@@ -6837,11 +6905,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none no -- -- +@@ -6855,12 +6923,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 3884 ++size: 3956 + location: clients/tests/test-client.py:test_003()/139 + cmd: $NMCLI --mode tabular --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3716 bytes ++stdout: 3788 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 +@@ -6868,11 +6936,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none nie -- -- +@@ -6886,12 +6954,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza + + + <<< +-size: 3388 ++size: 3460 + location: clients/tests/test-client.py:test_003()/140 + cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 3190 bytes ++stdout: 3262 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 +@@ -6899,11 +6967,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none no -- -- +@@ -6913,12 +6981,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 3420 ++size: 3492 + location: clients/tests/test-client.py:test_003()/141 + cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3212 bytes ++stdout: 3284 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 +@@ -6926,11 +6994,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth + name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + proxy none nie -- -- +@@ -7084,12 +7152,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 6242 ++size: 6350 + location: clients/tests/test-client.py:test_003()/148 + cmd: $NMCLI --mode tabular --pretty con s ethernet + lang: C + returncode: 0 +-stdout: 6087 bytes ++stdout: 6195 bytes + >>> + ========================================= + Connection profile details (ethernet) +@@ -7102,13 +7170,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7131,12 +7199,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 6336 ++size: 6444 + location: clients/tests/test-client.py:test_003()/149 + cmd: $NMCLI --mode tabular --pretty con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6171 bytes ++stdout: 6279 bytes + >>> + =========================================== + Szczegóły profilu połączenia (ethernet) +@@ -7149,13 +7217,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7178,12 +7246,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza + + + <<< +-size: 5318 ++size: 5426 + location: clients/tests/test-client.py:test_003()/150 + cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 5123 bytes ++stdout: 5231 bytes + >>> + ========================================= + Connection profile details (ethernet) +@@ -7196,13 +7264,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7217,12 +7285,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 5390 ++size: 5498 + location: clients/tests/test-client.py:test_003()/151 + cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5185 bytes ++stdout: 5293 bytes + >>> + =========================================== + Szczegóły profilu połączenia (ethernet) +@@ -7235,13 +7303,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7424,12 +7492,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet + + <<< +-size: 6254 ++size: 6362 + location: clients/tests/test-client.py:test_003()/158 + cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 6087 bytes ++stdout: 6195 bytes + >>> + ========================================= + Connection profile details (ethernet) +@@ -7442,13 +7510,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7471,12 +7539,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 6348 ++size: 6456 + location: clients/tests/test-client.py:test_003()/159 + cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6171 bytes ++stdout: 6279 bytes + >>> + =========================================== + Szczegóły profilu połączenia (ethernet) +@@ -7489,13 +7557,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7518,12 +7586,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza + + + <<< +-size: 5330 ++size: 5438 + location: clients/tests/test-client.py:test_003()/160 + cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 5123 bytes ++stdout: 5231 bytes + >>> + ========================================= + Connection profile details (ethernet) +@@ -7536,13 +7604,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7557,12 +7625,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac + + + <<< +-size: 5402 ++size: 5510 + location: clients/tests/test-client.py:test_003()/161 + cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5185 bytes ++stdout: 5293 bytes + >>> + =========================================== + Szczegóły profilu połączenia (ethernet) +@@ -7575,13 +7643,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name method browser-only pac-url pac-script + -------------------------------------------------- +@@ -7744,66 +7812,66 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet + + <<< +-size: 853 ++size: 859 + location: clients/tests/test-client.py:test_003()/168 + cmd: $NMCLI --mode tabular --terse con s ethernet + lang: C + returncode: 0 +-stdout: 700 bytes ++stdout: 706 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + proxy:none:no:: + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + <<< +-size: 863 ++size: 869 + location: clients/tests/test-client.py:test_003()/169 + cmd: $NMCLI --mode tabular --terse con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 700 bytes ++stdout: 706 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + proxy:none:no:: + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + <<< +-size: 701 ++size: 707 + location: clients/tests/test-client.py:test_003()/170 + cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 508 bytes ++stdout: 514 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + 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/4:: + + <<< +-size: 711 ++size: 717 + location: clients/tests/test-client.py:test_003()/171 + cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 508 bytes ++stdout: 514 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + 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/4:: + +@@ -7898,66 +7966,66 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm + UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet + + <<< +-size: 865 ++size: 871 + location: clients/tests/test-client.py:test_003()/178 + cmd: $NMCLI --mode tabular --terse --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 700 bytes ++stdout: 706 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + proxy:none:no:: + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + <<< +-size: 875 ++size: 881 + location: clients/tests/test-client.py:test_003()/179 + cmd: $NMCLI --mode tabular --terse --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 700 bytes ++stdout: 706 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + proxy:none:no:: + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: + + <<< +-size: 713 ++size: 719 + location: clients/tests/test-client.py:test_003()/180 + cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 508 bytes ++stdout: 514 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + 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/4:: + + <<< +-size: 723 ++size: 729 + location: clients/tests/test-client.py:test_003()/181 + cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 508 bytes ++stdout: 514 bytes + >>> + connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 + 802-3-ethernet::0::no:::::auto::::default: +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + 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/4:: + +@@ -8200,12 +8268,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA + TYPE: ethernet + + <<< +-size: 5741 ++size: 5847 + location: clients/tests/test-client.py:test_003()/188 + cmd: $NMCLI --mode multiline con s ethernet + lang: C + returncode: 0 +-stdout: 5593 bytes ++stdout: 5699 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -8267,6 +8335,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -8285,6 +8354,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -8328,12 +8398,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5778 ++size: 5884 + location: clients/tests/test-client.py:test_003()/189 + cmd: $NMCLI --mode multiline con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5620 bytes ++stdout: 5726 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -8395,6 +8465,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -8413,6 +8484,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -8456,12 +8528,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5071 ++size: 5177 + location: clients/tests/test-client.py:test_003()/190 + cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 4883 bytes ++stdout: 4989 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -8523,6 +8595,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -8541,6 +8614,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -8570,12 +8644,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5104 ++size: 5210 + location: clients/tests/test-client.py:test_003()/191 + cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4906 bytes ++stdout: 5012 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -8637,6 +8711,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -8655,6 +8730,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -9028,12 +9104,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA + TYPE: ethernet + + <<< +-size: 5753 ++size: 5859 + location: clients/tests/test-client.py:test_003()/198 + cmd: $NMCLI --mode multiline --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 5593 bytes ++stdout: 5699 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -9095,6 +9171,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -9113,6 +9190,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -9156,12 +9234,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5790 ++size: 5896 + location: clients/tests/test-client.py:test_003()/199 + cmd: $NMCLI --mode multiline --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5620 bytes ++stdout: 5726 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -9223,6 +9301,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -9241,6 +9320,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -9284,12 +9364,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5083 ++size: 5189 + location: clients/tests/test-client.py:test_003()/200 + cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 4883 bytes ++stdout: 4989 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -9351,6 +9431,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -9369,6 +9450,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -9398,12 +9480,12 @@ GENERAL.ZONE: -- + GENERAL.MASTER-PATH: -- + + <<< +-size: 5116 ++size: 5222 + location: clients/tests/test-client.py:test_003()/201 + cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4906 bytes ++stdout: 5012 bytes + >>> + connection.id: ethernet + connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL +@@ -9465,6 +9547,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -9483,6 +9566,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -9886,12 +9970,12 @@ TYPE: ethernet + ------------------------------------------------------------------------------- + + <<< +-size: 6995 ++size: 7101 + location: clients/tests/test-client.py:test_003()/208 + cmd: $NMCLI --mode multiline --pretty con s ethernet + lang: C + returncode: 0 +-stdout: 6838 bytes ++stdout: 6944 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -9958,6 +10042,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -9977,6 +10062,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -10030,12 +10116,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 7051 ++size: 7157 + location: clients/tests/test-client.py:test_003()/209 + cmd: $NMCLI --mode multiline --pretty con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6884 bytes ++stdout: 6990 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -10102,6 +10188,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -10121,6 +10208,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -10174,12 +10262,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6012 ++size: 6118 + location: clients/tests/test-client.py:test_003()/210 + cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 5815 bytes ++stdout: 5921 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -10246,6 +10334,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -10265,6 +10354,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -10300,12 +10390,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6057 ++size: 6163 + location: clients/tests/test-client.py:test_003()/211 + cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5850 bytes ++stdout: 5956 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -10372,6 +10462,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -10391,6 +10482,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -10824,12 +10916,12 @@ TYPE: ethernet + ------------------------------------------------------------------------------- + + <<< +-size: 7007 ++size: 7113 + location: clients/tests/test-client.py:test_003()/218 + cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 6838 bytes ++stdout: 6944 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -10896,6 +10988,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -10915,6 +11008,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -10968,12 +11062,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 7063 ++size: 7169 + location: clients/tests/test-client.py:test_003()/219 + cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6884 bytes ++stdout: 6990 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -11040,6 +11134,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11059,6 +11154,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11112,12 +11208,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6024 ++size: 6130 + location: clients/tests/test-client.py:test_003()/220 + cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 5815 bytes ++stdout: 5921 bytes + >>> + =============================================================================== + Connection profile details (ethernet) +@@ -11184,6 +11280,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11203,6 +11300,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11238,12 +11336,12 @@ GENERAL.MASTER-PATH: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6069 ++size: 6175 + location: clients/tests/test-client.py:test_003()/221 + cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5850 bytes ++stdout: 5956 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (ethernet) +@@ -11310,6 +11408,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11329,6 +11428,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11732,12 +11832,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA + TYPE:802-3-ethernet + + <<< +-size: 3087 ++size: 3137 + location: clients/tests/test-client.py:test_003()/228 + cmd: $NMCLI --mode multiline --terse con s ethernet + lang: C + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -11799,6 +11899,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -11817,6 +11918,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -11860,12 +11962,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 3097 ++size: 3147 + location: clients/tests/test-client.py:test_003()/229 + cmd: $NMCLI --mode multiline --terse con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -11927,6 +12029,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -11945,6 +12048,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -11988,12 +12092,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2737 ++size: 2787 + location: clients/tests/test-client.py:test_003()/230 + cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -12055,6 +12159,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -12073,6 +12178,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -12102,12 +12208,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2747 ++size: 2797 + location: clients/tests/test-client.py:test_003()/231 + cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -12169,6 +12275,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -12187,6 +12294,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -12560,12 +12668,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA + TYPE:802-3-ethernet + + <<< +-size: 3099 ++size: 3149 + location: clients/tests/test-client.py:test_003()/238 + cmd: $NMCLI --mode multiline --terse --color yes con s ethernet + lang: C + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -12627,6 +12735,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -12645,6 +12754,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -12688,12 +12798,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 3109 ++size: 3159 + location: clients/tests/test-client.py:test_003()/239 + cmd: $NMCLI --mode multiline --terse --color yes con s ethernet + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2931 bytes ++stdout: 2981 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -12755,6 +12865,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -12773,6 +12884,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -12816,12 +12928,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2749 ++size: 2799 + location: clients/tests/test-client.py:test_003()/240 + cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: C + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -12883,6 +12995,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -12901,6 +13014,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -12930,12 +13044,12 @@ GENERAL.ZONE: + GENERAL.MASTER-PATH: + + <<< +-size: 2759 ++size: 2809 + location: clients/tests/test-client.py:test_003()/241 + cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2541 bytes ++stdout: 2591 bytes + >>> + connection.id:ethernet + connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL +@@ -12997,6 +13111,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -13015,6 +13130,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +diff --git a/clients/tests/test-client.check-on-disk/test_004.expected b/clients/tests/test-client.check-on-disk/test_004.expected +index 5140c02216..9cda8fce0c 100644 +--- a/clients/tests/test-client.check-on-disk/test_004.expected ++++ b/clients/tests/test-client.check-on-disk/test_004.expected +@@ -58,12 +58,12 @@ location: clients/tests/test-client.py:test_004()/7 + cmd: $NMCLI connection mod con-xx1 ipv4.addresses 192.168.77.5/24 ipv4.routes '2.3.4.5/32 192.168.77.1' ipv6.addresses 1:2:3:4::6/64 ipv6.routes 1:2:3:4:5:6::5/128 + lang: C + returncode: 0 +-size: 4603 ++size: 4709 + location: clients/tests/test-client.py:test_004()/8 + cmd: $NMCLI con s con-xx1 + lang: C + returncode: 0 +-stdout: 4475 bytes ++stdout: 4581 bytes + >>> + connection.id: con-xx1 + connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA +@@ -129,6 +129,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -147,6 +148,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -163,12 +165,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4631 ++size: 4737 + location: clients/tests/test-client.py:test_004()/9 + cmd: $NMCLI con s con-xx1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4493 bytes ++stdout: 4599 bytes + >>> + connection.id: con-xx1 + connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA +@@ -234,6 +236,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -252,6 +255,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -304,12 +308,12 @@ con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn -- + con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi -- + + <<< +-size: 4017 ++size: 4123 + location: clients/tests/test-client.py:test_004()/13 + cmd: $NMCLI con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3886 bytes ++stdout: 3992 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -357,6 +361,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -375,6 +380,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -397,12 +403,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4037 ++size: 4143 + location: clients/tests/test-client.py:test_004()/14 + cmd: $NMCLI con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3896 bytes ++stdout: 4002 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -450,6 +456,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -468,6 +475,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -562,12 +570,12 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0 + con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet -- + + <<< +-size: 5145 ++size: 5251 + location: clients/tests/test-client.py:test_004()/21 + cmd: $NMCLI con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5014 bytes ++stdout: 5120 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -615,6 +623,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -633,6 +642,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -676,12 +686,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5171 ++size: 5277 + location: clients/tests/test-client.py:test_004()/22 + cmd: $NMCLI con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5030 bytes ++stdout: 5136 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -729,6 +739,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -747,6 +758,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -790,12 +802,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5151 ++size: 5257 + location: clients/tests/test-client.py:test_004()/23 + cmd: $NMCLI con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -843,6 +855,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -861,6 +874,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -904,12 +918,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5181 ++size: 5287 + location: clients/tests/test-client.py:test_004()/24 + cmd: $NMCLI con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -957,6 +971,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -975,6 +990,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1018,12 +1034,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5151 ++size: 5257 + location: clients/tests/test-client.py:test_004()/25 + cmd: $NMCLI con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -1071,6 +1087,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1089,6 +1106,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1132,12 +1150,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5181 ++size: 5287 + location: clients/tests/test-client.py:test_004()/26 + cmd: $NMCLI con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -1185,6 +1203,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1203,6 +1222,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1246,12 +1266,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 4024 ++size: 4130 + location: clients/tests/test-client.py:test_004()/27 + cmd: $NMCLI -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3886 bytes ++stdout: 3992 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -1299,6 +1319,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1317,6 +1338,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -1339,12 +1361,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4044 ++size: 4150 + location: clients/tests/test-client.py:test_004()/28 + cmd: $NMCLI -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3896 bytes ++stdout: 4002 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -1392,6 +1414,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -1410,6 +1433,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4012,12 +4036,12 @@ connection.type: 802-11-wireless + connection.interface-name: -- + + <<< +-size: 5163 ++size: 5269 + location: clients/tests/test-client.py:test_004()/73 + cmd: $NMCLI --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -4065,6 +4089,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4083,6 +4108,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4126,12 +4152,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5193 ++size: 5299 + location: clients/tests/test-client.py:test_004()/74 + cmd: $NMCLI --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -4179,6 +4205,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4197,6 +4224,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4240,12 +4268,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5163 ++size: 5269 + location: clients/tests/test-client.py:test_004()/75 + cmd: $NMCLI --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -4293,6 +4321,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4311,6 +4340,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4354,12 +4384,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5193 ++size: 5299 + location: clients/tests/test-client.py:test_004()/76 + cmd: $NMCLI --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -4407,6 +4437,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4425,6 +4456,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4468,12 +4500,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 4036 ++size: 4142 + location: clients/tests/test-client.py:test_004()/77 + cmd: $NMCLI --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3886 bytes ++stdout: 3992 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -4521,6 +4553,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4539,6 +4572,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -4561,12 +4595,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4056 ++size: 4162 + location: clients/tests/test-client.py:test_004()/78 + cmd: $NMCLI --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3896 bytes ++stdout: 4002 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -4614,6 +4648,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -4632,6 +4667,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -7234,12 +7270,12 @@ connection.type: 802-11-wireless + connection.interface-name: -- + + <<< +-size: 6173 ++size: 6279 + location: clients/tests/test-client.py:test_004()/123 + cmd: $NMCLI --pretty con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -7291,6 +7327,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -7310,6 +7347,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -7361,12 +7399,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6215 ++size: 6321 + location: clients/tests/test-client.py:test_004()/124 + cmd: $NMCLI --pretty con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -7418,6 +7456,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -7437,6 +7476,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -7488,12 +7528,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6173 ++size: 6279 + location: clients/tests/test-client.py:test_004()/125 + cmd: $NMCLI --pretty con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -7545,6 +7585,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -7564,6 +7605,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -7615,12 +7657,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6215 ++size: 6321 + location: clients/tests/test-client.py:test_004()/126 + cmd: $NMCLI --pretty con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -7672,6 +7714,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -7691,6 +7734,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -7742,12 +7786,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 4653 ++size: 4759 + location: clients/tests/test-client.py:test_004()/127 + cmd: $NMCLI --pretty -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 4505 bytes ++stdout: 4611 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -7799,6 +7843,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -7818,6 +7863,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -7843,12 +7889,12 @@ proxy.pac-script: -- + ------------------------------------------------------------------------------- + + <<< +-size: 4678 ++size: 4784 + location: clients/tests/test-client.py:test_004()/128 + cmd: $NMCLI --pretty -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4520 bytes ++stdout: 4626 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -7900,6 +7946,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -7919,6 +7966,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11128,12 +11176,12 @@ connection.interface-name: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6185 ++size: 6291 + location: clients/tests/test-client.py:test_004()/173 + cmd: $NMCLI --pretty --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -11185,6 +11233,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11204,6 +11253,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11255,12 +11305,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6227 ++size: 6333 + location: clients/tests/test-client.py:test_004()/174 + cmd: $NMCLI --pretty --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -11312,6 +11362,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11331,6 +11382,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11382,12 +11434,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6185 ++size: 6291 + location: clients/tests/test-client.py:test_004()/175 + cmd: $NMCLI --pretty --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -11439,6 +11491,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11458,6 +11511,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11509,12 +11563,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6227 ++size: 6333 + location: clients/tests/test-client.py:test_004()/176 + cmd: $NMCLI --pretty --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -11566,6 +11620,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11585,6 +11640,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11636,12 +11692,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 4665 ++size: 4771 + location: clients/tests/test-client.py:test_004()/177 + cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 4505 bytes ++stdout: 4611 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -11693,6 +11749,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11712,6 +11769,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -11737,12 +11795,12 @@ proxy.pac-script: -- + ------------------------------------------------------------------------------- + + <<< +-size: 4690 ++size: 4796 + location: clients/tests/test-client.py:test_004()/178 + cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4520 bytes ++stdout: 4626 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -11794,6 +11852,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -11813,6 +11872,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -15022,12 +15082,12 @@ connection.interface-name: -- + ------------------------------------------------------------------------------- + + <<< +-size: 2602 ++size: 2652 + location: clients/tests/test-client.py:test_004()/223 + cmd: $NMCLI --terse con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -15075,6 +15135,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -15093,6 +15154,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -15136,12 +15198,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2612 ++size: 2662 + location: clients/tests/test-client.py:test_004()/224 + cmd: $NMCLI --terse con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -15189,6 +15251,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -15207,6 +15270,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -15250,12 +15314,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2602 ++size: 2652 + location: clients/tests/test-client.py:test_004()/225 + cmd: $NMCLI --terse con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -15303,6 +15367,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -15321,6 +15386,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -15364,12 +15430,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2612 ++size: 2662 + location: clients/tests/test-client.py:test_004()/226 + cmd: $NMCLI --terse con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -15417,6 +15483,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -15435,6 +15502,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -15478,12 +15546,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2027 ++size: 2077 + location: clients/tests/test-client.py:test_004()/227 + cmd: $NMCLI --terse -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -15531,6 +15599,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -15549,6 +15618,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -15571,12 +15641,12 @@ proxy.pac-url: + proxy.pac-script: + + <<< +-size: 2037 ++size: 2087 + location: clients/tests/test-client.py:test_004()/228 + cmd: $NMCLI --terse -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -15624,6 +15694,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -15642,6 +15713,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -18214,12 +18286,12 @@ connection.type:802-11-wireless + connection.interface-name: + + <<< +-size: 2614 ++size: 2664 + location: clients/tests/test-client.py:test_004()/273 + cmd: $NMCLI --terse --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -18267,6 +18339,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -18285,6 +18358,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -18328,12 +18402,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2624 ++size: 2674 + location: clients/tests/test-client.py:test_004()/274 + cmd: $NMCLI --terse --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -18381,6 +18455,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -18399,6 +18474,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -18442,12 +18518,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2614 ++size: 2664 + location: clients/tests/test-client.py:test_004()/275 + cmd: $NMCLI --terse --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -18495,6 +18571,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -18513,6 +18590,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -18556,12 +18634,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2624 ++size: 2674 + location: clients/tests/test-client.py:test_004()/276 + cmd: $NMCLI --terse --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -18609,6 +18687,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -18627,6 +18706,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -18670,12 +18750,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2039 ++size: 2089 + location: clients/tests/test-client.py:test_004()/277 + cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -18723,6 +18803,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -18741,6 +18822,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -18763,12 +18845,12 @@ proxy.pac-url: + proxy.pac-script: + + <<< +-size: 2049 ++size: 2099 + location: clients/tests/test-client.py:test_004()/278 + cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -18816,6 +18898,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -18834,6 +18917,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -21406,21 +21490,21 @@ connection.type:802-11-wireless + connection.interface-name: + + <<< +-size: 3379 ++size: 3451 + location: clients/tests/test-client.py:test_004()/323 + cmd: $NMCLI --mode tabular con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3232 bytes ++stdout: 3304 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 no 0 +@@ -21435,21 +21519,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 3402 ++size: 3474 + location: clients/tests/test-client.py:test_004()/324 + cmd: $NMCLI --mode tabular con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3245 bytes ++stdout: 3317 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 nie 0 +@@ -21464,21 +21548,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 3379 ++size: 3451 + location: clients/tests/test-client.py:test_004()/325 + cmd: $NMCLI --mode tabular con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3232 bytes ++stdout: 3304 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 no 0 +@@ -21493,21 +21577,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 3402 ++size: 3474 + location: clients/tests/test-client.py:test_004()/326 + cmd: $NMCLI --mode tabular con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3245 bytes ++stdout: 3317 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 nie 0 +@@ -21522,21 +21606,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 2627 ++size: 2699 + location: clients/tests/test-client.py:test_004()/327 + cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2473 bytes ++stdout: 2545 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 no 0 +@@ -21546,21 +21630,21 @@ proxy none no -- -- + + + <<< +-size: 2639 ++size: 2711 + location: clients/tests/test-client.py:test_004()/328 + cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2475 bytes ++stdout: 2547 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 nie 0 +@@ -23060,21 +23144,21 @@ interface-name + + + <<< +-size: 3391 ++size: 3463 + location: clients/tests/test-client.py:test_004()/373 + cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3232 bytes ++stdout: 3304 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 no 0 +@@ -23089,21 +23173,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 3414 ++size: 3486 + location: clients/tests/test-client.py:test_004()/374 + cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3245 bytes ++stdout: 3317 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 nie 0 +@@ -23118,21 +23202,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 3391 ++size: 3463 + location: clients/tests/test-client.py:test_004()/375 + cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3232 bytes ++stdout: 3304 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 no 0 +@@ -23147,21 +23231,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 3414 ++size: 3486 + location: clients/tests/test-client.py:test_004()/376 + cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3245 bytes ++stdout: 3317 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 nie 0 +@@ -23176,21 +23260,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 2639 ++size: 2711 + location: clients/tests/test-client.py:test_004()/377 + cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2473 bytes ++stdout: 2545 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 no 0 +@@ -23200,21 +23284,21 @@ proxy none no -- -- + + + <<< +-size: 2651 ++size: 2723 + location: clients/tests/test-client.py:test_004()/378 + cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2475 bytes ++stdout: 2547 bytes + >>> + name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr wait-device-timeout + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 nie 0 +@@ -24714,12 +24798,12 @@ interface-name + + + <<< +-size: 5346 ++size: 5454 + location: clients/tests/test-client.py:test_004()/423 + cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5190 bytes ++stdout: 5298 bytes + >>> + ========================================== + Connection profile details (con-vpn-1) +@@ -24728,13 +24812,13 @@ name id uuid stable-id type in + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -24756,12 +24840,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 5402 ++size: 5510 + location: clients/tests/test-client.py:test_004()/424 + cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5236 bytes ++stdout: 5344 bytes + >>> + ============================================ + Szczegóły profilu połączenia (con-vpn-1) +@@ -24770,13 +24854,13 @@ name id uuid stable-id type in + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -24798,12 +24882,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 5346 ++size: 5454 + location: clients/tests/test-client.py:test_004()/425 + cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5190 bytes ++stdout: 5298 bytes + >>> + ========================================== + Connection profile details (con-vpn-1) +@@ -24812,13 +24896,13 @@ name id uuid stable-id type in + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -24840,12 +24924,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 5402 ++size: 5510 + location: clients/tests/test-client.py:test_004()/426 + cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5236 bytes ++stdout: 5344 bytes + >>> + ============================================ + Szczegóły profilu połączenia (con-vpn-1) +@@ -24854,13 +24938,13 @@ name id uuid stable-id type in + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -24882,12 +24966,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 4002 ++size: 4110 + location: clients/tests/test-client.py:test_004()/427 + cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3839 bytes ++stdout: 3947 bytes + >>> + ========================================== + Connection profile details (con-vpn-1) +@@ -24896,13 +24980,13 @@ name id uuid stable-id type in + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -24914,12 +24998,12 @@ proxy none no -- -- + + + <<< +-size: 4025 ++size: 4133 + location: clients/tests/test-client.py:test_004()/428 + cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3852 bytes ++stdout: 3960 bytes + >>> + ============================================ + Szczegóły profilu połączenia (con-vpn-1) +@@ -24928,13 +25012,13 @@ name id uuid stable-id type in + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -27022,12 +27106,12 @@ interface-name + + + <<< +-size: 5358 ++size: 5466 + location: clients/tests/test-client.py:test_004()/473 + cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5190 bytes ++stdout: 5298 bytes + >>> + ========================================== + Connection profile details (con-vpn-1) +@@ -27036,13 +27120,13 @@ name id uuid stable-id type in + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -27064,12 +27148,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 5414 ++size: 5522 + location: clients/tests/test-client.py:test_004()/474 + cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5236 bytes ++stdout: 5344 bytes + >>> + ============================================ + Szczegóły profilu połączenia (con-vpn-1) +@@ -27078,13 +27162,13 @@ name id uuid stable-id type in + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -27106,12 +27190,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 5358 ++size: 5466 + location: clients/tests/test-client.py:test_004()/475 + cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5190 bytes ++stdout: 5298 bytes + >>> + ========================================== + Connection profile details (con-vpn-1) +@@ -27120,13 +27204,13 @@ name id uuid stable-id type in + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -27148,12 +27232,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 5414 ++size: 5522 + location: clients/tests/test-client.py:test_004()/476 + cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5236 bytes ++stdout: 5344 bytes + >>> + ============================================ + Szczegóły profilu połączenia (con-vpn-1) +@@ -27162,13 +27246,13 @@ name id uuid stable-id type in + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -27190,12 +27274,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE + VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 4014 ++size: 4122 + location: clients/tests/test-client.py:test_004()/477 + cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3839 bytes ++stdout: 3947 bytes + >>> + ========================================== + Connection profile details (con-vpn-1) +@@ -27204,13 +27288,13 @@ name id uuid stable-id type in + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) yes -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -27222,12 +27306,12 @@ proxy none no -- -- + + + <<< +-size: 4037 ++size: 4145 + location: clients/tests/test-client.py:test_004()/478 + cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3852 bytes ++stdout: 3960 bytes + >>> + ============================================ + Szczegóły profilu połączenia (con-vpn-1) +@@ -27236,13 +27320,13 @@ name id uuid stable-id type in + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -- -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier dhcp-reject-servers ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- -- + +-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- ++name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns never-default may-fail required-timeout ip6-privacy addr-gen-mode ra-timeout dhcp-duid dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-hostname-flags token ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ++ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (default) -1 (unknown) stable-privacy 0 (default) -- -- 0 (default) tak -- 0x0 (none) -- + + name service-type user-name data secrets persistent timeout + ------------------------------------------------------------------------------------------------------------------------------- +@@ -29330,94 +29414,94 @@ interface-name + + + <<< +-size: 811 ++size: 817 + location: clients/tests/test-client.py:test_004()/523 + cmd: $NMCLI --mode tabular --terse con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 821 ++size: 827 + location: clients/tests/test-client.py:test_004()/524 + cmd: $NMCLI --mode tabular --terse con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 811 ++size: 817 + location: clients/tests/test-client.py:test_004()/525 + cmd: $NMCLI --mode tabular --terse con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 821 ++size: 827 + location: clients/tests/test-client.py:test_004()/526 + cmd: $NMCLI --mode tabular --terse con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 518 ++size: 524 + location: clients/tests/test-client.py:test_004()/527 + cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 357 bytes ++stdout: 363 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + + <<< +-size: 528 ++size: 534 + location: clients/tests/test-client.py:test_004()/528 + cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 357 bytes ++stdout: 363 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + +@@ -30268,94 +30352,94 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA + + + <<< +-size: 823 ++size: 829 + location: clients/tests/test-client.py:test_004()/573 + cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 833 ++size: 839 + location: clients/tests/test-client.py:test_004()/574 + cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 823 ++size: 829 + location: clients/tests/test-client.py:test_004()/575 + cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 833 ++size: 839 + location: clients/tests/test-client.py:test_004()/576 + cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 657 bytes ++stdout: 663 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: + VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 + + <<< +-size: 530 ++size: 536 + location: clients/tests/test-client.py:test_004()/577 + cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 357 bytes ++stdout: 363 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + + <<< +-size: 540 ++size: 546 + location: clients/tests/test-client.py:test_004()/578 + cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 357 bytes ++stdout: 363 bytes + >>> + connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 +-ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: +-ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: ++ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1:: ++ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:stable-privacy:0:::0:yes::0x0: + vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 + proxy:none:no:: + +@@ -31206,12 +31290,12 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA + + + <<< +-size: 5169 ++size: 5275 + location: clients/tests/test-client.py:test_004()/623 + cmd: $NMCLI --mode multiline con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -31259,6 +31343,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -31277,6 +31362,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -31320,12 +31406,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5199 ++size: 5305 + location: clients/tests/test-client.py:test_004()/624 + cmd: $NMCLI --mode multiline con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -31373,6 +31459,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -31391,6 +31478,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -31434,12 +31522,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5169 ++size: 5275 + location: clients/tests/test-client.py:test_004()/625 + cmd: $NMCLI --mode multiline con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -31487,6 +31575,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -31505,6 +31594,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -31548,12 +31638,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5199 ++size: 5305 + location: clients/tests/test-client.py:test_004()/626 + cmd: $NMCLI --mode multiline con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -31601,6 +31691,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -31619,6 +31710,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -31662,12 +31754,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 4042 ++size: 4148 + location: clients/tests/test-client.py:test_004()/627 + cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3886 bytes ++stdout: 3992 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -31715,6 +31807,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -31733,6 +31826,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -31755,12 +31849,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4062 ++size: 4168 + location: clients/tests/test-client.py:test_004()/628 + cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3896 bytes ++stdout: 4002 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -31808,6 +31902,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -31826,6 +31921,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -34928,12 +35024,12 @@ connection.type: 802-11-wireless + connection.interface-name: -- + + <<< +-size: 5181 ++size: 5287 + location: clients/tests/test-client.py:test_004()/673 + cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -34981,6 +35077,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -34999,6 +35096,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -35042,12 +35140,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5211 ++size: 5317 + location: clients/tests/test-client.py:test_004()/674 + cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -35095,6 +35193,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -35113,6 +35212,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -35156,12 +35256,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5181 ++size: 5287 + location: clients/tests/test-client.py:test_004()/675 + cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 5020 bytes ++stdout: 5126 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -35209,6 +35309,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -35227,6 +35328,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -35270,12 +35372,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 5211 ++size: 5317 + location: clients/tests/test-client.py:test_004()/676 + cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 5040 bytes ++stdout: 5146 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -35323,6 +35425,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -35341,6 +35444,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -35384,12 +35488,12 @@ VPN.CFG[2]: key2 = val2 + VPN.CFG[3]: key3 = val3 + + <<< +-size: 4054 ++size: 4160 + location: clients/tests/test-client.py:test_004()/677 + cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 3886 bytes ++stdout: 3992 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -35437,6 +35541,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -35455,6 +35560,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -35477,12 +35583,12 @@ proxy.pac-url: -- + proxy.pac-script: -- + + <<< +-size: 4074 ++size: 4180 + location: clients/tests/test-client.py:test_004()/678 + cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 3896 bytes ++stdout: 4002 bytes + >>> + connection.id: con-vpn-1 + connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -35530,6 +35636,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -35548,6 +35655,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -38650,12 +38758,12 @@ connection.type: 802-11-wireless + connection.interface-name: -- + + <<< +-size: 6190 ++size: 6296 + location: clients/tests/test-client.py:test_004()/723 + cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -38707,6 +38815,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -38726,6 +38835,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -38777,12 +38887,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6232 ++size: 6338 + location: clients/tests/test-client.py:test_004()/724 + cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -38834,6 +38944,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -38853,6 +38964,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -38904,12 +39016,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6190 ++size: 6296 + location: clients/tests/test-client.py:test_004()/725 + cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -38961,6 +39073,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -38980,6 +39093,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -39031,12 +39145,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6232 ++size: 6338 + location: clients/tests/test-client.py:test_004()/726 + cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -39088,6 +39202,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -39107,6 +39222,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -39158,12 +39274,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 4670 ++size: 4776 + location: clients/tests/test-client.py:test_004()/727 + cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 4505 bytes ++stdout: 4611 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -39215,6 +39331,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -39234,6 +39351,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -39259,12 +39377,12 @@ proxy.pac-script: -- + ------------------------------------------------------------------------------- + + <<< +-size: 4695 ++size: 4801 + location: clients/tests/test-client.py:test_004()/728 + cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4520 bytes ++stdout: 4626 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -39316,6 +39434,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -39335,6 +39454,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -43074,12 +43194,12 @@ connection.interface-name: -- + ------------------------------------------------------------------------------- + + <<< +-size: 6202 ++size: 6308 + location: clients/tests/test-client.py:test_004()/773 + cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -43131,6 +43251,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -43150,6 +43271,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -43201,12 +43323,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6244 ++size: 6350 + location: clients/tests/test-client.py:test_004()/774 + cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -43258,6 +43380,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -43277,6 +43400,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -43328,12 +43452,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6202 ++size: 6308 + location: clients/tests/test-client.py:test_004()/775 + cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 6032 bytes ++stdout: 6138 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -43385,6 +43509,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -43404,6 +43529,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -43455,12 +43581,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 6244 ++size: 6350 + location: clients/tests/test-client.py:test_004()/776 + cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 6064 bytes ++stdout: 6170 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -43512,6 +43638,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -43531,6 +43658,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -43582,12 +43710,12 @@ VPN.CFG[3]: key3 = val3 + ------------------------------------------------------------------------------- + + <<< +-size: 4682 ++size: 4788 + location: clients/tests/test-client.py:test_004()/777 + cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 4505 bytes ++stdout: 4611 bytes + >>> + =============================================================================== + Connection profile details (con-vpn-1) +@@ -43639,6 +43767,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: no + ipv4.may-fail: yes ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -43658,6 +43787,7 @@ ipv6.ignore-auto-routes: no + ipv6.ignore-auto-dns: no + ipv6.never-default: no + ipv6.may-fail: yes ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -43683,12 +43813,12 @@ proxy.pac-script: -- + ------------------------------------------------------------------------------- + + <<< +-size: 4707 ++size: 4813 + location: clients/tests/test-client.py:test_004()/778 + cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 4520 bytes ++stdout: 4626 bytes + >>> + =============================================================================== + Szczegóły profilu połączenia (con-vpn-1) +@@ -43740,6 +43870,7 @@ ipv4.dhcp-fqdn: -- + ipv4.dhcp-hostname-flags: 0x0 (none) + ipv4.never-default: nie + ipv4.may-fail: tak ++ipv4.required-timeout: -1 (default) + ipv4.dad-timeout: -1 (default) + ipv4.dhcp-vendor-class-identifier: -- + ipv4.dhcp-reject-servers: -- +@@ -43759,6 +43890,7 @@ ipv6.ignore-auto-routes: nie + ipv6.ignore-auto-dns: nie + ipv6.never-default: nie + ipv6.may-fail: tak ++ipv6.required-timeout: -1 (default) + ipv6.ip6-privacy: -1 (unknown) + ipv6.addr-gen-mode: stable-privacy + ipv6.ra-timeout: 0 (default) +@@ -47498,12 +47630,12 @@ connection.interface-name: -- + ------------------------------------------------------------------------------- + + <<< +-size: 2619 ++size: 2669 + location: clients/tests/test-client.py:test_004()/823 + cmd: $NMCLI --mode multiline --terse con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -47551,6 +47683,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -47569,6 +47702,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -47612,12 +47746,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2629 ++size: 2679 + location: clients/tests/test-client.py:test_004()/824 + cmd: $NMCLI --mode multiline --terse con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -47665,6 +47799,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -47683,6 +47818,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -47726,12 +47862,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2619 ++size: 2669 + location: clients/tests/test-client.py:test_004()/825 + cmd: $NMCLI --mode multiline --terse con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -47779,6 +47915,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -47797,6 +47934,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -47840,12 +47978,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2629 ++size: 2679 + location: clients/tests/test-client.py:test_004()/826 + cmd: $NMCLI --mode multiline --terse con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -47893,6 +48031,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -47911,6 +48050,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -47954,12 +48094,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2044 ++size: 2094 + location: clients/tests/test-client.py:test_004()/827 + cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -48007,6 +48147,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -48025,6 +48166,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -48047,12 +48189,12 @@ proxy.pac-url: + proxy.pac-script: + + <<< +-size: 2054 ++size: 2104 + location: clients/tests/test-client.py:test_004()/828 + cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -48100,6 +48242,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -48118,6 +48261,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -51220,12 +51364,12 @@ connection.type:802-11-wireless + connection.interface-name: + + <<< +-size: 2631 ++size: 2681 + location: clients/tests/test-client.py:test_004()/873 + cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -51273,6 +51417,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -51291,6 +51436,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -51334,12 +51480,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2641 ++size: 2691 + location: clients/tests/test-client.py:test_004()/874 + cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -51387,6 +51533,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -51405,6 +51552,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -51448,12 +51596,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2631 ++size: 2681 + location: clients/tests/test-client.py:test_004()/875 + cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -51501,6 +51649,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -51519,6 +51668,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -51562,12 +51712,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2641 ++size: 2691 + location: clients/tests/test-client.py:test_004()/876 + cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 2462 bytes ++stdout: 2512 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -51615,6 +51765,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -51633,6 +51784,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -51676,12 +51828,12 @@ VPN.CFG[2]:key2 = val2 + VPN.CFG[3]:key3 = val3 + + <<< +-size: 2056 ++size: 2106 + location: clients/tests/test-client.py:test_004()/877 + cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 + lang: C + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -51729,6 +51881,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -51747,6 +51900,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +@@ -51769,12 +51923,12 @@ proxy.pac-url: + proxy.pac-script: + + <<< +-size: 2066 ++size: 2116 + location: clients/tests/test-client.py:test_004()/878 + cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 + lang: pl_PL.UTF-8 + returncode: 0 +-stdout: 1880 bytes ++stdout: 1930 bytes + >>> + connection.id:con-vpn-1 + connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP +@@ -51822,6 +51976,7 @@ ipv4.dhcp-fqdn: + ipv4.dhcp-hostname-flags:0x0 + ipv4.never-default:no + ipv4.may-fail:yes ++ipv4.required-timeout:-1 + ipv4.dad-timeout:-1 + ipv4.dhcp-vendor-class-identifier: + ipv4.dhcp-reject-servers: +@@ -51840,6 +51995,7 @@ ipv6.ignore-auto-routes:no + ipv6.ignore-auto-dns:no + ipv6.never-default:no + ipv6.may-fail:yes ++ipv6.required-timeout:-1 + ipv6.ip6-privacy:-1 + ipv6.addr-gen-mode:stable-privacy + ipv6.ra-timeout:0 +diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c +index 45ecbd8868..efee988927 100644 +--- a/libnm-core/nm-setting-ip-config.c ++++ b/libnm-core/nm-setting-ip-config.c +@@ -3679,6 +3679,7 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingIPConfig, + PROP_MAY_FAIL, + PROP_DAD_TIMEOUT, + PROP_DHCP_TIMEOUT, ++ PROP_REQUIRED_TIMEOUT, + PROP_DHCP_IAID, + PROP_DHCP_REJECT_SERVERS, ); + +@@ -3699,6 +3700,7 @@ typedef struct { + int dns_priority; + int dad_timeout; + int dhcp_timeout; ++ int required_timeout; + guint32 route_table; + bool ignore_auto_routes : 1; + bool ignore_auto_dns : 1; +@@ -4979,6 +4981,25 @@ nm_setting_ip_config_get_dhcp_timeout(NMSettingIPConfig *setting) + return NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dhcp_timeout; + } + ++/** ++ * nm_setting_ip_config_get_required_timeout: ++ * @setting: the #NMSettingIPConfig ++ * ++ * Returns the value contained in the #NMSettingIPConfig:required-timeout ++ * property. ++ * ++ * Returns: the required timeout for the address family ++ * ++ * Since: 1.34, 1.32.4, 1.30.8 ++ **/ ++int ++nm_setting_ip_config_get_required_timeout(NMSettingIPConfig *setting) ++{ ++ g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), -1); ++ ++ return NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->required_timeout; ++} ++ + /** + * nm_setting_ip_config_get_dhcp_iaid: + * @setting: the #NMSettingIPConfig +@@ -5627,6 +5648,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) + case PROP_DHCP_TIMEOUT: + g_value_set_int(value, nm_setting_ip_config_get_dhcp_timeout(setting)); + break; ++ case PROP_REQUIRED_TIMEOUT: ++ g_value_set_int(value, nm_setting_ip_config_get_required_timeout(setting)); ++ break; + case PROP_DHCP_IAID: + g_value_set_string(value, nm_setting_ip_config_get_dhcp_iaid(setting)); + break; +@@ -5737,6 +5761,9 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps + case PROP_DHCP_TIMEOUT: + priv->dhcp_timeout = g_value_get_int(value); + break; ++ case PROP_REQUIRED_TIMEOUT: ++ priv->required_timeout = g_value_get_int(value); ++ break; + case PROP_DHCP_IAID: + priv->dhcp_iaid = g_value_dup_string(value); + break; +@@ -5767,6 +5794,7 @@ nm_setting_ip_config_init(NMSettingIPConfig *setting) + priv->dhcp_send_hostname = TRUE; + priv->may_fail = TRUE; + priv->dad_timeout = -1; ++ priv->required_timeout = -1; + } + + static void +@@ -6201,6 +6229,38 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) + 0, + G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + ++ /** ++ * NMSettingIPConfig:required-timeout: ++ * ++ * The minimum time interval in milliseconds for which dynamic IP configuration ++ * should be tried before the connection succeeds. ++ * ++ * This property is useful for example if both IPv4 and IPv6 are enabled and ++ * are allowed to fail. Normally the connection succeeds as soon as one of ++ * the two address families completes; by setting a required timeout for ++ * e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, ++ * NetworkManager waits some time for IPv4 before the connection becomes ++ * active. ++ * ++ * Note that if #NMSettingIPConfig:may-fail is FALSE for the same address ++ * family, this property has no effect as NetworkManager needs to wait for ++ * the full DHCP timeout. ++ * ++ * A zero value means that no required timeout is present, -1 means the ++ * default value (either configuration ipvx.required-timeout override or ++ * zero). ++ * ++ * Since: 1.34, 1.32.4, 1.30.8 ++ **/ ++ obj_properties[PROP_REQUIRED_TIMEOUT] = g_param_spec_int( ++ NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, ++ "", ++ "", ++ -1, ++ G_MAXINT32, ++ -1, ++ G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); ++ + /** + * NMSettingIPConfig:dhcp-iaid: + * +diff --git a/libnm-core/nm-setting-ip-config.h b/libnm-core/nm-setting-ip-config.h +index 1cb1671714..fde604bbc5 100644 +--- a/libnm-core/nm-setting-ip-config.h ++++ b/libnm-core/nm-setting-ip-config.h +@@ -319,6 +319,7 @@ char *nm_ip_routing_rule_to_string(const NMIPRoutingRule * self, + #define NM_SETTING_IP_CONFIG_MAY_FAIL "may-fail" + #define NM_SETTING_IP_CONFIG_DAD_TIMEOUT "dad-timeout" + #define NM_SETTING_IP_CONFIG_DHCP_TIMEOUT "dhcp-timeout" ++#define NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT "required-timeout" + #define NM_SETTING_IP_CONFIG_DHCP_IAID "dhcp-iaid" + #define NM_SETTING_IP_CONFIG_DHCP_REJECT_SERVERS "dhcp-reject-servers" + +@@ -473,6 +474,8 @@ NM_AVAILABLE_IN_1_2 + int nm_setting_ip_config_get_dad_timeout(NMSettingIPConfig *setting); + NM_AVAILABLE_IN_1_2 + int nm_setting_ip_config_get_dhcp_timeout(NMSettingIPConfig *setting); ++NM_AVAILABLE_IN_1_30_8 ++int nm_setting_ip_config_get_required_timeout(NMSettingIPConfig *setting); + NM_AVAILABLE_IN_1_22 + const char *nm_setting_ip_config_get_dhcp_iaid(NMSettingIPConfig *setting); + +diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c +index 885319fc16..217632dfc1 100644 +--- a/libnm-core/tests/test-general.c ++++ b/libnm-core/tests/test-general.c +@@ -3668,6 +3668,7 @@ test_connection_diff_a_only(void) + {NM_SETTING_IP_CONFIG_NEVER_DEFAULT, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_IP_CONFIG_MAY_FAIL, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_IP_CONFIG_DAD_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A}, ++ {NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_IP_CONFIG_DNS_PRIORITY, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_IP_CONFIG_DHCP_IAID, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER, NM_SETTING_DIFF_RESULT_IN_A}, +diff --git a/libnm/libnm.ver b/libnm/libnm.ver +index c61792c749..7cdcf8104f 100644 +--- a/libnm/libnm.ver ++++ b/libnm/libnm.ver +@@ -1784,3 +1784,8 @@ global: + nm_setting_veth_new; + nm_utils_print; + } libnm_1_28_0; ++ ++libnm_1_30_8 { ++global: ++ nm_setting_ip_config_get_required_timeout; ++} libnm_1_30_0; +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 a42c418884..9c05cd278b 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 +@@ -1896,6 +1896,8 @@ make_ip4_setting(shvarFile *ifcfg, + svGetValueBoolean(ifcfg, "DHCP_SEND_HOSTNAME", TRUE), + NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, + (int) svGetValueInt64(ifcfg, "IPV4_DHCP_TIMEOUT", 10, 0, G_MAXINT32, 0), ++ NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, ++ (int) svGetValueInt64(ifcfg, "IPV4_REQUIRED_TIMEOUT", 10, 0, G_MAXINT32, -1), + NULL); + + nm_clear_g_free(&value); +@@ -2404,6 +2406,8 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea + svGetValueBoolean(ifcfg, "DHCPV6_SEND_HOSTNAME", TRUE), + NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, + (int) svGetValueInt64(ifcfg, "IPV6_DHCP_TIMEOUT", 10, 0, G_MAXINT32, 0), ++ NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, ++ (int) svGetValueInt64(ifcfg, "IPV6_REQUIRED_TIMEOUT", 10, 0, G_MAXINT32, -1), + NM_SETTING_IP6_CONFIG_RA_TIMEOUT, + (int) svGetValueInt64(ifcfg, "IPV6_RA_TIMEOUT", 10, 0, G_MAXINT32, 0), + NULL); +diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c +index ada1942acb..d40c64dfbf 100644 +--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c ++++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c +@@ -942,6 +942,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = { + _KEY_TYPE("IPV4_DHCP_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV4_DNS_PRIORITY", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV4_FAILURE_FATAL", NMS_IFCFG_KEY_TYPE_IS_PLAIN), ++ _KEY_TYPE("IPV4_REQUIRED_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV4_ROUTE_METRIC", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV4_ROUTE_TABLE", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV6ADDR", NMS_IFCFG_KEY_TYPE_IS_PLAIN), +@@ -964,6 +965,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = { + _KEY_TYPE("IPV6_PRIVACY", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV6_PRIVACY_PREFER_PUBLIC_IP", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV6_RA_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), ++ _KEY_TYPE("IPV6_REQUIRED_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV6_RES_OPTIONS", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV6_ROUTE_METRIC", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("IPV6_ROUTE_TABLE", NMS_IFCFG_KEY_TYPE_IS_PLAIN), +diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +index 04a1b63d3e..d100c1462f 100644 +--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h ++++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +@@ -33,7 +33,7 @@ typedef struct { + NMSIfcfgKeyTypeFlags key_flags; + } NMSIfcfgKeyTypeInfo; + +-extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[248]; ++extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[250]; + + const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info(const char *key, gssize *out_idx); + +diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +index 65bacb293a..a6c251c039 100644 +--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c ++++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +@@ -2824,6 +2824,9 @@ write_ip4_setting(NMConnection *connection, + timeout = nm_setting_ip_config_get_dhcp_timeout(s_ip4); + svSetValueInt64_cond(ifcfg, "IPV4_DHCP_TIMEOUT", timeout != 0, timeout); + ++ timeout = nm_setting_ip_config_get_required_timeout(s_ip4); ++ svSetValueInt64_cond(ifcfg, "IPV4_REQUIRED_TIMEOUT", timeout != -1, timeout); ++ + svSetValueBoolean(ifcfg, "IPV4_FAILURE_FATAL", !nm_setting_ip_config_get_may_fail(s_ip4)); + + route_metric = nm_setting_ip_config_get_route_metric(s_ip4); +@@ -3021,6 +3024,9 @@ write_ip6_setting(NMConnection *connection, + timeout = nm_setting_ip_config_get_dhcp_timeout(s_ip6); + svSetValueInt64_cond(ifcfg, "IPV6_DHCP_TIMEOUT", timeout != 0, timeout); + ++ timeout = nm_setting_ip_config_get_required_timeout(s_ip6); ++ svSetValueInt64_cond(ifcfg, "IPV6_REQUIRED_TIMEOUT", timeout != -1, timeout); ++ + flags = nm_setting_ip_config_get_dhcp_hostname_flags(s_ip6); + svSetValueInt64_cond(ifcfg, + "DHCPV6_HOSTNAME_FLAGS", +-- +2.31.1 + +From bfc0ee437556c9d4f7bf2daa659b7e17f729cbfa Mon Sep 17 00:00:00 2001 +From: Beniamino Galvani +Date: Wed, 23 Jun 2021 18:08:47 +0200 +Subject: [PATCH 8/9] device: use the 'required-timeout' property from IP + setting + +Change the logic in check_ip_state() to delay the connection ACTIVATED +state if an address family is pending and its required-timeout has not +expired. + +(cherry picked from commit 35cccc41cbb46707a5714f2b132623bd772bae84) +(cherry picked from commit 51e5df275c10855319d0a29cde1cebd5e9be0f38) +(cherry picked from commit 65868803e03c32fa0fe91664ca98818a17b37b40) +--- + man/NetworkManager.conf.xml | 6 ++ + src/core/devices/nm-device.c | 116 +++++++++++++++++++++++++++++++++++ + 2 files changed, 122 insertions(+) + +diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml +index 79f18e45e9..512b2d2203 100644 +--- a/man/NetworkManager.conf.xml ++++ b/man/NetworkManager.conf.xml +@@ -800,6 +800,9 @@ ipv6.ip6-privacy=0 + If unspecified or zero, use 50 for VPN profiles + and 100 for other profiles. + ++ ++ ipv4.required-timeout ++ + + ipv4.route-metric + +@@ -842,6 +845,9 @@ ipv6.ip6-privacy=0 + "/proc/sys/net/ipv6/conf/default/use_tempaddr" as last fallback. + + ++ ++ ipv6.required-timeout ++ + + ipv6.route-metric + +diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c +index 901d309c59..79286557bc 100644 +--- a/src/core/devices/nm-device.c ++++ b/src/core/devices/nm-device.c +@@ -493,6 +493,7 @@ typedef struct _NMDevicePrivate { + bool device_link_changed_down : 1; + + bool concheck_rp_filter_checked : 1; ++ bool ip_config_started : 1; + + NMDeviceStageState stage1_sriov_state : 3; + +@@ -501,6 +502,14 @@ typedef struct _NMDevicePrivate { + + char *current_stable_id; + ++ union { ++ struct { ++ GSource *ip_req_timeout_source_6; ++ GSource *ip_req_timeout_source_4; ++ }; ++ GSource *ip_req_timeout_source_x[2]; ++ }; ++ + /* Proxy Configuration */ + NMProxyConfig * proxy_config; + NMPacrunnerConfId *pacrunner_conf_id; +@@ -764,6 +773,7 @@ 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(NMDevice *self); ++static void check_ip_state(NMDevice *self, gboolean may_fail, gboolean full_state_update); + + /*****************************************************************************/ + +@@ -1500,6 +1510,40 @@ out: + return timeout; + } + ++static guint32 ++_prop_get_ipvx_required_timeout(NMDevice *self, int addr_family) ++{ ++ NMConnection * connection; ++ NMSettingIPConfig *s_ip; ++ int timeout; ++ ++ nm_assert(NM_IS_DEVICE(self)); ++ nm_assert_addr_family(addr_family); ++ ++ connection = nm_device_get_applied_connection(self); ++ if (!connection) ++ return 0; ++ ++ s_ip = nm_connection_get_setting_ip_config(connection, addr_family); ++ if (!s_ip) ++ return 0; ++ ++ timeout = nm_setting_ip_config_get_required_timeout(s_ip); ++ nm_assert(timeout >= -1); ++ ++ if (timeout > -1) ++ return (guint32) timeout; ++ ++ return nm_config_data_get_connection_default_int64( ++ NM_CONFIG_GET_DATA, ++ NM_IS_IPv4(addr_family) ? NM_CON_DEFAULT("ipv4.required-timeout") ++ : NM_CON_DEFAULT("ipv6.required-timeout"), ++ self, ++ 0, ++ G_MAXINT32, ++ 0); ++} ++ + /** + * _prop_get_ipvx_dhcp_iaid: + * @self: the #NMDevice +@@ -2818,14 +2862,72 @@ static NM_UTILS_LOOKUP_STR_DEFINE(_ip_state_to_string, + NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_IP_STATE_DONE, "done"), + NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_IP_STATE_FAIL, "fail"), ); + ++static gboolean ++ip_required_timeout_x(NMDevice *self, int addr_family) ++{ ++ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); ++ ++ _LOGD(LOGD_CORE, ++ "required-timeout expired for IPv%c", ++ nm_utils_addr_family_to_char(addr_family)); ++ nm_clear_g_source_inst(&priv->ip_req_timeout_source_x[NM_IS_IPv4(addr_family)]); ++ check_ip_state(self, FALSE, TRUE); ++ return G_SOURCE_CONTINUE; ++} ++ ++static gboolean ++ip_required_timeout_4(gpointer data) ++{ ++ return ip_required_timeout_x(data, AF_INET); ++} ++ ++static gboolean ++ip_required_timeout_6(gpointer data) ++{ ++ return ip_required_timeout_x(data, AF_INET6); ++} ++ + static void + _set_ip_state(NMDevice *self, int addr_family, NMDeviceIPState new_state) + { + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + const int IS_IPv4 = NM_IS_IPv4(addr_family); ++ guint timeout_msec; ++ int v4; + + nm_assert_addr_family(addr_family); + ++ if (new_state == NM_DEVICE_IP_STATE_CONF && !priv->ip_config_started) { ++ /* Start the required-timeout timers when one of IPv4/IPv6 ++ * enters the CONF state. This means that if there is no carrier and ++ * ipv4.method=auto,ipv6.method=manual, the timeout for IPv4 will ++ * start as soon as connection is activated, even if DHCPv4 did not ++ * start yet. ++ */ ++ priv->ip_config_started = TRUE; ++ ++ for (v4 = 1; v4 >= 0; v4--) { ++ char buf[32]; ++ ++ nm_assert(!priv->ip_req_timeout_source_x[v4]); ++ if ((timeout_msec = _prop_get_ipvx_required_timeout(self, v4 ? AF_INET : AF_INET6))) { ++ _LOGD(LOGD_CORE, ++ "required-timeout in %s msec for IPv%c", ++ timeout_msec == G_MAXINT32 ? "∞" : nm_sprintf_buf(buf, "%u", timeout_msec), ++ v4 ? '4' : '6'); ++ ++ if (timeout_msec == G_MAXINT32) { ++ priv->ip_req_timeout_source_x[v4] = g_source_ref(nm_g_source_sentinel_get(0)); ++ } else { ++ priv->ip_req_timeout_source_x[v4] = ++ nm_g_timeout_add_source(timeout_msec, ++ v4 ? ip_required_timeout_4 : ip_required_timeout_6, ++ self); ++ } ++ } ++ } ++ } ++ + if (priv->ip_state_x[IS_IPv4] == new_state) + return; + +@@ -6618,6 +6720,7 @@ check_ip_state(NMDevice *self, gboolean may_fail, gboolean full_state_update) + gboolean ip4_disabled = FALSE, ip6_disabled = FALSE; + NMSettingIPConfig *s_ip4, *s_ip6; + NMDeviceState state; ++ int IS_IPv4; + + if (full_state_update && nm_device_get_state(self) != NM_DEVICE_STATE_IP_CONFIG) + return; +@@ -6647,6 +6750,13 @@ check_ip_state(NMDevice *self, gboolean may_fail, gboolean full_state_update) + return; + } + ++ for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { ++ if (priv->ip_state_x[IS_IPv4] == NM_DEVICE_IP_STATE_CONF ++ && priv->ip_req_timeout_source_x[IS_IPv4]) { ++ return; ++ } ++ } ++ + if ((priv->ip_state_4 == NM_DEVICE_IP_STATE_FAIL + || (ip4_disabled && priv->ip_state_4 == NM_DEVICE_IP_STATE_DONE)) + && (priv->ip_state_6 == NM_DEVICE_IP_STATE_FAIL +@@ -11793,6 +11903,8 @@ activate_stage5_ip_config_result_x(NMDevice *self, int addr_family) + req = nm_device_get_act_request(self); + g_assert(req); + ++ nm_clear_g_source_inst(&priv->ip_req_timeout_source_x[IS_IPv4]); ++ + /* Interface must be IFF_UP before IP config can be applied */ + ip_ifindex = nm_device_get_ip_ifindex(self); + g_return_if_fail(ip_ifindex); +@@ -15769,6 +15881,10 @@ _cleanup_generic_pre(NMDevice *self, CleanupType cleanup_type) + + _cleanup_ip_pre(self, AF_INET, cleanup_type); + _cleanup_ip_pre(self, AF_INET6, cleanup_type); ++ ++ priv->ip_config_started = FALSE; ++ nm_clear_g_source_inst(&priv->ip_req_timeout_source_4); ++ nm_clear_g_source_inst(&priv->ip_req_timeout_source_6); + } + + static void +-- +2.31.1 + +From 0f9e872e509937a0693dd9c351bf71629a5e7174 Mon Sep 17 00:00:00 2001 +From: Beniamino Galvani +Date: Thu, 24 Jun 2021 08:09:10 +0200 +Subject: [PATCH 9/9] initrd: set required-timeout for default IPv4 + configuration + +If the kernel command-line doesn't contain an explict ip=$method, +currently the generator creates connections with both IPv4 and IPv6 +set to 'auto', and both allowed to fail. + +Since NM is run in configure-and-quit mode in the initrd, NM can get +an IPv4 address or an IPv6 one (or both) depending on which address +family is quicker to complete. This unpredictable behavior is not +present in the legacy module, which always does IPv4 only by default. + +Set a required-timeout of 20 seconds for IPv4, so that NM will +preferably get an IPv4, or will fall back to IPv6. + +See also: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/729 + +(cherry picked from commit 0a18e97345894a6ea76fd336a5b4e2ed7a1b537b) +(cherry picked from commit 1b9cf8c513767ecb41407224e5c4f0b7f6947db8) +(cherry picked from commit 3565f155fb91cf5d5cff695a69925065a8a6c2c6) +--- + src/core/initrd/nm-initrd-generator.h | 1 + + src/core/initrd/nmi-cmdline-reader.c | 32 +++++++++------ + src/core/initrd/tests/test-cmdline-reader.c | 44 ++++++++++++++++++++- + 3 files changed, 63 insertions(+), 14 deletions(-) + +diff --git a/src/core/initrd/nm-initrd-generator.h b/src/core/initrd/nm-initrd-generator.h +index 534edcb783..2ec52a010a 100644 +--- a/src/core/initrd/nm-initrd-generator.h ++++ b/src/core/initrd/nm-initrd-generator.h +@@ -10,6 +10,7 @@ + #include "nm-utils.h" + + #define NMI_WAIT_DEVICE_TIMEOUT_MSEC 60000 ++#define NMI_IP_REQUIRED_TIMEOUT_MSEC 20000 + + static inline int + get_ip_address_family(const char *str, gboolean with_prefix) +diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c +index 2202ab34ea..5d737a4434 100644 +--- a/src/core/initrd/nmi-cmdline-reader.c ++++ b/src/core/initrd/nmi-cmdline-reader.c +@@ -117,6 +117,8 @@ reader_create_connection(Reader * reader, + reader->dhcp_timeout, + NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER, + reader->dhcp4_vci, ++ NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, ++ NMI_IP_REQUIRED_TIMEOUT_MSEC, + NULL); + + setting = nm_setting_ip6_config_new(); +@@ -399,18 +401,19 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) + gs_unref_hashtable GHashTable *ibft = NULL; + const char * tmp; + const char * tmp2; +- const char * kind = NULL; +- const char * client_ip = NULL; +- const char * peer = NULL; +- const char * gateway_ip = NULL; +- const char * netmask = NULL; +- const char * client_hostname = NULL; +- const char * iface_spec = NULL; +- const char * mtu = NULL; +- const char * macaddr = NULL; +- int client_ip_family = AF_UNSPEC; +- int client_ip_prefix = -1; +- const char * dns[2] = { ++ const char * kind = NULL; ++ const char * client_ip = NULL; ++ const char * peer = NULL; ++ const char * gateway_ip = NULL; ++ const char * netmask = NULL; ++ const char * client_hostname = NULL; ++ const char * iface_spec = NULL; ++ const char * mtu = NULL; ++ const char * macaddr = NULL; ++ int client_ip_family = AF_UNSPEC; ++ int client_ip_prefix = -1; ++ gboolean clear_ip4_required_timeout = TRUE; ++ const char * dns[2] = { + NULL, + NULL, + }; +@@ -672,8 +675,13 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) + g_clear_error(&error); + } + } ++ } else { ++ clear_ip4_required_timeout = FALSE; + } + ++ if (clear_ip4_required_timeout) ++ g_object_set(s_ip4, NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, -1, NULL); ++ + if (peer && *peer) + _LOGW(LOGD_CORE, "Ignoring peer: %s (not implemented)\n", peer); + +diff --git a/src/core/initrd/tests/test-cmdline-reader.c b/src/core/initrd/tests/test-cmdline-reader.c +index cffa607ce7..d228d14d81 100644 +--- a/src/core/initrd/tests/test-cmdline-reader.c ++++ b/src/core/initrd/tests/test-cmdline-reader.c +@@ -276,6 +276,7 @@ test_dhcp_timeout(void) + ==, + NM_SETTING_IP4_CONFIG_METHOD_AUTO); + g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip4), ==, data[i].timeout); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ==, -1); + + s_ip6 = nm_connection_get_setting_ip6_config(connection); + g_assert(s_ip6); +@@ -283,6 +284,7 @@ test_dhcp_timeout(void) + ==, + NM_SETTING_IP6_CONFIG_METHOD_AUTO); + g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip6), ==, data[i].timeout); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1); + } + } + +@@ -421,6 +423,7 @@ test_if_ip4_manual(void) + g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24); + g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.0.2.1"); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname0.example.com"); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ==, -1); + + s_ip6 = nm_connection_get_setting_ip6_config(connection); + g_assert(s_ip6); +@@ -428,6 +431,7 @@ test_if_ip4_manual(void) + ==, + NM_SETTING_IP6_CONFIG_METHOD_DISABLED); + g_assert(nm_setting_ip_config_get_may_fail(s_ip6)); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1); + + connection = g_hash_table_lookup(connections, "eth4"); + nmtst_assert_connection_verifies_without_normalization(connection); +@@ -1155,6 +1159,9 @@ test_bridge(void) + g_assert_cmpint(nm_ip_route_get_metric(ip_route), ==, -1); + g_assert(!nm_ip_route_get_next_hop(ip_route)); + g_assert_cmpint(nm_ip_route_get_prefix(ip_route), ==, 32); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ++ ==, ++ NMI_IP_REQUIRED_TIMEOUT_MSEC); + + s_ip6 = nm_connection_get_setting_ip6_config(connection); + g_assert(s_ip6); +@@ -1164,6 +1171,7 @@ test_bridge(void) + g_assert(!nm_setting_ip_config_get_gateway(s_ip6)); + g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip6), ==, 0); + g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip6), ==, 10); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1); + + s_bridge = nm_connection_get_setting_bridge(connection); + g_assert(s_bridge); +@@ -1904,7 +1912,38 @@ test_bootif_ip(void) + } + + static void +-test_neednet(void) ++test_neednet_no_args(void) ++{ ++ const char *const *ARGV = NM_MAKE_STRV("rd.neednet"); ++ gs_unref_object NMConnection *connection = NULL; ++ NMSettingWired * s_wired; ++ NMSettingIPConfig * s_ip4; ++ NMSettingIPConfig * s_ip6; ++ ++ connection = _parse_con(ARGV, "default_connection"); ++ ++ g_assert_cmpstr(nm_connection_get_id(connection), ==, "Wired Connection"); ++ ++ s_wired = nm_connection_get_setting_wired(connection); ++ g_assert(s_wired); ++ ++ s_ip4 = nm_connection_get_setting_ip4_config(connection); ++ g_assert(s_ip4); ++ g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO); ++ g_assert(nm_setting_ip_config_get_may_fail(s_ip4)); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ++ ==, ++ NMI_IP_REQUIRED_TIMEOUT_MSEC); ++ ++ s_ip6 = nm_connection_get_setting_ip6_config(connection); ++ g_assert(s_ip6); ++ g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO); ++ g_assert(nm_setting_ip_config_get_may_fail(s_ip6)); ++ g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1); ++} ++ ++static void ++test_neednet_args(void) + { + gs_unref_hashtable GHashTable *connections = NULL; + const char *const * ARGV = NM_MAKE_STRV("rd.neednet", +@@ -2238,7 +2277,8 @@ main(int argc, char **argv) + g_test_add_func("/initrd/cmdline/bootif/no_ip", test_bootif_no_ip); + g_test_add_func("/initrd/cmdline/bootif/hwtype", test_bootif_hwtype); + g_test_add_func("/initrd/cmdline/bootif/off", test_bootif_off); +- g_test_add_func("/initrd/cmdline/neednet", test_neednet); ++ g_test_add_func("/initrd/cmdline/neednet/no_args", test_neednet_no_args); ++ g_test_add_func("/initrd/cmdline/neednet/args", test_neednet_args); + g_test_add_func("/initrd/cmdline/dhcp/vendor_class_id", test_dhcp_vendor_class_id); + g_test_add_func("/initrd/cmdline/infiniband/iface", test_infiniband_iface); + g_test_add_func("/initrd/cmdline/infiniband/mac", test_infiniband_mac); +-- +2.31.1 + diff --git a/SOURCES/1016-cloud-setup-azure-fix-gateway-rh1912236.patch b/SOURCES/1016-cloud-setup-azure-fix-gateway-rh1912236.patch new file mode 100644 index 0000000..d5b845b --- /dev/null +++ b/SOURCES/1016-cloud-setup-azure-fix-gateway-rh1912236.patch @@ -0,0 +1,461 @@ +From 302779f46c6d04eb92257606826c97c0e226ff29 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 13:46:29 +0200 +Subject: [PATCH 1/4] cloud-setup: remove redundant check in Azure's + _get_net_ifaces_list_cb() + +This condition always true, because there is a check above. + +(cherry picked from commit d3f07d5ca2a459e3410611902d2de02bb7be1ae7) +(cherry picked from commit 3256239b1f2b31359861c85c642c7009f07f3797) +--- + clients/cloud-setup/nmcs-provider-azure.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index a0e6076fd3..b9c0ffc08a 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -434,7 +434,7 @@ _get_net_ifaces_list_cb(GObject *source, GAsyncResult *result, gpointer user_dat + * extra NULL character after the buffer. */ + ((char *) line)[line_len] = '\0'; + +- if (line[line_len - 1] == '/' && line_len != 0) ++ if (line[line_len - 1] == '/') + ((char *) line)[--line_len] = '\0'; + + intern_iface_idx = _nm_utils_ascii_str_to_int64(line, 10, 0, G_MAXSSIZE, -1); +-- +2.31.1 + + +From 0b885286ad2a350d14933b54002b943cc032ad96 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 14:31:58 +0200 +Subject: [PATCH 2/4] cloud-setup/azure: cleanup constructing URI in + _get_config_ips_prefix_list_cb() + +(cherry picked from commit c9fc3f5b037422e7ead7f5ef1a56fcd2a750d152) +(cherry picked from commit 57c6a4fddc20af78b1594515981d174fa43383c9) +--- + clients/cloud-setup/nmcs-provider-azure.c | 58 +++++++++++------------ + 1 file changed, 27 insertions(+), 31 deletions(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index b9c0ffc08a..98b34e2960 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -216,6 +216,7 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + NMCSProviderGetConfigTaskData *get_config_data; + const char * line; + gsize line_len; ++ char iface_idx_str[30]; + + nm_http_client_poll_get_finish(NM_HTTP_CLIENT(source), result, NULL, &response, &error); + +@@ -231,12 +232,16 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + /* NMHttpClient guarantees that there is a trailing NUL after the data. */ + nm_assert(response_str[response_len] == 0); + +- nm_assert(!iface_data->iface_get_config->has_ipv4s); + nm_assert(!iface_data->iface_get_config->ipv4s_arr); ++ nm_assert(!iface_data->iface_get_config->has_ipv4s); + nm_assert(!iface_data->iface_get_config->has_cidr); + ++ nm_sprintf_buf(iface_idx_str, "%" G_GSSIZE_FORMAT, iface_data->intern_iface_idx); ++ + while (nm_utils_parse_next_line(&response_str, &response_len, &line, &line_len)) { +- gint64 ips_prefix_idx; ++ gint64 ips_prefix_idx; ++ gs_free char *uri = NULL; ++ char buf[100]; + + if (line_len == 0) + continue; +@@ -251,45 +256,36 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + if (ips_prefix_idx < 0) + continue; + +- { +- gs_free const char *uri = NULL; +- char buf[100]; +- +- iface_data->n_iface_data_pending++; +- +- nm_http_client_poll_get( +- NM_HTTP_CLIENT(source), +- (uri = _azure_uri_interfaces(nm_sprintf_buf( +- buf, +- "%" G_GSSIZE_FORMAT "/ipv4/ipAddress/%" G_GINT64_FORMAT "/privateIpAddress", +- iface_data->intern_iface_idx, +- ips_prefix_idx))), +- HTTP_TIMEOUT_MS, +- 512 * 1024, +- 10000, +- 1000, +- NM_MAKE_STRV(NM_AZURE_METADATA_HEADER), +- get_config_data->intern_cancellable, +- NULL, +- NULL, +- _get_config_fetch_done_cb_private_ipv4s, +- iface_data); +- } ++ iface_data->n_iface_data_pending++; ++ ++ nm_http_client_poll_get( ++ NM_HTTP_CLIENT(source), ++ (uri = _azure_uri_interfaces(iface_idx_str, ++ "/ipv4/ipAddress/", ++ nm_sprintf_buf(buf, "%" G_GINT64_FORMAT, ips_prefix_idx), ++ "/privateIpAddress")), ++ HTTP_TIMEOUT_MS, ++ 512 * 1024, ++ 10000, ++ 1000, ++ NM_MAKE_STRV(NM_AZURE_METADATA_HEADER), ++ get_config_data->intern_cancellable, ++ NULL, ++ NULL, ++ _get_config_fetch_done_cb_private_ipv4s, ++ iface_data); + } + + iface_data->iface_get_config->ipv4s_len = 0; + iface_data->iface_get_config->ipv4s_arr = g_new(in_addr_t, iface_data->n_iface_data_pending); + + { +- gs_free const char *uri = NULL; +- char buf[30]; ++ gs_free char *uri = NULL; + + iface_data->n_iface_data_pending++; + nm_http_client_poll_get( + NM_HTTP_CLIENT(source), +- (uri = _azure_uri_interfaces( +- nm_sprintf_buf(buf, "%" G_GSSIZE_FORMAT, iface_data->intern_iface_idx), +- "/ipv4/subnet/0/prefix/")), ++ (uri = _azure_uri_interfaces(iface_idx_str, "/ipv4/subnet/0/prefix/")), + HTTP_TIMEOUT_MS, + 512 * 1024, + 10000, +-- +2.31.1 + + +From 9173aee61c088badbe172019de1f05e20e25aa52 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 14:56:15 +0200 +Subject: [PATCH 3/4] cloud-setup/azure: refactor callback for + _get_config_ips_prefix_list_cb() + +(cherry picked from commit 889498c12cc5cd4ab718cbc8adbccc1f197adda5) +(cherry picked from commit 783d470b6f741c79d2b38d229db0338210343a35) +--- + clients/cloud-setup/nmcs-provider-azure.c | 75 ++++++++++++----------- + 1 file changed, 40 insertions(+), 35 deletions(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index 98b34e2960..c7dbc712cb 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -93,6 +93,11 @@ detect(NMCSProvider *provider, GTask *task) + + /*****************************************************************************/ + ++typedef enum { ++ GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS, ++ GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX, ++} GetConfigFetchType; ++ + typedef struct { + NMCSProviderGetConfigTaskData * get_config_data; + NMCSProviderGetConfigIfaceData *iface_get_config; +@@ -108,25 +113,28 @@ _azure_iface_data_destroy(AzureIfaceData *iface_data) + } + + static void +-_get_config_fetch_done_cb(NMHttpClient * http_client, +- GAsyncResult * result, +- AzureIfaceData *iface_data, +- gboolean is_ipv4) ++_get_config_fetch_done_cb(NMHttpClient * http_client, ++ GAsyncResult * result, ++ AzureIfaceData * iface_data, ++ GetConfigFetchType fetch_type) + { + NMCSProviderGetConfigTaskData * get_config_data; + NMCSProviderGetConfigIfaceData *iface_get_config; + gs_unref_bytes GBytes *response = NULL; + gs_free_error GError *error = NULL; +- gs_free char * v_hwaddr = NULL; + const char * resp_str = NULL; + gsize resp_len; ++ char tmp_addr_str[NM_UTILS_INET_ADDRSTRLEN]; ++ in_addr_t tmp_addr; ++ int tmp_prefix = -1; + + nm_http_client_poll_get_finish(http_client, result, NULL, &response, &error); + + if (nm_utils_error_is_cancelled(error)) + return; + +- get_config_data = iface_data->get_config_data; ++ get_config_data = iface_data->get_config_data; ++ iface_get_config = iface_data->iface_get_config; + + if (error) + goto out_done; +@@ -134,36 +142,23 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + resp_str = g_bytes_get_data(response, &resp_len); + nm_assert(resp_str[resp_len] == '\0'); + +- v_hwaddr = nmcs_utils_hwaddr_normalize_gbytes(response); +- if (!v_hwaddr) { +- _LOGI("interface[%" G_GSSIZE_FORMAT "]: invalid MAC address returned", +- iface_data->intern_iface_idx); +- error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, +- "invalid MAC address for index %" G_GSSIZE_FORMAT, +- iface_data->intern_iface_idx); +- goto out_done; +- } +- +- iface_data->iface_get_config = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); +- iface_get_config = iface_data->iface_get_config; +- +- if (is_ipv4) { +- char tmp_addr_str[NM_UTILS_INET_ADDRSTRLEN]; +- in_addr_t tmp_addr; ++ switch (fetch_type) { ++ case GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS: + + if (!nmcs_utils_ipaddr_normalize_bin(AF_INET, resp_str, resp_len, NULL, &tmp_addr)) { + error = + nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, "ip is not a valid private ip address"); + goto out_done; + } +- _LOGD("interface[%" G_GSSIZE_FORMAT "]: adding private ip %s", ++ _LOGD("interface[%" G_GSSIZE_FORMAT "]: received address %s", + iface_data->intern_iface_idx, + _nm_utils_inet4_ntop(tmp_addr, tmp_addr_str)); + iface_get_config->ipv4s_arr[iface_get_config->ipv4s_len] = tmp_addr; + iface_get_config->has_ipv4s = TRUE; + iface_get_config->ipv4s_len++; +- } else { +- int tmp_prefix; ++ break; ++ ++ case GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX: + + tmp_prefix = _nm_utils_ascii_str_to_int64_bin(resp_str, resp_len, 10, 0, 32, -1); + if (tmp_prefix == -1) { +@@ -173,11 +168,11 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + goto out_done; + } + +- _LOGD("interface[%" G_GSSIZE_FORMAT "]: adding prefix %d", ++ _LOGD("interface[%" G_GSSIZE_FORMAT "]: received subnet prefix %d", + iface_data->intern_iface_idx, + tmp_prefix); + iface_get_config->cidr_prefix = tmp_prefix; +- iface_get_config->has_cidr = TRUE; ++ break; + } + + out_done: +@@ -192,17 +187,25 @@ out_done: + } + + static void +-_get_config_fetch_done_cb_private_ipv4s(GObject *source, GAsyncResult *result, gpointer user_data) ++_get_config_fetch_done_cb_ipv4_ipaddress_x_privateipaddress(GObject * source, ++ GAsyncResult *result, ++ gpointer user_data) + { +- _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), result, user_data, TRUE); ++ _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), ++ result, ++ user_data, ++ GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS); + } + + static void +-_get_config_fetch_done_cb_subnet_cidr_prefix(GObject * source, +- GAsyncResult *result, +- gpointer user_data) ++_get_config_fetch_done_cb_ipv4_subnet_0_prefix(GObject * source, ++ GAsyncResult *result, ++ gpointer user_data) + { +- _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), result, user_data, FALSE); ++ _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), ++ result, ++ user_data, ++ GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX); + } + + static void +@@ -245,6 +248,7 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + + if (line_len == 0) + continue; ++ + /* Truncate the string. It's safe to do, because we own @response an it has an + * extra NULL character after the buffer. */ + ((char *) line)[line_len] = '\0'; +@@ -253,6 +257,7 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + ((char *) line)[--line_len] = '\0'; + + ips_prefix_idx = _nm_utils_ascii_str_to_int64(line, 10, 0, G_MAXINT64, -1); ++ + if (ips_prefix_idx < 0) + continue; + +@@ -272,7 +277,7 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + get_config_data->intern_cancellable, + NULL, + NULL, +- _get_config_fetch_done_cb_private_ipv4s, ++ _get_config_fetch_done_cb_ipv4_ipaddress_x_privateipaddress, + iface_data); + } + +@@ -294,7 +299,7 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + get_config_data->intern_cancellable, + NULL, + NULL, +- _get_config_fetch_done_cb_subnet_cidr_prefix, ++ _get_config_fetch_done_cb_ipv4_subnet_0_prefix, + iface_data); + } + return; +-- +2.31.1 + + +From ff2c2c4cabefc178767c4f535b9c82da7d765d6e Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Tue, 20 Apr 2021 10:52:04 +0200 +Subject: [PATCH 4/4] cloud-setup/azure: fix detecting the gateway address + +The code never set "iface_get_config->cidr_addr", despite +setting "cidr_prefix" and "has_cidr". As a result, cloud-setup +would think that the subnet is "0.0.0.0/$PLEN", and calculate +the gateway as "0.0.0.1". + +As a result it would add a default route to table 30400 via 0.0.0.1, +which is obviously wrong. + +How to detect the right gateway? Let's try obtain the subnet also via +the meta data. That seems mostly correct, except that we only access +subnet at index 0. What if there are multiple ones? I don't know. + +https://bugzilla.redhat.com/show_bug.cgi?id=1912236 +(cherry picked from commit c2629f72b0e6b438bf3f2b93967f58c9defafea6) +(cherry picked from commit 5d112092bc184ac284cb7f6c5fda68fcd5f5cd22) +--- + clients/cloud-setup/nmcs-provider-azure.c | 45 +++++++++++++++++++++++ + man/nm-cloud-setup.xml | 4 +- + 2 files changed, 48 insertions(+), 1 deletion(-) + +diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c +index c7dbc712cb..28019bac42 100644 +--- a/clients/cloud-setup/nmcs-provider-azure.c ++++ b/clients/cloud-setup/nmcs-provider-azure.c +@@ -95,6 +95,7 @@ detect(NMCSProvider *provider, GTask *task) + + typedef enum { + GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS, ++ GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_ADDRESS, + GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX, + } GetConfigFetchType; + +@@ -158,6 +159,18 @@ _get_config_fetch_done_cb(NMHttpClient * http_client, + iface_get_config->ipv4s_len++; + break; + ++ case GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_ADDRESS: ++ ++ if (!nmcs_utils_ipaddr_normalize_bin(AF_INET, resp_str, resp_len, NULL, &tmp_addr)) { ++ error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, "ip is not a subnet address"); ++ goto out_done; ++ } ++ _LOGD("interface[%" G_GSSIZE_FORMAT "]: received subnet address %s", ++ iface_data->intern_iface_idx, ++ _nm_utils_inet4_ntop(tmp_addr, tmp_addr_str)); ++ iface_get_config->cidr_addr = tmp_addr; ++ break; ++ + case GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX: + + tmp_prefix = _nm_utils_ascii_str_to_int64_bin(resp_str, resp_len, 10, 0, 32, -1); +@@ -180,6 +193,10 @@ out_done: + --iface_data->n_iface_data_pending; + if (iface_data->n_iface_data_pending > 0) + return; ++ ++ /* we surely have cidr_addr and cidr_prefix, otherwise ++ * we would have errored out above. */ ++ iface_get_config->has_cidr = TRUE; + } + + --get_config_data->n_pending; +@@ -197,6 +214,17 @@ _get_config_fetch_done_cb_ipv4_ipaddress_x_privateipaddress(GObject * source + GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS); + } + ++static void ++_get_config_fetch_done_cb_ipv4_subnet_0_address(GObject * source, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), ++ result, ++ user_data, ++ GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_ADDRESS); ++} ++ + static void + _get_config_fetch_done_cb_ipv4_subnet_0_prefix(GObject * source, + GAsyncResult *result, +@@ -287,6 +315,23 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + { + gs_free char *uri = NULL; + ++ iface_data->n_iface_data_pending++; ++ nm_http_client_poll_get( ++ NM_HTTP_CLIENT(source), ++ (uri = _azure_uri_interfaces(iface_idx_str, "/ipv4/subnet/0/address/")), ++ HTTP_TIMEOUT_MS, ++ 512 * 1024, ++ 10000, ++ 1000, ++ NM_MAKE_STRV(NM_AZURE_METADATA_HEADER), ++ get_config_data->intern_cancellable, ++ NULL, ++ NULL, ++ _get_config_fetch_done_cb_ipv4_subnet_0_address, ++ iface_data); ++ ++ nm_clear_g_free(&uri); ++ + iface_data->n_iface_data_pending++; + nm_http_client_poll_get( + NM_HTTP_CLIENT(source), +diff --git a/man/nm-cloud-setup.xml b/man/nm-cloud-setup.xml +index 4ae4042f84..a4ed737bc5 100644 +--- a/man/nm-cloud-setup.xml ++++ b/man/nm-cloud-setup.xml +@@ -329,7 +329,9 @@ + + Then, for each IP address index fetch the address at + http://169.254.169.254/metadata/instance/network/interface/$IFACE_INDEX/ipv4/ipAddress/$ADDR_INDEX/privateIpAddress?format=text&api-version=2017-04-02. +- Also fetch the size of the subnet (the netmask) for the interface from ++ Also fetch the size of the subnet and prefix for the interface from ++ http://169.254.169.254/metadata/instance/network/interface/$IFACE_INDEX/ipv4/subnet/0/address/?format=text&api-version=2017-04-02. ++ and + http://169.254.169.254/metadata/instance/network/interface/$IFACE_INDEX/ipv4/subnet/0/prefix/?format=text&api-version=2017-04-02. + + +-- +2.31.1 + diff --git a/SPECS/NetworkManager.spec b/SPECS/NetworkManager.spec index 71891c4..57e6dc9 100644 --- a/SPECS/NetworkManager.spec +++ b/SPECS/NetworkManager.spec @@ -7,7 +7,7 @@ %global epoch_version 1 %global rpm_version 1.30.0 %global real_version 1.30.0 -%global release_version 10 +%global release_version 13 %global snapshot %{nil} %global git_sha %{nil} @@ -199,6 +199,10 @@ Patch1009: 1009-bond-support-tlb_dynamic_lb-in-balance-alb-mode.patch Patch1010: 1010-manager-delete-default-connection-when-veth-removed.patch Patch1011: 1011-don-t-touch-device-tc-config-by-default-rh1928078.patch Patch1012: 1012-prefer-IPv4-to-determine-the-hostname.patch +Patch1013: 1013-platform-preserve-IPv6-multicast-route-added-by-kern.patch +Patch1014: 1014-default-route-inter-feres-with-other-subnets-on-the-VM.patch +Patch1015: 1015-initrd-set-IPv4-required-timeout-rh1961666.patch +Patch1016: 1016-cloud-setup-azure-fix-gateway-rh1912236.patch # The pregenerated docs contain default values and paths that depend # on the configure options when creating the source tarball. @@ -1163,6 +1167,17 @@ fi %changelog +* Thu Oct 14 2021 Ana Cabral - 1:1.30.0-13 +- Fixes nm-cloud-setup.service interference in network connectivity (rh#2013208) + +* Thu Oct 7 2021 Fernando Fernandez Mancera - 1:1.30.0-12 +- initrd: set an IPv4 required-timeout of 20 seconds, to prefer IPv4 + over IPv6 for default connections (rh #1961666) + +* Tue Oct 5 2021 Fernando Fernandez Mancera - 1:1.30.0-11 +- platform: preserve IPv6 multicast route added by kernel (rh #2007264) +- cloud-setup: don't interfere with other subnets (rh #2007341) + * Mon Jul 12 2021 Beniamino Galvani - 1:1.30.0-10 - core: prefer IPv4 to determine the hostname (rh #1970335)