diff options
author | Thomas Haller <thaller@redhat.com> | 2019-04-25 09:32:20 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-04-25 09:32:20 +0200 |
commit | 5aff6fc83b65b400b010163563bc4765def298b1 (patch) | |
tree | b3af7c90dd35bea32bcd06c2f89bedf4d50f0b99 | |
parent | bb9e3195d2dc81ce492b6b811d85f27ac6efacab (diff) | |
parent | df769c8dfd015c9a6ade4aa1cfc40f38d4e5398c (diff) | |
download | NetworkManager-5aff6fc83b65b400b010163563bc4765def298b1.tar.gz |
cli,libnm: merge branch 'th/cli-team-cleanup'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/121
26 files changed, 2080 insertions, 936 deletions
diff --git a/.gitignore b/.gitignore index bb3f82b514..5b752e7b1a 100644 --- a/.gitignore +++ b/.gitignore @@ -63,9 +63,11 @@ test-*.trs /clients/cli/nmcli /clients/common/settings-docs.h +/clients/common/tests/test-general +/clients/common/tests/test-libnm-core-aux +/clients/nm-online /clients/tui/newt/libnmt-newt.a /clients/tui/nmtui -/clients/nm-online /data/NetworkManager.service /data/NetworkManager-wait-online.service @@ -146,8 +148,8 @@ test-*.trs /examples/C/qt/list-connections /examples/C/qt/change-ipv4-addresses -/shared/nm-version-macros.h /shared/nm-utils/tests/test-shared-general +/shared/nm-version-macros.h /introspection/org.freedesktop.NetworkManager*.[ch] @@ -278,8 +280,6 @@ test-*.trs /src/tests/test-utils /src/tests/test-wired-defname -/clients/common/tests/test-general - /vapi/*.vapi # The following names are no longer present on this branch, diff --git a/Makefile.am b/Makefile.am index 21359e5d6e..1bba093e25 100644 --- a/Makefile.am +++ b/Makefile.am @@ -449,6 +449,8 @@ shared_nm_libnm_core_aux_libnm_libnm_core_aux_la_CPPFLAGS = \ shared_nm_libnm_core_aux_libnm_libnm_core_aux_la_SOURCES = \ shared/nm-libnm-core-aux/nm-dispatcher-api.h \ + shared/nm-libnm-core-aux/nm-libnm-core-aux.c \ + shared/nm-libnm-core-aux/nm-libnm-core-aux.h \ $(NULL) shared_nm_libnm_core_aux_libnm_libnm_core_aux_la_LDFLAGS = \ @@ -4101,6 +4103,8 @@ clients_common_tests_test_general_LDADD = \ $(clients_common_tests_test_general_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +############################################################################### + EXTRA_DIST += \ clients/common/tests/wg-test0.conf \ clients/common/tests/wg-test1.conf \ @@ -4109,6 +4113,40 @@ EXTRA_DIST += \ $(NULL) ############################################################################### + +check_programs += clients/common/tests/test-libnm-core-aux + +clients_common_tests_test_libnm_core_aux_CPPFLAGS = \ + $(dflt_cppflags) \ + -I$(builddir)/shared \ + -I$(srcdir)/shared \ + -I$(builddir)/libnm-core \ + -I$(srcdir)/libnm-core \ + -I$(builddir)/libnm \ + -I$(srcdir)/libnm \ + -DNETWORKMANAGER_COMPILATION_TEST \ + -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + $(CODE_COVERAGE_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(SANITIZER_LIB_CFLAGS) \ + $(NULL) + +clients_common_tests_test_libnm_core_aux_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) + +clients_common_tests_test_libnm_core_aux_LDADD = \ + shared/nm-libnm-core-aux/libnm-libnm-core-aux.la \ + libnm/libnm.la \ + shared/nm-glib-aux/libnm-glib-aux.la \ + $(GLIB_LIBS) \ + $(NULL) + +$(clients_common_tests_test_libnm_core_aux_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +$(clients_common_tests_test_libnm_core_aux_OBJECTS): $(libnm_lib_h_pub_mkenums) + +############################################################################### # clients/cli ############################################################################### diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c index d8300e780c..ad45f179a5 100644 --- a/clients/cli/nmcli.c +++ b/clients/cli/nmcli.c @@ -915,88 +915,6 @@ signal_handler (gpointer user_data) return G_SOURCE_CONTINUE; } -static void -nmc_convert_strv_to_string (const GValue *src_value, GValue *dest_value) -{ - char **strings; - - strings = g_value_get_boxed (src_value); - if (strings) - g_value_take_string (dest_value, g_strjoinv (",", strings)); - else - g_value_set_string (dest_value, ""); -} - -static void -nmc_convert_string_hash_to_string (const GValue *src_value, GValue *dest_value) -{ - GHashTable *hash; - GHashTableIter iter; - const char *key, *value; - GString *string; - - hash = (GHashTable *) g_value_get_boxed (src_value); - - string = g_string_new (NULL); - if (hash) { - g_hash_table_iter_init (&iter, hash); - while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) { - if (string->len) - g_string_append_c (string, ','); - g_string_append_printf (string, "%s=%s", key, value); - } - } - - g_value_take_string (dest_value, g_string_free (string, FALSE)); -} - -static void -nmc_convert_bytes_to_string (const GValue *src_value, GValue *dest_value) -{ - GBytes *bytes; - const guint8 *array; - gsize length; - GString *printable; - guint i = 0; - - bytes = g_value_get_boxed (src_value); - - printable = g_string_new ("["); - - if (bytes) { - array = g_bytes_get_data (bytes, &length); - while (i < MIN (length, 35)) { - if (i > 0) - g_string_append_c (printable, ' '); - g_string_append_printf (printable, "0x%02X", array[i++]); - } - if (i < length) - g_string_append (printable, " ... "); - } - g_string_append_c (printable, ']'); - - g_value_take_string (dest_value, g_string_free (printable, FALSE)); -} - -static void -nmc_value_transforms_register (void) -{ - g_value_register_transform_func (G_TYPE_STRV, - G_TYPE_STRING, - nmc_convert_strv_to_string); - - /* This depends on the fact that all of the hash-table-valued properties - * in libnm-core are string->string. - */ - g_value_register_transform_func (G_TYPE_HASH_TABLE, - G_TYPE_STRING, - nmc_convert_string_hash_to_string); - - g_value_register_transform_func (G_TYPE_BYTES, - G_TYPE_STRING, - nmc_convert_bytes_to_string); -} - void nm_cli_spawn_pager (NmCli *nmc) { @@ -1054,8 +972,6 @@ main (int argc, char *argv[]) /* Save terminal settings */ tcgetattr (STDIN_FILENO, &termios_orig); - nmc_value_transforms_register (); - nm_cli.return_text = g_string_new (_("Success")); loop = g_main_loop_new (NULL, FALSE); diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index 698ded869e..98cb50405c 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -28,6 +28,7 @@ #include "nm-glib-aux/nm-enum-utils.h" #include "nm-glib-aux/nm-secret-utils.h" #include "nm-libnm-core-intern/nm-libnm-core-utils.h" +#include "nm-libnm-core-aux/nm-libnm-core-aux.h" #include "nm-vpn-helpers.h" #include "nm-client-utils.h" @@ -76,6 +77,25 @@ _gtype_property_get_gtype (GType gtype, const char *property_name) /*****************************************************************************/ +static char * +bytes_to_string (GBytes *bytes) +{ + const guint8 *data; + gsize len; + + if (!bytes) + return NULL; + + data = g_bytes_get_data (bytes, &len); + return nm_utils_bin2hexstr_full (data, + len, + '\0', + TRUE, + NULL); +} + +/*****************************************************************************/ + static int _int64_cmp_desc (gconstpointer a, gconstpointer b, @@ -432,158 +452,7 @@ _parse_ip_route (int family, return route; } -static char * -_dump_team_link_watcher (NMTeamLinkWatcher *watcher) -{ - const char *name; - NMTeamLinkWatcherArpPingFlags flags; - GString *w_dump; - - if (!watcher) - return NULL; - - w_dump = g_string_new (NULL); - name = nm_team_link_watcher_get_name (watcher); - g_string_append_printf (w_dump, "name=%s", name); - -#define DUMP_WATCHER_INT(str, watcher, name, key) \ - G_STMT_START { \ - int _val = nm_team_link_watcher_get_##key (watcher); \ - \ - if (_val) \ - g_string_append_printf (str, " %s=%d", name, _val); \ - } G_STMT_END; - - if (nm_streq (name, NM_TEAM_LINK_WATCHER_ETHTOOL)) { - DUMP_WATCHER_INT (w_dump, watcher, "delay-up", delay_up); - DUMP_WATCHER_INT (w_dump, watcher, "delay-down", delay_down); - return g_string_free (w_dump, FALSE); - } - /* NM_TEAM_LINK_WATCHER_NSNA_PING and NM_TEAM_LINK_WATCHER_ARP_PING */ - DUMP_WATCHER_INT (w_dump, watcher, "init-wait", init_wait); - DUMP_WATCHER_INT (w_dump, watcher, "interval", interval); - DUMP_WATCHER_INT (w_dump, watcher, "missed-max", missed_max); - g_string_append_printf (w_dump, " target-host=%s", - nm_team_link_watcher_get_target_host (watcher)); - - if (nm_streq (name, NM_TEAM_LINK_WATCHER_NSNA_PING)) - return g_string_free (w_dump, FALSE); - - DUMP_WATCHER_INT (w_dump, watcher, "vlanid", vlanid); -#undef DUMP_WATCHER_INT - g_string_append_printf (w_dump, " source-host=%s", - nm_team_link_watcher_get_source_host (watcher)); - flags = nm_team_link_watcher_get_flags (watcher); - if (flags & NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE) - g_string_append_printf (w_dump, " validate-active=true"); - if (flags & NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE) - g_string_append_printf (w_dump, " validate-inactive=true"); - if (flags & NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS) - g_string_append_printf (w_dump, "send-always=true"); - - return g_string_free (w_dump, FALSE); -} - -static NMTeamLinkWatcher * -_parse_team_link_watcher (const char *str, - GError **error) -{ - gs_free const char **watcherv = NULL; - gs_free char *str_clean_free = NULL; - const char *str_clean; - guint i; - gs_free const char *name = NULL; - int val1 = 0, val2 = 0, val3 = 3, val4 = -1; - gs_free const char *target_host = NULL; - gs_free const char *source_host = NULL; - NMTeamLinkWatcherArpPingFlags flags = 0; - - nm_assert (str); - nm_assert (!error || !*error); - - str_clean = nm_strstrip_avoid_copy_a (300, str, &str_clean_free); - watcherv = nm_utils_strsplit_set (str_clean, " \t"); - if (!watcherv) { - g_set_error (error, 1, 0, "'%s' is not valid", str); - return NULL; - } - - for (i = 0; watcherv[i]; i++) { - gs_free const char **pair = NULL; - - pair = nm_utils_strsplit_set (watcherv[i], "="); - if (!pair) { - g_set_error (error, 1, 0, "'%s' is not valid: %s", watcherv[i], - "properties should be specified as 'key=value'"); - return NULL; - } - if (!pair[1]) { - g_set_error (error, 1, 0, "'%s' is not valid: %s", watcherv[i], - "missing key value"); - return NULL; - } - if (pair[2]) { - g_set_error (error, 1, 0, "'%s' is not valid: %s", watcherv[i], - "properties should be specified as 'key=value'"); - return NULL; - } - - if (nm_streq (pair[0], "name")) - name = g_strdup (pair[1]); - else if ( nm_streq (pair[0], "delay-up") - || nm_streq (pair[0], "init-wait")) - val1 = _nm_utils_ascii_str_to_int64 (pair[1], 10, 0, G_MAXINT32, -1); - else if ( nm_streq (pair[0], "delay-down") - || nm_streq (pair[0], "interval")) - val2 = _nm_utils_ascii_str_to_int64 (pair[1], 10, 0, G_MAXINT32, -1); - else if (nm_streq (pair[0], "missed-max")) - val3 = _nm_utils_ascii_str_to_int64 (pair[1], 10, 0, G_MAXINT32, -1); - else if (nm_streq (pair[0], "vlanid")) - val4 = _nm_utils_ascii_str_to_int64 (pair[1], 10, -1, 4094, -2); - else if (nm_streq (pair[0], "target-host")) - target_host = g_strdup (pair[1]); - else if (nm_streq (pair[0], "source-host")) - source_host = g_strdup (pair[1]); - else if (nm_streq (pair[0], "validate-active")) { - if (nm_streq (pair[1], "true")) - flags |= NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE; - } else if (nm_streq (pair[0], "validate-inactive")) { - if (nm_streq (pair[1], "true")) - flags |= NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE; - } else if (nm_streq (pair[0], "send-always")) { - if (nm_streq (pair[1], "true")) - flags |= NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS; - } else { - g_set_error (error, 1, 0, "'%s' is not valid: %s", watcherv[i], - "unknown key"); - return NULL; - } - - if ((val1 < 0) || (val2 < 0) || (val3 < 0)) { - g_set_error (error, 1, 0, "'%s' is not valid: %s", watcherv[i], - "value is not a valid number [0, MAXINT]"); - return NULL; - } - if (val4 < -1) { - g_set_error (error, 1, 0, "'%s' is not valid: %s", watcherv[i], - "value is not a valid number [-1, 4094]"); - return NULL; - } - } - - if (nm_streq0 (name, NM_TEAM_LINK_WATCHER_ETHTOOL)) - return nm_team_link_watcher_new_ethtool (val1, val2, error); - else if (nm_streq0 (name, NM_TEAM_LINK_WATCHER_NSNA_PING)) - return nm_team_link_watcher_new_nsna_ping (val1, val2, val3, target_host, error); - else if (nm_streq0 (name, NM_TEAM_LINK_WATCHER_ARP_PING)) - return nm_team_link_watcher_new_arp_ping2 (val1, val2, val3, val4, target_host, source_host, flags, error); - - if (!name) - g_set_error (error, 1, 0, "link watcher name missing"); - else - g_set_error (error, 1, 0, "unknown link watcher name: '%s'", name); - return NULL; -} +/*****************************************************************************/ /* Max priority values from libnm-core/nm-setting-vlan.c */ #define MAX_SKB_PRIO G_MAXUINT32 @@ -849,9 +718,21 @@ _SET_FCN_DO_REMOVE (char modifier, const char *value) #define RETURN_STR_TO_FREE(val) \ G_STMT_START { \ char *_val = (val); \ + \ return ((*(out_to_free)) = _val); \ } G_STMT_END +#define RETURN_STR_TEMPORARY(val) \ + G_STMT_START { \ + const char *_val = (val); \ + \ + if (_val == NULL) \ + return NULL; \ + if (_val[0] == '\0') \ + return ""; \ + return ((*(out_to_free)) = g_strdup (_val)); \ + } G_STMT_END + static gboolean _gobject_property_is_default (NMSetting *setting, const char *prop_name) { @@ -905,73 +786,167 @@ _gobject_property_reset_default (NMSetting *setting, const char *prop_name) return _gobject_property_reset (setting, prop_name, TRUE); } +static const char * +_coerce_str_emptyunset (NMMetaAccessorGetType get_type, + gboolean is_default, + const char *cstr, + char **out_str) +{ + nm_assert (out_str && !*out_str); + nm_assert ( (!is_default && cstr && cstr[0] != '\0') + || NM_IN_STRSET (cstr, NULL, "")); + + if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY) { + if ( !cstr + || cstr[0] == '\0') { + if (is_default) + return ""; + else + return "\"\""; + } + nm_assert (!is_default); + return (*out_str = g_strdup_printf ("\"%s\"", cstr)); + } + + /* we coerce NULL/"" to either "" or " ". */ + if ( !cstr + || cstr[0] == '\0') { + if (is_default) + return ""; + else + return " "; + } + nm_assert (!is_default); + return cstr; +} + +static gboolean +_is_default (const NMMetaPropertyInfo *property_info, + NMSetting *setting) +{ + if ( property_info->property_typ_data + && property_info->property_typ_data->is_default_fcn) + return !!(property_info->property_typ_data->is_default_fcn (setting)); + + return _gobject_property_is_default (setting, property_info->property_name); + +} + static gconstpointer _get_fcn_gobject_impl (const NMMetaPropertyInfo *property_info, NMSetting *setting, NMMetaAccessorGetType get_type, + gboolean handle_emptyunset, gboolean *out_is_default, gpointer *out_to_free) { const char *cstr; GType gtype_prop; nm_auto_unset_gvalue GValue val = G_VALUE_INIT; + gboolean is_default; + gboolean glib_handles_str_transform; RETURN_UNSUPPORTED_GET_TYPE (); - NM_SET_OUT (out_is_default, _gobject_property_is_default (setting, property_info->property_name)); - if ( property_info->property_typ_data - && property_info->property_typ_data->is_default_fcn - && property_info->property_typ_data->is_default_fcn (setting)) { - if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY) - return _("(default)"); - return ""; - } + is_default = _is_default (property_info, setting); + + NM_SET_OUT (out_is_default, is_default); gtype_prop = _gobject_property_get_gtype (G_OBJECT (setting), property_info->property_name); + glib_handles_str_transform = !NM_IN_SET (gtype_prop, G_TYPE_BOOLEAN, + G_TYPE_STRV, + G_TYPE_BYTES, + G_TYPE_HASH_TABLE); + + if (glib_handles_str_transform) { + /* We rely on the type convertion of the gobject property to string. */ + g_value_init (&val, G_TYPE_STRING); + } else + g_value_init (&val, gtype_prop); + + g_object_get_property (G_OBJECT (setting), property_info->property_name, &val); + + /* Currently only one particular property asks us to "handle_emptyunset". + * So, don't implement it (yet) for the other types, where it's unneeded. */ + nm_assert ( !handle_emptyunset + || ( gtype_prop == G_TYPE_STRV + && !glib_handles_str_transform)); + + if (glib_handles_str_transform) + RETURN_STR_TEMPORARY (g_value_get_string (&val)); + if (gtype_prop == G_TYPE_BOOLEAN) { gboolean b; - g_value_init (&val, gtype_prop); - g_object_get_property (G_OBJECT (setting), property_info->property_name, &val); b = g_value_get_boolean (&val); if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY) cstr = b ? _("yes") : _("no"); else cstr = b ? "yes" : "no"; return cstr; - } else { - char *str; + } - /* Note that we register certain transform functions in nmc_value_transforms_register(). - * This makes G_TYPE_STRV working. - * - * FIXME: that is particularly ugly because it's non-obvious which code relies - * on nmc_value_transforms_register(). Also, nmc_value_transforms_register() is - * in clients/cli, while we are here in clients/common. */ - g_value_init (&val, G_TYPE_STRING); - g_object_get_property (G_OBJECT (setting), property_info->property_name, &val); - cstr = g_value_get_string (&val); - - if ( property_info->property_typ_data - && property_info->property_typ_data->is_default_fcn) { - if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY) { - str = cstr - ? g_strdup_printf ("\"%s\"", cstr) - : g_strdup (""); - } else - str = g_strdup (cstr && cstr[0] ? cstr : " "); - } else - str = cstr ? g_strdup (cstr) : NULL; + if (gtype_prop == G_TYPE_STRV) { + const char *const*strv; + + strv = g_value_get_boxed (&val); + if (strv && strv[0]) + RETURN_STR_TO_FREE (g_strjoinv (",", (char **) strv)); + + /* special hack for handling properties that can be empty and unset + * (see multilist.clear_emptyunset_fcn). */ + if (handle_emptyunset) { + char *str = NULL; + + cstr = _coerce_str_emptyunset (get_type, is_default, NULL, &str); + if (str) + RETURN_STR_TO_FREE (str); + RETURN_STR_TEMPORARY (cstr); + } + + return ""; + } + if (gtype_prop == G_TYPE_BYTES) { + char *str; + + str = bytes_to_string (g_value_get_boxed (&val)); + NM_SET_OUT (out_is_default, !str || !str[0]); RETURN_STR_TO_FREE (str); } + + if (gtype_prop == G_TYPE_HASH_TABLE) { + GHashTable *strdict; + gs_free const char **keys = NULL; + GString *str; + gsize i; + + strdict = g_value_get_boxed (&val); + keys = nm_utils_strdict_get_keys (strdict, TRUE, NULL); + if (!keys) + return NULL; + + str = g_string_new (NULL); + for (i = 0; keys[i]; i++) { + if (str->len > 0) + g_string_append_c (str, ','); + g_string_append_printf (str, + "%s=%s", + keys[i], + (const char *) g_hash_table_lookup (strdict, keys[i])); + } + RETURN_STR_TO_FREE (g_string_free (str, FALSE)); + } + + nm_assert_not_reached (); + return NULL; } static gconstpointer _get_fcn_gobject (ARGS_GET_FCN) { - return _get_fcn_gobject_impl (property_info, setting, get_type, out_is_default, out_to_free); + return _get_fcn_gobject_impl (property_info, setting, get_type, FALSE, out_is_default, out_to_free); } static gconstpointer @@ -1063,7 +1038,7 @@ _get_fcn_gobject_mtu (ARGS_GET_FCN) if ( !property_info->property_typ_data || !property_info->property_typ_data->subtype.mtu.get_fcn) - return _get_fcn_gobject_impl (property_info, setting, get_type, out_is_default, out_to_free); + return _get_fcn_gobject_impl (property_info, setting, get_type, FALSE, out_is_default, out_to_free); mtu = property_info->property_typ_data->subtype.mtu.get_fcn (setting); if (mtu == 0) { @@ -1723,23 +1698,6 @@ wep_key_type_to_string (NMWepKeyType type) } static char * -bytes_to_string (GBytes *bytes) -{ - const guint8 *data; - gsize len; - - if (!bytes) - return NULL; - - data = g_bytes_get_data (bytes, &len); - return nm_utils_bin2hexstr_full (data, - len, - '\0', - TRUE, - NULL); -} - -static char * vlan_flags_to_string (guint32 flags, NMMetaAccessorGetType get_type) { GString *flag_str; @@ -1839,19 +1797,41 @@ _multilist_do_validate (const NMMetaPropertyInfo *property_info, return item; } +static gconstpointer +_get_fcn_multilist (ARGS_GET_FCN) +{ + return _get_fcn_gobject_impl (property_info, + setting, + get_type, + property_info->property_typ_data->subtype.multilist.clear_emptyunset_fcn != NULL, + out_is_default, + out_to_free); +} + +static gboolean +_multilist_clear_property (const NMMetaPropertyInfo *property_info, + NMSetting *setting, + gboolean is_set /* or else set default */) +{ + if (property_info->property_typ_data->subtype.multilist.clear_emptyunset_fcn) { + property_info->property_typ_data->subtype.multilist.clear_emptyunset_fcn (setting, is_set); + return TRUE; + } + if (property_info->property_typ_data->subtype.multilist.clear_all_fcn) { + property_info->property_typ_data->subtype.multilist.clear_all_fcn (setting); + return TRUE; + } + return _gobject_property_reset (setting, property_info->property_name, FALSE); +} + static gboolean _set_fcn_multilist (ARGS_SET_FCN) { gs_free const char **strv = NULL; gsize i, j, nstrv; - if (_SET_FCN_DO_RESET_DEFAULT_WITH_SUPPORTS_REMOVE (property_info, modifier, value)) { - if (property_info->property_typ_data->subtype.multilist.clear_all_fcn) { - property_info->property_typ_data->subtype.multilist.clear_all_fcn (setting); - return TRUE; - } - return _gobject_property_reset (setting, property_info->property_name, FALSE); - } + if (_SET_FCN_DO_RESET_DEFAULT_WITH_SUPPORTS_REMOVE (property_info, modifier, value)) + return _multilist_clear_property (property_info, setting, FALSE); if ( _SET_FCN_DO_REMOVE (modifier, value) && ( property_info->property_typ_data->subtype.multilist.remove_by_idx_fcn_u32 @@ -1884,6 +1864,11 @@ _set_fcn_multilist (ARGS_SET_FCN) } } + if ( _SET_FCN_DO_SET_ALL (modifier, value) + && property_info->property_typ_data->subtype.multilist.clear_emptyunset_fcn + && value[0] == '\0') + return _multilist_clear_property (property_info, setting, FALSE); + strv = _value_strsplit (value, property_info->property_typ_data->subtype.multilist.strsplit_plain ? VALUE_STRSPLIT_MODE_MULTILIST @@ -1906,11 +1891,13 @@ _set_fcn_multilist (ARGS_SET_FCN) } nstrv = j; - if (_SET_FCN_DO_SET_ALL (modifier, value)) { - if (property_info->property_typ_data->subtype.multilist.clear_all_fcn) - property_info->property_typ_data->subtype.multilist.clear_all_fcn (setting); - else - _gobject_property_reset (setting, property_info->property_name, FALSE); + if (_SET_FCN_DO_SET_ALL (modifier, value)) + _multilist_clear_property (property_info, setting, TRUE); + else if ( property_info->property_typ_data->subtype.multilist.clear_emptyunset_fcn + && _is_default (property_info, setting)) { + /* the property is already the default. But we hav here a '+' / '-' modifier, so + * that always makes it non-default (empty) first. */ + _multilist_clear_property (property_info, setting, TRUE); } for (i = 0; i < nstrv; i++) { @@ -2299,21 +2286,6 @@ _set_fcn_cert_8021x (ARGS_SET_FCN) } static gconstpointer -_get_fcn_gobject_bytes (ARGS_GET_FCN) -{ - gs_unref_bytes GBytes *bytes = NULL; - char *str; - - RETURN_UNSUPPORTED_GET_TYPE (); - - g_object_get (setting, property_info->property_name, &bytes, NULL); - - str = bytes_to_string (bytes); - NM_SET_OUT (out_is_default, !str || !str[0]); - RETURN_STR_TO_FREE (str); -} - -static gconstpointer _get_fcn_bond_options (ARGS_GET_FCN) { NMSettingBond *s_bond = NM_SETTING_BOND (setting); @@ -3362,8 +3334,7 @@ _objlist_set_fcn_ip_config_routes (NMSetting *setting, static gboolean _is_default_func_ip_config_dns_options (NMSetting *setting) { - return nm_setting_ip_config_has_dns_options (NM_SETTING_IP_CONFIG (setting)) - && !nm_setting_ip_config_get_num_dns_options (NM_SETTING_IP_CONFIG (setting)); + return !nm_setting_ip_config_has_dns_options (NM_SETTING_IP_CONFIG (setting)); } static void @@ -3779,9 +3750,9 @@ _objlist_obj_to_str_fcn_team_link_watchers (NMMetaAccessorGetType get_type, else watcher = nm_setting_team_port_get_link_watcher (NM_SETTING_TEAM_PORT (setting), idx); - s = _dump_team_link_watcher (watcher); + s = nm_utils_team_link_watcher_to_string (watcher); if (s) - g_string_append (str, s); + nm_utils_escaped_tokens_escape_gstr (s, ESCAPED_TOKENS_DELIMITERS, str); } static gboolean @@ -3792,7 +3763,7 @@ _objlist_set_fcn_team_link_watchers (NMSetting *setting, { nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher = NULL; - watcher = _parse_team_link_watcher (value, error); + watcher = nm_utils_team_link_watcher_from_string (value, error); if (!watcher) return FALSE; if (NM_IS_SETTING_TEAM (setting)) { @@ -4412,7 +4383,7 @@ static const NMMetaPropertyType _pt_gobject_mtu = { }; static const NMMetaPropertyType _pt_gobject_bytes = { - .get_fcn = _get_fcn_gobject_bytes, + .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_bytes, }; @@ -4466,7 +4437,7 @@ static const NMMetaPropertyType _pt_ethtool = { }; static const NMMetaPropertyType _pt_multilist = { - .get_fcn = _get_fcn_gobject, + .get_fcn = _get_fcn_multilist, .set_fcn = _set_fcn_multilist, .set_supports_remove = TRUE, }; @@ -4485,6 +4456,7 @@ static const NMMetaPropertyType _pt_objlist = { #define MULTILIST_REMOVE_BY_IDX_FCN_S(type, func) (((func) == ((void (*) (type *, int )) (func))) ? ((void (*) (NMSetting *, int )) (func)) : NULL) #define MULTILIST_REMOVE_BY_IDX_FCN_U(type, func) (((func) == ((void (*) (type *, guint )) (func))) ? ((void (*) (NMSetting *, guint )) (func)) : NULL) #define MULTILIST_REMOVE_BY_VALUE_FCN(type, func) (((func) == ((gboolean (*) (type *, const char *)) (func))) ? ((gboolean (*) (NMSetting *, const char *)) (func)) : NULL) +#define MULTILIST_CLEAR_EMPTYUNSET_FCN(type, func) (((func) == ((void (*) (type *, gboolean )) (func))) ? ((void (*) (NMSetting *, gboolean )) (func)) : NULL) #define OBJLIST_GET_NUM_FCN(type, func) (((func) == ((guint (*) (type * )) (func))) ? ((guint (*) (NMSetting * )) (func)) : NULL) #define OBJLIST_CLEAR_ALL_FCN(type, func) (((func) == ((void (*) (type * )) (func))) ? ((void (*) (NMSetting * )) (func)) : NULL) @@ -5595,6 +5567,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .add_fcn = _multilist_add_fcn_ip_config_dns_options, .remove_by_idx_fcn_s = MULTILIST_REMOVE_BY_IDX_FCN_S (NMSettingIPConfig, nm_setting_ip_config_remove_dns_option), .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingIPConfig, nm_setting_ip_config_remove_dns_option_by_value), + .clear_emptyunset_fcn = MULTILIST_CLEAR_EMPTYUNSET_FCN (NMSettingIPConfig, nm_setting_ip_config_clear_dns_options), .strsplit_plain = TRUE, ), .is_default_fcn = _is_default_func_ip_config_dns_options, @@ -5807,6 +5780,7 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = { .add_fcn = _multilist_add_fcn_ip_config_dns_options, .remove_by_idx_fcn_s = MULTILIST_REMOVE_BY_IDX_FCN_S (NMSettingIPConfig, nm_setting_ip_config_remove_dns_option), .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingIPConfig, nm_setting_ip_config_remove_dns_option_by_value), + .clear_emptyunset_fcn = MULTILIST_CLEAR_EMPTYUNSET_FCN (NMSettingIPConfig, nm_setting_ip_config_clear_dns_options), .strsplit_plain = TRUE, ), .is_default_fcn = _is_default_func_ip_config_dns_options, @@ -6662,7 +6636,6 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = { .obj_to_str_fcn = _objlist_obj_to_str_fcn_team_link_watchers, .set_fcn = _objlist_set_fcn_team_link_watchers, .remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingTeam, nm_setting_team_remove_link_watcher), - .strsplit_plain = TRUE, ), ), ), @@ -6739,7 +6712,6 @@ static const NMMetaPropertyInfo *const property_infos_TEAM_PORT[] = { .obj_to_str_fcn = _objlist_obj_to_str_fcn_team_link_watchers, .set_fcn = _objlist_set_fcn_team_link_watchers, .remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingTeamPort, nm_setting_team_port_remove_link_watcher), - .strsplit_plain = TRUE, ), ), ), diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h index b69a07b503..2178f747bb 100644 --- a/clients/common/nm-meta-setting-desc.h +++ b/clients/common/nm-meta-setting-desc.h @@ -270,6 +270,13 @@ struct _NMMetaPropertyTypData { guint32 (*get_num_fcn_u32) (NMSetting *setting); guint (*get_num_fcn_u) (NMSetting *setting); void (*clear_all_fcn) (NMSetting *setting); + + /* some multilist properties distinguish between an empty list and + * and unset. If this function pointer is set, certain behaviors come + * into action to handle that. */ + void (*clear_emptyunset_fcn) (NMSetting *setting, + gboolean is_set /* or else set default */); + gboolean (*add_fcn) (NMSetting *setting, const char *item); void (*add2_fcn) (NMSetting *setting, diff --git a/clients/common/tests/meson.build b/clients/common/tests/meson.build index 3eb32a4726..88996f3a3c 100644 --- a/clients/common/tests/meson.build +++ b/clients/common/tests/meson.build @@ -1,23 +1,42 @@ -test_unit = 'test-general' - -deps = [ - libnm_dep, - libnmc_dep, - libnmc_base_dep, - libnm_core_dep, -] exe = executable( - 'clients-' + test_unit, - test_unit + '.c', - dependencies: deps, + 'clients-test-general', + 'test-general.c', + dependencies: [ + libnm_dep, + libnmc_dep, + libnmc_base_dep, + libnm_core_dep, + ], c_args: clients_cflags + [ '-DNETWORKMANAGER_COMPILATION_TEST', ], ) test( - 'clients/' + test_unit, + 'clients/common/tests/test-general', test_script, args: test_args + [exe.full_path()], ) + +############################################################################### + +exe = executable( + 'test-libnm-core-aux', + [ 'test-libnm-core-aux.c', ], + c_args: [ + '-DNETWORKMANAGER_COMPILATION_TEST', + '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT', + ], + dependencies: [ + libnm_dep, + shared_nm_libnm_core_aux_dep, + shared_nm_libnm_core_intern_dep, + ], +) + +test( + 'clients/common/tests/test-libnm-core-aux', + test_script, + args: test_args + [exe.full_path()] +) diff --git a/clients/common/tests/test-libnm-core-aux.c b/clients/common/tests/test-libnm-core-aux.c new file mode 100644 index 0000000000..609a688c6e --- /dev/null +++ b/clients/common/tests/test-libnm-core-aux.c @@ -0,0 +1,250 @@ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * Copyright 2019 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-libnm-core-aux/nm-libnm-core-aux.h" +#include "nm-libnm-core-intern/nm-libnm-core-utils.h" + +#include "nm-utils/nm-test-utils.h" + +/*****************************************************************************/ + +static NMTeamLinkWatcher * +_team_link_watcher_from_string_impl (const char *str, gsize nextra, const char *const*vextra) +{ + NMTeamLinkWatcher *watcher; + gs_free char *str1_free = NULL; + gs_free_error GError *error = NULL; + gsize i; + + g_assert (str); + + watcher = nm_utils_team_link_watcher_from_string (str, &error); + nmtst_assert_success (watcher, error); + + for (i = 0; i < 1 + nextra; i++) { + nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher1 = NULL; + const char *str1; + + if (i == 0) { + str1_free = nm_utils_team_link_watcher_to_string (watcher); + g_assert (str1_free); + str1 = str1_free; + g_assert_cmpstr (str, ==, str1); + } else + str1 = vextra[i - 1]; + + watcher1 = nm_utils_team_link_watcher_from_string (str1, &error); + nmtst_assert_success (watcher1, error); + if (!nm_team_link_watcher_equal (watcher, watcher1)) { + gs_free char *ss1 = NULL; + gs_free char *ss2 = NULL; + + g_print (">>> watcher differs: \"%s\" vs. \"%s\"", + (ss1 = nm_utils_team_link_watcher_to_string (watcher)), + (ss2 = nm_utils_team_link_watcher_to_string (watcher1))); + g_print (">>> ORIG: \"%s\" vs. \"%s\"", str, str1); + g_assert_not_reached (); + } + g_assert (nm_team_link_watcher_equal (watcher1, watcher)); + } + + return watcher; +} +#define _team_link_watcher_from_string(str, ...) \ + _team_link_watcher_from_string_impl ((str), NM_NARG (__VA_ARGS__), NM_MAKE_STRV (__VA_ARGS__)) + +/*****************************************************************************/ + +static void +test_team_link_watcher_tofro_string (void) +{ + nm_auto_unref_team_link_watcher NMTeamLinkWatcher *w = NULL; + +#define _team_link_watcher_cmp(watcher, \ + name, \ + delay_down, \ + delay_up, \ + init_wait, \ + interval, \ + missed_max, \ + target_host, \ + source_host, \ + vlanid, \ + arping_flags) \ + G_STMT_START { \ + nm_auto_unref_team_link_watcher NMTeamLinkWatcher *_w = g_steal_pointer (watcher); \ + \ + g_assert_cmpstr ((name), ==, nm_team_link_watcher_get_name (_w)); \ + g_assert_cmpint ((delay_down), ==, nm_team_link_watcher_get_delay_down (_w)); \ + g_assert_cmpint ((delay_up), ==, nm_team_link_watcher_get_delay_up (_w)); \ + g_assert_cmpint ((init_wait), ==, nm_team_link_watcher_get_init_wait (_w)); \ + g_assert_cmpint ((interval), ==, nm_team_link_watcher_get_interval (_w)); \ + g_assert_cmpint ((missed_max), ==, nm_team_link_watcher_get_missed_max (_w)); \ + g_assert_cmpstr ((target_host), ==, nm_team_link_watcher_get_target_host (_w)); \ + g_assert_cmpstr ((source_host), ==, nm_team_link_watcher_get_source_host (_w)); \ + g_assert_cmpint ((vlanid), ==, nm_team_link_watcher_get_vlanid (_w)); \ + g_assert_cmpint ((arping_flags), ==, nm_team_link_watcher_get_flags (_w)); \ + } G_STMT_END + + w = _team_link_watcher_from_string ("name=ethtool", + "delay-up=0 name=ethtool", + " delay-down=0 name=ethtool "); + _team_link_watcher_cmp (&w, + "ethtool", + 0, + 0, + -1, + -1, + -1, + NULL, + NULL, + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); + + w = _team_link_watcher_from_string ("name=ethtool delay-up=10", + " delay-down=0 delay-up=10 name=ethtool"); + _team_link_watcher_cmp (&w, + "ethtool", + 0, + 10, + -1, + -1, + -1, + NULL, + NULL, + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); + + w = _team_link_watcher_from_string ("name=ethtool delay-up=10 delay-down=11", + " delay-down=11 delay-up=10 name=ethtool"); + _team_link_watcher_cmp (&w, + "ethtool", + 11, + 10, + -1, + -1, + -1, + NULL, + NULL, + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); + + w = _team_link_watcher_from_string ("name=nsna_ping target-host=xxx", + "name=nsna_ping target-host=xxx", + " missed-max=3 target-host=xxx name=nsna_ping "); + _team_link_watcher_cmp (&w, + "nsna_ping", + -1, + -1, + 0, + 0, + 3, + "xxx", + NULL, + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); + + w = _team_link_watcher_from_string ("name=arp_ping target-host=xxx source-host=yzd", + " source-host=yzd target-host=xxx name=arp_ping "); + _team_link_watcher_cmp (&w, + "arp_ping", + -1, + -1, + 0, + 0, + 3, + "xxx", + "yzd", + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); + + w = _team_link_watcher_from_string ("name=arp_ping missed-max=0 target-host=xxx vlanid=0 source-host=yzd"); + _team_link_watcher_cmp (&w, + "arp_ping", + -1, + -1, + 0, + 0, + 0, + "xxx", + "yzd", + 0, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); + + w = _team_link_watcher_from_string ("name=arp_ping target-host=xxx source-host=yzd validate-active=true", + "source-host=yzd send-always=false name=arp_ping validate-active=true validate-inactive=false target-host=xxx", + " source-host=yzd target-host=xxx validate-active=true name=arp_ping "); + _team_link_watcher_cmp (&w, + "arp_ping", + -1, + -1, + 0, + 0, + 3, + "xxx", + "yzd", + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE); + + w = _team_link_watcher_from_string ("name=arp_ping target-host=xxx source-host=yzd validate-active=true validate-inactive=true send-always=true", + "source-host=yzd send-always=true name=arp_ping validate-active=true validate-inactive=true target-host=xxx", + "source-host=yzd send-always=true name=arp_ping validate-active=1 validate-inactive=yes target-host=xxx", + " source-host=yzd target-host=xxx validate-inactive=true send-always=true validate-active=true name=arp_ping "); + _team_link_watcher_cmp (&w, + "arp_ping", + -1, + -1, + 0, + 0, + 3, + "xxx", + "yzd", + -1, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE + | NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE + | NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS); + + w = _team_link_watcher_from_string ("name=arp_ping missed-max=0 target-host=xxx vlanid=0 source-host=yzd"); + _team_link_watcher_cmp (&w, + "arp_ping", + -1, + -1, + 0, + 0, + 0, + "xxx", + "yzd", + 0, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE); +} + +/*****************************************************************************/ + +NMTST_DEFINE (); + +int main (int argc, char **argv) +{ + nmtst_init (&argc, &argv, TRUE); + + g_test_add_func ("/libnm-core-aux/test_team_link_watcher_tofro_string", test_team_link_watcher_tofro_string); + + return g_test_run (); +} diff --git a/clients/tests/test-client.check-on-disk/test_003.expected b/clients/tests/test-client.check-on-disk/test_003.expected index ded1e9d703..694854c207 100644 --- a/clients/tests/test-client.check-on-disk/test_003.expected +++ b/clients/tests/test-client.check-on-disk/test_003.expected @@ -32,9 +32,9 @@ con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet -- con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet -- <<< -size: 332 +size: 353 location: clients/tests/test-client.py:893:test_003()/4 -cmd: $NMCLI connection add type gsm autoconnect no con-name con-gsm1 ifname '*' apn xyz.con-gsm1 serial.baud 5 serial.send-delay 100 serial.pari 1 +cmd: $NMCLI connection add type gsm autoconnect no con-name con-gsm1 ifname '*' apn xyz.con-gsm1 serial.baud 5 serial.send-delay 100 serial.pari 1 ipv4.dns-options ' ' lang: C returncode: 0 stdout: 81 bytes @@ -204,7 +204,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -300,7 +300,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -521,7 +521,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -542,7 +542,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -613,7 +613,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -634,7 +634,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -725,7 +725,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -746,7 +746,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -829,7 +829,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -850,7 +850,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1377,7 +1377,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1398,7 +1398,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1469,7 +1469,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1490,7 +1490,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1585,7 +1585,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1606,7 +1606,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1702,7 +1702,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1723,7 +1723,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -2181,7 +2181,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -2202,7 +2202,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -2298,7 +2298,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -2319,7 +2319,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -2415,7 +2415,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -2436,7 +2436,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -2519,7 +2519,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -2540,7 +2540,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -2813,7 +2813,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -2834,7 +2834,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -2930,7 +2930,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -2951,7 +2951,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3047,7 +3047,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3068,7 +3068,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3151,7 +3151,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3172,7 +3172,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3466,7 +3466,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3488,7 +3488,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3599,7 +3599,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3621,7 +3621,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3732,7 +3732,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3754,7 +3754,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3848,7 +3848,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3870,7 +3870,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4192,7 +4192,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4214,7 +4214,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4325,7 +4325,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4347,7 +4347,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4458,7 +4458,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4480,7 +4480,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4574,7 +4574,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4596,7 +4596,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4846,12 +4846,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 2809 +size: 2807 location: clients/tests/test-client.py:978:test_003()/104 cmd: $NMCLI --terse con s ethernet lang: C returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -4893,7 +4893,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -4914,7 +4914,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -4963,12 +4963,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2819 +size: 2817 location: clients/tests/test-client.py:978:test_003()/105 cmd: $NMCLI --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5010,7 +5010,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5031,7 +5031,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -5080,12 +5080,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2481 +size: 2479 location: clients/tests/test-client.py:981:test_003()/106 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5127,7 +5127,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5148,7 +5148,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -5184,12 +5184,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2491 +size: 2489 location: clients/tests/test-client.py:981:test_003()/107 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5231,7 +5231,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5252,7 +5252,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -5474,12 +5474,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 2821 +size: 2819 location: clients/tests/test-client.py:978:test_003()/114 cmd: $NMCLI --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5521,7 +5521,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5542,7 +5542,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -5591,12 +5591,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2831 +size: 2829 location: clients/tests/test-client.py:978:test_003()/115 cmd: $NMCLI --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5638,7 +5638,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5659,7 +5659,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -5708,12 +5708,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2493 +size: 2491 location: clients/tests/test-client.py:981:test_003()/116 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5755,7 +5755,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5776,7 +5776,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -5812,12 +5812,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2503 +size: 2501 location: clients/tests/test-client.py:981:test_003()/117 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5859,7 +5859,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -5880,7 +5880,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -6120,10 +6120,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script proxy none no -- -- @@ -6151,10 +6151,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script proxy none nie -- -- @@ -6182,10 +6182,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script proxy none no -- -- @@ -6209,10 +6209,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script proxy none nie -- -- @@ -6358,10 +6358,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script proxy none no -- -- @@ -6389,10 +6389,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script proxy none nie -- -- @@ -6420,10 +6420,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script proxy none no -- -- @@ -6447,10 +6447,10 @@ 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script proxy none nie -- -- @@ -6618,11 +6618,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -6665,11 +6665,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -6712,11 +6712,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -6751,11 +6751,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -6950,11 +6950,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -6997,11 +6997,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -7044,11 +7044,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -7083,11 +7083,11 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name method browser-only pac-url pac-script -------------------------------------------------- @@ -7242,66 +7242,66 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 830 +size: 828 location: clients/tests/test-client.py:978:test_003()/164 cmd: $NMCLI --mode tabular --terse con s ethernet lang: C returncode: 0 -stdout: 673 bytes +stdout: 671 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 840 +size: 838 location: clients/tests/test-client.py:978:test_003()/165 cmd: $NMCLI --mode tabular --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 673 bytes +stdout: 671 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 683 +size: 681 location: clients/tests/test-client.py:981:test_003()/166 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 486 bytes +stdout: 484 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 693 +size: 691 location: clients/tests/test-client.py:981:test_003()/167 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 486 bytes +stdout: 484 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: @@ -7394,66 +7394,66 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 842 +size: 840 location: clients/tests/test-client.py:978:test_003()/174 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 673 bytes +stdout: 671 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 852 +size: 850 location: clients/tests/test-client.py:978:test_003()/175 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 673 bytes +stdout: 671 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 695 +size: 693 location: clients/tests/test-client.py:981:test_003()/176 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 486 bytes +stdout: 484 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 705 +size: 703 location: clients/tests/test-client.py:981:test_003()/177 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 486 bytes +stdout: 484 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1 802-3-ethernet::0::no:::::auto::::default: -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: @@ -7741,7 +7741,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -7762,7 +7762,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -7858,7 +7858,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -7879,7 +7879,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -7975,7 +7975,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -7996,7 +7996,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -8079,7 +8079,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -8100,7 +8100,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -8517,7 +8517,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -8538,7 +8538,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -8634,7 +8634,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -8655,7 +8655,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -8751,7 +8751,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -8772,7 +8772,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -8855,7 +8855,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -8876,7 +8876,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -9328,7 +9328,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -9350,7 +9350,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -9461,7 +9461,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -9483,7 +9483,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -9594,7 +9594,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -9616,7 +9616,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -9710,7 +9710,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -9732,7 +9732,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10212,7 +10212,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10234,7 +10234,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10345,7 +10345,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10367,7 +10367,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10478,7 +10478,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10500,7 +10500,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10594,7 +10594,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10616,7 +10616,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -11014,12 +11014,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 2826 +size: 2824 location: clients/tests/test-client.py:978:test_003()/224 cmd: $NMCLI --mode multiline --terse con s ethernet lang: C returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11061,7 +11061,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -11082,7 +11082,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -11131,12 +11131,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2836 +size: 2834 location: clients/tests/test-client.py:978:test_003()/225 cmd: $NMCLI --mode multiline --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11178,7 +11178,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -11199,7 +11199,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -11248,12 +11248,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2498 +size: 2496 location: clients/tests/test-client.py:981:test_003()/226 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11295,7 +11295,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -11316,7 +11316,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -11352,12 +11352,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2508 +size: 2506 location: clients/tests/test-client.py:981:test_003()/227 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11399,7 +11399,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -11420,7 +11420,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -11790,12 +11790,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 2838 +size: 2836 location: clients/tests/test-client.py:978:test_003()/234 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11837,7 +11837,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -11858,7 +11858,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -11907,12 +11907,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2848 +size: 2846 location: clients/tests/test-client.py:978:test_003()/235 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2666 bytes +stdout: 2664 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11954,7 +11954,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -11975,7 +11975,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -12024,12 +12024,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2510 +size: 2508 location: clients/tests/test-client.py:981:test_003()/236 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12071,7 +12071,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -12092,7 +12092,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -12128,12 +12128,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2520 +size: 2518 location: clients/tests/test-client.py:981:test_003()/237 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2298 bytes +stdout: 2296 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12175,7 +12175,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -12196,7 +12196,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: 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 48f68a5bcc..8fdc7497cc 100644 --- a/clients/tests/test-client.check-on-disk/test_004.expected +++ b/clients/tests/test-client.check-on-disk/test_004.expected @@ -108,7 +108,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: 192.168.77.5/24 ipv4.gateway: -- @@ -129,7 +129,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: 1:2:3:4::6/64 ipv6.gateway: -- @@ -203,7 +203,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: 192.168.77.5/24 ipv4.gateway: -- @@ -224,7 +224,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: 1:2:3:4::6/64 ipv6.gateway: -- @@ -317,7 +317,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -338,7 +338,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -401,7 +401,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -422,7 +422,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -557,7 +557,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -578,7 +578,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -661,7 +661,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -682,7 +682,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -765,7 +765,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -786,7 +786,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -869,7 +869,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -890,7 +890,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -973,7 +973,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -994,7 +994,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1077,7 +1077,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1098,7 +1098,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1181,7 +1181,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1202,7 +1202,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -1265,7 +1265,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -1286,7 +1286,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3739,7 +3739,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3760,7 +3760,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3843,7 +3843,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3864,7 +3864,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -3947,7 +3947,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -3968,7 +3968,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4051,7 +4051,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4072,7 +4072,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4155,7 +4155,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4176,7 +4176,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -4239,7 +4239,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -4260,7 +4260,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -6717,7 +6717,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -6739,7 +6739,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -6834,7 +6834,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -6856,7 +6856,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -6951,7 +6951,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -6973,7 +6973,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -7068,7 +7068,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -7090,7 +7090,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -7185,7 +7185,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -7207,7 +7207,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -7277,7 +7277,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -7299,7 +7299,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10305,7 +10305,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10327,7 +10327,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10422,7 +10422,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10444,7 +10444,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10539,7 +10539,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10561,7 +10561,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10656,7 +10656,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10678,7 +10678,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10773,7 +10773,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10795,7 +10795,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -10865,7 +10865,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -10887,7 +10887,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -13856,12 +13856,12 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) ------------------------------------------------------------------------------- <<< -size: 2363 +size: 2361 location: clients/tests/test-client.py:1037:test_004()/215 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -13889,7 +13889,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -13910,7 +13910,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -13960,12 +13960,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2373 +size: 2371 location: clients/tests/test-client.py:1037:test_004()/216 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -13993,7 +13993,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -14014,7 +14014,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -14064,12 +14064,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2363 +size: 2361 location: clients/tests/test-client.py:1039:test_004()/217 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -14097,7 +14097,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -14118,7 +14118,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -14168,12 +14168,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2373 +size: 2371 location: clients/tests/test-client.py:1039:test_004()/218 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -14201,7 +14201,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -14222,7 +14222,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -14272,12 +14272,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 1811 +size: 1809 location: clients/tests/test-client.py:1042:test_004()/219 cmd: $NMCLI --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -14305,7 +14305,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -14326,7 +14326,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -14356,12 +14356,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 1821 +size: 1819 location: clients/tests/test-client.py:1042:test_004()/220 cmd: $NMCLI --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -14389,7 +14389,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -14410,7 +14410,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -16800,12 +16800,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION:Test system #3 NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< -size: 2375 +size: 2373 location: clients/tests/test-client.py:1037:test_004()/263 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -16833,7 +16833,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -16854,7 +16854,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -16904,12 +16904,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2385 +size: 2383 location: clients/tests/test-client.py:1037:test_004()/264 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -16937,7 +16937,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -16958,7 +16958,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -17008,12 +17008,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2375 +size: 2373 location: clients/tests/test-client.py:1039:test_004()/265 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -17041,7 +17041,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -17062,7 +17062,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -17112,12 +17112,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2385 +size: 2383 location: clients/tests/test-client.py:1039:test_004()/266 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -17145,7 +17145,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -17166,7 +17166,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -17216,12 +17216,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 1823 +size: 1821 location: clients/tests/test-client.py:1042:test_004()/267 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -17249,7 +17249,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -17270,7 +17270,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -17300,12 +17300,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 1833 +size: 1831 location: clients/tests/test-client.py:1042:test_004()/268 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -17333,7 +17333,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -17354,7 +17354,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -19755,10 +19755,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0 @@ -19784,10 +19784,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0 @@ -19813,10 +19813,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0 @@ -19842,10 +19842,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0 @@ -19871,10 +19871,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0 @@ -19895,10 +19895,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0 @@ -21269,10 +21269,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0 @@ -21298,10 +21298,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0 @@ -21327,10 +21327,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0 @@ -21356,10 +21356,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0 @@ -21385,10 +21385,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0 @@ -21409,10 +21409,10 @@ 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) 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0 @@ -22788,11 +22788,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -22830,11 +22830,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -22872,11 +22872,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -22914,11 +22914,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -22956,11 +22956,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -22988,11 +22988,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -24898,11 +24898,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -24940,11 +24940,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -24982,11 +24982,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -25024,11 +25024,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -25066,11 +25066,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- no yes -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- 0 (default) yes -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no no yes -1 (unknown) stable-privacy -- yes -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -25098,11 +25098,11 @@ connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- 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-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn never-default may-fail dad-timeout ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv4 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- nie tak -1 (default) +ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- 0 (default) tak -- -- 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 never-default may-fail ip6-privacy addr-gen-mode dhcp-duid dhcp-send-hostname dhcp-hostname token --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -ipv6 auto -- -- "" 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- +ipv6 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie nie tak -1 (unknown) stable-privacy -- tak -- -- name service-type user-name data secrets persistent timeout ------------------------------------------------------------------------------------------------------------------------------- @@ -26992,94 +26992,94 @@ eth0 chassis1 44:44:44:44:44:44 GigabitEthernet #2 test2.example. eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example.com Test system #3 40 (wlan-access-point,telephone) <<< -size: 793 +size: 791 location: clients/tests/test-client.py:1037:test_004()/503 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 803 +size: 801 location: clients/tests/test-client.py:1037:test_004()/504 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 793 +size: 791 location: clients/tests/test-client.py:1039:test_004()/505 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 803 +size: 801 location: clients/tests/test-client.py:1039:test_004()/506 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 506 +size: 504 location: clients/tests/test-client.py:1042:test_004()/507 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 340 bytes +stdout: 338 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: <<< -size: 516 +size: 514 location: clients/tests/test-client.py:1042:test_004()/508 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 340 bytes +stdout: 338 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: @@ -27868,94 +27868,94 @@ eth0:chassis1:44\:44\:44\:44\:44\:44:GigabitEthernet #2:test2.example.com:Test s eth0:00\:11\:22\:33\:44\:22:port1:GigabitEthernet #3:test3.example.com:Test system #3:40 (wlan-access-point,telephone) <<< -size: 805 +size: 803 location: clients/tests/test-client.py:1037:test_004()/551 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 815 +size: 813 location: clients/tests/test-client.py:1037:test_004()/552 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 805 +size: 803 location: clients/tests/test-client.py:1039:test_004()/553 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 815 +size: 813 location: clients/tests/test-client.py:1039:test_004()/554 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 634 bytes +stdout: 632 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP: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: 516 location: clients/tests/test-client.py:1042:test_004()/555 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 340 bytes +stdout: 338 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: <<< -size: 528 +size: 526 location: clients/tests/test-client.py:1042:test_004()/556 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 340 bytes +stdout: 338 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 -ipv4:auto::: :0::::-1:0::no:no::0:yes:::no:yes:-1 -ipv6:auto::: :0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: +ipv4:auto::::0::::-1:0::no:no::0:yes:::no:yes:-1 +ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy::yes:: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: @@ -28777,7 +28777,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -28798,7 +28798,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -28881,7 +28881,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -28902,7 +28902,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -28985,7 +28985,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -29006,7 +29006,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -29089,7 +29089,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -29110,7 +29110,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -29193,7 +29193,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -29214,7 +29214,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -29277,7 +29277,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -29298,7 +29298,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -32241,7 +32241,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -32262,7 +32262,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -32345,7 +32345,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -32366,7 +32366,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -32449,7 +32449,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -32470,7 +32470,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -32553,7 +32553,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -32574,7 +32574,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -32657,7 +32657,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -32678,7 +32678,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -32741,7 +32741,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -32762,7 +32762,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -35709,7 +35709,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -35731,7 +35731,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -35826,7 +35826,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -35848,7 +35848,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -35943,7 +35943,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -35965,7 +35965,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -36060,7 +36060,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -36082,7 +36082,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -36177,7 +36177,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -36199,7 +36199,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -36269,7 +36269,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -36291,7 +36291,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -39817,7 +39817,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -39839,7 +39839,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -39934,7 +39934,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -39956,7 +39956,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -40051,7 +40051,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -40073,7 +40073,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -40168,7 +40168,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -40190,7 +40190,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -40285,7 +40285,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -40307,7 +40307,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -40377,7 +40377,7 @@ connection.llmnr: -1 (default) ipv4.method: auto ipv4.dns: -- ipv4.dns-search: -- -ipv4.dns-options: "" +ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: -- ipv4.gateway: -- @@ -40399,7 +40399,7 @@ ipv4.dad-timeout: -1 (default) ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- -ipv6.dns-options: "" +ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- @@ -43888,12 +43888,12 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) ------------------------------------------------------------------------------- <<< -size: 2380 +size: 2378 location: clients/tests/test-client.py:1037:test_004()/791 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -43921,7 +43921,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -43942,7 +43942,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -43992,12 +43992,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2390 +size: 2388 location: clients/tests/test-client.py:1037:test_004()/792 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -44025,7 +44025,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -44046,7 +44046,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -44096,12 +44096,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2380 +size: 2378 location: clients/tests/test-client.py:1039:test_004()/793 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -44129,7 +44129,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -44150,7 +44150,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -44200,12 +44200,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2390 +size: 2388 location: clients/tests/test-client.py:1039:test_004()/794 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -44233,7 +44233,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -44254,7 +44254,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -44304,12 +44304,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 1828 +size: 1826 location: clients/tests/test-client.py:1042:test_004()/795 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -44337,7 +44337,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -44358,7 +44358,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -44388,12 +44388,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 1838 +size: 1836 location: clients/tests/test-client.py:1042:test_004()/796 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -44421,7 +44421,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -44442,7 +44442,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -47352,12 +47352,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION:Test system #3 NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< -size: 2392 +size: 2390 location: clients/tests/test-client.py:1037:test_004()/839 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47385,7 +47385,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -47406,7 +47406,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -47456,12 +47456,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2402 +size: 2400 location: clients/tests/test-client.py:1037:test_004()/840 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47489,7 +47489,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -47510,7 +47510,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -47560,12 +47560,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2392 +size: 2390 location: clients/tests/test-client.py:1039:test_004()/841 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47593,7 +47593,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -47614,7 +47614,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -47664,12 +47664,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2402 +size: 2400 location: clients/tests/test-client.py:1039:test_004()/842 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2218 bytes +stdout: 2216 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47697,7 +47697,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -47718,7 +47718,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -47768,12 +47768,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 1840 +size: 1838 location: clients/tests/test-client.py:1042:test_004()/843 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47801,7 +47801,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -47822,7 +47822,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: @@ -47852,12 +47852,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 1850 +size: 1848 location: clients/tests/test-client.py:1042:test_004()/844 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1659 bytes +stdout: 1657 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47885,7 +47885,7 @@ connection.llmnr:-1 ipv4.method:auto ipv4.dns: ipv4.dns-search: -ipv4.dns-options: +ipv4.dns-options: ipv4.dns-priority:0 ipv4.addresses: ipv4.gateway: @@ -47906,7 +47906,7 @@ ipv4.dad-timeout:-1 ipv6.method:auto ipv6.dns: ipv6.dns-search: -ipv6.dns-options: +ipv6.dns-options: ipv6.dns-priority:0 ipv6.addresses: ipv6.gateway: diff --git a/clients/tests/test-client.py b/clients/tests/test-client.py index 08b0b951d1..b2411d6e52 100755 --- a/clients/tests/test-client.py +++ b/clients/tests/test-client.py @@ -889,7 +889,7 @@ class TestNmcli(NmTestBase): replace_stdout.append((Util.memoize_nullary(lambda: self.srv.findConnectionUuid('con-gsm1')), 'UUID-con-gsm1-REPLACED-REPLACED-REPL')) - self.call_nmcli(['connection', 'add', 'type', 'gsm', 'autoconnect', 'no', 'con-name', 'con-gsm1', 'ifname', '*', 'apn', 'xyz.con-gsm1', 'serial.baud', '5', 'serial.send-delay', '100', 'serial.pari', '1'], + self.call_nmcli(['connection', 'add', 'type', 'gsm', 'autoconnect', 'no', 'con-name', 'con-gsm1', 'ifname', '*', 'apn', 'xyz.con-gsm1', 'serial.baud', '5', 'serial.send-delay', '100', 'serial.pari', '1', 'ipv4.dns-options', ' '], replace_stdout = replace_stdout) replace_stdout.append((Util.memoize_nullary(lambda: self.srv.findConnectionUuid('ethernet')), 'UUID-ethernet-REPLACED-REPLACED-REPL')) diff --git a/libnm-core/meson.build b/libnm-core/meson.build index bc2d087a15..25ed019831 100644 --- a/libnm-core/meson.build +++ b/libnm-core/meson.build @@ -256,7 +256,7 @@ libnm_core_dep = declare_dependency( shared_nm_libnm_core_aux = static_library( 'nm-libnm-core-aux', - sources: files('../shared/nm-libnm-core-aux/nm-dispatcher-api.h'), + sources: files('../shared/nm-libnm-core-aux/nm-libnm-core-aux.c'), c_args: [ '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', @@ -270,6 +270,7 @@ shared_nm_libnm_core_aux = static_library( glib_dep, shared_c_siphash_dep, shared_nm_glib_aux_dep, + libnm_core_dep, ], ) diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index 3e33dd930d..c05b9dd86e 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -260,6 +260,8 @@ typedef gpointer (*NMUtilsCopyFunc) (gpointer); const char **_nm_ip_address_get_attribute_names (const NMIPAddress *addr, gboolean sorted, guint *out_length); +void _nm_setting_wired_clear_s390_options (NMSettingWired *setting); + gboolean _nm_ip_route_attribute_validate_all (const NMIPRoute *route); const char **_nm_ip_route_get_attribute_names (const NMIPRoute *route, gboolean sorted, guint *out_length); GHashTable *_nm_ip_route_get_attributes (NMIPRoute *route); diff --git a/libnm-core/nm-keyfile.c b/libnm-core/nm-keyfile.c index bf8d219310..6a4681a3ae 100644 --- a/libnm-core/nm-keyfile.c +++ b/libnm-core/nm-keyfile.c @@ -994,6 +994,11 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key) gboolean is_vpn; gsize n_keys; + nm_assert ( (NM_IS_SETTING_VPN (setting) && nm_streq (key, NM_SETTING_VPN_DATA)) + || (NM_IS_SETTING_VPN (setting) && nm_streq (key, NM_SETTING_VPN_SECRETS)) + || (NM_IS_SETTING_BOND (setting) && nm_streq (key, NM_SETTING_BOND_OPTIONS)) + || (NM_IS_SETTING_USER (setting) && nm_streq (key, NM_SETTING_USER_DATA))); + keys = nm_keyfile_plugin_kf_get_keys (file, setting_name, &n_keys, NULL); if (n_keys == 0) return; @@ -1041,7 +1046,10 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key) value); } g_object_set (setting, NM_SETTING_USER_DATA, data, NULL); + return; } + + nm_assert_not_reached (); } static gsize @@ -2019,6 +2027,64 @@ bridge_vlan_writer (KeyfileWriterInfo *info, g_string_free (string, TRUE); } + +#define ETHERNET_S390_OPTIONS_GROUP_NAME "ethernet-s390-options" + +static void +wired_s390_options_parser_full (KeyfileReaderInfo *info, + const NMMetaSettingInfo *setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty *pip, + NMSetting *setting) +{ + NMSettingWired *s_wired = NM_SETTING_WIRED (setting); + gs_strfreev char **keys = NULL; + gsize n_keys; + gsize i; + + keys = nm_keyfile_plugin_kf_get_keys (info->keyfile, ETHERNET_S390_OPTIONS_GROUP_NAME, &n_keys, NULL); + for (i = 0; i < n_keys; i++) { + gs_free char *value = NULL; + gs_free char *key_to_free = NULL; + + value = nm_keyfile_plugin_kf_get_string (info->keyfile, + ETHERNET_S390_OPTIONS_GROUP_NAME, + keys[i], + NULL); + if (!value) + continue; + + nm_setting_wired_add_s390_option (s_wired, + nm_keyfile_key_decode (keys[i], + &key_to_free), + value); + } +} + +static void +wired_s390_options_writer_full (KeyfileWriterInfo *info, + const NMMetaSettingInfo *setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty *pip, + NMSetting *setting) +{ + NMSettingWired *s_wired = NM_SETTING_WIRED (setting); + guint i, n; + + n = nm_setting_wired_get_num_s390_options (s_wired); + for (i = 0; i < n; i++) { + const char *opt_key; + const char *opt_val; + gs_free char *key_to_free = NULL; + + nm_setting_wired_get_s390_option (s_wired, i, &opt_key, &opt_val); + nm_keyfile_plugin_kf_set_string (info->keyfile, + ETHERNET_S390_OPTIONS_GROUP_NAME, + nm_keyfile_key_encode (opt_key, &key_to_free), + opt_val); + } +} + static void ip_routing_rule_writer_full (KeyfileWriterInfo *info, const NMMetaSettingInfo *setting_info, @@ -2131,6 +2197,11 @@ write_hash_of_string (GKeyFile *file, gs_free const char **keys = NULL; guint i, l; + nm_assert ( (NM_IS_SETTING_VPN (setting) && nm_streq (key, NM_SETTING_VPN_DATA)) + || (NM_IS_SETTING_VPN (setting) && nm_streq (key, NM_SETTING_VPN_SECRETS)) + || (NM_IS_SETTING_BOND (setting) && nm_streq (key, NM_SETTING_BOND_OPTIONS)) + || (NM_IS_SETTING_USER (setting) && nm_streq (key, NM_SETTING_USER_DATA))); + /* Write VPN secrets out to a different group to keep them separate */ if ( NM_IS_SETTING_VPN (setting) && nm_streq (key, NM_SETTING_VPN_SECRETS)) { @@ -2478,6 +2549,13 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = { PARSE_INFO_PROPERTY (NM_SETTING_WIRED_MAC_ADDRESS, .parser = mac_address_parser_ETHER, ), + PARSE_INFO_PROPERTY (NM_SETTING_WIRED_S390_OPTIONS, + .parser_no_check_key = TRUE, + .parser_full = wired_s390_options_parser_full, + .writer_full = wired_s390_options_writer_full, + .has_parser_full = TRUE, + .has_writer_full = TRUE, + ), ), ), PARSE_INFO_SETTING (NM_META_SETTING_TYPE_BLUETOOTH, diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c index 182e719302..b37acda4ca 100644 --- a/libnm-core/nm-setting-wired.c +++ b/libnm-core/nm-setting-wired.c @@ -75,7 +75,11 @@ typedef struct { guint32 mtu; char **s390_subchannels; char *s390_nettype; - GHashTable *s390_options; + struct { + NMUtilsNamedValue *arr; + guint len; + guint n_alloc; + } s390_options; NMSettingWiredWakeOnLan wol; char *wol_password; } NMSettingWiredPrivate; @@ -87,15 +91,68 @@ G_DEFINE_TYPE (NMSettingWired, nm_setting_wired, NM_TYPE_SETTING) /*****************************************************************************/ static const char *valid_s390_opts[] = { - "portno", "layer2", "portname", "protocol", "priority_queueing", - "buffer_count", "isolation", "total", "inter", "inter_jumbo", "route4", - "route6", "fake_broadcast", "broadcast_mode", "canonical_macaddr", - "checksumming", "sniffer", "large_send", "ipato_enable", "ipato_invert4", - "ipato_add4", "ipato_invert6", "ipato_add6", "vipa_add4", "vipa_add6", - "rxip_add4", "rxip_add6", "lancmd_timeout", "ctcprot", - NULL + "broadcast_mode", + "buffer_count", + "canonical_macaddr", + "checksumming", + "ctcprot", + "fake_broadcast", + "inter", + "inter_jumbo", + "ipato_add4", + "ipato_add6", + "ipato_enable", + "ipato_invert4", + "ipato_invert6", + "isolation", + "lancmd_timeout", + "large_send", + "layer2", + "portname", + "portno", + "priority_queueing", + "protocol", + "route4", + "route6", + "rxip_add4", + "rxip_add6", + "sniffer", + "total", + "vipa_add4", + "vipa_add6", + NULL, }; +static gboolean +valid_s390_opts_check (const char *option) +{ +#if NM_MORE_ASSERTS > 5 + nm_assert (NM_PTRARRAY_LEN (valid_s390_opts) + 1 == G_N_ELEMENTS (valid_s390_opts)); + { + gsize i; + + for (i = 0; i < G_N_ELEMENTS (valid_s390_opts); i++) { + if (i == G_N_ELEMENTS (valid_s390_opts) - 1) + nm_assert (!valid_s390_opts[i]); + else { + nm_assert (valid_s390_opts[i]); + nm_assert (valid_s390_opts[i][0] != '\0'); + if (i > 0) + g_assert (strcmp (valid_s390_opts[i - 1], valid_s390_opts[i]) < 0); + } + } + } +#endif + + return option + && (nm_utils_array_find_binary_search (valid_s390_opts, + sizeof (const char *), + G_N_ELEMENTS (valid_s390_opts) - 1, + &option, + nm_strcmp_p_with_data, + NULL) >= 0); +} + /** * nm_setting_wired_get_port: * @setting: the #NMSettingWired @@ -417,7 +474,7 @@ nm_setting_wired_get_num_s390_options (NMSettingWired *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0); - return g_hash_table_size (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options); + return NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options.len; } /** @@ -447,24 +504,17 @@ nm_setting_wired_get_s390_option (NMSettingWired *setting, const char **out_key, const char **out_value) { - const char *_key, *_value; - GHashTableIter iter; - guint i = 0; + NMSettingWiredPrivate *priv; g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE); - g_hash_table_iter_init (&iter, NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options); - while (g_hash_table_iter_next (&iter, (gpointer) &_key, (gpointer) &_value)) { - if (i == idx) { - if (out_key) - *out_key = _key; - if (out_value) - *out_value = _value; - return TRUE; - } - i++; - } - g_return_val_if_reached (FALSE); + priv = NM_SETTING_WIRED_GET_PRIVATE (setting); + + g_return_val_if_fail (idx < priv->s390_options.len, FALSE); + + NM_SET_OUT (out_key, priv->s390_options.arr[idx].name); + NM_SET_OUT (out_value, priv->s390_options.arr[idx].value_str); + return TRUE; } /** @@ -482,10 +532,21 @@ const char * nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting, const char *key) { + NMSettingWiredPrivate *priv; + gssize idx; + g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL); g_return_val_if_fail (key && key[0], NULL); - return g_hash_table_lookup (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key); + priv = NM_SETTING_WIRED_GET_PRIVATE (setting); + + idx = nm_utils_named_value_list_find (priv->s390_options.arr, + priv->s390_options.len, + key, + TRUE); + if (idx < 0) + return NULL; + return priv->s390_options.arr[idx].value_str; } /** @@ -507,14 +568,51 @@ nm_setting_wired_add_s390_option (NMSettingWired *setting, const char *key, const char *value) { + NMSettingWiredPrivate *priv; + gssize idx; + NMUtilsNamedValue *v; + g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE); - g_return_val_if_fail (key && key[0], FALSE); - g_return_val_if_fail (g_strv_contains (valid_s390_opts, key), FALSE); - g_return_val_if_fail (value != NULL, FALSE); + g_return_val_if_fail (value, FALSE); + + if (!valid_s390_opts_check (key)) { + g_return_val_if_fail (key, FALSE); + return FALSE; + } + + priv = NM_SETTING_WIRED_GET_PRIVATE (setting); + + idx = nm_utils_named_value_list_find (priv->s390_options.arr, + priv->s390_options.len, + key, + TRUE); + if (idx < 0) { + gsize dst_idx = ~idx; + + if (priv->s390_options.n_alloc < priv->s390_options.len + 1) { + priv->s390_options.n_alloc = NM_MAX (4, + (priv->s390_options.len + 1) * 2); + priv->s390_options.arr = g_realloc (priv->s390_options.arr, + priv->s390_options.n_alloc * sizeof (NMUtilsNamedValue)); + } + if (dst_idx < priv->s390_options.len) { + memmove (&priv->s390_options.arr[dst_idx + 1], + &priv->s390_options.arr[dst_idx], + (priv->s390_options.len - dst_idx) * sizeof (NMUtilsNamedValue)); + } + priv->s390_options.arr[dst_idx] = (NMUtilsNamedValue) { + .name = g_strdup (key), + .value_str = g_strdup (value), + }; + priv->s390_options.len++; + } else { + v = &priv->s390_options.arr[idx]; + if (nm_streq (value, v->value_str)) + return TRUE; + g_free ((char *) v->value_str); + v->value_str = g_strdup (value); + } - g_hash_table_insert (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, - g_strdup (key), - g_strdup (value)); _notify (setting, PROP_S390_OPTIONS); return TRUE; } @@ -534,20 +632,64 @@ gboolean nm_setting_wired_remove_s390_option (NMSettingWired *setting, const char *key) { - gboolean found; + NMSettingWiredPrivate *priv; + gsize dst_idx; + gssize idx; g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE); - g_return_val_if_fail (key && key[0], FALSE); + g_return_val_if_fail (key, FALSE); - found = g_hash_table_remove (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key); - if (found) - _notify (setting, PROP_S390_OPTIONS); - return found; + priv = NM_SETTING_WIRED_GET_PRIVATE (setting); + + idx = nm_utils_named_value_list_find (priv->s390_options.arr, + priv->s390_options.len, + key, + TRUE); + if (idx < 0) + return FALSE; + + dst_idx = idx; + + g_free ((char *) priv->s390_options.arr[dst_idx].name); + g_free ((char *) priv->s390_options.arr[dst_idx].value_str); + if (dst_idx + 1 != priv->s390_options.len) { + memmove (&priv->s390_options.arr[dst_idx], + &priv->s390_options.arr[dst_idx + 1], + (priv->s390_options.len - dst_idx - 1) * sizeof (NMUtilsNamedValue)); + } + + priv->s390_options.len--; + + _notify (setting, PROP_S390_OPTIONS); + return TRUE; +} + +static void +_s390_options_clear (NMSettingWiredPrivate *priv) +{ + guint i; + + for (i = 0; i < priv->s390_options.len; i++) { + g_free ((char *) priv->s390_options.arr[i].name); + g_free ((char *) priv->s390_options.arr[i].value_str); + } + nm_clear_g_free (&priv->s390_options.arr); + priv->s390_options.len = 0; + priv->s390_options.n_alloc = 0; +} + +void +_nm_setting_wired_clear_s390_options (NMSettingWired *setting) +{ + g_return_if_fail (NM_IS_SETTING_WIRED (setting)); + + _s390_options_clear (NM_SETTING_WIRED_GET_PRIVATE (setting)); } /** * nm_setting_wired_get_valid_s390_options: - * @setting: (allow-none): the #NMSettingWired + * @setting: (allow-none): the #NMSettingWired. This argument is unused + * and you may pass %NULL. * * Returns a list of valid s390 options. * @@ -602,10 +744,8 @@ static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting); - GHashTableIter iter; - const char *key, *value; - int i; GError *local = NULL; + guint i; if (!NM_IN_STRSET (priv->port, NULL, "tp", "aui", "bnc", "mii")) { g_set_error (error, @@ -672,16 +812,19 @@ verify (NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - g_hash_table_iter_init (&iter, priv->s390_options); - while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) { - if ( !g_strv_contains (valid_s390_opts, key) - || value[0] == '\0' - || (strlen (value) > 200)) { + for (i = 0; i < priv->s390_options.len; i++) { + const NMUtilsNamedValue *v = &priv->s390_options.arr[i]; + + nm_assert (v->name); + + if ( !valid_s390_opts_check (v->name) + || v->value_str[0] == '\0' + || strlen (v->value_str) > 200) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("invalid '%s' or its value '%s'"), - key, value); + v->name, v->value_str); g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_OPTIONS); return FALSE; } @@ -802,6 +945,8 @@ get_property (GObject *object, guint prop_id, { NMSettingWired *setting = NM_SETTING_WIRED (object); NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting); + GHashTable *hash; + guint i; switch (prop_id) { case PROP_PORT: @@ -838,7 +983,16 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_wired_get_s390_nettype (setting)); break; case PROP_S390_OPTIONS: - g_value_take_boxed (value, _nm_utils_copy_strdict (priv->s390_options)); + hash = g_hash_table_new_full (nm_str_hash, + g_str_equal, + g_free, + g_free); + for (i = 0; i < priv->s390_options.len; i++) { + g_hash_table_insert (hash, + g_strdup (priv->s390_options.arr[i].name), + g_strdup (priv->s390_options.arr[i].value_str)); + } + g_value_take_boxed (value, hash); break; case PROP_WAKE_ON_LAN: g_value_set_uint (value, priv->wol); @@ -859,7 +1013,6 @@ set_property (GObject *object, guint prop_id, NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (object); const char * const *blacklist; const char *mac; - int i; switch (prop_id) { case PROP_PORT: @@ -894,6 +1047,8 @@ set_property (GObject *object, guint prop_id, blacklist = g_value_get_boxed (value); g_array_set_size (priv->mac_address_blacklist, 0); if (blacklist && *blacklist) { + guint i; + for (i = 0; blacklist[i]; i++) { mac = _nm_utils_hwaddr_canonical_or_invalid (blacklist[i], ETH_ALEN); g_array_append_val (priv->mac_address_blacklist, mac); @@ -913,8 +1068,63 @@ set_property (GObject *object, guint prop_id, priv->s390_nettype = g_value_dup_string (value); break; case PROP_S390_OPTIONS: - g_hash_table_unref (priv->s390_options); - priv->s390_options = _nm_utils_copy_strdict (g_value_get_boxed (value)); + { + GHashTable *hash; + + _s390_options_clear (priv); + + hash = g_value_get_boxed (value); + + priv->s390_options.n_alloc = hash ? g_hash_table_size (hash) : 0u; + + if (priv->s390_options.n_alloc > 0) { + gboolean invalid_content = FALSE; + GHashTableIter iter; + const char *key; + const char *val; + guint i, j; + + priv->s390_options.arr = g_new (NMUtilsNamedValue, priv->s390_options.n_alloc); + g_hash_table_iter_init (&iter, hash); + while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &val)) { + if (!key || !val) { + invalid_content = TRUE; + continue; + } + nm_assert (priv->s390_options.len < priv->s390_options.n_alloc); + priv->s390_options.arr[priv->s390_options.len] = (NMUtilsNamedValue) { + .name = g_strdup (key), + .value_str = g_strdup (val), + }; + priv->s390_options.len++; + } + if (priv->s390_options.len > 1) { + nm_utils_named_value_list_sort (priv->s390_options.arr, + priv->s390_options.len, + NULL, + NULL); + /* prune duplicate keys. This is only possible if @hash does not use + * g_str_equal() as compare function (which would be a bug). + * Still, handle this, because we use later binary sort and rely + * on unique names. One bug here, should not bork the remainder + * of the program. */ + j = 1; + for (i = 1; i < priv->s390_options.len; i++) { + if (nm_streq (priv->s390_options.arr[j - 1].name, + priv->s390_options.arr[i].name)) { + g_free ((char *) priv->s390_options.arr[i].name); + g_free ((char *) priv->s390_options.arr[i].value_str); + invalid_content = TRUE; + continue; + } + priv->s390_options.arr[j++] = priv->s390_options.arr[i]; + } + priv->s390_options.len = j; + } + + g_return_if_fail (!invalid_content); + } + } break; case PROP_WAKE_ON_LAN: priv->wol = g_value_get_uint (value); @@ -936,8 +1146,6 @@ nm_setting_wired_init (NMSettingWired *setting) { NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting); - priv->s390_options = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); - /* We use GArray rather than GPtrArray so it will automatically be NULL-terminated */ priv->mac_address_blacklist = g_array_new (TRUE, FALSE, sizeof (char *)); g_array_set_clear_func (priv->mac_address_blacklist, (GDestroyNotify) clear_blacklist_item); @@ -965,7 +1173,7 @@ finalize (GObject *object) g_free (priv->duplex); g_free (priv->s390_nettype); - g_hash_table_destroy (priv->s390_options); + _s390_options_clear (priv); g_free (priv->device_mac_address); g_free (priv->cloned_mac_address); diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 04d5b1b558..9a1430f6c7 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -851,8 +851,7 @@ _nm_utils_strdict_to_dbus (const GValue *prop_value) } while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)); nm_assert (i == len); - g_qsort_with_data (idx, len, sizeof (idx[0]), - nm_utils_named_entry_cmp_with_data, NULL); + nm_utils_named_value_list_sort (idx, len, NULL, NULL); for (i = 0; i < len; i++) g_variant_builder_add (&builder, "{ss}", idx[i].name, idx[i].value_str); diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c index 03100a039b..8784a27470 100644 --- a/libnm-core/tests/test-setting.c +++ b/libnm-core/tests/test-setting.c @@ -2108,6 +2108,105 @@ test_tc_config_dbus (void) /*****************************************************************************/ +static void +_rndt_wired_add_s390_options (NMSettingWired *s_wired, + char **out_keyfile_entries) +{ + gsize n_opts; + gsize i, j; + const char *const*option_names; + gs_free const char **opt_keys = NULL; + gs_strfreev char **opt_vals = NULL; + gs_free bool *opt_found = NULL; + GString *keyfile_entries; + nm_auto_free_gstring GString *str_tmp = NULL; + + option_names = nm_setting_wired_get_valid_s390_options (nmtst_get_rand_bool () ? NULL : s_wired); + + n_opts = NM_PTRARRAY_LEN (option_names); + opt_keys = g_new (const char *, (n_opts + 1)); + nmtst_rand_perm (NULL, opt_keys, option_names, sizeof (const char *), n_opts); + n_opts = nmtst_get_rand_int () % (n_opts + 1); + opt_keys[n_opts] = NULL; + + opt_vals = g_new0 (char *, n_opts + 1); + opt_found = g_new0 (bool, n_opts + 1); + for (i = 0; i < n_opts; i++) { + guint p = nmtst_get_rand_int () % 1000; + + if (p < 200) + opt_vals[i] = nm_strdup_int (i); + else { + opt_vals[i] = g_strdup_printf ("%s%s%s%s-%zu", + ((p % 5) % 2) ? "\n" : "", + ((p % 7) % 2) ? "\t" : "", + ((p % 11) % 2) ? "x" : "", + ((p % 13) % 2) ? "=" : "", + i); + } + } + + if (nmtst_get_rand_bool ()) { + gs_unref_hashtable GHashTable *hash = NULL; + + hash = g_hash_table_new (nm_str_hash, g_str_equal); + for (i = 0; i < n_opts; i++) + g_hash_table_insert (hash, (char *) opt_keys[i], opt_vals[i]); + g_object_set (s_wired, + NM_SETTING_WIRED_S390_OPTIONS, + hash, + NULL); + } else { + _nm_setting_wired_clear_s390_options (s_wired); + for (i = 0; i < n_opts; i++) { + if (!nm_setting_wired_add_s390_option (s_wired, opt_keys[i], opt_vals[i])) + g_assert_not_reached (); + } + } + + g_assert_cmpint (nm_setting_wired_get_num_s390_options (s_wired), ==, n_opts); + + keyfile_entries = g_string_new (NULL); + str_tmp = g_string_new (NULL); + if (n_opts > 0) + g_string_append_printf (keyfile_entries, "[ethernet-s390-options]\n"); + for (i = 0; i < n_opts; i++) { + gssize idx; + const char *k, *v; + + nm_setting_wired_get_s390_option (s_wired, i, &k, &v); + g_assert (k); + g_assert (v); + + idx = nm_utils_strv_find_first ((char **) opt_keys, n_opts, k); + g_assert (idx >= 0); + g_assert (!opt_found[idx]); + opt_found[idx] = TRUE; + g_assert_cmpstr (opt_keys[idx], ==, k); + g_assert_cmpstr (opt_vals[idx], ==, v); + + g_string_truncate (str_tmp, 0); + for (j = 0; v[j] != '\0'; j++) { + if (v[j] == '\n') + g_string_append (str_tmp, "\\n"); + else if (v[j] == '\t') + g_string_append (str_tmp, "\\t"); + else + g_string_append_c (str_tmp, v[j]); + } + + g_string_append_printf (keyfile_entries, + "%s=%s\n", + k, + str_tmp->str); + } + for (i = 0; i < n_opts; i++) + g_assert (opt_found[i]); + if (n_opts > 0) + g_string_append_printf (keyfile_entries, "\n"); + *out_keyfile_entries = g_string_free (keyfile_entries, FALSE); +} + static GPtrArray * _rndt_wg_peers_create (void) { @@ -2385,6 +2484,7 @@ test_roundtrip_conversion (gconstpointer test_data) int is_ipv4; guint i; gboolean success; + gs_free char *s390_keyfile_entries = NULL; switch (MODE) { case 0: @@ -2403,6 +2503,8 @@ test_roundtrip_conversion (gconstpointer test_data) ETH_MTU, NULL); + _rndt_wired_add_s390_options (s_eth, &s390_keyfile_entries); + g_ptr_array_add (kf_data_arr, g_strdup_printf ("[connection]\n" "id=%s\n" @@ -2415,6 +2517,7 @@ test_roundtrip_conversion (gconstpointer test_data) "mac-address-blacklist=\n" "%s" /* mtu */ "\n" + "%s" /* [ethernet-s390-options] */ "[ipv4]\n" "dns-search=\n" "method=auto\n" @@ -2429,7 +2532,8 @@ test_roundtrip_conversion (gconstpointer test_data) INTERFACE_NAME, (ETH_MTU != 0) ? nm_sprintf_bufa (100, "mtu=%u\n", ETH_MTU) - : "")); + : "", + s390_keyfile_entries)); g_ptr_array_add (kf_data_arr, g_strdup_printf ("[connection]\n" @@ -2443,6 +2547,7 @@ test_roundtrip_conversion (gconstpointer test_data) "mac-address-blacklist=\n" "%s" /* mtu */ "\n" + "%s" /* [ethernet-s390-options] */ "[ipv4]\n" "dns-search=\n" "method=auto\n" @@ -2457,7 +2562,8 @@ test_roundtrip_conversion (gconstpointer test_data) INTERFACE_NAME, (ETH_MTU != 0) ? nm_sprintf_bufa (100, "mtu=%d\n", (int) ETH_MTU) - : "")); + : "", + s390_keyfile_entries)); break; @@ -2703,6 +2809,9 @@ test_roundtrip_conversion (gconstpointer test_data) g_assert_cmpint (nm_setting_wired_get_mtu (s_eth), ==, ETH_MTU); g_assert_cmpint (nm_setting_wired_get_mtu (s_eth2), ==, ETH_MTU); + + g_assert_cmpint (nm_setting_wired_get_num_s390_options (s_eth2), ==, nm_setting_wired_get_num_s390_options (s_eth)); + break; case 1: diff --git a/po/POTFILES.in b/po/POTFILES.in index dcce693109..fdae23ee3f 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -138,6 +138,7 @@ libnm/nm-vpn-plugin-old.c libnm/nm-vpn-service-plugin.c data/org.freedesktop.NetworkManager.policy.in.in shared/nm-glib-aux/nm-shared-utils.c +shared/nm-libnm-core-aux/nm-libnm-core-aux.c src/NetworkManagerUtils.c src/main.c src/main-utils.c diff --git a/shared/meson.build b/shared/meson.build index 380758f00f..ba4c28c3fd 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -287,18 +287,21 @@ libnm_systemd_shared_no_logging_dep = declare_dependency( ############################################################################### -test_shared_general = executable( - 'nm-utils/tests/test-shared-general', - [ 'nm-utils/tests/test-shared-general.c', ], - c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)', +exe = executable( + 'nm-utils/tests/test-shared-general', + [ 'nm-utils/tests/test-shared-general.c' ], + c_args: [ + '-DNETWORKMANAGER_COMPILATION_TEST', + '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)', + ], + dependencies: [ + shared_nm_glib_aux_dep, + shared_c_siphash_dep, ], - dependencies: shared_nm_glib_aux_dep, - link_with: shared_c_siphash, ) + test( - 'shared/nm-utils/test-shared-general', - test_script, - args: test_args + [test_shared_general.full_path()] + 'shared/nm-utils/tests/test-shared-general', + test_script, + args: test_args + [exe.full_path()] ) diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index cf08a77fde..94650705be 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -2130,6 +2130,8 @@ nm_utils_fd_read_loop_exact (int fd, void *buf, size_t nbytes, bool do_poll) return 0; } +/*****************************************************************************/ + NMUtilsNamedValue * nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len) { @@ -2154,15 +2156,106 @@ nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len) values[i].name = NULL; values[i].value_ptr = NULL; - if (len > 1) { - g_qsort_with_data (values, len, sizeof (values[0]), - nm_utils_named_entry_cmp_with_data, NULL); - } + nm_utils_named_value_list_sort (values, len, NULL, NULL); NM_SET_OUT (out_len, len); return values; } +gssize +nm_utils_named_value_list_find (const NMUtilsNamedValue *arr, + gsize len, + const char *name, + gboolean sorted) +{ + gsize i; + + nm_assert (name); + +#if NM_MORE_ASSERTS > 5 + { + for (i = 0; i < len; i++) { + const NMUtilsNamedValue *v = &arr[i]; + + nm_assert (v->name); + if ( sorted + && i > 0) + nm_assert (strcmp (arr[i - 1].name, v->name) < 0); + } + } + + nm_assert ( !sorted + || nm_utils_named_value_list_is_sorted (arr, len, FALSE, NULL, NULL)); +#endif + + if (sorted) { + return nm_utils_array_find_binary_search (arr, + sizeof (NMUtilsNamedValue), + len, + &name, + nm_strcmp_p_with_data, + NULL); + } + for (i = 0; i < len; i++) { + if (nm_streq (arr[i].name, name)) + return i; + } + return ~((gssize) len); +} + +gboolean +nm_utils_named_value_list_is_sorted (const NMUtilsNamedValue *arr, + gsize len, + gboolean accept_duplicates, + GCompareDataFunc compare_func, + gpointer user_data) +{ + gsize i; + int c_limit; + + if (len == 0) + return TRUE; + + g_return_val_if_fail (arr, FALSE); + + if (!compare_func) + compare_func = nm_strcmp_p_with_data; + + c_limit = accept_duplicates ? 0 : -1; + + for (i = 1; i < len; i++) { + int c; + + c = compare_func (&arr[i - 1], &arr[i], user_data); + if (c > c_limit) + return FALSE; + } + return TRUE; +} + +void +nm_utils_named_value_list_sort (NMUtilsNamedValue *arr, + gsize len, + GCompareDataFunc compare_func, + gpointer user_data) +{ + if (len == 0) + return; + + g_return_if_fail (arr); + + if (len == 1) + return; + + g_qsort_with_data (arr, + len, + sizeof (NMUtilsNamedValue), + compare_func ?: nm_strcmp_p_with_data, + user_data); +} + +/*****************************************************************************/ + gpointer * nm_utils_hash_keys_to_array (GHashTable *hash, GCompareDataFunc compare_func, diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index af3c2f830b..eea54e7143 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -906,11 +906,26 @@ typedef struct { }; } NMUtilsNamedValue; -#define nm_utils_named_entry_cmp nm_strcmp_p -#define nm_utils_named_entry_cmp_with_data nm_strcmp_p_with_data - NMUtilsNamedValue *nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len); +gssize nm_utils_named_value_list_find (const NMUtilsNamedValue *arr, + gsize len, + const char *name, + gboolean sorted); + +gboolean nm_utils_named_value_list_is_sorted (const NMUtilsNamedValue *arr, + gsize len, + gboolean accept_duplicates, + GCompareDataFunc compare_func, + gpointer user_data); + +void nm_utils_named_value_list_sort (NMUtilsNamedValue *arr, + gsize len, + GCompareDataFunc compare_func, + gpointer user_data); + +/*****************************************************************************/ + gpointer *nm_utils_hash_keys_to_array (GHashTable *hash, GCompareDataFunc compare_func, gpointer user_data, diff --git a/shared/nm-libnm-core-aux/nm-libnm-core-aux.c b/shared/nm-libnm-core-aux/nm-libnm-core-aux.c new file mode 100644 index 0000000000..7ddf326ac1 --- /dev/null +++ b/shared/nm-libnm-core-aux/nm-libnm-core-aux.c @@ -0,0 +1,372 @@ +/* NetworkManager -- Network link manager + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * (C) Copyright 2019 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-libnm-core-aux.h" + +#include "nm-libnm-core-intern/nm-libnm-core-utils.h" + +/*****************************************************************************/ + +typedef enum { + KEY_TYPE_STRING, + KEY_TYPE_INT, + KEY_TYPE_BOOL, +} KeyType; + +typedef struct { + const char *str_val; + union { + int vint; + bool vbool; + } typ_val; +} ParseData; + +typedef struct { + const char *name; + NMTeamLinkWatcherType watcher_type; + KeyType key_type; + union { + int (*fint) (NMTeamLinkWatcher *watcher); + gboolean (*fbool) (NMTeamLinkWatcher *watcher); + const char *(*fstring) (NMTeamLinkWatcher *watcher); + } get_fcn; + union { + int vint; + bool vbool; + } def_val; +} TeamLinkWatcherKeyInfo; + +static gboolean +_team_link_watcher_validate_active (NMTeamLinkWatcher *watcher) +{ + return NM_FLAGS_HAS (nm_team_link_watcher_get_flags (watcher), NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE); +} + +static gboolean +_team_link_watcher_validate_inactive (NMTeamLinkWatcher *watcher) +{ + return NM_FLAGS_HAS (nm_team_link_watcher_get_flags (watcher), NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE); +} + +static gboolean +_team_link_watcher_send_always (NMTeamLinkWatcher *watcher) +{ + return NM_FLAGS_HAS (nm_team_link_watcher_get_flags (watcher), NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS); +} + +static const TeamLinkWatcherKeyInfo _team_link_watcher_key_infos[_NM_TEAM_LINK_WATCHER_KEY_NUM] = { + +#define _KEY_INFO(key_id, _name, _watcher_type, _key_type, ...) \ + [key_id] = { .name = ""_name"", .watcher_type = (_watcher_type), .key_type = _key_type, ##__VA_ARGS__ } + + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_NAME, "name", NM_TEAM_LINK_WATCHER_TYPE_ETHTOOL | NM_TEAM_LINK_WATCHER_TYPE_NSNAPING | NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_STRING, .get_fcn.fstring = nm_team_link_watcher_get_name, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_DELAY_UP, "delay-up", NM_TEAM_LINK_WATCHER_TYPE_ETHTOOL, KEY_TYPE_INT, .get_fcn.fint = nm_team_link_watcher_get_delay_up, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_DELAY_DOWN, "delay-down", NM_TEAM_LINK_WATCHER_TYPE_ETHTOOL, KEY_TYPE_INT, .get_fcn.fint = nm_team_link_watcher_get_delay_down, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_INIT_WAIT, "init-wait", NM_TEAM_LINK_WATCHER_TYPE_NSNAPING | NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_INT, .get_fcn.fint = nm_team_link_watcher_get_init_wait, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_INTERVAL, "interval", NM_TEAM_LINK_WATCHER_TYPE_NSNAPING | NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_INT, .get_fcn.fint = nm_team_link_watcher_get_interval, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_MISSED_MAX, "missed-max", NM_TEAM_LINK_WATCHER_TYPE_NSNAPING | NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_INT, .get_fcn.fint = nm_team_link_watcher_get_missed_max, .def_val.vint = 3, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_TARGET_HOST, "target-host", NM_TEAM_LINK_WATCHER_TYPE_NSNAPING | NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_STRING, .get_fcn.fstring = nm_team_link_watcher_get_target_host, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_VLANID, "vlanid", NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_INT, .get_fcn.fint = nm_team_link_watcher_get_vlanid, .def_val.vint = -1, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_SOURCE_HOST, "source-host", NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_STRING, .get_fcn.fstring = nm_team_link_watcher_get_source_host, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_VALIDATE_ACTIVE, "validate-active", NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_BOOL, .get_fcn.fbool = _team_link_watcher_validate_active, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_VALIDATE_INACTIVE, "validate-inactive", NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_BOOL, .get_fcn.fbool = _team_link_watcher_validate_inactive, ), + _KEY_INFO (NM_TEAM_LINK_WATCHER_KEY_SEND_ALWAYS, "send-always", NM_TEAM_LINK_WATCHER_TYPE_ARPING, KEY_TYPE_BOOL, .get_fcn.fbool = _team_link_watcher_send_always, ), + +}; + +static NMTeamLinkWatcherType +_team_link_watcher_get_watcher_type_from_name (const char *name) +{ + if (name) { + if (nm_streq (name, NM_TEAM_LINK_WATCHER_ETHTOOL)) + return NM_TEAM_LINK_WATCHER_TYPE_ETHTOOL; + if (nm_streq (name, NM_TEAM_LINK_WATCHER_NSNA_PING)) + return NM_TEAM_LINK_WATCHER_TYPE_NSNAPING; + if (nm_streq (name, NM_TEAM_LINK_WATCHER_ARP_PING)) + return NM_TEAM_LINK_WATCHER_TYPE_ARPING; + } + return NM_TEAM_LINK_WATCHER_TYPE_NONE; +} + +static const char * +_parse_data_get_str (const ParseData parse_data[static _NM_TEAM_LINK_WATCHER_KEY_NUM], + NMTeamLinkWatcherKeyId key_id) +{ + nm_assert (_NM_INT_NOT_NEGATIVE (key_id) && key_id < _NM_TEAM_LINK_WATCHER_KEY_NUM); + nm_assert (_team_link_watcher_key_infos[key_id].key_type == KEY_TYPE_STRING); + + return parse_data[key_id].str_val; +} + +static int +_parse_data_get_int (const ParseData parse_data[static _NM_TEAM_LINK_WATCHER_KEY_NUM], + NMTeamLinkWatcherKeyId key_id) +{ + nm_assert (_NM_INT_NOT_NEGATIVE (key_id) && key_id < _NM_TEAM_LINK_WATCHER_KEY_NUM); + nm_assert (_team_link_watcher_key_infos[key_id].key_type == KEY_TYPE_INT); + + if (parse_data[key_id].str_val) + return parse_data[key_id].typ_val.vint; + return _team_link_watcher_key_infos[key_id].def_val.vint; +} + +static int +_parse_data_get_bool (const ParseData parse_data[static _NM_TEAM_LINK_WATCHER_KEY_NUM], + NMTeamLinkWatcherKeyId key_id) +{ + nm_assert (_NM_INT_NOT_NEGATIVE (key_id) && key_id < _NM_TEAM_LINK_WATCHER_KEY_NUM); + nm_assert (_team_link_watcher_key_infos[key_id].key_type == KEY_TYPE_BOOL); + + if (parse_data[key_id].str_val) + return parse_data[key_id].typ_val.vbool; + return _team_link_watcher_key_infos[key_id].def_val.vbool; +} + +char * +nm_utils_team_link_watcher_to_string (NMTeamLinkWatcher *watcher) +{ + nm_auto_free_gstring GString *str = NULL; + const char *name; + NMTeamLinkWatcherType watcher_type; + NMTeamLinkWatcherKeyId key_id; + + if (!watcher) + return NULL; + + str = g_string_new (NULL); + + name = nm_team_link_watcher_get_name (watcher); + g_string_append_printf (str, "name=%s", name ?: ""); + + watcher_type = _team_link_watcher_get_watcher_type_from_name (name); + + for (key_id = 0; key_id < _NM_TEAM_LINK_WATCHER_KEY_NUM; key_id++) { + const TeamLinkWatcherKeyInfo *info = &_team_link_watcher_key_infos[key_id]; + const char *vstr; + int vint; + bool vbool; + + nm_assert (info->name && info->name && NM_STRCHAR_ALL (info->name, ch,((ch >= 'a' && ch <= 'z') || NM_IN_SET (ch, '-')))); + nm_assert (NM_IN_SET (info->key_type, KEY_TYPE_STRING, + KEY_TYPE_INT, + KEY_TYPE_BOOL)); + + if (key_id == NM_TEAM_LINK_WATCHER_KEY_NAME) + continue; + + if (!NM_FLAGS_ALL (info->watcher_type, watcher_type)) + continue; + + switch (info->key_type) { + case KEY_TYPE_STRING: + vstr = info->get_fcn.fstring (watcher); + if (vstr) { + g_string_append_printf (nm_gstring_add_space_delimiter (str), + "%s=%s", info->name, vstr); + } + break; + case KEY_TYPE_INT: + vint = info->get_fcn.fint (watcher); + if (vint != info->def_val.vint) { + g_string_append_printf (nm_gstring_add_space_delimiter (str), + "%s=%d", info->name, vint); + } + break; + case KEY_TYPE_BOOL: + vbool = info->get_fcn.fbool (watcher); + if (vbool != info->def_val.vbool) { + g_string_append_printf (nm_gstring_add_space_delimiter (str), + "%s=%s", info->name, vbool ? "true" : "false"); + } + break; + } + } + + return g_string_free (g_steal_pointer (&str), FALSE); +} + +NMTeamLinkWatcher * +nm_utils_team_link_watcher_from_string (const char *str, + GError **error) +{ + gs_free const char **tokens = NULL; + ParseData parse_data[_NM_TEAM_LINK_WATCHER_KEY_NUM] = { }; + NMTeamLinkWatcherType watcher_type; + NMTeamLinkWatcherKeyId key_id; + gsize i_token; + NMTeamLinkWatcher *watcher; + int errsv; + + g_return_val_if_fail (str, NULL); + g_return_val_if_fail (!error || !*error, NULL); + + tokens = nm_utils_escaped_tokens_split (str, NM_ASCII_SPACES); + if (!tokens) { + g_set_error (error, 1, 0, "'%s' is not valid", str); + return NULL; + } + + for (i_token = 0; tokens[i_token]; i_token++) { + const TeamLinkWatcherKeyInfo *info; + const char *key = tokens[i_token]; + const char *val; + + val = strchr (key, '='); + if (!val) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("'%s' is not valid: properties should be specified as 'key=value'"), + key); + return NULL; + } + ((char *) val)[0] = '\0'; + val++; + + for (key_id = 0; key_id < _NM_TEAM_LINK_WATCHER_KEY_NUM; key_id++) { + info = &_team_link_watcher_key_infos[key_id]; + if (nm_streq (key, info->name)) + break; + } + + if (key_id == _NM_TEAM_LINK_WATCHER_KEY_NUM) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("'%s' is not a valid key"), key); + return NULL; + } + + if (parse_data[key_id].str_val) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("duplicate key '%s'"), key); + return NULL; + } + + parse_data[key_id].str_val = val; + + if (info->key_type == KEY_TYPE_INT) { + gint64 v64; + + v64 = _nm_utils_ascii_str_to_int64 (val, 10, G_MININT, G_MAXINT, G_MAXINT64); + if ( v64 == G_MAXINT64 + && ((errsv = errno) != 0)) { + if (errsv == ERANGE) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("number for '%s' is out of range"), key); + } else { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("value for '%s' must be a number"), key); + } + return NULL; + } + parse_data[key_id].typ_val.vint = v64; + } else if (info->key_type == KEY_TYPE_BOOL) { + int vbool; + + vbool = _nm_utils_ascii_str_to_bool (val, -1); + if (vbool == -1) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("value for '%s' must be a boolean"), key); + return NULL; + } + parse_data[key_id].typ_val.vbool = vbool; + } + } + + if (!parse_data[NM_TEAM_LINK_WATCHER_KEY_NAME].str_val) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("missing 'name' attribute")); + return NULL; + } + + watcher_type = _team_link_watcher_get_watcher_type_from_name (parse_data[NM_TEAM_LINK_WATCHER_KEY_NAME].str_val); + if (watcher_type == NM_TEAM_LINK_WATCHER_TYPE_NONE) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("invalid 'name' \"%s\""), + parse_data[NM_TEAM_LINK_WATCHER_KEY_NAME].str_val); + return NULL; + } + + for (key_id = 0; key_id < _NM_TEAM_LINK_WATCHER_KEY_NUM; key_id++) { + const TeamLinkWatcherKeyInfo *info = &_team_link_watcher_key_infos[key_id]; + + if (!parse_data[key_id].str_val) + continue; + if (!NM_FLAGS_ALL (info->watcher_type, watcher_type)) { + nm_utils_error_set (error, NM_UTILS_ERROR_UNKNOWN, + _("attribute '%s' is invalid for \"%s\""), + info->name, + parse_data[NM_TEAM_LINK_WATCHER_KEY_NAME].str_val); + return NULL; + } + } + + switch (watcher_type) { + case NM_TEAM_LINK_WATCHER_TYPE_ETHTOOL: + watcher = nm_team_link_watcher_new_ethtool (_parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_DELAY_UP), + _parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_DELAY_DOWN), + error); + break; + case NM_TEAM_LINK_WATCHER_TYPE_NSNAPING: + watcher = nm_team_link_watcher_new_nsna_ping (_parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_INIT_WAIT), + _parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_INTERVAL), + _parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_MISSED_MAX), + _parse_data_get_str (parse_data, NM_TEAM_LINK_WATCHER_KEY_TARGET_HOST), + error); + break; + default: + nm_assert (watcher_type == NM_TEAM_LINK_WATCHER_TYPE_ARPING); + watcher = nm_team_link_watcher_new_arp_ping2 (_parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_INIT_WAIT), + _parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_INTERVAL), + _parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_MISSED_MAX), + _parse_data_get_int (parse_data, NM_TEAM_LINK_WATCHER_KEY_VLANID), + _parse_data_get_str (parse_data, NM_TEAM_LINK_WATCHER_KEY_TARGET_HOST), + _parse_data_get_str (parse_data, NM_TEAM_LINK_WATCHER_KEY_SOURCE_HOST), + ( NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE + | (_parse_data_get_bool (parse_data, NM_TEAM_LINK_WATCHER_KEY_VALIDATE_ACTIVE) ? NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE : NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE) + | (_parse_data_get_bool (parse_data, NM_TEAM_LINK_WATCHER_KEY_VALIDATE_INACTIVE) ? NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE : NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE) + | (_parse_data_get_bool (parse_data, NM_TEAM_LINK_WATCHER_KEY_SEND_ALWAYS) ? NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS : NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE) + ), + error); + break; + } + +#if NM_MORE_ASSERTS > 5 + { + gs_free char *str2 = NULL; + nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher2 = NULL; + static _nm_thread_local int recursive; + + nm_assert (watcher); + if (recursive == 0) { + recursive = 1; + str2 = nm_utils_team_link_watcher_to_string (watcher); + nm_assert (str2); + watcher2 = nm_utils_team_link_watcher_from_string (str2, NULL); + nm_assert (watcher2); + nm_assert (nm_team_link_watcher_equal (watcher, watcher2)); + nm_assert (nm_team_link_watcher_equal (watcher2, watcher)); + nm_assert (recursive == 1); + recursive = 0; + } + } +#endif + + return watcher; +} diff --git a/shared/nm-libnm-core-aux/nm-libnm-core-aux.h b/shared/nm-libnm-core-aux/nm-libnm-core-aux.h new file mode 100644 index 0000000000..3b7d86d1c8 --- /dev/null +++ b/shared/nm-libnm-core-aux/nm-libnm-core-aux.h @@ -0,0 +1,54 @@ +/* NetworkManager -- Network link manager + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * (C) Copyright 2019 Red Hat, Inc. + */ + +#ifndef __NM_LIBNM_CORE_AUX_H__ +#define __NM_LIBNM_CORE_AUX_H__ + +#include "nm-setting-team.h" + +typedef enum { + NM_TEAM_LINK_WATCHER_TYPE_NONE = 0, + NM_TEAM_LINK_WATCHER_TYPE_ETHTOOL = (1u << 0), + NM_TEAM_LINK_WATCHER_TYPE_NSNAPING = (1u << 1), + NM_TEAM_LINK_WATCHER_TYPE_ARPING = (1u << 2), +} NMTeamLinkWatcherType; + +typedef enum { + NM_TEAM_LINK_WATCHER_KEY_NAME, + NM_TEAM_LINK_WATCHER_KEY_DELAY_UP, + NM_TEAM_LINK_WATCHER_KEY_DELAY_DOWN, + NM_TEAM_LINK_WATCHER_KEY_INIT_WAIT, + NM_TEAM_LINK_WATCHER_KEY_INTERVAL, + NM_TEAM_LINK_WATCHER_KEY_MISSED_MAX, + NM_TEAM_LINK_WATCHER_KEY_TARGET_HOST, + NM_TEAM_LINK_WATCHER_KEY_VLANID, + NM_TEAM_LINK_WATCHER_KEY_SOURCE_HOST, + NM_TEAM_LINK_WATCHER_KEY_VALIDATE_ACTIVE, + NM_TEAM_LINK_WATCHER_KEY_VALIDATE_INACTIVE, + NM_TEAM_LINK_WATCHER_KEY_SEND_ALWAYS, + _NM_TEAM_LINK_WATCHER_KEY_NUM, +} NMTeamLinkWatcherKeyId; + +char *nm_utils_team_link_watcher_to_string (NMTeamLinkWatcher *watcher); + +NMTeamLinkWatcher *nm_utils_team_link_watcher_from_string (const char *str, + GError **error); + +#endif /* __NM_LIBNM_CORE_AUX_H__ */ diff --git a/shared/nm-utils/tests/test-shared-general.c b/shared/nm-utils/tests/test-shared-general.c index 83cffd7f3d..ddf1ef7823 100644 --- a/shared/nm-utils/tests/test-shared-general.c +++ b/shared/nm-utils/tests/test-shared-general.c @@ -461,4 +461,3 @@ int main (int argc, char **argv) return g_test_run (); } - diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 170c7e2852..ff1c482f47 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -1575,11 +1575,11 @@ update_connection (NMDevice *device, NMConnection *connection) g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, priv->subchannels_dbus, NULL); if (priv->s390_nettype) g_object_set (s_wired, NM_SETTING_WIRED_S390_NETTYPE, priv->s390_nettype, NULL); + + _nm_setting_wired_clear_s390_options (s_wired); g_hash_table_iter_init (&iter, priv->s390_options); - while (g_hash_table_iter_next (&iter, &key, &value)) { + while (g_hash_table_iter_next (&iter, &key, &value)) nm_setting_wired_add_s390_option (s_wired, (const char *) key, (const char *) value); - } - } static void diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index e5423b181e..286ee58abc 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -4512,7 +4512,7 @@ make_wired_setting (shvarFile *ifcfg, gs_free const char **options = NULL; gsize i; - options = nm_utils_strsplit_set_with_empty (value, " "); + options = nm_utils_escaped_tokens_split (value, NM_ASCII_SPACES); for (i = 0; options && options[i]; i++) { const char *line = options[i]; const char *equals; diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index 80b1bffe1f..e9a023c5b9 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -1118,14 +1118,22 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) nm_setting_wired_get_s390_option (s_wired, i, &s390_key, &s390_val); /* portname is handled separately */ - if (!strcmp (s390_key, "portname") || !strcmp (s390_key, "ctcprot")) + if (NM_IN_STRSET (s390_key, "portname", "ctcprot")) continue; + if (strchr (s390_key, '=')) { + /* this key cannot be expressed. But after all, it's not valid anyway + * and the connection shouldn't even verify. */ + continue; + } + if (!tmp) tmp = g_string_sized_new (30); else g_string_append_c (tmp, ' '); - g_string_append_printf (tmp, "%s=%s", s390_key, s390_val); + nm_utils_escaped_tokens_escape_gstr (s390_key, NM_ASCII_SPACES, tmp); + g_string_append_c (tmp, '='); + nm_utils_escaped_tokens_escape_gstr (s390_val, NM_ASCII_SPACES, tmp); } if (tmp) svSetValueStr (ifcfg, "OPTIONS", tmp->str); |