summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-03-27 16:32:39 +0100
committerThomas Haller <thaller@redhat.com>2019-03-27 16:32:39 +0100
commit768001473279d2ce70599ee1838eb0d594b51223 (patch)
tree4830a6eb9bcfe6317b2d395a3ffb3d54ac474b37
parent02ae0fd00a635a4aaf3ea9c98e7a2c308e971913 (diff)
parent3f9347745b30e6182c3b3c768f78295d72c47a93 (diff)
downloadNetworkManager-768001473279d2ce70599ee1838eb0d594b51223.tar.gz
libnm,core: merge branch 'th/routing-rule-pt2'
https://github.com/NetworkManager/NetworkManager/pull/321
-rw-r--r--Makefile.am1
-rw-r--r--clients/cli/settings.c7
-rw-r--r--clients/common/nm-meta-setting-desc.c133
-rw-r--r--clients/common/nm-meta-setting-desc.h5
-rw-r--r--clients/tests/test-client.check-on-disk/test_003.expected636
-rw-r--r--clients/tests/test-client.check-on-disk/test_004.expected900
-rw-r--r--libnm-core/nm-core-internal.h43
-rw-r--r--libnm-core/nm-keyfile.c490
-rw-r--r--libnm-core/nm-setting-ip-config.c2471
-rw-r--r--libnm-core/nm-setting-ip-config.h164
-rw-r--r--libnm-core/nm-utils.c23
-rw-r--r--libnm-core/tests/test-general.c1
-rw-r--r--libnm-core/tests/test-setting.c295
-rw-r--r--libnm/libnm.ver51
-rw-r--r--shared/nm-libnm-core-utils.h3
-rw-r--r--shared/nm-utils/nm-shared-utils.c53
-rw-r--r--shared/nm-utils/nm-shared-utils.h12
-rw-r--r--src/NetworkManagerUtils.c44
-rw-r--r--src/NetworkManagerUtils.h8
-rw-r--r--src/devices/nm-device.c86
-rw-r--r--src/platform/nm-linux-platform.c2
-rw-r--r--src/platform/nmp-rules-manager.c15
-rw-r--r--src/platform/nmp-rules-manager.h3
-rw-r--r--src/platform/tests/test-route.c8
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c98
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c59
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.c75
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.h8
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Routing_Rules.cexpected19
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c96
30 files changed, 4996 insertions, 813 deletions
diff --git a/Makefile.am b/Makefile.am
index a8353656da..de3d25e308 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2729,6 +2729,7 @@ EXTRA_DIST += \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Bridge_Component.cexpected \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Permissions.cexpected \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Proxy_Basic.cexpected \
+ src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Routing_Rules.cexpected \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Team_Infiniband_Port.cexpected \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Team_Port.cexpected \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_VLAN_reorder_hdr.cexpected \
diff --git a/clients/cli/settings.c b/clients/cli/settings.c
index aa0a7ff23c..d050e24e28 100644
--- a/clients/cli/settings.c
+++ b/clients/cli/settings.c
@@ -543,13 +543,18 @@ nmc_setting_set_property (NMClient *client,
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
g_return_val_if_fail (NM_IN_SET (modifier, '\0', '-', '+'), FALSE);
- g_return_val_if_fail (value || modifier == '\0', FALSE);
if (!(property_info = nm_meta_property_info_find_by_setting (setting, prop)))
goto out_fail_read_only;
if (!property_info->property_type->set_fcn)
goto out_fail_read_only;
+ if ( NM_IN_SET (modifier, '+', '-')
+ && !value) {
+ /* nothing to do. */
+ return TRUE;
+ }
+
if ( modifier == '-'
&& !property_info->property_type->set_supports_remove) {
/* The property is a plain property. It does not support '-'.
diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c
index 7a20196a0d..ef8574a174 100644
--- a/clients/common/nm-meta-setting-desc.c
+++ b/clients/common/nm-meta-setting-desc.c
@@ -170,6 +170,7 @@ _value_str_as_index_list (const char *value, gsize *out_len)
typedef enum {
VALUE_STRSPLIT_MODE_STRIPPED,
VALUE_STRSPLIT_MODE_OBJLIST,
+ VALUE_STRSPLIT_MODE_OBJLIST_WITH_ESCAPE,
VALUE_STRSPLIT_MODE_MULTILIST,
VALUE_STRSPLIT_MODE_MULTILIST_WITH_ESCAPE,
} ValueStrsplitMode;
@@ -201,6 +202,9 @@ _value_strsplit (const char *value,
case VALUE_STRSPLIT_MODE_OBJLIST:
strv = nm_utils_strsplit_set (value, ",", FALSE);
break;
+ case VALUE_STRSPLIT_MODE_OBJLIST_WITH_ESCAPE:
+ strv = nm_utils_strsplit_set (value, ",", TRUE);
+ break;
case VALUE_STRSPLIT_MODE_MULTILIST:
strv = nm_utils_strsplit_set (value, " \t,", FALSE);
break;
@@ -227,6 +231,8 @@ _value_strsplit (const char *value,
if (split_mode == VALUE_STRSPLIT_MODE_MULTILIST_WITH_ESCAPE)
_nm_utils_unescape_plain ((char *) s, MULTILIST_WITH_ESCAPE_CHARS, TRUE);
+ else if (split_mode == VALUE_STRSPLIT_MODE_OBJLIST_WITH_ESCAPE)
+ _nm_utils_unescape_plain ((char *) s, ",", TRUE);
else
g_strchomp ((char *) s);
@@ -1876,7 +1882,7 @@ _set_fcn_multilist (ARGS_SET_FCN)
}
strv = _value_strsplit (value,
- property_info->property_typ_data->subtype.multilist.with_escaped_spaces
+ property_info->property_typ_data->subtype.multilist.strsplit_with_escape
? VALUE_STRSPLIT_MODE_MULTILIST_WITH_ESCAPE
: VALUE_STRSPLIT_MODE_MULTILIST,
&nstrv);
@@ -3049,6 +3055,10 @@ _get_fcn_objlist (ARGS_GET_FCN)
num = property_info->property_typ_data->subtype.objlist.get_num_fcn (setting);
for (idx = 0; idx < num; idx++) {
+#if NM_MORE_ASSERTS
+ gsize start_offset;
+#endif
+
if (!str)
str = g_string_new (NULL);
else if (str->len > 0) {
@@ -3059,10 +3069,32 @@ _get_fcn_objlist (ARGS_GET_FCN)
g_string_append (str, ", ");
}
+#if NM_MORE_ASSERTS
+ start_offset = str->len;
+#endif
+
property_info->property_typ_data->subtype.objlist.obj_to_str_fcn (get_type,
setting,
idx,
str);
+
+#if NM_MORE_ASSERTS
+ nm_assert (start_offset < str->len);
+ if ( property_info->property_typ_data->subtype.objlist.strsplit_with_escape
+ && get_type != NM_META_ACCESSOR_GET_TYPE_PRETTY) {
+ /* if the strsplit is done with VALUE_STRSPLIT_MODE_OBJLIST_WITH_ESCAPE, then the appended
+ * value must have no unescaped ','. */
+ for (; start_offset < str->len; ) {
+ if (str->str[start_offset] == '\\') {
+ start_offset++;
+ nm_assert (start_offset < str->len);
+ nm_assert (!NM_IN_SET (str->str[start_offset], '\0'));
+ } else
+ nm_assert (!NM_IN_SET (str->str[start_offset], '\0', ','));
+ start_offset++;
+ }
+ }
+#endif
}
NM_SET_OUT (out_is_default, num == 0);
@@ -3237,7 +3269,9 @@ _set_fcn_objlist (ARGS_SET_FCN)
}
strv = _value_strsplit (value,
- VALUE_STRSPLIT_MODE_OBJLIST,
+ property_info->property_typ_data->subtype.objlist.strsplit_with_escape
+ ? VALUE_STRSPLIT_MODE_OBJLIST_WITH_ESCAPE
+ : VALUE_STRSPLIT_MODE_OBJLIST,
&nstrv);
if (_SET_FCN_DO_SET_ALL (modifier, value)) {
@@ -3335,6 +3369,65 @@ _is_default_func_ip_config_dns_options (NMSetting *setting)
&& !nm_setting_ip_config_get_num_dns_options (NM_SETTING_IP_CONFIG (setting));
}
+static void
+_objlist_obj_to_str_fcn_ip_config_routing_rules (NMMetaAccessorGetType get_type,
+ NMSetting *setting,
+ guint idx,
+ GString *str)
+{
+ NMIPRoutingRule *rule;
+ gs_free char *s = NULL;
+
+ rule = nm_setting_ip_config_get_routing_rule (NM_SETTING_IP_CONFIG (setting), idx);
+ s = nm_ip_routing_rule_to_string (rule,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE,
+ NULL,
+ NULL);
+ if (s)
+ g_string_append (str, s);
+}
+
+static gboolean
+_objlist_set_fcn_ip_config_routing_rules (NMSetting *setting,
+ gboolean do_add,
+ const char *str,
+ GError **error)
+{
+ NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rule = NULL;
+ guint i, n;
+
+ rule = nm_ip_routing_rule_from_string (str,
+ ( NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | ( NM_IS_SETTING_IP4_CONFIG (setting)
+ ? NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET
+ : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6)),
+ NULL,
+ error);
+ if (!rule)
+ return FALSE;
+
+ /* also for @do_add, we first always search whether such a rule already exist
+ * and remove the first occurance.
+ *
+ * The effect is, that we don't add multiple times the same rule,
+ * and that if the rule already exists, it gets moved to the end (append).
+ */
+ n = nm_setting_ip_config_get_num_routing_rules (s_ip);
+ for (i = 0; i < n; i++) {
+ NMIPRoutingRule *rr;
+
+ rr = nm_setting_ip_config_get_routing_rule (s_ip, i);
+ if (nm_ip_routing_rule_cmp (rule, rr) == 0) {
+ nm_setting_ip_config_remove_routing_rule (s_ip, i);
+ break;
+ }
+ }
+ if (do_add)
+ nm_setting_ip_config_add_routing_rule (s_ip, rule);
+ return TRUE;
+}
+
static gconstpointer
_get_fcn_match_interface_name (ARGS_GET_FCN)
{
@@ -5549,6 +5642,23 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = {
),
),
),
+ PROPERTY_INFO (NM_SETTING_IP_CONFIG_ROUTING_RULES, NULL,
+ .describe_message =
+ N_("Enter a list of IPv4 routing rules formatted as:\n"
+ " priority [prio] [from [src]] [to [dst]], ,...\n"
+ "\n"),
+ .property_type = &_pt_objlist,
+ .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
+ PROPERTY_TYP_DATA_SUBTYPE (objlist,
+ .get_num_fcn = OBJLIST_GET_NUM_FCN (NMSettingIPConfig, nm_setting_ip_config_get_num_routing_rules),
+ .clear_all_fcn = OBJLIST_CLEAR_ALL_FCN (NMSettingIPConfig, nm_setting_ip_config_clear_routing_rules),
+ .obj_to_str_fcn = _objlist_obj_to_str_fcn_ip_config_routing_rules,
+ .set_fcn = _objlist_set_fcn_ip_config_routing_rules,
+ .remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingIPConfig, nm_setting_ip_config_remove_routing_rule),
+ .strsplit_with_escape = TRUE,
+ ),
+ ),
+ ),
PROPERTY_INFO (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES,
.property_type = &_pt_gobject_bool,
),
@@ -5740,6 +5850,23 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = {
),
),
),
+ PROPERTY_INFO (NM_SETTING_IP_CONFIG_ROUTING_RULES, NULL,
+ .describe_message =
+ N_("Enter a list of IPv6 routing rules formatted as:\n"
+ " priority [prio] [from [src]] [to [dst]], ,...\n"
+ "\n"),
+ .property_type = &_pt_objlist,
+ .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
+ PROPERTY_TYP_DATA_SUBTYPE (objlist,
+ .get_num_fcn = OBJLIST_GET_NUM_FCN (NMSettingIPConfig, nm_setting_ip_config_get_num_routing_rules),
+ .clear_all_fcn = OBJLIST_CLEAR_ALL_FCN (NMSettingIPConfig, nm_setting_ip_config_clear_routing_rules),
+ .obj_to_str_fcn = _objlist_obj_to_str_fcn_ip_config_routing_rules,
+ .set_fcn = _objlist_set_fcn_ip_config_routing_rules,
+ .remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingIPConfig, nm_setting_ip_config_remove_routing_rule),
+ .strsplit_with_escape = TRUE,
+ ),
+ ),
+ ),
PROPERTY_INFO (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES,
.property_type = &_pt_gobject_bool,
),
@@ -5983,7 +6110,7 @@ static const NMMetaPropertyInfo *const property_infos_MATCH[] = {
.add2_fcn = MULTILIST_ADD2_FCN (NMSettingMatch, nm_setting_match_add_interface_name),
.remove_by_idx_fcn_s = MULTILIST_REMOVE_BY_IDX_FCN_S (NMSettingMatch, nm_setting_match_remove_interface_name),
.remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingMatch, nm_setting_match_remove_interface_name_by_value),
- .with_escaped_spaces = TRUE,
+ .strsplit_with_escape = TRUE,
),
),
),
diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h
index cc94c2547d..15c0e81eb0 100644
--- a/clients/common/nm-meta-setting-desc.h
+++ b/clients/common/nm-meta-setting-desc.h
@@ -280,9 +280,7 @@ struct _NMMetaPropertyTypData {
void (*remove_by_idx_fcn_u) (NMSetting *setting, guint idx);
void (*remove_by_idx_fcn_s) (NMSetting *setting, int idx);
gboolean (*remove_by_value_fcn) (NMSetting *setting, const char *item);
-
- /* if true, separate the list by space and allow backslash escaping. */
- bool with_escaped_spaces:1;
+ bool strsplit_with_escape:1;
} multilist;
struct {
guint (*get_num_fcn) (NMSetting *setting);
@@ -298,6 +296,7 @@ struct _NMMetaPropertyTypData {
void (*remove_by_idx_fcn_u) (NMSetting *setting, guint idx);
void (*remove_by_idx_fcn_s) (NMSetting *setting, int idx);
bool delimit_pretty_with_semicolon:1;
+ bool strsplit_with_escape:1;
} objlist;
struct {
gboolean (*set_fcn) (NMSetting *setting,
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 c2eac2c608..b8e5a319ba 100644
--- a/clients/tests/test-client.check-on-disk/test_003.expected
+++ b/clients/tests/test-client.check-on-disk/test_003.expected
@@ -150,12 +150,12 @@ id
path
uuid
<<<
-size: 3987
+size: 4073
location: clients/tests/test-client.py:910:test_003()/12
cmd: $NMCLI con s con-gsm1
lang: C
returncode: 0
-stdout: 3853 bytes
+stdout: 3939 bytes
>>>
connection.id: con-gsm1
connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL
@@ -190,6 +190,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -210,6 +211,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -244,12 +246,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 4016
+size: 4102
location: clients/tests/test-client.py:910:test_003()/13
cmd: $NMCLI con s con-gsm1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3872 bytes
+stdout: 3958 bytes
>>>
connection.id: con-gsm1
connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL
@@ -284,6 +286,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -304,6 +307,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -470,12 +474,12 @@ UUID NAME
UUID-ethernet-REPLACED-REPLACED-REPL ethernet
<<<
-size: 3805
+size: 3891
location: clients/tests/test-client.py:941:test_003()/25
cmd: $NMCLI -f ALL con s ethernet
lang: C
returncode: 0
-stdout: 3664 bytes
+stdout: 3750 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -524,6 +528,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -544,6 +549,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -560,12 +566,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3833
+size: 3919
location: clients/tests/test-client.py:941:test_003()/26
cmd: $NMCLI -f ALL con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3682 bytes
+stdout: 3768 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -614,6 +620,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -634,6 +641,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -670,12 +678,12 @@ stdout: 51 bytes
GENERAL.STATE: aktywowano
<<<
-size: 4462
+size: 4548
location: clients/tests/test-client.py:947:test_003()/29
cmd: $NMCLI con s ethernet
lang: C
returncode: 0
-stdout: 4328 bytes
+stdout: 4414 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -724,6 +732,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -744,6 +753,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -772,12 +782,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4494
+size: 4580
location: clients/tests/test-client.py:947:test_003()/30
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4350 bytes
+stdout: 4436 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -826,6 +836,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -846,6 +857,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -1318,12 +1330,12 @@ UUID NAME
UUID-ethernet-REPLACED-REPLACED-REPL ethernet
<<<
-size: 3805
+size: 3891
location: clients/tests/test-client.py:941:test_003()/48
cmd: $NMCLI -f ALL con s ethernet
lang: C
returncode: 0
-stdout: 3664 bytes
+stdout: 3750 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1372,6 +1384,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -1392,6 +1405,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -1408,12 +1422,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3833
+size: 3919
location: clients/tests/test-client.py:941:test_003()/49
cmd: $NMCLI -f ALL con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3682 bytes
+stdout: 3768 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1462,6 +1476,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -1482,6 +1497,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -1522,12 +1538,12 @@ GENERAL.STATE: aktywowano
GENERAL.STATE: aktywowano
<<<
-size: 5127
+size: 5213
location: clients/tests/test-client.py:947:test_003()/52
cmd: $NMCLI con s ethernet
lang: C
returncode: 0
-stdout: 4993 bytes
+stdout: 5079 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1576,6 +1592,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -1596,6 +1613,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -1637,12 +1655,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 5163
+size: 5249
location: clients/tests/test-client.py:947:test_003()/53
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5019 bytes
+stdout: 5105 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -1691,6 +1709,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -1711,6 +1730,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -2114,12 +2134,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 5130
+size: 5216
location: clients/tests/test-client.py:977:test_003()/64
cmd: $NMCLI con s ethernet
lang: C
returncode: 0
-stdout: 4996 bytes
+stdout: 5082 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2168,6 +2188,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -2188,6 +2209,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -2229,12 +2251,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 5167
+size: 5253
location: clients/tests/test-client.py:977:test_003()/65
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5023 bytes
+stdout: 5109 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2283,6 +2305,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -2303,6 +2326,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -2344,12 +2368,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4505
+size: 4591
location: clients/tests/test-client.py:980:test_003()/66
cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 4331 bytes
+stdout: 4417 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2398,6 +2422,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -2418,6 +2443,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -2446,12 +2472,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4538
+size: 4624
location: clients/tests/test-client.py:980:test_003()/67
cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4354 bytes
+stdout: 4440 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2500,6 +2526,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -2520,6 +2547,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -2738,12 +2766,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 5142
+size: 5228
location: clients/tests/test-client.py:977:test_003()/74
cmd: $NMCLI --color yes con s ethernet
lang: C
returncode: 0
-stdout: 4996 bytes
+stdout: 5082 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2792,6 +2820,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -2812,6 +2841,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -2853,12 +2883,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 5179
+size: 5265
location: clients/tests/test-client.py:977:test_003()/75
cmd: $NMCLI --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5023 bytes
+stdout: 5109 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -2907,6 +2937,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -2927,6 +2958,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -2968,12 +3000,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4517
+size: 4603
location: clients/tests/test-client.py:980:test_003()/76
cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 4331 bytes
+stdout: 4417 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -3022,6 +3054,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -3042,6 +3075,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -3070,12 +3104,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4550
+size: 4636
location: clients/tests/test-client.py:980:test_003()/77
cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4354 bytes
+stdout: 4440 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -3124,6 +3158,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -3144,6 +3179,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -3378,12 +3414,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 6384
+size: 6470
location: clients/tests/test-client.py:977:test_003()/84
cmd: $NMCLI --pretty con s ethernet
lang: C
returncode: 0
-stdout: 6241 bytes
+stdout: 6327 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -3437,6 +3473,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -3458,6 +3495,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -3509,12 +3547,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 6440
+size: 6526
location: clients/tests/test-client.py:977:test_003()/85
cmd: $NMCLI --pretty con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 6287 bytes
+stdout: 6373 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -3568,6 +3606,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -3589,6 +3628,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -3640,12 +3680,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5446
+size: 5532
location: clients/tests/test-client.py:980:test_003()/86
cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 5263 bytes
+stdout: 5349 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -3699,6 +3739,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -3720,6 +3761,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -3754,12 +3796,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5491
+size: 5577
location: clients/tests/test-client.py:980:test_003()/87
cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5298 bytes
+stdout: 5384 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -3813,6 +3855,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -3834,6 +3877,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -4096,12 +4140,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 6396
+size: 6482
location: clients/tests/test-client.py:977:test_003()/94
cmd: $NMCLI --pretty --color yes con s ethernet
lang: C
returncode: 0
-stdout: 6241 bytes
+stdout: 6327 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -4155,6 +4199,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -4176,6 +4221,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -4227,12 +4273,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 6452
+size: 6538
location: clients/tests/test-client.py:977:test_003()/95
cmd: $NMCLI --pretty --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 6287 bytes
+stdout: 6373 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -4286,6 +4332,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -4307,6 +4354,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -4358,12 +4406,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5458
+size: 5544
location: clients/tests/test-client.py:980:test_003()/96
cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 5263 bytes
+stdout: 5349 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -4417,6 +4465,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -4438,6 +4487,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -4472,12 +4522,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5503
+size: 5589
location: clients/tests/test-client.py:980:test_003()/97
cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5298 bytes
+stdout: 5384 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -4531,6 +4581,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -4552,6 +4603,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -4794,12 +4846,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
<<<
-size: 2769
+size: 2809
location: clients/tests/test-client.py:977:test_003()/104
cmd: $NMCLI --terse con s ethernet
lang: C
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -4848,6 +4900,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -4868,6 +4921,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -4909,12 +4963,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2779
+size: 2819
location: clients/tests/test-client.py:977:test_003()/105
cmd: $NMCLI --terse con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -4963,6 +5017,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -4983,6 +5038,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -5024,12 +5080,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2441
+size: 2481
location: clients/tests/test-client.py:980:test_003()/106
cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -5078,6 +5134,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -5098,6 +5155,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -5126,12 +5184,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2451
+size: 2491
location: clients/tests/test-client.py:980:test_003()/107
cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -5180,6 +5238,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -5200,6 +5259,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -5414,12 +5474,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
<<<
-size: 2781
+size: 2821
location: clients/tests/test-client.py:977:test_003()/114
cmd: $NMCLI --terse --color yes con s ethernet
lang: C
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -5468,6 +5528,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -5488,6 +5549,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -5529,12 +5591,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2791
+size: 2831
location: clients/tests/test-client.py:977:test_003()/115
cmd: $NMCLI --terse --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -5583,6 +5645,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -5603,6 +5666,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -5644,12 +5708,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2453
+size: 2493
location: clients/tests/test-client.py:980:test_003()/116
cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -5698,6 +5762,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -5718,6 +5783,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -5746,12 +5812,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2463
+size: 2503
location: clients/tests/test-client.py:980:test_003()/117
cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -5800,6 +5866,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -5820,6 +5887,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -6038,12 +6106,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 3416
+size: 3476
location: clients/tests/test-client.py:977:test_003()/124
cmd: $NMCLI --mode tabular con s ethernet
lang: C
returncode: 0
-stdout: 3266 bytes
+stdout: 3326 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
@@ -6051,11 +6119,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none no -- --
@@ -6069,12 +6137,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 3450
+size: 3510
location: clients/tests/test-client.py:977:test_003()/125
cmd: $NMCLI --mode tabular con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3290 bytes
+stdout: 3350 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
@@ -6082,11 +6150,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none nie -- --
@@ -6100,12 +6168,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 dezaktywowanie
<<<
-size: 2974
+size: 3034
location: clients/tests/test-client.py:980:test_003()/126
cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 2784 bytes
+stdout: 2844 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
@@ -6113,11 +6181,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none no -- --
@@ -6127,12 +6195,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 3006
+size: 3066
location: clients/tests/test-client.py:980:test_003()/127
cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2806 bytes
+stdout: 2866 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
@@ -6140,11 +6208,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none nie -- --
@@ -6276,12 +6344,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 3428
+size: 3488
location: clients/tests/test-client.py:977:test_003()/134
cmd: $NMCLI --mode tabular --color yes con s ethernet
lang: C
returncode: 0
-stdout: 3266 bytes
+stdout: 3326 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
@@ -6289,11 +6357,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none no -- --
@@ -6307,12 +6375,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 3462
+size: 3522
location: clients/tests/test-client.py:977:test_003()/135
cmd: $NMCLI --mode tabular --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3290 bytes
+stdout: 3350 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
@@ -6320,11 +6388,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none nie -- --
@@ -6338,12 +6406,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 dezaktywowanie
<<<
-size: 2986
+size: 3046
location: clients/tests/test-client.py:980:test_003()/136
cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 2784 bytes
+stdout: 2844 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
@@ -6351,11 +6419,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none no -- --
@@ -6365,12 +6433,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 3018
+size: 3078
location: clients/tests/test-client.py:980:test_003()/137
cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2806 bytes
+stdout: 2866 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
@@ -6378,11 +6446,11 @@ connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-eth
name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
proxy none nie -- --
@@ -6530,12 +6598,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 5607
+size: 5697
location: clients/tests/test-client.py:977:test_003()/144
cmd: $NMCLI --mode tabular --pretty con s ethernet
lang: C
returncode: 0
-stdout: 5448 bytes
+stdout: 5538 bytes
>>>
=========================================
Connection profile details (ethernet)
@@ -6548,13 +6616,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6577,12 +6645,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 5701
+size: 5791
location: clients/tests/test-client.py:977:test_003()/145
cmd: $NMCLI --mode tabular --pretty con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5532 bytes
+stdout: 5622 bytes
>>>
===========================================
Szczegóły profilu połączenia (ethernet)
@@ -6595,13 +6663,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6624,12 +6692,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 dezaktywowanie
<<<
-size: 4713
+size: 4803
location: clients/tests/test-client.py:980:test_003()/146
cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 4514 bytes
+stdout: 4604 bytes
>>>
=========================================
Connection profile details (ethernet)
@@ -6642,13 +6710,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6663,12 +6731,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 4785
+size: 4875
location: clients/tests/test-client.py:980:test_003()/147
cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4576 bytes
+stdout: 4666 bytes
>>>
===========================================
Szczegóły profilu połączenia (ethernet)
@@ -6681,13 +6749,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6862,12 +6930,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet
<<<
-size: 5619
+size: 5709
location: clients/tests/test-client.py:977:test_003()/154
cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet
lang: C
returncode: 0
-stdout: 5448 bytes
+stdout: 5538 bytes
>>>
=========================================
Connection profile details (ethernet)
@@ -6880,13 +6948,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6909,12 +6977,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 5713
+size: 5803
location: clients/tests/test-client.py:977:test_003()/155
cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5532 bytes
+stdout: 5622 bytes
>>>
===========================================
Szczegóły profilu połączenia (ethernet)
@@ -6927,13 +6995,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6956,12 +7024,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 dezaktywowanie
<<<
-size: 4725
+size: 4815
location: clients/tests/test-client.py:980:test_003()/156
cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 4514 bytes
+stdout: 4604 bytes
>>>
=========================================
Connection profile details (ethernet)
@@ -6974,13 +7042,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -6995,12 +7063,12 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 deactivating
<<<
-size: 4797
+size: 4887
location: clients/tests/test-client.py:980:test_003()/157
cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4576 bytes
+stdout: 4666 bytes
>>>
===========================================
Szczegóły profilu połączenia (ethernet)
@@ -7013,13 +7081,13 @@ name port speed duplex auto-negotiate mac-address cloned-mac-add
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default --
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name method browser-only pac-url pac-script
--------------------------------------------------
@@ -7174,66 +7242,66 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
<<<
-size: 828
+size: 830
location: clients/tests/test-client.py:977:test_003()/164
cmd: $NMCLI --mode tabular --terse con s ethernet
lang: C
returncode: 0
-stdout: 671 bytes
+stdout: 673 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: 838
+size: 840
location: clients/tests/test-client.py:977:test_003()/165
cmd: $NMCLI --mode tabular --terse con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 671 bytes
+stdout: 673 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: 681
+size: 683
location: clients/tests/test-client.py:980:test_003()/166
cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 484 bytes
+stdout: 486 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: 691
+size: 693
location: clients/tests/test-client.py:980:test_003()/167
cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 484 bytes
+stdout: 486 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::
@@ -7326,66 +7394,66 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm
UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet
<<<
-size: 840
+size: 842
location: clients/tests/test-client.py:977:test_003()/174
cmd: $NMCLI --mode tabular --terse --color yes con s ethernet
lang: C
returncode: 0
-stdout: 671 bytes
+stdout: 673 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: 850
+size: 852
location: clients/tests/test-client.py:977:test_003()/175
cmd: $NMCLI --mode tabular --terse --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 671 bytes
+stdout: 673 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: 693
+size: 695
location: clients/tests/test-client.py:980:test_003()/176
cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 484 bytes
+stdout: 486 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: 703
+size: 705
location: clients/tests/test-client.py:980: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: 484 bytes
+stdout: 486 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::
@@ -7626,12 +7694,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA
TYPE: ethernet
<<<
-size: 5148
+size: 5234
location: clients/tests/test-client.py:977:test_003()/184
cmd: $NMCLI --mode multiline con s ethernet
lang: C
returncode: 0
-stdout: 4996 bytes
+stdout: 5082 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7680,6 +7748,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -7700,6 +7769,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -7741,12 +7811,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 5185
+size: 5271
location: clients/tests/test-client.py:977:test_003()/185
cmd: $NMCLI --mode multiline con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5023 bytes
+stdout: 5109 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7795,6 +7865,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -7815,6 +7886,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -7856,12 +7928,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4523
+size: 4609
location: clients/tests/test-client.py:980:test_003()/186
cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 4331 bytes
+stdout: 4417 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -7910,6 +7982,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -7930,6 +8003,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -7958,12 +8032,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4556
+size: 4642
location: clients/tests/test-client.py:980:test_003()/187
cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4354 bytes
+stdout: 4440 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8012,6 +8086,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -8032,6 +8107,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -8394,12 +8470,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA
TYPE: ethernet
<<<
-size: 5160
+size: 5246
location: clients/tests/test-client.py:977:test_003()/194
cmd: $NMCLI --mode multiline --color yes con s ethernet
lang: C
returncode: 0
-stdout: 4996 bytes
+stdout: 5082 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8448,6 +8524,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -8468,6 +8545,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -8509,12 +8587,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 5197
+size: 5283
location: clients/tests/test-client.py:977:test_003()/195
cmd: $NMCLI --mode multiline --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5023 bytes
+stdout: 5109 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8563,6 +8641,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -8583,6 +8662,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -8624,12 +8704,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4535
+size: 4621
location: clients/tests/test-client.py:980:test_003()/196
cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 4331 bytes
+stdout: 4417 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8678,6 +8758,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -8698,6 +8779,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -8726,12 +8808,12 @@ GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
<<<
-size: 4568
+size: 4654
location: clients/tests/test-client.py:980:test_003()/197
cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4354 bytes
+stdout: 4440 bytes
>>>
connection.id: ethernet
connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL
@@ -8780,6 +8862,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -8800,6 +8883,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -9192,12 +9276,12 @@ TYPE: ethernet
-------------------------------------------------------------------------------
<<<
-size: 6402
+size: 6488
location: clients/tests/test-client.py:977:test_003()/204
cmd: $NMCLI --mode multiline --pretty con s ethernet
lang: C
returncode: 0
-stdout: 6241 bytes
+stdout: 6327 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -9251,6 +9335,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -9272,6 +9357,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -9323,12 +9409,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 6458
+size: 6544
location: clients/tests/test-client.py:977:test_003()/205
cmd: $NMCLI --mode multiline --pretty con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 6287 bytes
+stdout: 6373 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -9382,6 +9468,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -9403,6 +9490,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -9454,12 +9542,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5464
+size: 5550
location: clients/tests/test-client.py:980:test_003()/206
cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 5263 bytes
+stdout: 5349 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -9513,6 +9601,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -9534,6 +9623,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -9568,12 +9658,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5509
+size: 5595
location: clients/tests/test-client.py:980:test_003()/207
cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5298 bytes
+stdout: 5384 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -9627,6 +9717,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -9648,6 +9739,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -10068,12 +10160,12 @@ TYPE: ethernet
-------------------------------------------------------------------------------
<<<
-size: 6414
+size: 6500
location: clients/tests/test-client.py:977:test_003()/214
cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet
lang: C
returncode: 0
-stdout: 6241 bytes
+stdout: 6327 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -10127,6 +10219,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -10148,6 +10241,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -10199,12 +10293,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 6470
+size: 6556
location: clients/tests/test-client.py:977:test_003()/215
cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 6287 bytes
+stdout: 6373 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -10258,6 +10352,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -10279,6 +10374,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -10330,12 +10426,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5476
+size: 5562
location: clients/tests/test-client.py:980:test_003()/216
cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 5263 bytes
+stdout: 5349 bytes
>>>
===============================================================================
Connection profile details (ethernet)
@@ -10389,6 +10485,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -10410,6 +10507,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -10444,12 +10542,12 @@ GENERAL.MASTER-PATH: --
-------------------------------------------------------------------------------
<<<
-size: 5521
+size: 5607
location: clients/tests/test-client.py:980:test_003()/217
cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5298 bytes
+stdout: 5384 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (ethernet)
@@ -10503,6 +10601,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -10524,6 +10623,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -10914,12 +11014,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA
TYPE:802-3-ethernet
<<<
-size: 2786
+size: 2826
location: clients/tests/test-client.py:977:test_003()/224
cmd: $NMCLI --mode multiline --terse con s ethernet
lang: C
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -10968,6 +11068,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -10988,6 +11089,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -11029,12 +11131,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2796
+size: 2836
location: clients/tests/test-client.py:977:test_003()/225
cmd: $NMCLI --mode multiline --terse con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11083,6 +11185,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -11103,6 +11206,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -11144,12 +11248,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2458
+size: 2498
location: clients/tests/test-client.py:980:test_003()/226
cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11198,6 +11302,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -11218,6 +11323,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -11246,12 +11352,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2468
+size: 2508
location: clients/tests/test-client.py:980:test_003()/227
cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11300,6 +11406,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -11320,6 +11427,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -11682,12 +11790,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA
TYPE:802-3-ethernet
<<<
-size: 2798
+size: 2838
location: clients/tests/test-client.py:977:test_003()/234
cmd: $NMCLI --mode multiline --terse --color yes con s ethernet
lang: C
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11736,6 +11844,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -11756,6 +11865,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -11797,12 +11907,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2808
+size: 2848
location: clients/tests/test-client.py:977:test_003()/235
cmd: $NMCLI --mode multiline --terse --color yes con s ethernet
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2626 bytes
+stdout: 2666 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11851,6 +11961,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -11871,6 +11982,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -11912,12 +12024,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2470
+size: 2510
location: clients/tests/test-client.py:980:test_003()/236
cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
-stdout: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -11966,6 +12078,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -11986,6 +12099,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -12014,12 +12128,12 @@ GENERAL.ZONE:
GENERAL.MASTER-PATH:
<<<
-size: 2480
+size: 2520
location: clients/tests/test-client.py:980: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: 2258 bytes
+stdout: 2298 bytes
>>>
connection.id:ethernet
connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL
@@ -12068,6 +12182,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -12088,6 +12203,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
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 7a5548129f..386caed244 100644
--- a/clients/tests/test-client.check-on-disk/test_004.expected
+++ b/clients/tests/test-client.check-on-disk/test_004.expected
@@ -58,12 +58,12 @@ location: clients/tests/test-client.py:1001:test_004()/7
cmd: $NMCLI connection mod con-xx1 ipv4.addresses 192.168.77.5/24 ipv4.routes '2.3.4.5/32 192.168.77.1' ipv6.addresses 1:2:3:4::6/64 ipv6.routes 1:2:3:4:5:6::5/128
lang: C
returncode: 0
-size: 4048
+size: 4134
location: clients/tests/test-client.py:1003:test_004()/8
cmd: $NMCLI con s con-xx1
lang: C
returncode: 0
-stdout: 3915 bytes
+stdout: 4001 bytes
>>>
connection.id: con-xx1
connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA
@@ -115,6 +115,7 @@ ipv4.gateway: --
ipv4.routes: { ip = 2.3.4.5/32, nh = 192.168.77.1 }
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -135,6 +136,7 @@ ipv6.gateway: --
ipv6.routes: { ip = 1:2:3:4:5:6:0:5/128 }
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -151,12 +153,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 4076
+size: 4162
location: clients/tests/test-client.py:1003:test_004()/9
cmd: $NMCLI con s con-xx1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3933 bytes
+stdout: 4019 bytes
>>>
connection.id: con-xx1
connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA
@@ -208,6 +210,7 @@ ipv4.gateway: --
ipv4.routes: { ip = 2.3.4.5/32, nh = 192.168.77.1 }
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -228,6 +231,7 @@ ipv6.gateway: --
ipv6.routes: { ip = 1:2:3:4:5:6:0:5/128 }
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -280,12 +284,12 @@ con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn --
con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi --
<<<
-size: 3515
+size: 3601
location: clients/tests/test-client.py:1015:test_004()/13
cmd: $NMCLI con s con-vpn-1
lang: C
returncode: 0
-stdout: 3379 bytes
+stdout: 3465 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -320,6 +324,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -340,6 +345,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -362,12 +368,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3535
+size: 3621
location: clients/tests/test-client.py:1015:test_004()/14
cmd: $NMCLI con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3389 bytes
+stdout: 3475 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -402,6 +408,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -422,6 +429,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -516,12 +524,12 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0
con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
<<<
-size: 4597
+size: 4683
location: clients/tests/test-client.py:1025:test_004()/21
cmd: $NMCLI con s con-vpn-1
lang: C
returncode: 0
-stdout: 4461 bytes
+stdout: 4547 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -556,6 +564,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -576,6 +585,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -618,12 +628,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4623
+size: 4709
location: clients/tests/test-client.py:1025:test_004()/22
cmd: $NMCLI con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4477 bytes
+stdout: 4563 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -658,6 +668,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -678,6 +689,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -720,12 +732,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4603
+size: 4689
location: clients/tests/test-client.py:1036:test_004()/23
cmd: $NMCLI con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -760,6 +772,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -780,6 +793,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -822,12 +836,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4633
+size: 4719
location: clients/tests/test-client.py:1036:test_004()/24
cmd: $NMCLI con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -862,6 +876,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -882,6 +897,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -924,12 +940,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4603
+size: 4689
location: clients/tests/test-client.py:1038:test_004()/25
cmd: $NMCLI con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -964,6 +980,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -984,6 +1001,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -1026,12 +1044,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4633
+size: 4719
location: clients/tests/test-client.py:1038:test_004()/26
cmd: $NMCLI con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1066,6 +1084,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -1086,6 +1105,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -1128,12 +1148,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 3522
+size: 3608
location: clients/tests/test-client.py:1041:test_004()/27
cmd: $NMCLI -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3379 bytes
+stdout: 3465 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1168,6 +1188,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -1188,6 +1209,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -1210,12 +1232,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3542
+size: 3628
location: clients/tests/test-client.py:1041:test_004()/28
cmd: $NMCLI -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3389 bytes
+stdout: 3475 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -1250,6 +1272,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -1270,6 +1293,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -3682,12 +3706,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION: Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
<<<
-size: 4615
+size: 4701
location: clients/tests/test-client.py:1036:test_004()/71
cmd: $NMCLI --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -3722,6 +3746,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -3742,6 +3767,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -3784,12 +3810,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4645
+size: 4731
location: clients/tests/test-client.py:1036:test_004()/72
cmd: $NMCLI --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -3824,6 +3850,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -3844,6 +3871,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -3886,12 +3914,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4615
+size: 4701
location: clients/tests/test-client.py:1038:test_004()/73
cmd: $NMCLI --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -3926,6 +3954,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -3946,6 +3975,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -3988,12 +4018,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4645
+size: 4731
location: clients/tests/test-client.py:1038:test_004()/74
cmd: $NMCLI --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -4028,6 +4058,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -4048,6 +4079,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -4090,12 +4122,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 3534
+size: 3620
location: clients/tests/test-client.py:1041:test_004()/75
cmd: $NMCLI --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3379 bytes
+stdout: 3465 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -4130,6 +4162,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -4150,6 +4183,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -4172,12 +4206,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3554
+size: 3640
location: clients/tests/test-client.py:1041:test_004()/76
cmd: $NMCLI --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3389 bytes
+stdout: 3475 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -4212,6 +4246,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -4232,6 +4267,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -6644,12 +6680,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION: Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
<<<
-size: 5625
+size: 5711
location: clients/tests/test-client.py:1036:test_004()/119
cmd: $NMCLI --pretty con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -6688,6 +6724,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -6709,6 +6746,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -6759,12 +6797,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5667
+size: 5753
location: clients/tests/test-client.py:1036:test_004()/120
cmd: $NMCLI --pretty con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -6803,6 +6841,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -6824,6 +6863,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -6874,12 +6914,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5625
+size: 5711
location: clients/tests/test-client.py:1038:test_004()/121
cmd: $NMCLI --pretty con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -6918,6 +6958,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -6939,6 +6980,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -6989,12 +7031,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5667
+size: 5753
location: clients/tests/test-client.py:1038:test_004()/122
cmd: $NMCLI --pretty con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -7033,6 +7075,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -7054,6 +7097,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -7104,12 +7148,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 4151
+size: 4237
location: clients/tests/test-client.py:1041:test_004()/123
cmd: $NMCLI --pretty -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3998 bytes
+stdout: 4084 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -7148,6 +7192,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -7169,6 +7214,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -7194,12 +7240,12 @@ proxy.pac-script: --
-------------------------------------------------------------------------------
<<<
-size: 4176
+size: 4262
location: clients/tests/test-client.py:1041:test_004()/124
cmd: $NMCLI --pretty -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4013 bytes
+stdout: 4099 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -7238,6 +7284,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -7259,6 +7306,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -10220,12 +10268,12 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
-------------------------------------------------------------------------------
<<<
-size: 5637
+size: 5723
location: clients/tests/test-client.py:1036:test_004()/167
cmd: $NMCLI --pretty --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -10264,6 +10312,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -10285,6 +10334,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -10335,12 +10385,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5679
+size: 5765
location: clients/tests/test-client.py:1036:test_004()/168
cmd: $NMCLI --pretty --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -10379,6 +10429,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -10400,6 +10451,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -10450,12 +10502,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5637
+size: 5723
location: clients/tests/test-client.py:1038:test_004()/169
cmd: $NMCLI --pretty --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -10494,6 +10546,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -10515,6 +10568,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -10565,12 +10619,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5679
+size: 5765
location: clients/tests/test-client.py:1038:test_004()/170
cmd: $NMCLI --pretty --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -10609,6 +10663,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -10630,6 +10685,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -10680,12 +10736,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 4163
+size: 4249
location: clients/tests/test-client.py:1041:test_004()/171
cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3998 bytes
+stdout: 4084 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -10724,6 +10780,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -10745,6 +10802,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -10770,12 +10828,12 @@ proxy.pac-script: --
-------------------------------------------------------------------------------
<<<
-size: 4188
+size: 4274
location: clients/tests/test-client.py:1041:test_004()/172
cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4013 bytes
+stdout: 4099 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -10814,6 +10872,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -10835,6 +10894,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -13796,12 +13856,12 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
-------------------------------------------------------------------------------
<<<
-size: 2323
+size: 2363
location: clients/tests/test-client.py:1036:test_004()/215
cmd: $NMCLI --terse con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -13836,6 +13896,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -13856,6 +13917,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -13898,12 +13960,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2333
+size: 2373
location: clients/tests/test-client.py:1036:test_004()/216
cmd: $NMCLI --terse con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -13938,6 +14000,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -13958,6 +14021,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -14000,12 +14064,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2323
+size: 2363
location: clients/tests/test-client.py:1038:test_004()/217
cmd: $NMCLI --terse con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -14040,6 +14104,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -14060,6 +14125,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -14102,12 +14168,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2333
+size: 2373
location: clients/tests/test-client.py:1038:test_004()/218
cmd: $NMCLI --terse con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -14142,6 +14208,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -14162,6 +14229,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -14204,12 +14272,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 1771
+size: 1811
location: clients/tests/test-client.py:1041:test_004()/219
cmd: $NMCLI --terse -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -14244,6 +14312,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -14264,6 +14333,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -14286,12 +14356,12 @@ proxy.pac-url:
proxy.pac-script:
<<<
-size: 1781
+size: 1821
location: clients/tests/test-client.py:1041:test_004()/220
cmd: $NMCLI --terse -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -14326,6 +14396,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -14346,6 +14417,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -16728,12 +16800,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION:Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone)
<<<
-size: 2335
+size: 2375
location: clients/tests/test-client.py:1036:test_004()/263
cmd: $NMCLI --terse --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16768,6 +16840,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -16788,6 +16861,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -16830,12 +16904,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2345
+size: 2385
location: clients/tests/test-client.py:1036:test_004()/264
cmd: $NMCLI --terse --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16870,6 +16944,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -16890,6 +16965,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -16932,12 +17008,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2335
+size: 2375
location: clients/tests/test-client.py:1038:test_004()/265
cmd: $NMCLI --terse --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -16972,6 +17048,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -16992,6 +17069,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -17034,12 +17112,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2345
+size: 2385
location: clients/tests/test-client.py:1038:test_004()/266
cmd: $NMCLI --terse --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -17074,6 +17152,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -17094,6 +17173,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -17136,12 +17216,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 1783
+size: 1823
location: clients/tests/test-client.py:1041:test_004()/267
cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -17176,6 +17256,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -17196,6 +17277,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -17218,12 +17300,12 @@ proxy.pac-url:
proxy.pac-script:
<<<
-size: 1793
+size: 1833
location: clients/tests/test-client.py:1041:test_004()/268
cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -17258,6 +17340,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -17278,6 +17361,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -19660,21 +19744,21 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION:Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone)
<<<
-size: 2978
+size: 3038
location: clients/tests/test-client.py:1036:test_004()/311
cmd: $NMCLI --mode tabular con s con-vpn-1
lang: C
returncode: 0
-stdout: 2826 bytes
+stdout: 2886 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0
@@ -19689,21 +19773,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 3001
+size: 3061
location: clients/tests/test-client.py:1036:test_004()/312
cmd: $NMCLI --mode tabular con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2839 bytes
+stdout: 2899 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0
@@ -19718,21 +19802,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 2978
+size: 3038
location: clients/tests/test-client.py:1038:test_004()/313
cmd: $NMCLI --mode tabular con s con-vpn-1
lang: C
returncode: 0
-stdout: 2826 bytes
+stdout: 2886 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0
@@ -19747,21 +19831,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 3001
+size: 3061
location: clients/tests/test-client.py:1038:test_004()/314
cmd: $NMCLI --mode tabular con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2839 bytes
+stdout: 2899 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0
@@ -19776,21 +19860,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 2246
+size: 2306
location: clients/tests/test-client.py:1041:test_004()/315
cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 2087 bytes
+stdout: 2147 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0
@@ -19800,21 +19884,21 @@ proxy none no -- --
<<<
-size: 2258
+size: 2318
location: clients/tests/test-client.py:1041:test_004()/316
cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2089 bytes
+stdout: 2149 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0
@@ -21174,21 +21258,21 @@ 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: 2990
+size: 3050
location: clients/tests/test-client.py:1036:test_004()/359
cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 2826 bytes
+stdout: 2886 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0
@@ -21203,21 +21287,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 3013
+size: 3073
location: clients/tests/test-client.py:1036:test_004()/360
cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2839 bytes
+stdout: 2899 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0
@@ -21232,21 +21316,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 2990
+size: 3050
location: clients/tests/test-client.py:1038:test_004()/361
cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 2826 bytes
+stdout: 2886 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0
@@ -21261,21 +21345,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 3013
+size: 3073
location: clients/tests/test-client.py:1038:test_004()/362
cmd: $NMCLI --mode tabular --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2839 bytes
+stdout: 2899 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0
@@ -21290,21 +21374,21 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 2258
+size: 2318
location: clients/tests/test-client.py:1041:test_004()/363
cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 2087 bytes
+stdout: 2147 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> no 0
@@ -21314,21 +21398,21 @@ proxy none no -- --
<<<
-size: 2270
+size: 2330
location: clients/tests/test-client.py:1041:test_004()/364
cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2089 bytes
+stdout: 2149 bytes
>>>
name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr
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 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val2, key3 = val3 <hidden> nie 0
@@ -22688,12 +22772,12 @@ 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: 4742
+size: 4832
location: clients/tests/test-client.py:1036:test_004()/407
cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
lang: C
returncode: 0
-stdout: 4581 bytes
+stdout: 4671 bytes
>>>
==========================================
Connection profile details (con-vpn-1)
@@ -22702,13 +22786,13 @@ name id uuid stable-id type in
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -22730,12 +22814,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 4798
+size: 4888
location: clients/tests/test-client.py:1036:test_004()/408
cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4627 bytes
+stdout: 4717 bytes
>>>
============================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -22744,13 +22828,13 @@ name id uuid stable-id type in
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -22772,12 +22856,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 4742
+size: 4832
location: clients/tests/test-client.py:1038:test_004()/409
cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
lang: C
returncode: 0
-stdout: 4581 bytes
+stdout: 4671 bytes
>>>
==========================================
Connection profile details (con-vpn-1)
@@ -22786,13 +22870,13 @@ name id uuid stable-id type in
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -22814,12 +22898,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 4798
+size: 4888
location: clients/tests/test-client.py:1038:test_004()/410
cmd: $NMCLI --mode tabular --pretty con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4627 bytes
+stdout: 4717 bytes
>>>
============================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -22828,13 +22912,13 @@ name id uuid stable-id type in
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -22856,12 +22940,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 3428
+size: 3518
location: clients/tests/test-client.py:1041:test_004()/411
cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3260 bytes
+stdout: 3350 bytes
>>>
==========================================
Connection profile details (con-vpn-1)
@@ -22870,13 +22954,13 @@ name id uuid stable-id type in
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -22888,12 +22972,12 @@ proxy none no -- --
<<<
-size: 3451
+size: 3541
location: clients/tests/test-client.py:1041:test_004()/412
cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3273 bytes
+stdout: 3363 bytes
>>>
============================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -22902,13 +22986,13 @@ name id uuid stable-id type in
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -24798,12 +24882,12 @@ 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: 4754
+size: 4844
location: clients/tests/test-client.py:1036:test_004()/455
cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 4581 bytes
+stdout: 4671 bytes
>>>
==========================================
Connection profile details (con-vpn-1)
@@ -24812,13 +24896,13 @@ name id uuid stable-id type in
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -24840,12 +24924,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 4810
+size: 4900
location: clients/tests/test-client.py:1036:test_004()/456
cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4627 bytes
+stdout: 4717 bytes
>>>
============================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -24854,13 +24938,13 @@ name id uuid stable-id type in
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -24882,12 +24966,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 4754
+size: 4844
location: clients/tests/test-client.py:1038:test_004()/457
cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 4581 bytes
+stdout: 4671 bytes
>>>
==========================================
Connection profile details (con-vpn-1)
@@ -24896,13 +24980,13 @@ name id uuid stable-id type in
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -24924,12 +25008,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 4810
+size: 4900
location: clients/tests/test-client.py:1038:test_004()/458
cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4627 bytes
+stdout: 4717 bytes
>>>
============================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -24938,13 +25022,13 @@ name id uuid stable-id type in
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -24966,12 +25050,12 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE
VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3
<<<
-size: 3440
+size: 3530
location: clients/tests/test-client.py:1041:test_004()/459
cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3260 bytes
+stdout: 3350 bytes
>>>
==========================================
Connection profile details (con-vpn-1)
@@ -24980,13 +25064,13 @@ name id uuid stable-id type in
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -24998,12 +25082,12 @@ proxy none no -- --
<<<
-size: 3463
+size: 3553
location: clients/tests/test-client.py:1041:test_004()/460
cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3273 bytes
+stdout: 3363 bytes
>>>
============================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -25012,13 +25096,13 @@ name id uuid stable-id type in
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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)
+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)
-name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table 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 -- --
+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 -- --
name service-type user-name data secrets persistent timeout
-------------------------------------------------------------------------------------------------------------------------------
@@ -26908,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: 791
+size: 793
location: clients/tests/test-client.py:1036:test_004()/503
cmd: $NMCLI --mode tabular --terse con s con-vpn-1
lang: C
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 801
+size: 803
location: clients/tests/test-client.py:1036:test_004()/504
cmd: $NMCLI --mode tabular --terse con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 791
+size: 793
location: clients/tests/test-client.py:1038:test_004()/505
cmd: $NMCLI --mode tabular --terse con s con-vpn-1
lang: C
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 801
+size: 803
location: clients/tests/test-client.py:1038:test_004()/506
cmd: $NMCLI --mode tabular --terse con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 504
+size: 506
location: clients/tests/test-client.py:1041:test_004()/507
cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 338 bytes
+stdout: 340 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: 514
+size: 516
location: clients/tests/test-client.py:1041:test_004()/508
cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 338 bytes
+stdout: 340 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::
@@ -27784,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: 803
+size: 805
location: clients/tests/test-client.py:1036:test_004()/551
cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 813
+size: 815
location: clients/tests/test-client.py:1036:test_004()/552
cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 805
location: clients/tests/test-client.py:1038:test_004()/553
cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 813
+size: 815
location: clients/tests/test-client.py:1038:test_004()/554
cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 632 bytes
+stdout: 634 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: 516
+size: 518
location: clients/tests/test-client.py:1041:test_004()/555
cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 338 bytes
+stdout: 340 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: 526
+size: 528
location: clients/tests/test-client.py:1041: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: 338 bytes
+stdout: 340 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::
@@ -28660,12 +28744,12 @@ 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: 4621
+size: 4707
location: clients/tests/test-client.py:1036:test_004()/599
cmd: $NMCLI --mode multiline con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -28700,6 +28784,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -28720,6 +28805,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -28762,12 +28848,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4651
+size: 4737
location: clients/tests/test-client.py:1036:test_004()/600
cmd: $NMCLI --mode multiline con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -28802,6 +28888,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -28822,6 +28909,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -28864,12 +28952,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4621
+size: 4707
location: clients/tests/test-client.py:1038:test_004()/601
cmd: $NMCLI --mode multiline con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -28904,6 +28992,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -28924,6 +29013,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -28966,12 +29056,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4651
+size: 4737
location: clients/tests/test-client.py:1038:test_004()/602
cmd: $NMCLI --mode multiline con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -29006,6 +29096,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -29026,6 +29117,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -29068,12 +29160,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 3540
+size: 3626
location: clients/tests/test-client.py:1041:test_004()/603
cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3379 bytes
+stdout: 3465 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -29108,6 +29200,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -29128,6 +29221,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -29150,12 +29244,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3560
+size: 3646
location: clients/tests/test-client.py:1041:test_004()/604
cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3389 bytes
+stdout: 3475 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -29190,6 +29284,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -29210,6 +29305,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -32112,12 +32208,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION: Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
<<<
-size: 4633
+size: 4719
location: clients/tests/test-client.py:1036:test_004()/647
cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32152,6 +32248,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -32172,6 +32269,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -32214,12 +32312,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4663
+size: 4749
location: clients/tests/test-client.py:1036:test_004()/648
cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32254,6 +32352,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -32274,6 +32373,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -32316,12 +32416,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4633
+size: 4719
location: clients/tests/test-client.py:1038:test_004()/649
cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 4467 bytes
+stdout: 4553 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32356,6 +32456,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -32376,6 +32477,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -32418,12 +32520,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 4663
+size: 4749
location: clients/tests/test-client.py:1038:test_004()/650
cmd: $NMCLI --mode multiline --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4487 bytes
+stdout: 4573 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32458,6 +32560,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -32478,6 +32581,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -32520,12 +32624,12 @@ VPN.CFG[2]: key2 = val2
VPN.CFG[3]: key3 = val3
<<<
-size: 3552
+size: 3638
location: clients/tests/test-client.py:1041:test_004()/651
cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3379 bytes
+stdout: 3465 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32560,6 +32664,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -32580,6 +32685,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -32602,12 +32708,12 @@ proxy.pac-url: --
proxy.pac-script: --
<<<
-size: 3572
+size: 3658
location: clients/tests/test-client.py:1041:test_004()/652
cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 3389 bytes
+stdout: 3475 bytes
>>>
connection.id: con-vpn-1
connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -32642,6 +32748,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -32662,6 +32769,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -35564,12 +35672,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION: Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
<<<
-size: 5642
+size: 5728
location: clients/tests/test-client.py:1036:test_004()/695
cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -35608,6 +35716,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -35629,6 +35738,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -35679,12 +35789,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5684
+size: 5770
location: clients/tests/test-client.py:1036:test_004()/696
cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -35723,6 +35833,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -35744,6 +35855,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -35794,12 +35906,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5642
+size: 5728
location: clients/tests/test-client.py:1038:test_004()/697
cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -35838,6 +35950,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -35859,6 +35972,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -35909,12 +36023,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5684
+size: 5770
location: clients/tests/test-client.py:1038:test_004()/698
cmd: $NMCLI --mode multiline --pretty con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -35953,6 +36067,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -35974,6 +36089,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -36024,12 +36140,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 4168
+size: 4254
location: clients/tests/test-client.py:1041:test_004()/699
cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3998 bytes
+stdout: 4084 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -36068,6 +36184,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -36089,6 +36206,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -36114,12 +36232,12 @@ proxy.pac-script: --
-------------------------------------------------------------------------------
<<<
-size: 4193
+size: 4279
location: clients/tests/test-client.py:1041:test_004()/700
cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4013 bytes
+stdout: 4099 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -36158,6 +36276,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -36179,6 +36298,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -39660,12 +39780,12 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
-------------------------------------------------------------------------------
<<<
-size: 5654
+size: 5740
location: clients/tests/test-client.py:1036:test_004()/743
cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -39704,6 +39824,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -39725,6 +39846,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -39775,12 +39897,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5696
+size: 5782
location: clients/tests/test-client.py:1036:test_004()/744
cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -39819,6 +39941,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -39840,6 +39963,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -39890,12 +40014,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5654
+size: 5740
location: clients/tests/test-client.py:1038:test_004()/745
cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 5479 bytes
+stdout: 5565 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -39934,6 +40058,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -39955,6 +40080,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -40005,12 +40131,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 5696
+size: 5782
location: clients/tests/test-client.py:1038:test_004()/746
cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 5511 bytes
+stdout: 5597 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -40049,6 +40175,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -40070,6 +40197,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -40120,12 +40248,12 @@ VPN.CFG[3]: key3 = val3
-------------------------------------------------------------------------------
<<<
-size: 4180
+size: 4266
location: clients/tests/test-client.py:1041:test_004()/747
cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 3998 bytes
+stdout: 4084 bytes
>>>
===============================================================================
Connection profile details (con-vpn-1)
@@ -40164,6 +40292,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
@@ -40185,6 +40314,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
@@ -40210,12 +40340,12 @@ proxy.pac-script: --
-------------------------------------------------------------------------------
<<<
-size: 4205
+size: 4291
location: clients/tests/test-client.py:1041:test_004()/748
cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 4013 bytes
+stdout: 4099 bytes
>>>
===============================================================================
Szczegóły profilu połączenia (con-vpn-1)
@@ -40254,6 +40384,7 @@ ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
+ipv4.routing-rules: --
ipv4.ignore-auto-routes: nie
ipv4.ignore-auto-dns: nie
ipv4.dhcp-client-id: --
@@ -40275,6 +40406,7 @@ ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
+ipv6.routing-rules: --
ipv6.ignore-auto-routes: nie
ipv6.ignore-auto-dns: nie
ipv6.never-default: nie
@@ -43756,12 +43888,12 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone)
-------------------------------------------------------------------------------
<<<
-size: 2340
+size: 2380
location: clients/tests/test-client.py:1036:test_004()/791
cmd: $NMCLI --mode multiline --terse con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -43796,6 +43928,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -43816,6 +43949,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -43858,12 +43992,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2350
+size: 2390
location: clients/tests/test-client.py:1036:test_004()/792
cmd: $NMCLI --mode multiline --terse con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -43898,6 +44032,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -43918,6 +44053,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -43960,12 +44096,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2340
+size: 2380
location: clients/tests/test-client.py:1038:test_004()/793
cmd: $NMCLI --mode multiline --terse con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -44000,6 +44136,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -44020,6 +44157,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -44062,12 +44200,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2350
+size: 2390
location: clients/tests/test-client.py:1038:test_004()/794
cmd: $NMCLI --mode multiline --terse con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -44102,6 +44240,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -44122,6 +44261,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -44164,12 +44304,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 1788
+size: 1828
location: clients/tests/test-client.py:1041:test_004()/795
cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -44204,6 +44344,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -44224,6 +44365,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -44246,12 +44388,12 @@ proxy.pac-url:
proxy.pac-script:
<<<
-size: 1798
+size: 1838
location: clients/tests/test-client.py:1041:test_004()/796
cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -44286,6 +44428,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -44306,6 +44449,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -47208,12 +47352,12 @@ NEIGHBOR[2].SYSTEM-DESCRIPTION:Test system #3
NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone)
<<<
-size: 2352
+size: 2392
location: clients/tests/test-client.py:1036:test_004()/839
cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -47248,6 +47392,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -47268,6 +47413,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -47310,12 +47456,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2362
+size: 2402
location: clients/tests/test-client.py:1036:test_004()/840
cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -47350,6 +47496,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -47370,6 +47517,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -47412,12 +47560,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2352
+size: 2392
location: clients/tests/test-client.py:1038:test_004()/841
cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
lang: C
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -47452,6 +47600,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -47472,6 +47621,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -47514,12 +47664,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 2362
+size: 2402
location: clients/tests/test-client.py:1038:test_004()/842
cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1
lang: pl_PL.UTF-8
returncode: 0
-stdout: 2178 bytes
+stdout: 2218 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -47554,6 +47704,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -47574,6 +47725,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -47616,12 +47768,12 @@ VPN.CFG[2]:key2 = val2
VPN.CFG[3]:key3 = val3
<<<
-size: 1800
+size: 1840
location: clients/tests/test-client.py:1041:test_004()/843
cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1
lang: C
returncode: 0
-stdout: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -47656,6 +47808,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -47676,6 +47829,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
@@ -47698,12 +47852,12 @@ proxy.pac-url:
proxy.pac-script:
<<<
-size: 1810
+size: 1850
location: clients/tests/test-client.py:1041: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: 1619 bytes
+stdout: 1659 bytes
>>>
connection.id:con-vpn-1
connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP
@@ -47738,6 +47892,7 @@ ipv4.gateway:
ipv4.routes:
ipv4.route-metric:-1
ipv4.route-table:0
+ipv4.routing-rules:
ipv4.ignore-auto-routes:no
ipv4.ignore-auto-dns:no
ipv4.dhcp-client-id:
@@ -47758,6 +47913,7 @@ ipv6.gateway:
ipv6.routes:
ipv6.route-metric:-1
ipv6.route-table:0
+ipv6.routing-rules:
ipv6.ignore-auto-routes:no
ipv6.ignore-auto-dns:no
ipv6.never-default:no
diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h
index 60774c49b3..95ec86a059 100644
--- a/libnm-core/nm-core-internal.h
+++ b/libnm-core/nm-core-internal.h
@@ -250,6 +250,8 @@ guint nm_setting_ethtool_init_features (NMSettingEthtool *setting,
guint8 *_nm_utils_hwaddr_aton (const char *asc, gpointer buffer, gsize buffer_length, gsize *out_length);
const char *nm_utils_hwaddr_ntoa_buf (gconstpointer addr, gsize addr_len, gboolean upper_case, char *buf, gsize buf_len);
+gboolean nm_utils_is_valid_iface_name_utf8safe (const char *utf8safe_name);
+
GSList * _nm_utils_hash_values_to_slist (GHashTable *hash);
GHashTable *_nm_utils_copy_strdict (GHashTable *strdict);
@@ -611,6 +613,47 @@ void _nm_wireguard_peer_set_public_key_bin (NMWireGuardPeer *self,
/*****************************************************************************/
+const NMIPAddr *nm_ip_routing_rule_get_from_bin (const NMIPRoutingRule *self);
+void nm_ip_routing_rule_set_from_bin (NMIPRoutingRule *self,
+ gconstpointer from,
+ guint8 len);
+
+const NMIPAddr *nm_ip_routing_rule_get_to_bin (const NMIPRoutingRule *self);
+void nm_ip_routing_rule_set_to_bin (NMIPRoutingRule *self,
+ gconstpointer to,
+ guint8 len);
+
+gboolean nm_ip_routing_rule_get_xifname_bin (const NMIPRoutingRule *self,
+ gboolean iif /* or else oif */,
+ char out_xifname[static 16]);
+
+#define NM_IP_ROUTING_RULE_ATTR_ACTION "action"
+#define NM_IP_ROUTING_RULE_ATTR_DPORT_END "dport-end"
+#define NM_IP_ROUTING_RULE_ATTR_DPORT_START "dport-start"
+#define NM_IP_ROUTING_RULE_ATTR_FAMILY "family"
+#define NM_IP_ROUTING_RULE_ATTR_FROM "from"
+#define NM_IP_ROUTING_RULE_ATTR_FROM_LEN "from-len"
+#define NM_IP_ROUTING_RULE_ATTR_FWMARK "fwmark"
+#define NM_IP_ROUTING_RULE_ATTR_FWMASK "fwmask"
+#define NM_IP_ROUTING_RULE_ATTR_IIFNAME "iifname"
+#define NM_IP_ROUTING_RULE_ATTR_INVERT "invert"
+#define NM_IP_ROUTING_RULE_ATTR_IPPROTO "ipproto"
+#define NM_IP_ROUTING_RULE_ATTR_OIFNAME "oifname"
+#define NM_IP_ROUTING_RULE_ATTR_PRIORITY "priority"
+#define NM_IP_ROUTING_RULE_ATTR_SPORT_END "sport-end"
+#define NM_IP_ROUTING_RULE_ATTR_SPORT_START "sport-start"
+#define NM_IP_ROUTING_RULE_ATTR_TABLE "table"
+#define NM_IP_ROUTING_RULE_ATTR_TO "to"
+#define NM_IP_ROUTING_RULE_ATTR_TOS "tos"
+#define NM_IP_ROUTING_RULE_ATTR_TO_LEN "to-len"
+
+NMIPRoutingRule *nm_ip_routing_rule_from_dbus (GVariant *variant,
+ gboolean strict,
+ GError **error);
+GVariant *nm_ip_routing_rule_to_dbus (const NMIPRoutingRule *self);
+
+/*****************************************************************************/
+
typedef struct _NMSettInfoSetting NMSettInfoSetting;
typedef struct _NMSettInfoProperty NMSettInfoProperty;
diff --git a/libnm-core/nm-keyfile.c b/libnm-core/nm-keyfile.c
index 0d833752ef..a541bd556c 100644
--- a/libnm-core/nm-keyfile.c
+++ b/libnm-core/nm-keyfile.c
@@ -41,6 +41,8 @@
/*****************************************************************************/
+typedef struct _ParseInfoProperty ParseInfoProperty;
+
typedef struct {
NMConnection *connection;
GKeyFile *keyfile;
@@ -534,13 +536,19 @@ typedef struct {
const char *s_key;
gint32 key_idx;
gint8 key_type;
-} IPAddrRouteBuildListData;
+} BuildListData;
+
+typedef enum {
+ BUILD_LIST_TYPE_ADDRESSES,
+ BUILD_LIST_TYPE_ROUTES,
+ BUILD_LIST_TYPE_ROUTING_RULES,
+} BuildListType;
static int
-_ip_addrroute_build_lst_data_cmp (gconstpointer p_a, gconstpointer p_b, gpointer user_data)
+_build_list_data_cmp (gconstpointer p_a, gconstpointer p_b, gpointer user_data)
{
- const IPAddrRouteBuildListData *a = p_a;
- const IPAddrRouteBuildListData *b = p_b;
+ const BuildListData *a = p_a;
+ const BuildListData *b = p_b;
NM_CMP_FIELD (a, b, key_idx);
NM_CMP_FIELD (a, b, key_type);
@@ -549,10 +557,25 @@ _ip_addrroute_build_lst_data_cmp (gconstpointer p_a, gconstpointer p_b, gpointer
}
static gboolean
-ip_addrroute_match_key_w_name_ (const char *key,
- const char *base_name,
- gsize base_name_l,
- gint32 *out_key_idx)
+_build_list_data_is_shadowed (const BuildListData *build_list,
+ gsize build_list_len,
+ gsize idx)
+{
+ /* the keyfile contains duplicate keys, which are both returned
+ * by g_key_file_get_keys() (WHY??).
+ *
+ * Skip the earlier one. */
+ return idx + 1 < build_list_len
+ && build_list[idx].key_idx == build_list[idx + 1].key_idx
+ && build_list[idx].key_type == build_list[idx + 1].key_type
+ && nm_streq (build_list[idx].s_key, build_list[idx + 1].s_key);
+}
+
+static gboolean
+_build_list_match_key_w_name_impl (const char *key,
+ const char *base_name,
+ gsize base_name_l,
+ gint32 *out_key_idx)
{
gint64 v;
@@ -595,100 +618,125 @@ ip_addrroute_match_key_w_name_ (const char *key,
return TRUE;
}
-static gboolean
-ip_addrroute_match_key (const char *key,
- gboolean is_routes,
- gint32 *out_key_idx,
- gint8 *out_key_type)
-{
-#define ip_addrroute_match_key_w_name(key, base_name, out_key_idx) \
- ip_addrroute_match_key_w_name_ (key, base_name, NM_STRLEN (base_name), out_key_idx)
-
- if (is_routes) {
- if (ip_addrroute_match_key_w_name (key, "route", out_key_idx))
- NM_SET_OUT (out_key_type, 0);
- else if (ip_addrroute_match_key_w_name (key, "routes", out_key_idx))
- NM_SET_OUT (out_key_type, 1);
- else
- return FALSE;
- } else {
- if (ip_addrroute_match_key_w_name (key, "address", out_key_idx))
- NM_SET_OUT (out_key_type, 0);
- else if (ip_addrroute_match_key_w_name (key, "addresses", out_key_idx))
- NM_SET_OUT (out_key_type, 1);
- else
- return FALSE;
- }
- return TRUE;
-}
+#define _build_list_match_key_w_name(key, base_name, out_key_idx) \
+ _build_list_match_key_w_name_impl (key, base_name, NM_STRLEN (base_name), out_key_idx)
-static void
-ip_address_or_route_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *setting_key)
+static BuildListData *
+_build_list_create (GKeyFile *keyfile,
+ const char *group_name,
+ BuildListType build_list_type,
+ gsize *out_build_list_len,
+ char ***out_keys_strv)
{
- const char *setting_name = nm_setting_get_name (setting);
- gboolean is_ipv6 = nm_streq (setting_name, "ipv6");
- gboolean is_routes = nm_streq (setting_key, "routes");
- gs_free char *gateway = NULL;
- gs_unref_ptrarray GPtrArray *list = NULL;
gs_strfreev char **keys = NULL;
gsize i_keys, n_keys;
- gs_free IPAddrRouteBuildListData *build_list = NULL;
- gsize i_build_list, build_list_len = 0;
+ gs_free BuildListData *build_list = NULL;
+ gsize build_list_len = 0;
- keys = nm_keyfile_plugin_kf_get_keys (info->keyfile, setting_name, &n_keys, NULL);
+ nm_assert (out_build_list_len && *out_build_list_len == 0);
+ nm_assert (out_keys_strv && !*out_keys_strv);
+
+ keys = nm_keyfile_plugin_kf_get_keys (keyfile, group_name, &n_keys, NULL);
if (n_keys == 0)
- return;
+ return NULL;
- /* first create a list of all relevant keys, and sort them. */
for (i_keys = 0; i_keys < n_keys; i_keys++) {
const char *s_key = keys[i_keys];
gint32 key_idx;
gint8 key_type;
- if (!ip_addrroute_match_key (s_key, is_routes, &key_idx, &key_type))
- continue;
+ switch (build_list_type) {
+ case BUILD_LIST_TYPE_ROUTES:
+ if (_build_list_match_key_w_name (s_key, "route", &key_idx))
+ key_type = 0;
+ else if (_build_list_match_key_w_name (s_key, "routes", &key_idx))
+ key_type = 1;
+ else
+ continue;
+ break;
+ case BUILD_LIST_TYPE_ADDRESSES:
+ if (_build_list_match_key_w_name (s_key, "address", &key_idx))
+ key_type = 0;
+ else if (_build_list_match_key_w_name (s_key, "addresses", &key_idx))
+ key_type = 1;
+ else
+ continue;
+ break;
+ case BUILD_LIST_TYPE_ROUTING_RULES:
+ if (_build_list_match_key_w_name (s_key, "routing-rule", &key_idx))
+ key_type = 0;
+ else
+ continue;
+ break;
+ default:
+ nm_assert_not_reached ();
+ break;
+ }
if (G_UNLIKELY (!build_list))
- build_list = g_new (IPAddrRouteBuildListData, n_keys - i_keys);
+ build_list = g_new (BuildListData, n_keys - i_keys);
- build_list[build_list_len].s_key = s_key;
- build_list[build_list_len].key_idx = key_idx;
- build_list[build_list_len].key_type = key_type;
- build_list_len++;
+ build_list[build_list_len++] = (BuildListData) {
+ .s_key = s_key,
+ .key_idx = key_idx,
+ .key_type = key_type,
+ };
}
if (build_list_len == 0)
- return;
+ return NULL;
- g_qsort_with_data (build_list,
- build_list_len,
- sizeof (IPAddrRouteBuildListData),
- _ip_addrroute_build_lst_data_cmp,
- NULL);
+ if (build_list_len > 1) {
+ g_qsort_with_data (build_list,
+ build_list_len,
+ sizeof (BuildListData),
+ _build_list_data_cmp,
+ NULL);
+ }
+
+ *out_build_list_len = build_list_len;
+ *out_keys_strv = g_steal_pointer (&keys);
+ return g_steal_pointer (&build_list);
+}
+
+static void
+ip_address_or_route_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *setting_key)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ gboolean is_ipv6 = nm_streq (setting_name, "ipv6");
+ gboolean is_routes = nm_streq (setting_key, "routes");
+ gs_free char *gateway = NULL;
+ gs_unref_ptrarray GPtrArray *list = NULL;
+ gs_strfreev char **keys = NULL;
+ gs_free BuildListData *build_list = NULL;
+ gsize i_build_list, build_list_len = 0;
+
+ build_list = _build_list_create (info->keyfile,
+ setting_name,
+ is_routes
+ ? BUILD_LIST_TYPE_ROUTES
+ : BUILD_LIST_TYPE_ADDRESSES,
+ &build_list_len,
+ &keys);
+ if (!build_list)
+ return;
list = g_ptr_array_new_with_free_func (is_routes
? (GDestroyNotify) nm_ip_route_unref
: (GDestroyNotify) nm_ip_address_unref);
for (i_build_list = 0; i_build_list < build_list_len; i_build_list++) {
- const IPAddrRouteBuildListData *build_data = &build_list[i_build_list];
+ const char *s_key;
gpointer item;
- if ( i_build_list + 1 < build_list_len
- && build_data->key_idx == build_data[1].key_idx
- && build_data->key_type == build_data[1].key_type
- && nm_streq (build_data->s_key, build_data[1].s_key)) {
- /* the keyfile contains duplicate keys, which are both returned
- * by g_key_file_get_keys() (WHY??).
- *
- * Skip the earlier one. */
+ if (_build_list_data_is_shadowed (build_list, build_list_len, i_build_list))
continue;
- }
+ s_key = build_list[i_build_list].s_key;
item = read_one_ip_address_or_route (info,
setting_key,
setting_name,
- build_data->s_key,
+ s_key,
is_ipv6,
is_routes,
gateway ? NULL : &gateway,
@@ -696,7 +744,7 @@ ip_address_or_route_parser (KeyfileReaderInfo *info, NMSetting *setting, const c
if (item && is_routes) {
char options_key[128];
- nm_sprintf_buf (options_key, "%s_options", build_data->s_key);
+ nm_sprintf_buf (options_key, "%s_options", s_key);
fill_route_attributes (info->keyfile,
item,
setting_name,
@@ -719,6 +767,63 @@ ip_address_or_route_parser (KeyfileReaderInfo *info, NMSetting *setting, const c
}
static void
+ip_routing_rule_parser_full (KeyfileReaderInfo *info,
+ const NMMetaSettingInfo *setting_info,
+ const NMSettInfoProperty *property_info,
+ const ParseInfoProperty *pip,
+ NMSetting *setting)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ gboolean is_ipv6 = nm_streq (setting_name, "ipv6");
+ gs_strfreev char **keys = NULL;
+ gs_free BuildListData *build_list = NULL;
+ gsize i_build_list, build_list_len = 0;
+
+ build_list = _build_list_create (info->keyfile,
+ setting_name,
+ BUILD_LIST_TYPE_ROUTING_RULES,
+ &build_list_len,
+ &keys);
+ if (!build_list)
+ return;
+
+ for (i_build_list = 0; i_build_list < build_list_len; i_build_list++) {
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rule = NULL;
+ gs_free char *value = NULL;
+ gs_free_error GError *local = NULL;
+
+ if (_build_list_data_is_shadowed (build_list, build_list_len, i_build_list))
+ continue;
+
+ value = nm_keyfile_plugin_kf_get_string (info->keyfile,
+ setting_name,
+ build_list[i_build_list].s_key,
+ NULL);
+ if (!value)
+ continue;
+
+ rule = nm_ip_routing_rule_from_string (value,
+ ( NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | ( is_ipv6
+ ? NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6
+ : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET)),
+ NULL,
+ &local);
+ if (!rule) {
+ handle_warn (info, property_info->name, NM_KEYFILE_WARN_SEVERITY_WARN,
+ _("invalid value for \"%s\": %s"),
+ build_list[i_build_list].s_key,
+ local->message);
+ if (info->error)
+ return;
+ continue;
+ }
+
+ nm_setting_ip_config_add_routing_rule (NM_SETTING_IP_CONFIG (setting), rule);
+ }
+}
+
+static void
ip_dns_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key)
{
int addr_family;
@@ -1922,6 +2027,40 @@ bridge_vlan_writer (KeyfileWriterInfo *info,
}
static void
+ip_routing_rule_writer_full (KeyfileWriterInfo *info,
+ const NMMetaSettingInfo *setting_info,
+ const NMSettInfoProperty *property_info,
+ const ParseInfoProperty *pip,
+ NMSetting *setting)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
+ guint i, j, n;
+ char key_name_full[100] = "routing-rule";
+ char *key_name_num = &key_name_full[NM_STRLEN ("routing-rule")];
+
+ n = nm_setting_ip_config_get_num_routing_rules (s_ip);
+ j = 0;
+ for (i = 0; i < n; i++) {
+ NMIPRoutingRule *rule = nm_setting_ip_config_get_routing_rule (s_ip, i);
+ gs_free char *str = NULL;
+
+ str = nm_ip_routing_rule_to_string (rule,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE,
+ NULL,
+ NULL);
+ if (!str)
+ continue;
+
+ sprintf (key_name_num, "%u", ++j);
+ nm_keyfile_plugin_kf_set_string (info->keyfile,
+ setting_name,
+ key_name_full,
+ str);
+ }
+}
+
+static void
qdisc_writer (KeyfileWriterInfo *info,
NMSetting *setting,
const char *key,
@@ -2232,24 +2371,40 @@ cert_writer (KeyfileWriterInfo *info,
/*****************************************************************************/
-typedef struct {
+struct _ParseInfoProperty {
const char *property_name;
- void (*parser) (KeyfileReaderInfo *info,
- NMSetting *setting,
- const char *key);
- void (*writer) (KeyfileWriterInfo *info,
- NMSetting *setting,
- const char *key,
- const GValue *value);
+ union {
+ void (*parser) (KeyfileReaderInfo *info,
+ NMSetting *setting,
+ const char *key);
+ void (*parser_full) (KeyfileReaderInfo *info,
+ const NMMetaSettingInfo *setting_info,
+ const NMSettInfoProperty *property_info,
+ const ParseInfoProperty *pip,
+ NMSetting *setting);
+ };
+ union {
+ void (*writer) (KeyfileWriterInfo *info,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value);
+ void (*writer_full) (KeyfileWriterInfo *info,
+ const NMMetaSettingInfo *setting_info,
+ const NMSettInfoProperty *property_info,
+ const ParseInfoProperty *pip,
+ NMSetting *setting);
+ };
bool parser_skip;
bool parser_no_check_key:1;
bool writer_skip:1;
+ bool has_writer_full:1;
+ bool has_parser_full:1;
/* usually, we skip to write values that have their
* default value. By setting this flag to TRUE, also
* default values are written. */
bool writer_persist_default:1;
-} ParseInfoProperty;
+};
#define PARSE_INFO_PROPERTY(_property_name, ...) \
(&((const ParseInfoProperty) { \
@@ -2406,6 +2561,13 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
.parser = ip_address_or_route_parser,
.writer = route_writer,
),
+ PARSE_INFO_PROPERTY (NM_SETTING_IP_CONFIG_ROUTING_RULES,
+ .parser_no_check_key = TRUE,
+ .parser_full = ip_routing_rule_parser_full,
+ .writer_full = ip_routing_rule_writer_full,
+ .has_parser_full = TRUE,
+ .has_writer_full = TRUE,
+ ),
),
),
PARSE_INFO_SETTING (NM_META_SETTING_TYPE_IP6_CONFIG,
@@ -2434,6 +2596,13 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
.parser = ip_address_or_route_parser,
.writer = route_writer,
),
+ PARSE_INFO_PROPERTY (NM_SETTING_IP_CONFIG_ROUTING_RULES,
+ .parser_no_check_key = TRUE,
+ .parser_full = ip_routing_rule_parser_full,
+ .writer_full = ip_routing_rule_writer_full,
+ .has_parser_full = TRUE,
+ .has_writer_full = TRUE,
+ ),
),
),
PARSE_INFO_SETTING (NM_META_SETTING_TYPE_SERIAL,
@@ -2612,7 +2781,7 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = {
static const ParseInfoProperty *
_parse_info_find (NMSetting *setting,
const char *property_name,
- const char **out_setting_name)
+ const NMMetaSettingInfo **out_setting_info)
{
const NMMetaSettingInfo *setting_info;
const ParseInfoSetting *pis;
@@ -2651,11 +2820,13 @@ _parse_info_find (NMSetting *setting,
if ( !NM_IS_SETTING (setting)
|| !(setting_info = NM_SETTING_GET_CLASS (setting)->setting_info)) {
/* handle invalid setting objects gracefully. */
- *out_setting_name = NULL;
+ *out_setting_info = NULL;
return NULL;
}
- *out_setting_name = setting_info->setting_name;
+ nm_assert (setting_info->setting_name);
+
+ *out_setting_info = setting_info;
if ((pis = parse_infos[setting_info->meta_type])) {
G_STATIC_ASSERT_EXPR (G_STRUCT_OFFSET (ParseInfoProperty, property_name) == 0);
@@ -2682,32 +2853,42 @@ read_one_setting_value (KeyfileReaderInfo *info,
{
GKeyFile *keyfile = info->keyfile;
gs_free_error GError *err = NULL;
+ const NMMetaSettingInfo *setting_info;
const ParseInfoProperty *pip;
gs_free char *tmp_str = NULL;
- const char *setting_name;
const char *key;
GType type;
guint64 u64;
gint64 i64;
nm_assert (!info->error);
- nm_assert (property_info->param_spec);
+ nm_assert ( !property_info->param_spec
+ || nm_streq (property_info->param_spec->name, property_info->name));
- if ((property_info->param_spec->flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) != G_PARAM_WRITABLE)
- return;
+ key = property_info->name;
- key = property_info->param_spec->name;
+ pip = _parse_info_find (setting, key, &setting_info);
- pip = _parse_info_find (setting, key, &setting_name);
+ nm_assert (setting_info);
- nm_assert (setting_name);
-
- if ( !pip
- && nm_streq (key, NM_SETTING_NAME))
- return;
+ if (!pip) {
+ if (nm_streq (key, NM_SETTING_NAME))
+ return;
+ if (!property_info->param_spec)
+ return;
+ if ((property_info->param_spec->flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) != G_PARAM_WRITABLE)
+ return;
+ } else {
+ if (pip->parser_skip)
+ return;
+ if (pip->has_parser_full) {
+ pip->parser_full (info, setting_info, property_info, pip, setting);
+ return;
+ }
+ }
- if (pip && pip->parser_skip)
- return;
+ nm_assert (property_info->param_spec);
+ nm_assert ((property_info->param_spec->flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) == G_PARAM_WRITABLE);
/* Check for the exact key in the GKeyFile if required. Most setting
* properties map 1:1 to a key in the GKeyFile, but for those properties
@@ -2715,7 +2896,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
* encoded by the setting property, this won't be true.
*/
if ( (!pip || !pip->parser_no_check_key)
- && !nm_keyfile_plugin_kf_has_key (keyfile, setting_name, key, &err)) {
+ && !nm_keyfile_plugin_kf_has_key (keyfile, setting_info->setting_name, key, &err)) {
/* Key doesn't exist or an error occurred, thus nothing to do. */
if (err) {
if (!handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
@@ -2726,7 +2907,8 @@ read_one_setting_value (KeyfileReaderInfo *info,
return;
}
- if (pip && pip->parser) {
+ if ( pip
+ && pip->parser) {
pip->parser (info, setting, key);
return;
}
@@ -2736,11 +2918,11 @@ read_one_setting_value (KeyfileReaderInfo *info,
if (type == G_TYPE_STRING) {
gs_free char *str_val = NULL;
- str_val = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, &err);
+ str_val = nm_keyfile_plugin_kf_get_string (keyfile, setting_info->setting_name, key, &err);
if (!err)
nm_g_object_set_property_string_take (G_OBJECT (setting), key, g_steal_pointer (&str_val), &err);
} else if (type == G_TYPE_UINT) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
u64 = _nm_utils_ascii_str_to_uint64 (tmp_str, 0, 0, G_MAXUINT, G_MAXUINT64);
if ( u64 == G_MAXUINT64
@@ -2751,7 +2933,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_uint (G_OBJECT (setting), key, u64, &err);
}
} else if (type == G_TYPE_INT) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT, G_MAXINT, G_MININT64);
if ( i64 == G_MININT64
@@ -2764,11 +2946,11 @@ read_one_setting_value (KeyfileReaderInfo *info,
} else if (type == G_TYPE_BOOLEAN) {
gboolean bool_val;
- bool_val = nm_keyfile_plugin_kf_get_boolean (keyfile, setting_name, key, &err);
+ bool_val = nm_keyfile_plugin_kf_get_boolean (keyfile, setting_info->setting_name, key, &err);
if (!err)
nm_g_object_set_property_boolean (G_OBJECT (setting), key, bool_val, &err);
} else if (type == G_TYPE_CHAR) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
/* As documented by glib, G_TYPE_CHAR is really a (signed!) gint8. */
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT8, G_MAXINT8, G_MININT64);
@@ -2780,7 +2962,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_char (G_OBJECT (setting), key, i64, &err);
}
} else if (type == G_TYPE_UINT64) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
u64 = _nm_utils_ascii_str_to_uint64 (tmp_str, 0, 0, G_MAXUINT64, G_MAXUINT64);
if ( u64 == G_MAXUINT64
@@ -2791,7 +2973,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_uint64 (G_OBJECT (setting), key, u64, &err);
}
} else if (type == G_TYPE_INT64) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT64, G_MAXINT64, G_MAXINT64);
if ( i64 == G_MAXINT64
@@ -2809,7 +2991,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
int i;
gboolean already_warned = FALSE;
- tmp = nm_keyfile_plugin_kf_get_integer_list (keyfile, setting_name, key, &length, NULL);
+ tmp = nm_keyfile_plugin_kf_get_integer_list (keyfile, setting_info->setting_name, key, &length, NULL);
array = g_byte_array_sized_new (length);
for (i = 0; i < length; i++) {
@@ -2836,14 +3018,14 @@ read_one_setting_value (KeyfileReaderInfo *info,
gs_strfreev char **sa = NULL;
gsize length;
- sa = nm_keyfile_plugin_kf_get_string_list (keyfile, setting_name, key, &length, NULL);
+ sa = nm_keyfile_plugin_kf_get_string_list (keyfile, setting_info->setting_name, key, &length, NULL);
g_object_set (setting, key, sa, NULL);
} else if (type == G_TYPE_HASH_TABLE) {
read_hash_of_string (keyfile, setting, key);
} else if (type == G_TYPE_ARRAY) {
read_array_of_uint (keyfile, setting, key);
} else if (G_TYPE_IS_FLAGS (type)) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
u64 = _nm_utils_ascii_str_to_uint64 (tmp_str, 0, 0, G_MAXUINT, G_MAXUINT64);
if ( u64 == G_MAXUINT64
@@ -2854,7 +3036,7 @@ read_one_setting_value (KeyfileReaderInfo *info,
nm_g_object_set_property_flags (G_OBJECT (setting), key, type, u64, &err);
}
} else if (G_TYPE_IS_ENUM (type)) {
- tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_name, key, &err);
+ tmp_str = nm_keyfile_plugin_kf_get_value (keyfile, setting_info->setting_name, key, &err);
if (!err) {
i64 = _nm_utils_ascii_str_to_int64 (tmp_str, 0, G_MININT, G_MAXINT, G_MAXINT64);
if ( i64 == G_MAXINT64
@@ -2976,13 +3158,11 @@ _read_setting (KeyfileReaderInfo *info)
}
for (i = 0; i < sett_info->property_infos_len; i++) {
- const NMSettInfoProperty *property_info = &sett_info->property_infos[i];
-
- if (property_info->param_spec) {
- read_one_setting_value (info, setting, property_info);
- if (info->error)
- goto out;
- }
+ read_one_setting_value (info,
+ setting,
+ &sett_info->property_infos[i]);
+ if (info->error)
+ goto out;
}
out:
@@ -3291,40 +3471,47 @@ write_setting_value (KeyfileWriterInfo *info,
NMSetting *setting,
const NMSettInfoProperty *property_info)
{
+ const NMMetaSettingInfo *setting_info;
const ParseInfoProperty *pip;
- const char *setting_name;
const char *key;
char numstr[64];
GValue value;
GType type;
nm_assert (!info->error);
+ nm_assert ( !property_info->param_spec
+ || nm_streq (property_info->param_spec->name, property_info->name));
- if (!property_info->param_spec)
- return;
-
- key = property_info->param_spec->name;
+ key = property_info->name;
- pip = _parse_info_find (setting, key, &setting_name);
+ pip = _parse_info_find (setting, key, &setting_info);
- if (!setting_name) {
- /* the setting type is unknown. That is highly unexpected
- * (and as this is currently only called from NetworkManager
- * daemon, not possible).
- *
- * Still, handle it gracefully, because later keyfile writer will become
- * public API of libnm, where @setting is (untrusted) user input.
- *
- * Gracefully here just means: ignore the setting. */
- return;
+ if (!pip) {
+ if (!setting_info) {
+ /* the setting type is unknown. That is highly unexpected
+ * (and as this is currently only called from NetworkManager
+ * daemon, not possible).
+ *
+ * Still, handle it gracefully, because later keyfile writer will become
+ * public API of libnm, where @setting is (untrusted) user input.
+ *
+ * Gracefully here just means: ignore the setting. */
+ return;
+ }
+ if (!property_info->param_spec)
+ return;
+ if (nm_streq (key, NM_SETTING_NAME))
+ return;
+ } else {
+ if (pip->has_writer_full) {
+ pip->writer_full (info, setting_info, property_info, pip, setting);
+ return;
+ }
+ if (pip->writer_skip)
+ return;
}
- if ( !pip
- && nm_streq (key, NM_SETTING_NAME))
- return;
-
- if (pip && pip->writer_skip)
- return;
+ nm_assert (property_info->param_spec);
/* Don't write secrets that are owned by user secret agents or aren't
* supposed to be saved. VPN secrets are handled specially though since
@@ -3348,11 +3535,12 @@ write_setting_value (KeyfileWriterInfo *info,
if ( (!pip || !pip->writer_persist_default)
&& g_param_value_defaults (property_info->param_spec, &value)) {
- nm_assert (!g_key_file_has_key (info->keyfile, setting_name, key, NULL));
+ nm_assert (!g_key_file_has_key (info->keyfile, setting_info->setting_name, key, NULL));
goto out_unset_value;
}
- if (pip && pip->writer) {
+ if ( pip
+ && pip->writer) {
pip->writer (info, setting, key, &value);
goto out_unset_value;
}
@@ -3363,27 +3551,27 @@ write_setting_value (KeyfileWriterInfo *info,
str = g_value_get_string (&value);
if (str)
- nm_keyfile_plugin_kf_set_string (info->keyfile, setting_name, key, str);
+ nm_keyfile_plugin_kf_set_string (info->keyfile, setting_info->setting_name, key, str);
} else if (type == G_TYPE_UINT) {
nm_sprintf_buf (numstr, "%u", g_value_get_uint (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_INT) {
nm_sprintf_buf (numstr, "%d", g_value_get_int (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_UINT64) {
nm_sprintf_buf (numstr, "%" G_GUINT64_FORMAT, g_value_get_uint64 (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_INT64) {
nm_sprintf_buf (numstr, "%" G_GINT64_FORMAT, g_value_get_int64 (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_BOOLEAN) {
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key,
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key,
g_value_get_boolean (&value)
? "true"
: "false");
} else if (type == G_TYPE_CHAR) {
nm_sprintf_buf (numstr, "%d", (int) g_value_get_schar (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (type == G_TYPE_BYTES) {
GBytes *bytes;
const guint8 *data;
@@ -3393,22 +3581,22 @@ write_setting_value (KeyfileWriterInfo *info,
data = bytes ? g_bytes_get_data (bytes, &len) : NULL;
if (data != NULL && len > 0)
- nm_keyfile_plugin_kf_set_integer_list_uint8 (info->keyfile, setting_name, key, data, len);
+ nm_keyfile_plugin_kf_set_integer_list_uint8 (info->keyfile, setting_info->setting_name, key, data, len);
} else if (type == G_TYPE_STRV) {
char **array;
array = (char **) g_value_get_boxed (&value);
- nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_name, key, (const char **const) array, g_strv_length (array));
+ nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_info->setting_name, key, (const char **const) array, g_strv_length (array));
} else if (type == G_TYPE_HASH_TABLE) {
write_hash_of_string (info->keyfile, setting, key, &value);
} else if (type == G_TYPE_ARRAY) {
write_array_of_uint (info->keyfile, setting, key, &value);
} else if (G_VALUE_HOLDS_FLAGS (&value)) {
nm_sprintf_buf (numstr, "%u", g_value_get_flags (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else if (G_VALUE_HOLDS_ENUM (&value)) {
nm_sprintf_buf (numstr, "%d", g_value_get_enum (&value));
- nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_info->setting_name, key, numstr);
} else
g_return_if_reached ();
diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c
index 5250ae436d..53d55c57cd 100644
--- a/libnm-core/nm-setting-ip-config.c
+++ b/libnm-core/nm-setting-ip-config.c
@@ -25,6 +25,7 @@
#include "nm-setting-ip-config.h"
#include <arpa/inet.h>
+#include <linux/fib_rules.h>
#include "nm-setting-ip4-config.h"
#include "nm-setting-ip6-config.h"
@@ -1384,6 +1385,2125 @@ _nm_ip_route_attribute_validate_all (const NMIPRoute *route)
/*****************************************************************************/
+struct NMIPRoutingRule {
+ NMIPAddr from_bin;
+ NMIPAddr to_bin;
+ char *from_str;
+ char *to_str;
+ char *iifname;
+ char *oifname;
+ guint ref_count;
+ guint32 priority;
+ guint32 table;
+ guint32 fwmark;
+ guint32 fwmask;
+ guint16 sport_start;
+ guint16 sport_end;
+ guint16 dport_start;
+ guint16 dport_end;
+ guint8 action;
+ guint8 from_len;
+ guint8 to_len;
+ guint8 tos;
+ guint8 ipproto;
+ bool is_v4:1;
+ bool sealed:1;
+ bool priority_has:1;
+ bool from_has:1;
+ bool from_valid:1;
+ bool to_has:1;
+ bool to_valid:1;
+ bool invert:1;
+};
+
+static NMIPRoutingRule *_ip_routing_rule_dup (const NMIPRoutingRule *rule);
+
+G_DEFINE_BOXED_TYPE (NMIPRoutingRule, nm_ip_routing_rule, _ip_routing_rule_dup, nm_ip_routing_rule_unref)
+
+static gboolean
+NM_IS_IP_ROUTING_RULE (const NMIPRoutingRule *self,
+ gboolean also_sealed)
+{
+ return self
+ && self->ref_count > 0
+ && ( also_sealed
+ || !self->sealed);
+}
+
+static int
+_ip_routing_rule_get_addr_family (const NMIPRoutingRule *self)
+{
+ nm_assert (NM_IS_IP_ROUTING_RULE (self, TRUE));
+
+ return self->is_v4 ? AF_INET : AF_INET6;
+}
+
+static int
+_ip_routing_rule_get_addr_size (const NMIPRoutingRule *self)
+{
+ nm_assert (NM_IS_IP_ROUTING_RULE (self, TRUE));
+
+ return self->is_v4 ? sizeof (struct in_addr) : sizeof (struct in6_addr);
+}
+
+static NMIPRoutingRule *
+_ip_routing_rule_dup (const NMIPRoutingRule *rule)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (rule, TRUE), NULL);
+
+ if (rule->sealed)
+ return nm_ip_routing_rule_ref ((NMIPRoutingRule *) rule);
+ return nm_ip_routing_rule_new_clone (rule);
+}
+
+/**
+ * nm_ip_routing_rule_new:
+ * @addr_family: the address family of the routing rule. Must be either
+ * %AF_INET (2) or %AF_INET6 (10).
+ *
+ * Returns: (transfer full): a newly created rule instance with the
+ * provided address family. The instance is unsealed.
+ *
+ * Since: 1.18
+ */
+NMIPRoutingRule *
+nm_ip_routing_rule_new (int addr_family)
+{
+ NMIPRoutingRule *self;
+
+ g_return_val_if_fail (NM_IN_SET (addr_family, AF_INET, AF_INET6), NULL);
+
+ self = g_slice_new (NMIPRoutingRule);
+ *self = (NMIPRoutingRule) {
+ .ref_count = 1,
+ .is_v4 = (addr_family == AF_INET),
+ .action = FR_ACT_TO_TBL,
+ .table = RT_TABLE_MAIN,
+ };
+ return self;
+}
+
+/**
+ * nm_ip_routing_rule_new_clone:
+ * @rule: the #NMIPRoutingRule to clone.
+ *
+ * Returns: (transfer full): a newly created rule instance with
+ * the same settings as @rule. Note that the instance will
+ * always be unsealred.
+ *
+ * Since: 1.18
+ */
+NMIPRoutingRule *
+nm_ip_routing_rule_new_clone (const NMIPRoutingRule *rule)
+{
+ NMIPRoutingRule *self;
+
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (rule, TRUE), NULL);
+
+ self = g_slice_new (NMIPRoutingRule);
+ *self = (NMIPRoutingRule) {
+ .ref_count = 1,
+ .sealed = FALSE,
+ .is_v4 = rule->is_v4,
+
+ .priority = rule->priority,
+ .priority_has = rule->priority_has,
+
+ .invert = rule->invert,
+
+ .tos = rule->tos,
+
+ .fwmark = rule->fwmark,
+ .fwmask = rule->fwmask,
+
+ .sport_start = rule->sport_start,
+ .sport_end = rule->sport_end,
+ .dport_start = rule->dport_start,
+ .dport_end = rule->dport_end,
+
+ .ipproto = rule->ipproto,
+
+ .from_len = rule->from_len,
+ .from_bin = rule->from_bin,
+ .from_str = ( rule->from_has
+ && !rule->from_valid)
+ ? g_strdup (rule->from_str)
+ : NULL,
+ .from_has = rule->from_has,
+ .from_valid = rule->from_valid,
+
+ .to_len = rule->to_len,
+ .to_bin = rule->to_bin,
+ .to_str = ( rule->to_has
+ && !rule->to_valid)
+ ? g_strdup (rule->to_str)
+ : NULL,
+ .to_has = rule->to_has,
+ .to_valid = rule->to_valid,
+
+ .iifname = g_strdup (rule->iifname),
+ .oifname = g_strdup (rule->oifname),
+
+ .action = rule->action,
+ .table = rule->table,
+ };
+ return self;
+}
+
+/**
+ * nm_ip_routing_rule_ref:
+ * @self: (allow-none): the #NMIPRoutingRule instance
+ *
+ * Increases the reference count of the instance.
+ * This is not thread-safe.
+ *
+ * Returns: (transfer full): the @self argument with incremented
+ * reference count.
+ *
+ * Since: 1.18
+ */
+NMIPRoutingRule *
+nm_ip_routing_rule_ref (NMIPRoutingRule *self)
+{
+ if (!self)
+ return NULL;
+
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ nm_assert (self->ref_count < G_MAXUINT);
+ self->ref_count++;
+ return self;
+}
+
+/**
+ * nm_ip_routing_rule_unref:
+ * @self: (allow-none): the #NMIPRoutingRule instance
+ *
+ * Decreases the reference count of the instance and destroys
+ * the instance if the reference count reaches zero.
+ * This is not thread-safe.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_unref (NMIPRoutingRule *self)
+{
+ if (!self)
+ return;
+
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE));
+
+ if (--self->ref_count > 0)
+ return;
+
+ g_free (self->from_str);
+ g_free (self->to_str);
+ g_free (self->iifname);
+ g_free (self->oifname);
+
+ g_slice_free (NMIPRoutingRule, self);
+}
+
+/**
+ * nm_ip_routing_rule_is_sealed:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: whether @self is sealed. Once sealed, an instance
+ * cannot be modified nor unsealed.
+ *
+ * Since: 1.18
+ */
+gboolean
+nm_ip_routing_rule_is_sealed (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), FALSE);
+
+ return self->sealed;
+}
+
+/**
+ * nm_ip_routing_rule_seal:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Seals the routing rule. Afterwards, the instance can no longer be
+ * modfied, and it is a bug to call any of the accessors that would
+ * modify the rule. If @self was already sealed, this has no effect.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_seal (NMIPRoutingRule *self)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE));
+
+ self->sealed = TRUE;
+}
+
+/**
+ * nm_ip_routing_rule_get_addr_family:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the address family of the rule. Either %AF_INET or %AF_INET6.
+ *
+ * Since: 1.18
+ */
+int
+nm_ip_routing_rule_get_addr_family (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), AF_UNSPEC);
+
+ return _ip_routing_rule_get_addr_family (self);
+}
+
+/**
+ * nm_ip_routing_rule_get_priority:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the priority. A valid priority is in the range from
+ * 0 to %G_MAXUINT32. If unset, -1 is returned.
+ *
+ * Since: 1.18
+ */
+gint64
+nm_ip_routing_rule_get_priority (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), -1);
+
+ return self->priority_has
+ ? (gint64) self->priority
+ : (gint64) -1;
+}
+
+/**
+ * nm_ip_routing_rule_set_priority:
+ * @self: the #NMIPRoutingRule instance
+ * @priority: the priority to set
+ *
+ * A valid priority ranges from 0 to %G_MAXUINT32. "-1" is also allowed
+ * to reset the priority. It is a bug calling this function with any
+ * other value.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_priority (NMIPRoutingRule *self, gint64 priority)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ if ( priority >= 0
+ && priority <= (gint64) G_MAXUINT32) {
+ self->priority = (guint32) priority;
+ self->priority_has = TRUE;
+ } else {
+ g_return_if_fail (priority == -1);
+ self->priority = 0;
+ self->priority_has = FALSE;
+ }
+}
+
+/**
+ * nm_ip_routing_rule_get_invert:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the "invert" setting of the rule.
+ *
+ * Since: 1.18
+ */
+gboolean
+nm_ip_routing_rule_get_invert (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), FALSE);
+
+ return self->invert;
+}
+
+/**
+ * nm_ip_routing_rule_set_invert:
+ * @self: the #NMIPRoutingRule instance
+ * @invert: the new value to set
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_invert (NMIPRoutingRule *self, gboolean invert)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->invert = invert;
+}
+
+/**
+ * nm_ip_routing_rule_get_from_len:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the set prefix length for the from/src parameter.
+ *
+ * Since: 1.18
+ */
+guint8
+nm_ip_routing_rule_get_from_len (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->from_len;
+}
+
+/**
+ * nm_ip_routing_rule_get_from:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: (transfer none): the set from/src parameter or
+ * %NULL, if no value is set.
+ *
+ * Since: 1.18
+ */
+const char *
+nm_ip_routing_rule_get_from (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ if (!self->from_has)
+ return NULL;
+ if (!self->from_str) {
+ nm_assert (self->from_valid);
+ ((NMIPRoutingRule *) self)->from_str = nm_utils_inet_ntop_dup (_ip_routing_rule_get_addr_family (self),
+ &self->from_bin);
+ }
+ return self->from_str;
+}
+
+const NMIPAddr *
+nm_ip_routing_rule_get_from_bin (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ return ( self->from_has
+ && self->from_valid)
+ ? &self->from_bin
+ : NULL;
+}
+
+void
+nm_ip_routing_rule_set_from_bin (NMIPRoutingRule *self,
+ gconstpointer from,
+ guint8 len)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ nm_clear_g_free (&self->from_str);
+
+ if (!from) {
+ self->from_has = FALSE;
+ self->from_len = len;
+ return;
+ }
+
+ self->from_has = TRUE;
+ self->from_len = len;
+ self->from_valid = TRUE;
+ nm_ip_addr_set (_ip_routing_rule_get_addr_family (self),
+ &self->from_bin,
+ from);
+}
+
+/**
+ * nm_ip_routing_rule_set_from:
+ * @self: the #NMIPRoutingRule instance
+ * @from: (allow-none): the from/src address to set.
+ * The address family must match.
+ * @len: the corresponding prefix length of the address.
+ *
+ * Setting invalid values is accepted, but will later fail
+ * during nm_ip_routing_rule_validate().
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_from (NMIPRoutingRule *self,
+ const char *from,
+ guint8 len)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ if (!from) {
+ nm_clear_g_free (&self->from_str);
+ self->from_has = FALSE;
+ self->from_len = len;
+ return;
+ }
+
+ nm_clear_g_free (&self->from_str);
+ self->from_has = TRUE;
+ self->from_len = len;
+ self->from_valid = nm_utils_parse_inaddr_bin (_ip_routing_rule_get_addr_family (self),
+ from,
+ NULL,
+ &self->from_bin);
+ if (!self->from_valid)
+ self->from_str = g_strdup (from);
+}
+
+/**
+ * nm_ip_routing_rule_get_to_len:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the set prefix length for the to/dst parameter.
+ *
+ * Since: 1.18
+ */
+guint8
+nm_ip_routing_rule_get_to_len (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->to_len;
+}
+
+/**
+ * nm_ip_routing_rule_get_to:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: (transfer none): the set to/dst parameter or
+ * %NULL, if no value is set.
+ *
+ * Since: 1.18
+ */
+const char *
+nm_ip_routing_rule_get_to (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ if (!self->to_has)
+ return NULL;
+ if (!self->to_str) {
+ nm_assert (self->to_valid);
+ ((NMIPRoutingRule *) self)->to_str = nm_utils_inet_ntop_dup (_ip_routing_rule_get_addr_family (self),
+ &self->to_bin);
+ }
+ return self->to_str;
+}
+
+const NMIPAddr *
+nm_ip_routing_rule_get_to_bin (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ return ( self->to_has
+ && self->to_valid)
+ ? &self->to_bin
+ : NULL;
+}
+
+void
+nm_ip_routing_rule_set_to_bin (NMIPRoutingRule *self,
+ gconstpointer to,
+ guint8 len)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ nm_clear_g_free (&self->to_str);
+
+ if (!to) {
+ self->to_has = FALSE;
+ self->to_len = len;
+ return;
+ }
+
+ self->to_has = TRUE;
+ self->to_len = len;
+ self->to_valid = TRUE;
+ nm_ip_addr_set (_ip_routing_rule_get_addr_family (self),
+ &self->to_bin,
+ to);
+}
+
+/**
+ * nm_ip_routing_rule_set_to:
+ * @self: the #NMIPRoutingRule instance
+ * @to: (allow-none): the to/dst address to set.
+ * The address family must match.
+ * @len: the corresponding prefix length of the address.
+ * If @to is %NULL, this valid is ignored.
+ *
+ * Setting invalid values is accepted, but will later fail
+ * during nm_ip_routing_rule_validate().
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_to (NMIPRoutingRule *self,
+ const char *to,
+ guint8 len)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ if (!to) {
+ nm_clear_g_free (&self->to_str);
+ self->to_has = FALSE;
+ self->to_len = len;
+ return;
+ }
+
+ nm_clear_g_free (&self->to_str);
+ self->to_has = TRUE;
+ self->to_len = len;
+ self->to_valid = nm_utils_parse_inaddr_bin (_ip_routing_rule_get_addr_family (self),
+ to,
+ NULL,
+ &self->to_bin);
+ if (!self->to_valid)
+ self->to_str = g_strdup (to);
+}
+
+/**
+ * nm_ip_routing_rule_get_tos:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the tos of the rule.
+ *
+ * Since: 1.18
+ */
+guint8
+nm_ip_routing_rule_get_tos (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->tos;
+}
+
+/**
+ * nm_ip_routing_rule_set_tos:
+ * @self: the #NMIPRoutingRule instance
+ * @tos: the tos to set
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_tos (NMIPRoutingRule *self, guint8 tos)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->tos = tos;
+}
+
+/**
+ * nm_ip_routing_rule_get_ipproto:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the ipproto of the rule.
+ *
+ * Since: 1.18
+ */
+guint8
+nm_ip_routing_rule_get_ipproto (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->ipproto;
+}
+
+/**
+ * nm_ip_routing_rule_set_ipproto:
+ * @self: the #NMIPRoutingRule instance
+ * @ipproto: the ipproto to set
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_ipproto (NMIPRoutingRule *self, guint8 ipproto)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->ipproto = ipproto;
+}
+
+/**
+ * nm_ip_routing_rule_get_source_port_start:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the source port start setting.
+ *
+ * Since: 1.18
+ */
+guint16
+nm_ip_routing_rule_get_source_port_start (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->sport_start;
+}
+
+/**
+ * nm_ip_routing_rule_get_source_port_end:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the source port end setting.
+ *
+ * Since: 1.18
+ */
+guint16
+nm_ip_routing_rule_get_source_port_end (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->sport_end;
+}
+
+/**
+ * nm_ip_routing_rule_set_source_port:
+ * @self: the #NMIPRoutingRule instance
+ * @start: the start port to set.
+ * @end: the end port to set.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_source_port (NMIPRoutingRule *self, guint16 start, guint16 end)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->sport_start = start;
+ self->sport_end = end;
+}
+
+/**
+ * nm_ip_routing_rule_get_destination_port_start:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the destination port start setting.
+ *
+ * Since: 1.18
+ */
+guint16
+nm_ip_routing_rule_get_destination_port_start (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->dport_start;
+}
+
+/**
+ * nm_ip_routing_rule_get_destination_port_end:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the destination port end setting.
+ *
+ * Since: 1.18
+ */
+guint16
+nm_ip_routing_rule_get_destination_port_end (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->dport_end;
+}
+
+/**
+ * nm_ip_routing_rule_set_destination_port:
+ * @self: the #NMIPRoutingRule instance
+ * @start: the start port to set.
+ * @end: the end port to set.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_destination_port (NMIPRoutingRule *self, guint16 start, guint16 end)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->dport_start = start;
+ self->dport_end = end;
+}
+
+/**
+ * nm_ip_routing_rule_get_fwmark:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the fwmark setting.
+ *
+ * Since: 1.18
+ */
+guint32
+nm_ip_routing_rule_get_fwmark (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->fwmark;
+}
+
+/**
+ * nm_ip_routing_rule_get_fwmask:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the fwmask setting.
+ *
+ * Since: 1.18
+ */
+guint32
+nm_ip_routing_rule_get_fwmask (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->fwmask;
+}
+
+/**
+ * nm_ip_routing_rule_set_fwmark:
+ * @self: the #NMIPRoutingRule instance
+ * @fwmark: the fwmark
+ * @fwmask: the fwmask
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_fwmark (NMIPRoutingRule *self, guint32 fwmark, guint32 fwmask)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->fwmark = fwmark;
+ self->fwmask = fwmask;
+}
+
+/**
+ * nm_ip_routing_rule_get_iifname:
+ * @self: the #NMIPRoutingRule instance.
+ *
+ * Returns: (transfer none): the set iifname or %NULL if unset.
+ *
+ * Since: 1.18
+ */
+const char *
+nm_ip_routing_rule_get_iifname (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ return self->iifname;
+}
+
+gboolean
+nm_ip_routing_rule_get_xifname_bin (const NMIPRoutingRule *self,
+ gboolean iif /* or else oif */,
+ char out_xifname[static 16 /* IFNAMSIZ */])
+{
+ gs_free gpointer bin_to_free = NULL;
+ const char *xifname;
+ gconstpointer bin;
+ gsize len;
+
+ nm_assert (NM_IS_IP_ROUTING_RULE (self, TRUE));
+ nm_assert (out_xifname);
+
+ xifname = iif ? self->iifname : self->oifname;
+
+ if (!xifname)
+ return FALSE;
+
+ bin = nm_utils_buf_utf8safe_unescape (xifname, &len, &bin_to_free);
+
+ strncpy (out_xifname, bin, 16 /* IFNAMSIZ */);
+ out_xifname[15] = '\0';
+ return TRUE;
+}
+
+/**
+ * nm_ip_routing_rule_set_iifname:
+ * @self: the #NMIPRoutingRule instance.
+ * @iifname: (allow-none): the iifname to set or %NULL to unset.
+ *
+ * The name supports C backslash escaping for non-UTF-8 characters.
+ * Note that nm_ip_routing_rule_from_string() too uses backslash
+ * escaping when tokenizing the words by whitespace. So, in string
+ * representation you'd get double backslashs.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_iifname (NMIPRoutingRule *self, const char *iifname)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ g_free (self->iifname);
+ self->iifname = g_strdup (iifname);
+}
+
+/**
+ * nm_ip_routing_rule_get_oifname:
+ * @self: the #NMIPRoutingRule instance.
+ *
+ * Returns: (transfer none): the set oifname or %NULL if unset.
+ *
+ * Since: 1.18
+ */
+const char *
+nm_ip_routing_rule_get_oifname (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ return self->oifname;
+}
+
+/**
+ * nm_ip_routing_rule_set_oifname:
+ * @self: the #NMIPRoutingRule instance.
+ * @oifname: (allow-none): the oifname to set or %NULL to unset.
+ *
+ * The name supports C backslash escaping for non-UTF-8 characters.
+ * Note that nm_ip_routing_rule_from_string() too uses backslash
+ * escaping when tokenizing the words by whitespace. So, in string
+ * representation you'd get double backslashs.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_oifname (NMIPRoutingRule *self, const char *oifname)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ g_free (self->oifname);
+ self->oifname = g_strdup (oifname);
+}
+
+/**
+ * nm_ip_routing_rule_get_action:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the set action.
+ *
+ * Since: 1.18
+ */
+guint8
+nm_ip_routing_rule_get_action (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->action;
+}
+
+/**
+ * nm_ip_routing_rule_set_action:
+ * @self: the #NMIPRoutingRule instance
+ * @action: the action to set
+ *
+ * Note that currently only certain actions are allowed. nm_ip_routing_rule_validate()
+ * will reject unsupported actions as invalid.
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_action (NMIPRoutingRule *self, guint8 action)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->action = action;
+}
+
+/**
+ * nm_ip_routing_rule_get_table:
+ * @self: the #NMIPRoutingRule instance
+ *
+ * Returns: the set table.
+ *
+ * Since: 1.18
+ */
+guint32
+nm_ip_routing_rule_get_table (const NMIPRoutingRule *self)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), 0);
+
+ return self->table;
+}
+
+/**
+ * nm_ip_routing_rule_set_table:
+ * @self: the #NMIPRoutingRule instance
+ * @table: the table to set
+ *
+ * Since: 1.18
+ */
+void
+nm_ip_routing_rule_set_table (NMIPRoutingRule *self, guint32 table)
+{
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (self, FALSE));
+
+ self->table = table;
+}
+
+/**
+ * nm_ip_routing_rule_cmp:
+ * @rule: (allow-none): the #NMIPRoutingRule instance to compare
+ * @other: (allow-none): the other #NMIPRoutingRule instance to compare
+ *
+ * Returns: zero, a positive, or a negative integer to indicate
+ * equality or how the arguments compare.
+ *
+ * Since: 1.18
+ */
+int
+nm_ip_routing_rule_cmp (const NMIPRoutingRule *rule,
+ const NMIPRoutingRule *other)
+{
+ NM_CMP_SELF (rule, other);
+
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (rule, TRUE), 0);
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (other, TRUE), 0);
+
+ NM_CMP_FIELD_UNSAFE (rule, other, priority_has);
+ if (rule->priority_has)
+ NM_CMP_FIELD (rule, other, priority);
+
+ NM_CMP_FIELD_UNSAFE (rule, other, is_v4);
+
+ NM_CMP_FIELD_UNSAFE (rule, other, invert);
+
+ NM_CMP_FIELD (rule, other, tos);
+
+ NM_CMP_FIELD (rule, other, fwmark);
+ NM_CMP_FIELD (rule, other, fwmask);
+
+ NM_CMP_FIELD (rule, other, action);
+
+ NM_CMP_FIELD (rule, other, table);
+
+ NM_CMP_FIELD (rule, other, sport_start);
+ NM_CMP_FIELD (rule, other, sport_end);
+ NM_CMP_FIELD (rule, other, dport_start);
+ NM_CMP_FIELD (rule, other, dport_end);
+
+ NM_CMP_FIELD (rule, other, ipproto);
+
+ /* We compare the plain strings, not the binary values after utf8safe unescaping.
+ *
+ * The reason is, that the rules differ already when the direct strings differ, not
+ * only when the unescaped names differ. */
+ NM_CMP_FIELD_STR0 (rule, other, iifname);
+ NM_CMP_FIELD_STR0 (rule, other, oifname);
+
+ NM_CMP_FIELD (rule, other, from_len);
+
+ NM_CMP_FIELD_UNSAFE (rule, other, from_has);
+ if (rule->from_has) {
+ NM_CMP_FIELD_UNSAFE (rule, other, from_valid);
+ if (rule->from_valid) {
+ NM_CMP_RETURN (memcmp (&rule->from_bin,
+ &other->from_bin,
+ _ip_routing_rule_get_addr_size (rule)));
+ } else
+ NM_CMP_FIELD_STR (rule, other, from_str);
+ }
+
+ NM_CMP_FIELD (rule, other, to_len);
+
+ NM_CMP_FIELD_UNSAFE (rule, other, to_has);
+ if (rule->to_has) {
+ NM_CMP_FIELD_UNSAFE (rule, other, to_valid);
+ if (rule->to_valid) {
+ NM_CMP_RETURN (memcmp (&rule->to_bin,
+ &other->to_bin,
+ _ip_routing_rule_get_addr_size (rule)));
+ } else
+ NM_CMP_FIELD_STR (rule, other, to_str);
+ }
+
+ return 0;
+}
+
+static gboolean
+_rr_xport_range_valid (guint16 xport_start, guint16 xport_end)
+{
+ if (xport_start == 0)
+ return (xport_end == 0);
+
+ return xport_start <= xport_end
+ && xport_end < 0xFFFFu;
+}
+
+static gboolean
+_rr_xport_range_parse (char *str, gint64 *out_start, guint16 *out_end)
+{
+ guint16 start, end;
+ gint64 i64;
+ char *s;
+
+ s = strchr (str, '-');
+ if (s)
+ *(s++) = '\0';
+
+ i64 = _nm_utils_ascii_str_to_int64 (str, 10, 0, 0xFFFF, -1);
+ if (i64 == -1)
+ return FALSE;
+
+ start = i64;
+ if (s) {
+ i64 = _nm_utils_ascii_str_to_int64 (s, 10, 0, 0xFFFF, -1);
+ if (i64 == -1)
+ return FALSE;
+ end = i64;
+ } else
+ end = start;
+
+ *out_start = start;
+ *out_end = end;
+ return TRUE;
+}
+
+/**
+ * nm_ip_routing_rule_validate:
+ * @self: the #NMIPRoutingRule instance to validate
+ * @error: (allow-none) (out): the error result if validation fails.
+ *
+ * Returns: %TRUE if the rule validates.
+ *
+ * Since: 1.18
+ */
+gboolean
+nm_ip_routing_rule_validate (const NMIPRoutingRule *self,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), FALSE);
+ g_return_val_if_fail (!error || !*error, FALSE);
+
+ /* Kernel may be more flexible about validating. We do a strict validation
+ * here and reject certain settings eagerly. We can always relax it later. */
+
+ if (!self->priority_has) {
+ /* iproute2 accepts not specifying the priority, in which case kernel will select
+ * an unused priority. We don't allow for that, and will always require the user to
+ * select a priority.
+ *
+ * Note that if the user selects priority 0 or a non-unique priority, this is problematic
+ * due to kernel bugs rh#1685816 and rh#1685816. It may result in NetworkManager wrongly being
+ * unable to add a rule or deleting the wrong rule.
+ * This problem is not at all specific to the priority, it affects all rules that
+ * have default values which confuse kernel. But setting a unique priority avoids
+ * this problem nicely. */
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid priority"));
+ return FALSE;
+ }
+
+ if (NM_IN_SET (self->action, FR_ACT_TO_TBL)) {
+ if (self->table == 0) {
+ /* with IPv4, kernel allows a table (in RTM_NEWRULE) of zero to automatically select
+ * an unused table. We don't. The user needs to specify the table.
+ *
+ * For IPv6, kernel doesn't allow a table of zero, so we are consistent here. */
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("missing table"));
+ return FALSE;
+ }
+ } else {
+ /* whitelist the actions that we currently. */
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid action"));
+ return FALSE;
+ }
+
+ if (self->from_len == 0) {
+ if (self->from_has) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("has from/src but the prefix-length is zero"));
+ return FALSE;
+ }
+ } else if ( self->from_len > 0
+ && self->from_len <= 8 * _ip_routing_rule_get_addr_size (self)) {
+ if (!self->from_has) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("missing from/src for a non zero prefix-length"));
+ return FALSE;
+ }
+ if (!self->from_valid) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid from/src"));
+ return FALSE;
+ }
+ } else {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid prefix length for from/src"));
+ return FALSE;
+ }
+
+ if (self->to_len == 0) {
+ if (self->to_has) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("has to/dst but the prefix-length is zero"));
+ return FALSE;
+ }
+ } else if ( self->to_len > 0
+ && self->to_len <= 8 * _ip_routing_rule_get_addr_size (self)) {
+ if (!self->to_has) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("missing to/dst for a non zero prefix-length"));
+ return FALSE;
+ }
+ if (!self->to_valid) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid to/dst"));
+ return FALSE;
+ }
+ } else {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid prefix length for to/dst"));
+ return FALSE;
+ }
+
+ if ( self->iifname
+ && ( !g_utf8_validate (self->iifname, -1, NULL)
+ || !nm_utils_is_valid_iface_name_utf8safe (self->iifname))) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid iifname"));
+ return FALSE;
+ }
+
+ if ( self->oifname
+ && ( !g_utf8_validate (self->oifname, -1, NULL)
+ || !nm_utils_is_valid_iface_name_utf8safe (self->oifname))) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid oifname"));
+ return FALSE;
+ }
+
+ if (!_rr_xport_range_valid (self->sport_start, self->sport_end)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid source port range"));
+ return FALSE;
+ }
+
+ if (!_rr_xport_range_valid (self->dport_start, self->dport_end)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid destination port range"));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*****************************************************************************/
+
+typedef enum {
+ RR_DBUS_ATTR_ACTION,
+ RR_DBUS_ATTR_DPORT_END,
+ RR_DBUS_ATTR_DPORT_START,
+ RR_DBUS_ATTR_FAMILY,
+ RR_DBUS_ATTR_FROM,
+ RR_DBUS_ATTR_FROM_LEN,
+ RR_DBUS_ATTR_FWMARK,
+ RR_DBUS_ATTR_FWMASK,
+ RR_DBUS_ATTR_IIFNAME,
+ RR_DBUS_ATTR_INVERT,
+ RR_DBUS_ATTR_IPPROTO,
+ RR_DBUS_ATTR_OIFNAME,
+ RR_DBUS_ATTR_PRIORITY,
+ RR_DBUS_ATTR_SPORT_END,
+ RR_DBUS_ATTR_SPORT_START,
+ RR_DBUS_ATTR_TABLE,
+ RR_DBUS_ATTR_TO,
+ RR_DBUS_ATTR_TOS,
+ RR_DBUS_ATTR_TO_LEN,
+
+ _RR_DBUS_ATTR_NUM,
+} RRDbusAttr;
+
+typedef struct {
+ const char *name;
+ const GVariantType *dbus_type;
+} RRDbusData;
+
+static const RRDbusData rr_dbus_data[_RR_DBUS_ATTR_NUM] = {
+#define _D(attr, _name, type) [attr] = { .name = _name, .dbus_type = type, }
+ _D (RR_DBUS_ATTR_ACTION, NM_IP_ROUTING_RULE_ATTR_ACTION, G_VARIANT_TYPE_BYTE),
+ _D (RR_DBUS_ATTR_DPORT_END, NM_IP_ROUTING_RULE_ATTR_DPORT_END, G_VARIANT_TYPE_UINT16),
+ _D (RR_DBUS_ATTR_DPORT_START, NM_IP_ROUTING_RULE_ATTR_DPORT_START, G_VARIANT_TYPE_UINT16),
+ _D (RR_DBUS_ATTR_FAMILY, NM_IP_ROUTING_RULE_ATTR_FAMILY, G_VARIANT_TYPE_INT32),
+ _D (RR_DBUS_ATTR_FROM, NM_IP_ROUTING_RULE_ATTR_FROM, G_VARIANT_TYPE_STRING),
+ _D (RR_DBUS_ATTR_FROM_LEN, NM_IP_ROUTING_RULE_ATTR_FROM_LEN, G_VARIANT_TYPE_BYTE),
+ _D (RR_DBUS_ATTR_FWMARK, NM_IP_ROUTING_RULE_ATTR_FWMARK, G_VARIANT_TYPE_UINT32),
+ _D (RR_DBUS_ATTR_FWMASK, NM_IP_ROUTING_RULE_ATTR_FWMASK, G_VARIANT_TYPE_UINT32),
+ _D (RR_DBUS_ATTR_IIFNAME, NM_IP_ROUTING_RULE_ATTR_IIFNAME, G_VARIANT_TYPE_STRING),
+ _D (RR_DBUS_ATTR_INVERT, NM_IP_ROUTING_RULE_ATTR_INVERT, G_VARIANT_TYPE_BOOLEAN),
+ _D (RR_DBUS_ATTR_IPPROTO, NM_IP_ROUTING_RULE_ATTR_IPPROTO, G_VARIANT_TYPE_BYTE),
+ _D (RR_DBUS_ATTR_OIFNAME, NM_IP_ROUTING_RULE_ATTR_OIFNAME, G_VARIANT_TYPE_STRING),
+ _D (RR_DBUS_ATTR_PRIORITY, NM_IP_ROUTING_RULE_ATTR_PRIORITY, G_VARIANT_TYPE_UINT32),
+ _D (RR_DBUS_ATTR_SPORT_END, NM_IP_ROUTING_RULE_ATTR_SPORT_END, G_VARIANT_TYPE_UINT16),
+ _D (RR_DBUS_ATTR_SPORT_START, NM_IP_ROUTING_RULE_ATTR_SPORT_START, G_VARIANT_TYPE_UINT16),
+ _D (RR_DBUS_ATTR_TABLE, NM_IP_ROUTING_RULE_ATTR_TABLE, G_VARIANT_TYPE_UINT32),
+ _D (RR_DBUS_ATTR_TO, NM_IP_ROUTING_RULE_ATTR_TO, G_VARIANT_TYPE_STRING),
+ _D (RR_DBUS_ATTR_TOS, NM_IP_ROUTING_RULE_ATTR_TOS, G_VARIANT_TYPE_BYTE),
+ _D (RR_DBUS_ATTR_TO_LEN, NM_IP_ROUTING_RULE_ATTR_TO_LEN, G_VARIANT_TYPE_BYTE),
+#undef _D
+};
+
+static void
+_rr_variants_free (GVariant *(*p_variants)[])
+{
+ int i;
+
+ for (i = 0; i < _RR_DBUS_ATTR_NUM; i++) {
+ if ((*p_variants)[i])
+ g_variant_unref ((*p_variants)[i]);
+ }
+}
+
+NMIPRoutingRule *
+nm_ip_routing_rule_from_dbus (GVariant *variant,
+ gboolean strict,
+ GError **error)
+{
+ nm_auto (_rr_variants_free) GVariant *variants[_RR_DBUS_ATTR_NUM] = { };
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *self = NULL;
+ RRDbusAttr attr;
+ GVariantIter iter;
+ const char *iter_key;
+ GVariant *iter_val;
+ int addr_family;
+ int i;
+
+ g_variant_iter_init (&iter, variant);
+
+#if NM_MORE_ASSERTS > 10
+ for (attr = 0; attr < _RR_DBUS_ATTR_NUM; attr++) {
+ nm_assert (rr_dbus_data[attr].name);
+ nm_assert (g_variant_type_string_is_valid ((const char *) rr_dbus_data[attr].dbus_type));
+ }
+#endif
+
+ while (g_variant_iter_next (&iter, "{&sv}", &iter_key, &iter_val)) {
+ gs_unref_variant GVariant *iter_val2 = iter_val;
+
+ for (attr = 0; attr < _RR_DBUS_ATTR_NUM; attr++) {
+ if (nm_streq (iter_key, rr_dbus_data[attr].name)) {
+ if (variants[attr]) {
+ if (strict) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("duplicate key %s"),
+ iter_key);
+ return NULL;
+ }
+ g_variant_unref (variants[attr]);
+ }
+ variants[attr] = g_steal_pointer (&iter_val2);
+ break;
+ }
+ }
+
+ if ( attr >= _RR_DBUS_ATTR_NUM
+ && strict) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid key \"%s\""),
+ iter_key);
+ return NULL;
+ }
+ }
+
+ for (attr = 0; attr < _RR_DBUS_ATTR_NUM; attr++) {
+ if (!variants[attr])
+ continue;
+ if (!g_variant_is_of_type (variants[attr], rr_dbus_data[attr].dbus_type)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid variant type '%s' for \"%s\""),
+ (const char *) rr_dbus_data[attr].dbus_type,
+ rr_dbus_data[attr].name);
+ return NULL;
+ }
+ }
+
+ if (!variants[RR_DBUS_ATTR_FAMILY]) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("missing \""NM_IP_ROUTING_RULE_ATTR_FAMILY"\""));
+ return NULL;
+ }
+ addr_family = g_variant_get_int32 (variants[RR_DBUS_ATTR_FAMILY]);
+ if (!NM_IN_SET (addr_family, AF_INET, AF_INET6)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("invalid \""NM_IP_ROUTING_RULE_ATTR_FAMILY"\""));
+ return NULL;
+ }
+
+ self = nm_ip_routing_rule_new (addr_family);
+
+ if (variants[RR_DBUS_ATTR_PRIORITY])
+ nm_ip_routing_rule_set_priority (self, g_variant_get_uint32 (variants[RR_DBUS_ATTR_PRIORITY]));
+
+ if (variants[RR_DBUS_ATTR_INVERT])
+ nm_ip_routing_rule_set_invert (self, g_variant_get_boolean (variants[RR_DBUS_ATTR_INVERT]));
+
+ if (variants[RR_DBUS_ATTR_TOS])
+ nm_ip_routing_rule_set_tos (self, g_variant_get_byte (variants[RR_DBUS_ATTR_TOS]));
+
+ if (variants[RR_DBUS_ATTR_IPPROTO])
+ nm_ip_routing_rule_set_ipproto (self, g_variant_get_byte (variants[RR_DBUS_ATTR_IPPROTO]));
+
+ for (i = 0; i < 2; i++) {
+ GVariant *v_start = variants[i ? RR_DBUS_ATTR_SPORT_START : RR_DBUS_ATTR_DPORT_START];
+ GVariant *v_end = variants[i ? RR_DBUS_ATTR_SPORT_END : RR_DBUS_ATTR_DPORT_END];
+ guint16 start, end;
+
+ if (!v_start && !v_end)
+ continue;
+
+ /* if start or end is missing, it defaults to the other parameter, respectively. */
+ if (v_start)
+ start = g_variant_get_uint16 (v_start);
+ else
+ start = g_variant_get_uint16 (v_end);
+ if (v_end)
+ end = g_variant_get_uint16 (v_end);
+ else
+ end = g_variant_get_uint16 (v_start);
+
+ if (i)
+ nm_ip_routing_rule_set_source_port (self, start, end);
+ else
+ nm_ip_routing_rule_set_destination_port (self, start, end);
+ }
+
+ if ( variants[RR_DBUS_ATTR_FWMARK]
+ || variants[RR_DBUS_ATTR_FWMASK]) {
+ nm_ip_routing_rule_set_fwmark (self,
+ variants[RR_DBUS_ATTR_FWMARK] ? g_variant_get_uint32 (variants[RR_DBUS_ATTR_FWMARK]) : 0u,
+ variants[RR_DBUS_ATTR_FWMASK] ? g_variant_get_uint32 (variants[RR_DBUS_ATTR_FWMASK]) : 0u);
+ }
+
+ if ( variants[RR_DBUS_ATTR_FROM]
+ || variants[RR_DBUS_ATTR_FROM_LEN]) {
+ nm_ip_routing_rule_set_from (self,
+ variants[RR_DBUS_ATTR_FROM] ? g_variant_get_string (variants[RR_DBUS_ATTR_FROM], NULL) : NULL,
+ variants[RR_DBUS_ATTR_FROM_LEN] ? g_variant_get_byte (variants[RR_DBUS_ATTR_FROM_LEN]) : 0u);
+ }
+
+ if ( variants[RR_DBUS_ATTR_TO]
+ || variants[RR_DBUS_ATTR_TO_LEN]) {
+ nm_ip_routing_rule_set_to (self,
+ variants[RR_DBUS_ATTR_TO] ? g_variant_get_string (variants[RR_DBUS_ATTR_TO], NULL) : NULL,
+ variants[RR_DBUS_ATTR_TO_LEN] ? g_variant_get_byte (variants[RR_DBUS_ATTR_TO_LEN]) : 0u);
+ }
+
+ if (variants[RR_DBUS_ATTR_IIFNAME])
+ nm_ip_routing_rule_set_iifname (self, g_variant_get_string (variants[RR_DBUS_ATTR_IIFNAME], NULL));
+
+ if (variants[RR_DBUS_ATTR_OIFNAME])
+ nm_ip_routing_rule_set_oifname (self, g_variant_get_string (variants[RR_DBUS_ATTR_OIFNAME], NULL));
+
+ if (variants[RR_DBUS_ATTR_ACTION])
+ nm_ip_routing_rule_set_action (self, g_variant_get_byte (variants[RR_DBUS_ATTR_ACTION]));
+
+ if (variants[RR_DBUS_ATTR_TABLE])
+ nm_ip_routing_rule_set_table (self, g_variant_get_uint32 (variants[RR_DBUS_ATTR_TABLE]));
+
+ if ( strict
+ && !nm_ip_routing_rule_validate (self, error))
+ return NULL;
+
+ return g_steal_pointer (&self);
+}
+
+static void
+_rr_to_dbus_add (GVariantBuilder *builder,
+ RRDbusAttr attr,
+ GVariant *value)
+{
+ nm_assert (builder);
+ nm_assert (value);
+ nm_assert (g_variant_is_floating (value));
+ nm_assert (g_variant_is_of_type (value, rr_dbus_data[attr].dbus_type));
+
+ g_variant_builder_add (builder,
+ "{sv}",
+ rr_dbus_data[attr].name,
+ value);
+}
+
+GVariant *
+nm_ip_routing_rule_to_dbus (const NMIPRoutingRule *self)
+{
+ GVariantBuilder builder;
+ char addr_str[NM_UTILS_INET_ADDRSTRLEN];
+
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
+
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_FAMILY, g_variant_new_int32 (_ip_routing_rule_get_addr_family (self)));
+
+ if (self->invert)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_INVERT, g_variant_new_boolean (TRUE));
+
+ if (self->priority_has)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_PRIORITY, g_variant_new_uint32 (self->priority));
+
+ if (self->tos != 0)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_TOS, g_variant_new_byte (self->tos));
+
+ if (self->ipproto != 0)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_IPPROTO, g_variant_new_byte (self->ipproto));
+
+ if (self->fwmark != 0)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_FWMARK, g_variant_new_uint32 (self->fwmark));
+
+ if (self->fwmask != 0)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_FWMASK, g_variant_new_uint32 (self->fwmask));
+
+ if ( self->sport_start != 0
+ || self->sport_end != 0) {
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_SPORT_START, g_variant_new_uint16 (self->sport_start));
+ if (self->sport_start != self->sport_end)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_SPORT_END, g_variant_new_uint16 (self->sport_end));
+ }
+
+ if ( self->dport_start != 0
+ || self->dport_end != 0) {
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_DPORT_START, g_variant_new_uint16 (self->dport_start));
+ if (self->dport_start != self->dport_end)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_DPORT_END, g_variant_new_uint16 (self->dport_end));
+ }
+
+ if ( self->from_has
+ || self->from_len != 0) {
+ _rr_to_dbus_add (&builder,
+ RR_DBUS_ATTR_FROM,
+ g_variant_new_string ( self->from_str
+ ?: nm_utils_inet_ntop (_ip_routing_rule_get_addr_family (self),
+ &self->from_bin,
+ addr_str)));
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_FROM_LEN, g_variant_new_byte (self->from_len));
+ }
+
+ if ( self->to_has
+ || self->to_len != 0) {
+ _rr_to_dbus_add (&builder,
+ RR_DBUS_ATTR_TO,
+ g_variant_new_string ( self->to_str
+ ?: nm_utils_inet_ntop (_ip_routing_rule_get_addr_family (self),
+ &self->to_bin,
+ addr_str)));
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_TO_LEN, g_variant_new_byte (self->to_len));
+ }
+
+ if (self->iifname)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_IIFNAME, g_variant_new_string (self->iifname));
+
+ if (self->oifname)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_OIFNAME, g_variant_new_string (self->oifname));
+
+ if (self->action != FR_ACT_TO_TBL)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_ACTION, g_variant_new_byte (self->action));
+
+ if (self->table != 0)
+ _rr_to_dbus_add (&builder, RR_DBUS_ATTR_TABLE, g_variant_new_uint32 (self->table));
+
+ return g_variant_builder_end (&builder);;
+}
+
+/*****************************************************************************/
+
+static gboolean
+_rr_string_validate (gboolean for_from /* or else to-string */,
+ NMIPRoutingRuleAsStringFlags to_string_flags,
+ GHashTable *extra_args,
+ GError **error)
+{
+ if (NM_FLAGS_ANY (to_string_flags, ~( NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET
+ | NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6
+ | NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE))) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("Unsupported to-string-flags argument"));
+ return FALSE;
+ }
+
+ if ( extra_args
+ && g_hash_table_size (extra_args) > 0) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("Unsupported extra-argument"));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static int
+_rr_string_addr_family_from_flags (NMIPRoutingRuleAsStringFlags to_string_flags)
+{
+ if (NM_FLAGS_HAS (to_string_flags, NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET)) {
+ if (!NM_FLAGS_HAS (to_string_flags, NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6))
+ return AF_INET;
+ } else if (NM_FLAGS_HAS (to_string_flags, NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6))
+ return AF_INET6;
+ return AF_UNSPEC;
+}
+
+/**
+ * nm_ip_routing_rule_from_string:
+ * @str: the string representation to convert to an #NMIPRoutingRule
+ * @to_string_flags: #NMIPRoutingRuleAsStringFlags for controlling the
+ * string conversion.
+ * @extra_args: (allow-none): extra arguments for controlling the string
+ * conversion. Currently not extra arguments are supported.
+ * @error: (allow-none) (out): the error reason.
+ *
+ * Returns: (transfer full): the new #NMIPRoutingRule or %NULL on error.
+ *
+ * Since: 1.18
+ */
+NMIPRoutingRule *
+nm_ip_routing_rule_from_string (const char *str,
+ NMIPRoutingRuleAsStringFlags to_string_flags,
+ GHashTable *extra_args,
+ GError **error)
+{
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *self = NULL;
+ gs_free char *str_clone = NULL;
+ char *str_remainder;
+ char *str_word;
+ gboolean any_words = FALSE;
+ char *word0 = NULL;
+ char *word1 = NULL;
+ char *word_from = NULL;
+ char *word_to = NULL;
+ char *word_iifname = NULL;
+ char *word_oifname = NULL;
+ gint64 i64_priority = -1;
+ gint64 i64_table = -1;
+ gint64 i64_tos = -1;
+ gint64 i64_fwmark = -1;
+ gint64 i64_fwmask = -1;
+ gint64 i64_sport_start = -1;
+ gint64 i64_ipproto = -1;
+ guint16 sport_end = 0;
+ gint64 i64_dport_start = -1;
+ guint16 dport_end = 0;
+ gboolean val_invert = FALSE;
+ int addr_family = AF_UNSPEC;
+ NMIPAddr val_from = { };
+ NMIPAddr val_to = { };
+ int val_from_len = -1;
+ int val_to_len = -1;
+ char *s;
+
+ g_return_val_if_fail (str, NULL);
+
+ if (!_rr_string_validate (TRUE, to_string_flags, extra_args, error))
+ return NULL;
+
+ /* NM_IP_ROUTING_RULE_TO_STRING_TYPE_IPROUTE gives a string representation that is
+ * partly compatibly with iproute2. That is, the part after `ip -[46] rule add $ARGS`.
+ * There are differences though:
+ *
+ * - trying to convert an invalid rule to string may not be possible. The reason is for
+ * example that an invalid rule can have nm_ip_routing_rule_get_from() like "bogus",
+ * but we don't write that as "from bogus". In general, if you try to convert an invalid
+ * rule to string, the operation may fail or the result may itself not be parsable.
+ * Of course, valid rules can be converted to string and read back the same (round-trip).
+ *
+ * - iproute2 in may regards is flexible about the command lines. For example
+ * - for tables it accepts table names from /etc/iproute2/rt_tables
+ * - key names like "preference" can be abbreviated to "prefe", we don't do that.
+ * - the "preference"/"priority" may be unspecified, in which kernel automatically
+ * chooses an unused priority (during `ip rule add`). We don't allow for that, the
+ * priority must be explicitly set.
+ *
+ * - iproute2 does not support any escaping. Well, it's the shell that supports quoting
+ * and escaping and splits the command line. We need to split the command line ourself,
+ * but we don't support full shell quotation.
+ * from-string tokenizes words at (ASCII) whitespaces (removing the whitespaces).
+ * It also supports backslash escaping (e.g. to contain whitespace), but it does
+ * not support special escape sequences. Values are taken literally, meaning
+ * "\n\ \111" gives results in "n 111".
+ * The strings really shouldn't contain any special characters that require escaping,
+ * but that's the rule.
+ * This also goes together with the @allow_escaping parameter of nm_utils_strsplit_set().
+ * If you concatenate multiple rule expressions with a delimiter, the delimiter inside
+ * each word can be backslash escaped, and nm_utils_strsplit_set(allow_escaping=TRUE) will
+ * properly split the words, preserving the backslashes, which then will be removed by
+ * nm_ip_routing_rule_from_string().
+ */
+
+ addr_family = _rr_string_addr_family_from_flags (to_string_flags);
+
+ str_clone = g_strdup (str);
+ str_remainder = str_clone;
+
+ while ((str_word = nm_utils_str_simpletokens_extract_next (&str_remainder))) {
+
+ any_words = TRUE;
+ if (!word0)
+ word0 = str_word;
+ else {
+ nm_assert (!word1);
+ word1 = str_word;
+ }
+
+ /* iproute2 matches keywords with any partial prefix. We don't allow
+ * for that flexiblity. */
+
+ if (NM_IN_STRSET (word0, "from")) {
+ if (!word1)
+ continue;
+ if (word_from)
+ goto next_fail_word0_duplicate_key;
+ word_from = word1;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "to")) {
+ if (!word1)
+ continue;
+ if (word_to)
+ goto next_fail_word0_duplicate_key;
+ word_to = word1;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "not")) {
+ /* we accept multiple "not" specifiers. */
+ val_invert = TRUE;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "priority",
+ "order",
+ "pref",
+ "preference")) {
+ if (!word1)
+ continue;
+ if (i64_priority != -1)
+ goto next_fail_word0_duplicate_key;
+ i64_priority = _nm_utils_ascii_str_to_int64 (word1, 0, 0, G_MAXUINT32, -1);
+ if (i64_priority == -1)
+ goto next_fail_word1_invalid_value;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "table",
+ "lookup")) {
+ if (!word1)
+ continue;
+ if (i64_table != -1)
+ goto next_fail_word0_duplicate_key;
+ i64_table = _nm_utils_ascii_str_to_int64 (word1, 0, 1, G_MAXUINT32, -1);
+ if (i64_table == -1)
+ goto next_fail_word1_invalid_value;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "tos",
+ "dsfield")) {
+ if (!word1)
+ continue;
+ if (i64_tos != -1)
+ goto next_fail_word0_duplicate_key;
+ i64_tos = _nm_utils_ascii_str_to_int64 (word1, 16, 0, G_MAXUINT8, -1);
+ if (i64_tos == -1)
+ goto next_fail_word1_invalid_value;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "ipproto")) {
+ if (!word1)
+ continue;
+ if (i64_ipproto != -1)
+ goto next_fail_word0_duplicate_key;
+ i64_ipproto = _nm_utils_ascii_str_to_int64 (word1, 10, 0, G_MAXUINT8, -1);
+ if (i64_ipproto == -1)
+ goto next_fail_word1_invalid_value;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "sport")) {
+ if (!word1)
+ continue;
+ if (i64_sport_start != -1)
+ goto next_fail_word0_duplicate_key;
+ if (!_rr_xport_range_parse (word1, &i64_sport_start, &sport_end))
+ goto next_fail_word1_invalid_value;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "dport")) {
+ if (!word1)
+ continue;
+ if (i64_dport_start != -1)
+ goto next_fail_word0_duplicate_key;
+ if (!_rr_xport_range_parse (word1, &i64_dport_start, &dport_end))
+ goto next_fail_word1_invalid_value;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "fwmark")) {
+ if (!word1)
+ continue;
+ if (i64_fwmark != -1)
+ goto next_fail_word0_duplicate_key;
+ s = strchr (word1, '/');
+ if (s)
+ *(s++) = '\0';
+ i64_fwmark = _nm_utils_ascii_str_to_int64 (word1, 0, 0, G_MAXUINT32, -1);
+ if (i64_fwmark == -1)
+ goto next_fail_word1_invalid_value;
+ if (s) {
+ i64_fwmask = _nm_utils_ascii_str_to_int64 (s, 0, 0, G_MAXUINT32, -1);
+ if (i64_fwmask == -1)
+ goto next_fail_word1_invalid_value;
+ } else
+ i64_fwmask = 0xFFFFFFFFu;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "iif",
+ "dev")) {
+ if (!word1)
+ continue;
+ if (word_iifname)
+ goto next_fail_word0_duplicate_key;
+ word_iifname = word1;
+ goto next_words_consumed;
+ }
+ if (NM_IN_STRSET (word0, "oif")) {
+ if (!word1)
+ continue;
+ if (word_oifname)
+ goto next_fail_word0_duplicate_key;
+ word_oifname = word1;
+ goto next_words_consumed;
+ }
+
+ /* also the action is still unsupported. For the moment, we only support
+ * FR_ACT_TO_TBL, which is the default (by not expressing it on the command
+ * line). */
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("unsupported key \"%s\""),
+ word0);
+ return FALSE;
+next_fail_word0_duplicate_key:
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("duplicate key \"%s\""),
+ word0);
+ return FALSE;
+next_fail_word1_invalid_value:
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("invalid value for \"%s\""),
+ word0);
+ return FALSE;
+next_words_consumed:
+ word0 = NULL;
+ word1 = NULL;
+ }
+
+ if (!any_words) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("empty text does not describe a rule"));
+ return FALSE;
+ }
+
+ if (word0) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("missing argument for \"%s\""),
+ word0);
+ return FALSE;
+ }
+
+ if (!NM_IN_STRSET (word_from, NULL, "all")) {
+ if (!nm_utils_parse_inaddr_prefix_bin (addr_family,
+ word_from,
+ &addr_family,
+ &val_from,
+ &val_from_len)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("invalid \"from\" part"));
+ return FALSE;
+ }
+ if (val_from_len == -1)
+ val_from_len = nm_utils_addr_family_to_size (addr_family) * 8;
+ }
+
+ if (!NM_IN_STRSET (word_to, NULL, "all")) {
+ if (!nm_utils_parse_inaddr_prefix_bin (addr_family,
+ word_to,
+ &addr_family,
+ &val_to,
+ &val_to_len)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("invalid \"to\" part"));
+ return FALSE;
+ }
+ if (val_to_len == -1)
+ val_to_len = nm_utils_addr_family_to_size (addr_family) * 8;
+ }
+
+ if (!NM_IN_SET (addr_family, AF_INET, AF_INET6)) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("cannot detect address family for rule"));
+ return FALSE;
+ }
+
+ self = nm_ip_routing_rule_new (addr_family);
+
+ if (val_invert)
+ self->invert = TRUE;
+
+ if (i64_priority != -1)
+ nm_ip_routing_rule_set_priority (self, i64_priority);
+
+ if (i64_tos != -1)
+ nm_ip_routing_rule_set_tos (self, i64_tos);
+
+ if (i64_ipproto != -1)
+ nm_ip_routing_rule_set_ipproto (self, i64_ipproto);
+
+ if (i64_fwmark != -1)
+ nm_ip_routing_rule_set_fwmark (self, i64_fwmark, i64_fwmask);
+
+ if (i64_sport_start != -1)
+ nm_ip_routing_rule_set_source_port (self, i64_sport_start, sport_end);
+
+ if (i64_dport_start != -1)
+ nm_ip_routing_rule_set_destination_port (self, i64_dport_start, dport_end);
+
+ if ( val_from_len > 0
+ || ( val_from_len == 0
+ && !nm_ip_addr_is_null (addr_family, &val_from))) {
+ nm_ip_routing_rule_set_from_bin (self,
+ &val_from,
+ val_from_len);
+ }
+
+ if ( val_to_len > 0
+ || ( val_to_len == 0
+ && !nm_ip_addr_is_null (addr_family, &val_to))) {
+ nm_ip_routing_rule_set_to_bin (self,
+ &val_to,
+ val_to_len);
+ }
+
+ if (word_iifname)
+ nm_ip_routing_rule_set_iifname (self, word_iifname);
+
+ if (word_oifname)
+ nm_ip_routing_rule_set_oifname (self, word_oifname);
+
+ if (i64_table != -1)
+ nm_ip_routing_rule_set_table (self, i64_table);
+
+ if (NM_FLAGS_HAS (to_string_flags, NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE)) {
+ gs_free_error GError *local = NULL;
+
+ if (!nm_ip_routing_rule_validate (self, &local)) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("rule is invalid: %s"),
+ local->message);
+ return NULL;
+ }
+ }
+
+ return g_steal_pointer (&self);
+}
+
+static void
+_rr_string_append_inet_addr (GString *str,
+ gboolean is_from /* or else is-to */,
+ gboolean required,
+ int addr_family,
+ const NMIPAddr *addr_bin,
+ guint8 addr_len)
+{
+ char addr_str[NM_UTILS_INET_ADDRSTRLEN];
+
+ if (addr_len == 0) {
+ if (required) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "%s %s/0",
+ is_from ? "from" : "to",
+ (addr_family == AF_INET)
+ ? "0.0.0.0"
+ : "::");
+ }
+ return;
+ }
+
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "%s %s",
+ is_from ? "from" : "to",
+ nm_utils_inet_ntop (addr_family,
+ addr_bin,
+ addr_str));
+ if (addr_len != nm_utils_addr_family_to_size (addr_family) * 8) {
+ g_string_append_printf (str,
+ "/%u",
+ addr_len);
+ }
+}
+
+static void
+_rr_string_append_escaped (GString *str,
+ const char *s)
+{
+ for (; s[0]; s++) {
+ /* We need to escape spaces and '\\', because that
+ * is what nm_utils_str_simpletokens_extract_next() uses to split
+ * words.
+ * We also escape ',' because nmcli uses that to concatenate values.
+ * We also escape ';', in case somebody wants to use ';' instead of ','.
+ */
+ if ( NM_IN_SET (s[0], '\\', ',', ';')
+ || g_ascii_isspace (s[0]))
+ g_string_append_c (str, '\\');
+ g_string_append_c (str, s[0]);
+ }
+}
+
+/**
+ * nm_ip_routing_rule_to_string:
+ * @self: the #NMIPRoutingRule instance to convert to string.
+ * @to_string_flags: #NMIPRoutingRuleAsStringFlags for controlling the
+ * string conversion.
+ * @extra_args: (allow-none): extra arguments for controlling the string
+ * conversion. Currently not extra arguments are supported.
+ * @error: (allow-none) (out): the error reason.
+ *
+ * Returns: (transfer full): the string representation or %NULL on error.
+ *
+ * Since: 1.18
+ */
+char *
+nm_ip_routing_rule_to_string (const NMIPRoutingRule *self,
+ NMIPRoutingRuleAsStringFlags to_string_flags,
+ GHashTable *extra_args,
+ GError **error)
+{
+ nm_auto_free_gstring GString *str = NULL;
+ int addr_family;
+
+ g_return_val_if_fail (NM_IS_IP_ROUTING_RULE (self, TRUE), NULL);
+
+ if (!_rr_string_validate (FALSE, to_string_flags, extra_args, error))
+ return NULL;
+
+ addr_family = nm_ip_routing_rule_get_addr_family (self);
+
+ if (!NM_IN_SET (_rr_string_addr_family_from_flags (to_string_flags),
+ AF_UNSPEC,
+ addr_family)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("invalid address family"));
+ return NULL;
+ }
+
+ /* It is only guaranteed that valid rules can be expressed as string.
+ *
+ * Still, unless requested proceed to convert to string without validating and
+ * hope for the best.
+ *
+ * That is, because self->from_str might contain an invalid IP address (indicated
+ * by self->from_valid). But we don't support serializing such arbitrary strings
+ * as "from %s". */
+ if (NM_FLAGS_HAS (to_string_flags, NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE)) {
+ gs_free_error GError *local = NULL;
+
+ if (!nm_ip_routing_rule_validate (self, &local)) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("rule is invalid: %s"),
+ local->message);
+ return NULL;
+ }
+ }
+
+ str = g_string_sized_new (30);
+
+ if (self->invert)
+ g_string_append (str, "not");
+
+ if (self->priority_has) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "priority %u",
+ (guint) self->priority);
+ }
+
+ _rr_string_append_inet_addr (str,
+ TRUE,
+ ( !self->to_has
+ || !self->to_valid),
+ addr_family,
+ &self->from_bin,
+ (self->from_has && self->from_valid)
+ ? self->from_len
+ : 0);
+
+ _rr_string_append_inet_addr (str,
+ FALSE,
+ FALSE,
+ addr_family,
+ &self->to_bin,
+ (self->to_has && self->to_valid)
+ ? self->to_len
+ : 0);
+
+ if (self->tos != 0) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "tos 0x%02x",
+ (guint) self->tos);
+ }
+
+ if (self->ipproto != 0) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "ipproto %u",
+ (guint) self->ipproto);
+ }
+
+ if ( self->fwmark != 0
+ || self->fwmask != 0) {
+ if (self->fwmark != 0) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "fwmark 0x%x",
+ self->fwmark);
+ } else {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "fwmark 0");
+ }
+ if (self->fwmask != 0xFFFFFFFFu) {
+ if (self->fwmask != 0)
+ g_string_append_printf (str, "/0x%x", self->fwmask);
+ else
+ g_string_append_printf (str, "/0");
+ }
+ }
+
+ if ( self->sport_start != 0
+ || self->sport_end != 0) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "sport %u",
+ self->sport_start);
+ if (self->sport_start != self->sport_end) {
+ g_string_append_printf (str,
+ "-%u",
+ self->sport_end);
+ }
+ }
+
+ if ( self->dport_start != 0
+ || self->dport_end != 0) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "dport %u",
+ self->dport_start);
+ if (self->dport_start != self->dport_end) {
+ g_string_append_printf (str,
+ "-%u",
+ self->dport_end);
+ }
+ }
+
+ if (self->iifname) {
+ g_string_append (nm_gstring_add_space_delimiter (str),
+ "iif ");
+ _rr_string_append_escaped (str, self->iifname);
+ }
+
+ if (self->oifname) {
+ g_string_append (nm_gstring_add_space_delimiter (str),
+ "oif ");
+ _rr_string_append_escaped (str, self->oifname);
+ }
+
+ if (self->table != 0) {
+ g_string_append_printf (nm_gstring_add_space_delimiter (str),
+ "table %u",
+ (guint) self->table);
+ }
+
+ return g_string_free (g_steal_pointer (&str), FALSE);
+}
+
+/*****************************************************************************/
+
NM_GOBJECT_PROPERTIES_DEFINE (NMSettingIPConfig,
PROP_METHOD,
PROP_DNS,
@@ -1413,6 +3533,7 @@ typedef struct {
int dns_priority;
GPtrArray *addresses; /* array of NMIPAddress */
GPtrArray *routes; /* array of NMIPRoute */
+ GPtrArray *routing_rules;
gint64 route_metric;
guint32 route_table;
char *gateway;
@@ -2314,6 +4435,225 @@ nm_setting_ip_config_get_route_table (NMSettingIPConfig *setting)
return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->route_table;
}
+/*****************************************************************************/
+
+static void
+_routing_rules_notify (NMSettingIPConfig *setting)
+{
+ _nm_setting_emit_property_changed (NM_SETTING (setting));
+}
+
+/**
+ * nm_setting_ip_config_get_num_routing_rules:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the number of configured routing rules
+ *
+ * Since: 1.18
+ **/
+guint
+nm_setting_ip_config_get_num_routing_rules (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), 0);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ return priv->routing_rules ? priv->routing_rules->len : 0u;
+}
+
+/**
+ * nm_setting_ip_config_get_routing_rule:
+ * @setting: the #NMSettingIPConfig
+ * @idx: index number of the routing_rule to return
+ *
+ * Returns: (transfer none): the routing rule at index @idx
+ *
+ * Since: 1.18
+ **/
+NMIPRoutingRule *
+nm_setting_ip_config_get_routing_rule (NMSettingIPConfig *setting, guint idx)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ g_return_val_if_fail (priv->routing_rules && idx < priv->routing_rules->len, NULL);
+
+ return priv->routing_rules->pdata[idx];
+}
+
+/**
+ * nm_setting_ip_config_add_routing_rule:
+ * @setting: the #NMSettingIPConfig
+ * @routing_rule: the #NMIPRoutingRule to add. The address family
+ * of the added rule must be compatible with the setting.
+ *
+ * Appends a new routing-rule and associated information to the setting. The
+ * given routing rules gets sealed and the reference count is incremented.
+ * The function does not check whether an identical rule already exists
+ * and always appends the rule to the end of the list.
+ *
+ * Since: 1.18
+ **/
+void
+nm_setting_ip_config_add_routing_rule (NMSettingIPConfig *setting,
+ NMIPRoutingRule *routing_rule)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+ g_return_if_fail (NM_IS_IP_ROUTING_RULE (routing_rule, TRUE));
+ g_return_if_fail (_ip_routing_rule_get_addr_family (routing_rule) == NM_SETTING_IP_CONFIG_GET_FAMILY (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ if (!priv->routing_rules)
+ priv->routing_rules = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_routing_rule_unref);
+
+ nm_ip_routing_rule_seal (routing_rule);
+ g_ptr_array_add (priv->routing_rules, nm_ip_routing_rule_ref (routing_rule));
+ _routing_rules_notify (setting);
+}
+
+/**
+ * nm_setting_ip_config_remove_routing_rule:
+ * @setting: the #NMSettingIPConfig
+ * @idx: index number of the routing_rule
+ *
+ * Removes the routing_rule at index @idx.
+ *
+ * Since: 1.18
+ **/
+void
+nm_setting_ip_config_remove_routing_rule (NMSettingIPConfig *setting,
+ guint idx)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_if_fail (priv->routing_rules && idx < priv->routing_rules->len);
+
+ g_ptr_array_remove_index (priv->routing_rules, idx);
+ _routing_rules_notify (setting);
+}
+
+/**
+ * nm_setting_ip_config_clear_routing_rules:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Removes all configured routing rules.
+ *
+ * Since: 1.18
+ **/
+void
+nm_setting_ip_config_clear_routing_rules (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ if ( priv->routing_rules
+ && priv->routing_rules->len > 0) {
+ g_ptr_array_set_size (priv->routing_rules, 0);
+ _routing_rules_notify (setting);
+ }
+}
+
+static GVariant *
+_routing_rules_dbus_only_synth (const NMSettInfoSetting *sett_info,
+ guint property_idx,
+ NMConnection *connection,
+ NMSetting *setting,
+ NMConnectionSerializationFlags flags)
+{
+ NMSettingIPConfig *self = NM_SETTING_IP_CONFIG (setting);
+ NMSettingIPConfigPrivate *priv;
+ GVariantBuilder builder;
+ gboolean any = FALSE;
+ guint i;
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (self);
+
+ if ( !priv->routing_rules
+ || priv->routing_rules->len == 0)
+ return NULL;
+
+ for (i = 0; i < priv->routing_rules->len; i++) {
+ GVariant *variant;
+
+ variant = nm_ip_routing_rule_to_dbus (priv->routing_rules->pdata[i]);
+ if (!variant)
+ continue;
+
+ if (!any) {
+ any = TRUE;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{sv}"));
+ }
+ g_variant_builder_add (&builder, "@a{sv}", variant);
+ }
+
+ return any ? g_variant_builder_end (&builder) : NULL;
+}
+
+static gboolean
+_routing_rules_dbus_only_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value,
+ NMSettingParseFlags parse_flags,
+ GError **error)
+{
+ GVariantIter iter_rules;
+ GVariant *rule_var;
+ guint i_rule;
+ gboolean success = FALSE;
+ gboolean rules_changed = FALSE;
+
+ nm_assert (g_variant_is_of_type (value, G_VARIANT_TYPE ("aa{sv}")));
+
+ g_variant_iter_init (&iter_rules, value);
+
+ i_rule = 0;
+ while (g_variant_iter_next (&iter_rules, "@a{sv}", &rule_var)) {
+ _nm_unused gs_unref_variant GVariant *rule_var_unref = rule_var;
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rule = NULL;
+ gs_free_error GError *local = NULL;
+
+ i_rule++;
+
+ rule = nm_ip_routing_rule_from_dbus (rule_var,
+ NM_FLAGS_HAS (parse_flags, NM_SETTING_PARSE_FLAGS_STRICT),
+ &local);
+ if (!rule) {
+ if (NM_FLAGS_HAS (parse_flags, NM_SETTING_PARSE_FLAGS_STRICT)) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("rule #%u is invalid: %s"),
+ i_rule,
+ local->message);
+ goto out;
+ }
+ continue;
+ }
+
+ nm_setting_ip_config_add_routing_rule (NM_SETTING_IP_CONFIG (setting), rule);
+ rules_changed = TRUE;
+ }
+
+ success = TRUE;
+
+out:
+ if (rules_changed)
+ _routing_rules_notify (NM_SETTING_IP_CONFIG (setting));
+ return success;
+}
+
+/*****************************************************************************/
+
/**
* nm_setting_ip_config_get_ignore_auto_routes:
* @setting: the #NMSettingIPConfig
@@ -2600,6 +4940,33 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
}
}
+ if (priv->routing_rules) {
+ for (i = 0; i < priv->routing_rules->len; i++) {
+ NMIPRoutingRule *rule = priv->routing_rules->pdata[i];
+ gs_free_error GError *local = NULL;
+
+ if (_ip_routing_rule_get_addr_family (rule) != NM_SETTING_IP_CONFIG_GET_FAMILY (setting)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%u. rule has wrong address-family"),
+ i + 1);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ROUTING_RULES);
+ return FALSE;
+ }
+ if (!nm_ip_routing_rule_validate (rule, &local)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%u. rule is invalid: %s"),
+ i + 1,
+ local->message);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ROUTES);
+ return FALSE;
+ }
+ }
+ }
+
if (priv->gateway && priv->never_default) {
g_set_error (error,
NM_CONNECTION_ERROR,
@@ -2654,6 +5021,24 @@ compare_property (const NMSettInfoSetting *sett_info,
return TRUE;
}
+ if (nm_streq (sett_info->property_infos[property_idx].name, NM_SETTING_IP_CONFIG_ROUTING_RULES)) {
+ if (other) {
+ guint n;
+
+ a_priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ b_priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (other);
+
+ n = (a_priv->routing_rules) ? a_priv->routing_rules->len : 0u;
+ if (n != (b_priv->routing_rules ? b_priv->routing_rules->len : 0u))
+ return FALSE;
+ for (i = 0; i < n; i++) {
+ if (nm_ip_routing_rule_cmp (a_priv->routing_rules->pdata[i], b_priv->routing_rules->pdata[i]) != 0)
+ return FALSE;
+ }
+ }
+ return TRUE;
+ }
+
return NM_SETTING_CLASS (nm_setting_ip_config_parent_class)->compare_property (sett_info,
property_idx,
setting,
@@ -2661,6 +5046,72 @@ compare_property (const NMSettInfoSetting *sett_info,
flags);
}
+static void
+duplicate_copy_properties (const NMSettInfoSetting *sett_info,
+ NMSetting *src,
+ NMSetting *dst)
+{
+ NMSettingIPConfigPrivate *priv_src = NM_SETTING_IP_CONFIG_GET_PRIVATE (src);
+ NMSettingIPConfigPrivate *priv_dst = NM_SETTING_IP_CONFIG_GET_PRIVATE (dst);
+ guint i;
+ gboolean changed = FALSE;
+
+ NM_SETTING_CLASS (nm_setting_ip_config_parent_class)->duplicate_copy_properties (sett_info,
+ src,
+ dst);
+
+ if ( priv_dst->routing_rules
+ && priv_dst->routing_rules->len > 0) {
+ changed = TRUE;
+ g_ptr_array_set_size (priv_dst->routing_rules, 0);
+ }
+ if ( priv_src->routing_rules
+ && priv_src->routing_rules->len > 0) {
+ changed = TRUE;
+ if (!priv_dst->routing_rules)
+ priv_dst->routing_rules = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_routing_rule_unref);
+ for (i = 0; i < priv_src->routing_rules->len; i++) {
+ g_ptr_array_add (priv_dst->routing_rules,
+ nm_ip_routing_rule_ref (priv_src->routing_rules->pdata[i]));
+ }
+ }
+ if (changed)
+ _routing_rules_notify (NM_SETTING_IP_CONFIG (dst));
+}
+
+static void
+enumerate_values (const NMSettInfoProperty *property_info,
+ NMSetting *setting,
+ NMSettingValueIterFn func,
+ gpointer user_data)
+{
+ if (nm_streq (property_info->name, NM_SETTING_IP_CONFIG_ROUTING_RULES)) {
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ nm_auto_unset_gvalue GValue value = G_VALUE_INIT;
+ GPtrArray *ptr = NULL;
+ guint i;
+
+ if (priv->routing_rules && priv->routing_rules->len > 0) {
+ ptr = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_routing_rule_unref);
+ for (i = 0; i < priv->routing_rules->len; i++)
+ g_ptr_array_add (ptr, nm_ip_routing_rule_ref (priv->routing_rules->pdata[i]));
+ }
+ g_value_init (&value, G_TYPE_PTR_ARRAY);
+ g_value_take_boxed (&value, ptr);
+ func (setting,
+ property_info->name,
+ &value,
+ 0,
+ user_data);
+ return;
+ }
+
+ NM_SETTING_CLASS (nm_setting_ip_config_parent_class)->enumerate_values (property_info,
+ setting,
+ func,
+ user_data);
+}
+
/*****************************************************************************/
static gboolean
@@ -2693,6 +5144,18 @@ _nm_sett_info_property_override_create_array_ip_config (void)
ip_gateway_set,
NULL);
+ /* ---dbus---
+ * property: routing-rules
+ * format: array of 'a{sv}'
+ * description: Array of dictionaries for routing rules.
+ * ---end---
+ */
+ _properties_override_add_dbus_only (properties_override,
+ NM_SETTING_IP_CONFIG_ROUTING_RULES,
+ G_VARIANT_TYPE ("aa{sv}"),
+ _routing_rules_dbus_only_synth,
+ _routing_rules_dbus_only_set);
+
return properties_override;
}
@@ -2900,6 +5363,8 @@ finalize (GObject *object)
g_ptr_array_unref (priv->dns_options);
g_ptr_array_unref (priv->addresses);
g_ptr_array_unref (priv->routes);
+ if (priv->routing_rules)
+ g_ptr_array_unref (priv->routing_rules);
G_OBJECT_CLASS (nm_setting_ip_config_parent_class)->finalize (object);
}
@@ -2916,8 +5381,10 @@ nm_setting_ip_config_class_init (NMSettingIPConfigClass *klass)
object_class->set_property = set_property;
object_class->finalize = finalize;
- setting_class->verify = verify;
- setting_class->compare_property = compare_property;
+ setting_class->verify = verify;
+ setting_class->compare_property = compare_property;
+ setting_class->duplicate_copy_properties = duplicate_copy_properties;
+ setting_class->enumerate_values = enumerate_values;
/**
* NMSettingIPConfig:method:
diff --git a/libnm-core/nm-setting-ip-config.h b/libnm-core/nm-setting-ip-config.h
index 39cb36a43d..09b80f72a9 100644
--- a/libnm-core/nm-setting-ip-config.h
+++ b/libnm-core/nm-setting-ip-config.h
@@ -159,6 +159,153 @@ gboolean nm_ip_route_attribute_validate (const char *name,
#define NM_IP_ROUTE_ATTRIBUTE_LOCK_INITRWND "lock-initrwnd"
#define NM_IP_ROUTE_ATTRIBUTE_LOCK_MTU "lock-mtu"
+/*****************************************************************************/
+
+typedef struct NMIPRoutingRule NMIPRoutingRule;
+
+NM_AVAILABLE_IN_1_18
+GType nm_ip_routing_rule_get_type (void);
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_new (int addr_family);
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_new_clone (const NMIPRoutingRule *rule);
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_ref (NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_unref (NMIPRoutingRule *self);
+
+NM_AVAILABLE_IN_1_18
+gboolean nm_ip_routing_rule_is_sealed (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_seal (NMIPRoutingRule *self);
+
+NM_AVAILABLE_IN_1_18
+int nm_ip_routing_rule_get_addr_family (const NMIPRoutingRule *self);
+
+NM_AVAILABLE_IN_1_18
+gboolean nm_ip_routing_rule_get_invert (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_invert (NMIPRoutingRule *self, gboolean invert);
+
+NM_AVAILABLE_IN_1_18
+gint64 nm_ip_routing_rule_get_priority (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_priority (NMIPRoutingRule *self, gint64 priority);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_tos (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_tos (NMIPRoutingRule *self, guint8 tos);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_ipproto (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_ipproto (NMIPRoutingRule *self, guint8 ipproto);
+
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_source_port_start (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_source_port_end (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_source_port (NMIPRoutingRule *self, guint16 start, guint16 end);
+
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_destination_port_start (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_destination_port_end (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_destination_port (NMIPRoutingRule *self, guint16 start, guint16 end);
+
+NM_AVAILABLE_IN_1_18
+guint32 nm_ip_routing_rule_get_fwmark (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+guint32 nm_ip_routing_rule_get_fwmask (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_fwmark (NMIPRoutingRule *self, guint32 fwmark, guint32 fwmask);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_from_len (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_from (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_from (NMIPRoutingRule *self,
+ const char *from,
+ guint8 len);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_to_len (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_to (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_to (NMIPRoutingRule *self,
+ const char *to,
+ guint8 len);
+
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_iifname (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_iifname (NMIPRoutingRule *self, const char *iifname);
+
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_oifname (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_oifname (NMIPRoutingRule *self, const char *oifname);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_action (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_action (NMIPRoutingRule *self, guint8 action);
+
+NM_AVAILABLE_IN_1_18
+guint32 nm_ip_routing_rule_get_table (const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_table (NMIPRoutingRule *self, guint32 table);
+
+NM_AVAILABLE_IN_1_18
+int nm_ip_routing_rule_cmp (const NMIPRoutingRule *rule,
+ const NMIPRoutingRule *other);
+
+NM_AVAILABLE_IN_1_18
+gboolean nm_ip_routing_rule_validate (const NMIPRoutingRule *self,
+ GError **error);
+
+/**
+ * NMIPRoutingRuleAsStringFlags:
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE: no flags selected.
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET: whether to allow parsing
+ * IPv4 addresses.
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6: whether to allow parsing
+ * IPv6 addresses. If both @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET and
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 are unset, it's the same
+ * as setting them both.
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE: if set, ensure that the
+ * rule verfies or fail.
+ *
+ * Since: 1.18
+ */
+typedef enum { /*< flags >*/
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE = 0,
+
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET = 0x1,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 = 0x2,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE = 0x4,
+} NMIPRoutingRuleAsStringFlags;
+
+NMIPRoutingRule *nm_ip_routing_rule_from_string (const char *str,
+ NMIPRoutingRuleAsStringFlags to_string_flags,
+ GHashTable *extra_args,
+ GError **error);
+
+char *nm_ip_routing_rule_to_string (const NMIPRoutingRule *self,
+ NMIPRoutingRuleAsStringFlags to_string_flags,
+ GHashTable *extra_args,
+ GError **error);
+
+/*****************************************************************************/
+
#define NM_TYPE_SETTING_IP_CONFIG (nm_setting_ip_config_get_type ())
#define NM_SETTING_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfig))
#define NM_SETTING_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_IPCONFIG, NMSettingIPConfigClass))
@@ -187,6 +334,9 @@ gboolean nm_ip_route_attribute_validate (const char *name,
#define NM_SETTING_IP_CONFIG_DAD_TIMEOUT "dad-timeout"
#define NM_SETTING_IP_CONFIG_DHCP_TIMEOUT "dhcp-timeout"
+/* these are not real GObject properties. */
+#define NM_SETTING_IP_CONFIG_ROUTING_RULES "routing-rules"
+
#define NM_SETTING_DNS_OPTION_DEBUG "debug"
#define NM_SETTING_DNS_OPTION_NDOTS "ndots"
#define NM_SETTING_DNS_OPTION_TIMEOUT "timeout"
@@ -289,6 +439,20 @@ gint64 nm_setting_ip_config_get_route_metric (NMSettingIPConfig
NM_AVAILABLE_IN_1_10
guint32 nm_setting_ip_config_get_route_table (NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_18
+guint nm_setting_ip_config_get_num_routing_rules (NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_setting_ip_config_get_routing_rule (NMSettingIPConfig *setting,
+ guint idx);
+NM_AVAILABLE_IN_1_18
+void nm_setting_ip_config_add_routing_rule (NMSettingIPConfig *setting,
+ NMIPRoutingRule *routing_rule);
+NM_AVAILABLE_IN_1_18
+void nm_setting_ip_config_remove_routing_rule (NMSettingIPConfig *setting,
+ guint idx);
+NM_AVAILABLE_IN_1_18
+void nm_setting_ip_config_clear_routing_rules (NMSettingIPConfig *setting);
+
gboolean nm_setting_ip_config_get_ignore_auto_routes (NMSettingIPConfig *setting);
gboolean nm_setting_ip_config_get_ignore_auto_dns (NMSettingIPConfig *setting);
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
index 88cdee36e3..dbeb6601f4 100644
--- a/libnm-core/nm-utils.c
+++ b/libnm-core/nm-utils.c
@@ -4541,6 +4541,29 @@ _nm_utils_generate_mac_address_mask_parse (const char *value,
/*****************************************************************************/
+gboolean
+nm_utils_is_valid_iface_name_utf8safe (const char *utf8safe_name)
+{
+ gs_free gpointer bin_to_free = NULL;
+ gconstpointer bin;
+ gsize len;
+
+ g_return_val_if_fail (utf8safe_name, FALSE);
+
+ bin = nm_utils_buf_utf8safe_unescape (utf8safe_name, &len, &bin_to_free);
+
+ if (bin_to_free) {
+ /* some unescaping happened... */
+
+ if (len != strlen (bin)) {
+ /* there are embedded NUL chars. Invalid. */
+ return FALSE;
+ }
+ }
+
+ return nm_utils_is_valid_iface_name (bin, NULL);
+}
+
/**
* nm_utils_is_valid_iface_name:
* @name: Name of interface
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
index 6d5eeb2810..98e5837176 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -2710,6 +2710,7 @@ test_connection_diff_a_only (void)
{ NM_SETTING_IP_CONFIG_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP_CONFIG_ROUTE_METRIC, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP_CONFIG_ROUTE_TABLE, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_ROUTING_RULES, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, NM_SETTING_DIFF_RESULT_IN_A },
{ NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, NM_SETTING_DIFF_RESULT_IN_A },
diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c
index dc624d1ba3..bd6b4e7fd2 100644
--- a/libnm-core/tests/test-setting.c
+++ b/libnm-core/tests/test-setting.c
@@ -20,6 +20,7 @@
#include "nm-default.h"
#include <linux/pkt_sched.h>
+#include <net/if.h>
#include "nm-utils.h"
#include "nm-utils-private.h"
@@ -2361,7 +2362,16 @@ test_roundtrip_conversion (gconstpointer test_data)
NMSettingConnection *s_con = NULL;
NMSettingWired *s_eth = NULL;
NMSettingWireGuard *s_wg = NULL;
+ union {
+ struct {
+ NMSettingIPConfig *s_6;
+ NMSettingIPConfig *s_4;
+ };
+ NMSettingIPConfig *s_x[2];
+ } s_ip;
+ int is_ipv4;
guint i;
+ gboolean success;
switch (MODE) {
case 0:
@@ -2548,6 +2558,89 @@ test_roundtrip_conversion (gconstpointer test_data)
_rndt_wg_peers_assert_equal (s_wg, wg_peers, TRUE, TRUE, FALSE);
break;
+ case 3:
+ con = nmtst_create_minimal_connection (ID, UUID, NM_SETTING_WIRED_SETTING_NAME, &s_con);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME,
+ INTERFACE_NAME,
+ NULL);
+ nmtst_connection_normalize (con);
+
+ s_eth = NM_SETTING_WIRED (nm_connection_get_setting (con, NM_TYPE_SETTING_WIRED));
+ g_assert (NM_IS_SETTING_WIRED (s_eth));
+
+ g_object_set (s_eth,
+ NM_SETTING_WIRED_MTU,
+ ETH_MTU,
+ NULL);
+
+ s_ip.s_4 = NM_SETTING_IP_CONFIG (nm_connection_get_setting (con, NM_TYPE_SETTING_IP4_CONFIG));
+ g_assert (NM_IS_SETTING_IP4_CONFIG (s_ip.s_4));
+
+ s_ip.s_6 = NM_SETTING_IP_CONFIG (nm_connection_get_setting (con, NM_TYPE_SETTING_IP6_CONFIG));
+ g_assert (NM_IS_SETTING_IP6_CONFIG (s_ip.s_6));
+
+ for (is_ipv4 = 0; is_ipv4 < 2; is_ipv4++) {
+ g_assert (NM_IS_SETTING_IP_CONFIG (s_ip.s_x[is_ipv4]));
+ for (i = 0; i < 3; i++) {
+ char addrstr[NM_UTILS_INET_ADDRSTRLEN];
+
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr = NULL;
+
+ rr = nm_ip_routing_rule_new (is_ipv4 ? AF_INET : AF_INET6);
+ nm_ip_routing_rule_set_priority (rr, i + 1);
+ if (i > 0) {
+ if (is_ipv4)
+ nm_sprintf_buf (addrstr, "192.168.%u.0", i);
+ else
+ nm_sprintf_buf (addrstr, "1:2:3:%x::", 10 + i);
+ nm_ip_routing_rule_set_from (rr, addrstr, is_ipv4 ? 24 + i : 64 + i);
+ }
+ nm_ip_routing_rule_set_table (rr, 1000 + i);
+
+ success = nm_ip_routing_rule_validate (rr, &error);
+ nmtst_assert_success (success, error);
+
+ nm_setting_ip_config_add_routing_rule (s_ip.s_x[is_ipv4], rr);
+ }
+ }
+
+ g_ptr_array_add (kf_data_arr,
+ g_strdup_printf ("[connection]\n"
+ "id=%s\n"
+ "uuid=%s\n"
+ "type=ethernet\n"
+ "interface-name=%s\n"
+ "permissions=\n"
+ "\n"
+ "[ethernet]\n"
+ "mac-address-blacklist=\n"
+ "%s" /* mtu */
+ "\n"
+ "[ipv4]\n"
+ "dns-search=\n"
+ "method=auto\n"
+ "routing-rule1=priority 1 from 0.0.0.0/0 table 1000\n"
+ "routing-rule2=priority 2 from 192.168.1.0/25 table 1001\n"
+ "routing-rule3=priority 3 from 192.168.2.0/26 table 1002\n"
+ "\n"
+ "[ipv6]\n"
+ "addr-gen-mode=stable-privacy\n"
+ "dns-search=\n"
+ "method=auto\n"
+ "routing-rule1=priority 1 from ::/0 table 1000\n"
+ "routing-rule2=priority 2 from 1:2:3:b::/65 table 1001\n"
+ "routing-rule3=priority 3 from 1:2:3:c::/66 table 1002\n"
+ "",
+ ID,
+ UUID,
+ INTERFACE_NAME,
+ (ETH_MTU != 0)
+ ? nm_sprintf_bufa (100, "mtu=%u\n", ETH_MTU)
+ : ""));
+
+ break;
+
default:
g_assert_not_reached ();
}
@@ -2675,6 +2768,203 @@ test_roundtrip_conversion (gconstpointer test_data)
/*****************************************************************************/
+static NMIPRoutingRule *
+_rr_from_str_get_impl (const char *str, const char *const*aliases)
+{
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr = NULL;
+ gs_free_error GError *error = NULL;
+ gboolean vbool;
+ int addr_family;
+ int i;
+ NMIPRoutingRuleAsStringFlags to_string_flags;
+
+ rr = nm_ip_routing_rule_from_string (str,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE,
+ NULL,
+ &error);
+ nmtst_assert_success (rr, error);
+
+ addr_family = nm_ip_routing_rule_get_addr_family (rr);
+ g_assert (NM_IN_SET (addr_family, AF_INET, AF_INET6));
+
+ if (addr_family == AF_INET)
+ to_string_flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET;
+ else
+ to_string_flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6;
+
+ for (i = 0; TRUE; i++) {
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr2 = NULL;
+ gs_free char *str1 = NULL;
+ gs_unref_variant GVariant *variant1 = NULL;
+ const char *cstr1;
+
+ switch (i) {
+ case 0:
+ rr2 = nm_ip_routing_rule_ref (rr);
+ break;
+
+ case 1:
+ rr2 = nm_ip_routing_rule_from_string (str,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+ NULL,
+ &error);
+ nmtst_assert_success (rr, error);
+ break;
+
+ case 2:
+ str1 = nm_ip_routing_rule_to_string (rr,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+ NULL,
+ &error);
+ nmtst_assert_success (str1 && str1[0], error);
+
+ g_assert_cmpstr (str, ==, str1);
+
+ rr2 = nm_ip_routing_rule_from_string (str1,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+ NULL,
+ &error);
+ nmtst_assert_success (rr, error);
+ break;
+
+ case 3:
+ variant1 = nm_ip_routing_rule_to_dbus (rr);
+ g_assert (variant1);
+ g_assert (g_variant_is_floating (variant1));
+ g_assert (g_variant_is_of_type (variant1, G_VARIANT_TYPE_VARDICT));
+
+ rr2 = nm_ip_routing_rule_from_dbus (variant1,
+ TRUE,
+ &error);
+ nmtst_assert_success (rr, error);
+ break;
+
+ default:
+ if (!aliases || !aliases[0])
+ goto done;
+ cstr1 = (aliases++)[0];
+ rr2 = nm_ip_routing_rule_from_string (cstr1,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+ NULL,
+ &error);
+ nmtst_assert_success (rr, error);
+ break;
+ }
+
+ g_assert (rr2);
+ vbool = nm_ip_routing_rule_validate (rr, &error);
+ nmtst_assert_success (vbool, error);
+ vbool = nm_ip_routing_rule_validate (rr2, &error);
+ nmtst_assert_success (vbool, error);
+
+ g_assert_cmpint (nm_ip_routing_rule_cmp (rr, rr2), ==, 0);
+ g_assert_cmpint (nm_ip_routing_rule_cmp (rr2, rr), ==, 0);
+ }
+
+done:
+ return g_steal_pointer (&rr);
+}
+#define _rr_from_str_get(a, ...) _rr_from_str_get_impl (a, &(NM_MAKE_STRV (NULL, ##__VA_ARGS__))[1])
+
+#define _rr_from_str(...) \
+ G_STMT_START { \
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *_rr = NULL; \
+ \
+ _rr = _rr_from_str_get (__VA_ARGS__); \
+ g_assert (_rr); \
+ } G_STMT_END
+
+static void
+test_routing_rule (gconstpointer test_data)
+{
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr1 = NULL;
+ gboolean success;
+ char ifname_buf[16];
+
+ _rr_from_str ("priority 5 from 0.0.0.0 table 1",
+ " from 0.0.0\\.0 \\priority 5 lookup 1 ");
+ _rr_from_str ("priority 5 from 0.0.0.0/0 table 4");
+ _rr_from_str ("priority 5 to 0.0.0.0 table 6");
+ _rr_from_str ("priority 5 to 0.0.0.0 table 254",
+ "priority 5 to 0.0.0.0/32");
+ _rr_from_str ("priority 5 from 1.2.3.4 table 15",
+ "priority 5 from 1.2.3.4/32 table 0xF ",
+ "priority 5 from 1.2.3.4/32 to 0.0.0.0/0 lookup 15 ");
+ _rr_from_str ("priority 5 from 1.2.3.4 to 0.0.0.0 table 8");
+ _rr_from_str ("priority 5 to a:b:c:: tos 0x16 table 25",
+ "priority 5 to a:b:c::/128 table 0x19 tos 16",
+ "priority 5 to a:b:c::/128 lookup 0x19 dsfield 16",
+ "priority 5 to a:b:c::/128 lookup 0x19 dsfield 16 fwmark 0/0x00",
+ "priority 5 to a:b:c:: from all lookup 0x19 dsfield 16 fwmark 0x0/0");
+ _rr_from_str ("priority 5 from :: fwmark 0 table 25",
+ "priority 5 from ::/128 to all table 0x19 fwmark 0/0xFFFFFFFF",
+ "priority 5 from :: to ::/0 table 0x19 fwmark 0x00/4294967295");
+ _rr_from_str ("priority 5 from :: iif aab table 25");
+ _rr_from_str ("priority 5 from :: iif aab oif er table 25",
+ "priority 5 from :: table 0x19 dev \\a\\a\\b oif er");
+ _rr_from_str ("priority 5 from :: iif a\\\\303b table 25");
+ _rr_from_str ("priority 5 to 0.0.0.0 sport 10 table 6",
+ "priority 5 to 0.0.0.0 sport 10-10 table 6");
+ _rr_from_str ("not priority 5 to 0.0.0.0 dport 10-133 table 6",
+ "priority 5 to 0.0.0.0 not dport 10-133 not table 6",
+ "priority 5 to 0.0.0.0 not dport 10-\\ 133 not table 6");
+ _rr_from_str ("priority 5 to 0.0.0.0 ipproto 10 sport 10 table 6");
+
+ rr1 = _rr_from_str_get ("priority 5 from :: iif aab table 25");
+ g_assert_cmpstr (nm_ip_routing_rule_get_iifname (rr1), ==, "aab");
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
+ g_assert (!success);
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
+ g_assert_cmpstr (ifname_buf, ==, "aab");
+ g_assert (success);
+
+ rr1 = _rr_from_str_get ("priority 5 from :: iif a\\\\303\\\\261xb table 254");
+ g_assert_cmpstr (nm_ip_routing_rule_get_iifname (rr1), ==, "a\\303\\261xb");
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
+ g_assert (!success);
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
+ g_assert_cmpstr (ifname_buf, ==, "a\303\261xb");
+ g_assert (success);
+ nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
+
+ rr1 = _rr_from_str_get ("priority 5 from :: oif \\\\101=\\\\303\\\\261xb table 7");
+ g_assert_cmpstr (nm_ip_routing_rule_get_oifname (rr1), ==, "\\101=\\303\\261xb");
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
+ g_assert_cmpstr (ifname_buf, ==, "A=\303\261xb");
+ g_assert (success);
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
+ g_assert (!success);
+ nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
+
+ rr1 = _rr_from_str_get ("priority 5 to 0.0.0.0 tos 0x10 table 7");
+ g_assert_cmpstr (NULL, ==, nm_ip_routing_rule_get_from (rr1));
+ g_assert (!nm_ip_routing_rule_get_from_bin (rr1));
+ g_assert_cmpint (0, ==, nm_ip_routing_rule_get_from_len (rr1));
+ g_assert_cmpstr ("0.0.0.0", ==, nm_ip_routing_rule_get_to (rr1));
+ g_assert (nm_ip_addr_is_null (AF_INET, nm_ip_routing_rule_get_to_bin (rr1)));
+ g_assert_cmpint (32, ==, nm_ip_routing_rule_get_to_len (rr1));
+ g_assert_cmpint (7, ==, nm_ip_routing_rule_get_table (rr1));
+ g_assert_cmpint (0x10, ==, nm_ip_routing_rule_get_tos (rr1));
+ nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
+
+ rr1 = _rr_from_str_get ("priority 5 from :: iif a\\\\303\\\\261\\,x\\;b table 254",
+ "priority 5 from :: iif a\\\\303\\\\261,x;b table 254");
+ g_assert_cmpstr (nm_ip_routing_rule_get_iifname (rr1), ==, "a\\303\\261,x;b");
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
+ g_assert (!success);
+ success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
+ g_assert_cmpstr (ifname_buf, ==, "a\303\261,x;b");
+ g_assert (success);
+ nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
+
+}
+
+/*****************************************************************************/
+
NMTST_DEFINE ();
int
@@ -2753,9 +3043,12 @@ main (int argc, char **argv)
g_test_add_func ("/libnm/settings/team-port/sycn_from_config_full", test_team_port_full_config);
#endif
- g_test_add_data_func ("/libnm/settings/roundtrip-conversion/general/0", GINT_TO_POINTER (0), test_roundtrip_conversion);
+ g_test_add_data_func ("/libnm/settings/roundtrip-conversion/general/0", GINT_TO_POINTER (0), test_roundtrip_conversion);
g_test_add_data_func ("/libnm/settings/roundtrip-conversion/wireguard/1", GINT_TO_POINTER (1), test_roundtrip_conversion);
g_test_add_data_func ("/libnm/settings/roundtrip-conversion/wireguard/2", GINT_TO_POINTER (2), test_roundtrip_conversion);
+ g_test_add_data_func ("/libnm/settings/roundtrip-conversion/general/3", GINT_TO_POINTER (3), test_roundtrip_conversion);
+
+ g_test_add_data_func ("/libnm/settings/routing-rule/1", GINT_TO_POINTER (0), test_routing_rule);
return g_test_run ();
}
diff --git a/libnm/libnm.ver b/libnm/libnm.ver
index c2780cca81..ac8c7b97cf 100644
--- a/libnm/libnm.ver
+++ b/libnm/libnm.ver
@@ -1536,13 +1536,57 @@ global:
nm_bridge_vlan_set_untagged;
nm_bridge_vlan_to_str;
nm_bridge_vlan_unref;
+ nm_ip_routing_rule_as_string_flags_get_type;
+ nm_ip_routing_rule_cmp;
+ nm_ip_routing_rule_from_string;
+ nm_ip_routing_rule_get_action;
+ nm_ip_routing_rule_get_addr_family;
+ nm_ip_routing_rule_get_destination_port_end;
+ nm_ip_routing_rule_get_destination_port_start;
+ nm_ip_routing_rule_get_from;
+ nm_ip_routing_rule_get_from_len;
+ nm_ip_routing_rule_get_fwmark;
+ nm_ip_routing_rule_get_fwmask;
+ nm_ip_routing_rule_get_iifname;
+ nm_ip_routing_rule_get_invert;
+ nm_ip_routing_rule_get_ipproto;
+ nm_ip_routing_rule_get_oifname;
+ nm_ip_routing_rule_get_priority;
+ nm_ip_routing_rule_get_source_port_end;
+ nm_ip_routing_rule_get_source_port_start;
+ nm_ip_routing_rule_get_table;
+ nm_ip_routing_rule_get_to;
+ nm_ip_routing_rule_get_to_len;
+ nm_ip_routing_rule_get_tos;
+ nm_ip_routing_rule_get_type;
+ nm_ip_routing_rule_is_sealed;
+ nm_ip_routing_rule_new;
+ nm_ip_routing_rule_new_clone;
+ nm_ip_routing_rule_ref;
+ nm_ip_routing_rule_seal;
+ nm_ip_routing_rule_set_action;
+ nm_ip_routing_rule_set_destination_port;
+ nm_ip_routing_rule_set_from;
+ nm_ip_routing_rule_set_fwmark;
+ nm_ip_routing_rule_set_iifname;
+ nm_ip_routing_rule_set_invert;
+ nm_ip_routing_rule_set_ipproto;
+ nm_ip_routing_rule_set_oifname;
+ nm_ip_routing_rule_set_priority;
+ nm_ip_routing_rule_set_source_port;
+ nm_ip_routing_rule_set_table;
+ nm_ip_routing_rule_set_to;
+ nm_ip_routing_rule_set_tos;
+ nm_ip_routing_rule_to_string;
+ nm_ip_routing_rule_unref;
+ nm_ip_routing_rule_validate;
nm_lldp_neighbor_get_attr_value;
nm_setting_bridge_add_vlan;
nm_setting_bridge_clear_vlans;
nm_setting_bridge_get_num_vlans;
nm_setting_bridge_get_vlan;
- nm_setting_bridge_get_vlan_filtering;
nm_setting_bridge_get_vlan_default_pvid;
+ nm_setting_bridge_get_vlan_filtering;
nm_setting_bridge_port_add_vlan;
nm_setting_bridge_port_clear_vlans;
nm_setting_bridge_port_get_num_vlans;
@@ -1551,4 +1595,9 @@ global:
nm_setting_bridge_port_remove_vlan_by_vid;
nm_setting_bridge_remove_vlan;
nm_setting_bridge_remove_vlan_by_vid;
+ nm_setting_ip_config_add_routing_rule;
+ nm_setting_ip_config_clear_routing_rules;
+ nm_setting_ip_config_get_num_routing_rules;
+ nm_setting_ip_config_get_routing_rule;
+ nm_setting_ip_config_remove_routing_rule;
} libnm_1_16_0;
diff --git a/shared/nm-libnm-core-utils.h b/shared/nm-libnm-core-utils.h
index 85dd3b9b2c..f55d6b3cc0 100644
--- a/shared/nm-libnm-core-utils.h
+++ b/shared/nm-libnm-core-utils.h
@@ -38,6 +38,9 @@ NM_AUTO_DEFINE_FCN0 (NMIPAddress *, _nm_ip_address_unref, nm_ip_address_unref)
#define nm_auto_unref_ip_route nm_auto (_nm_auto_unref_ip_route)
NM_AUTO_DEFINE_FCN0 (NMIPRoute *, _nm_auto_unref_ip_route, nm_ip_route_unref)
+#define nm_auto_unref_ip_routing_rule nm_auto(_nm_auto_unref_ip_routing_rule)
+NM_AUTO_DEFINE_FCN0 (NMIPRoutingRule *, _nm_auto_unref_ip_routing_rule, nm_ip_routing_rule_unref)
+
#define nm_auto_unref_sriov_vf nm_auto (_nm_auto_unref_sriov_vf)
NM_AUTO_DEFINE_FCN0 (NMSriovVF *, _nm_auto_unref_sriov_vf, nm_sriov_vf_unref)
diff --git a/shared/nm-utils/nm-shared-utils.c b/shared/nm-utils/nm-shared-utils.c
index 215a87b59b..33d7ad12f2 100644
--- a/shared/nm-utils/nm-shared-utils.c
+++ b/shared/nm-utils/nm-shared-utils.c
@@ -2505,6 +2505,59 @@ _nm_utils_unescape_plain (char *str, const char *candidates, gboolean do_strip)
return str;
}
+char *
+nm_utils_str_simpletokens_extract_next (char **p_line_start)
+{
+ char *s_next;
+ char *s_start;
+ gsize j;
+
+ s_start = *p_line_start;
+ if (!s_start)
+ return NULL;
+
+ s_start = nm_str_skip_leading_spaces (s_start);
+
+ if (s_start[0] == '\0') {
+ *p_line_start = s_start;
+ return NULL;
+ }
+
+ s_next = s_start;
+ j = 0;
+ while (TRUE) {
+ if (s_next[0] == '\0') {
+ s_start[j] = '\0';
+ *p_line_start = s_next;
+ return s_start;
+ }
+ if (s_next[0] == '\\') {
+ s_next++;
+ if (s_next[0] == '\0') {
+ /* trailing backslash at end of word. That's an error,
+ * but we silently drop the backslash and signal success. */
+ *p_line_start = s_next;
+ if (j == 0)
+ return NULL;
+ s_start[j] = '\0';
+ return s_start;
+ }
+
+ s_start[j++] = (s_next++)[0];
+ continue;
+ }
+ if (!g_ascii_isspace (s_next[0])) {
+ s_start[j++] = (s_next++)[0];
+ continue;
+ }
+
+ nm_assert (j > 0);
+ s_start[j] = '\0';
+ *p_line_start = nm_str_skip_leading_spaces (&s_next[1]);
+ return s_start;
+ }
+}
+
/*****************************************************************************/
typedef struct {
diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h
index f48bfede7e..af9e1cf6e9 100644
--- a/shared/nm-utils/nm-shared-utils.h
+++ b/shared/nm-utils/nm-shared-utils.h
@@ -126,6 +126,16 @@ typedef struct {
extern const NMIPAddr nm_ip_addr_zero;
+static inline gboolean
+nm_ip_addr_is_null (int addr_family, gconstpointer addr)
+{
+ nm_assert (addr);
+ if (addr_family == AF_INET6)
+ return IN6_IS_ADDR_UNSPECIFIED ((const struct in6_addr *) addr);
+ nm_assert (addr_family == AF_INET);
+ return ((const struct in_addr *) addr)->s_addr == 0;
+}
+
static inline void
nm_ip_addr_set (int addr_family, gpointer dst, gconstpointer src)
{
@@ -436,6 +446,8 @@ int nm_utils_dbus_path_cmp (const char *dbus_path_a, const char *dbus_path_b);
const char **nm_utils_strsplit_set (const char *str, const char *delimiters, gboolean allow_escaping);
+char *nm_utils_str_simpletokens_extract_next (char **p_line_start);
+
gssize nm_utils_strv_find_first (char **list, gssize len, const char *needle);
char **_nm_utils_strv_cleanup (char **strv,
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 71bfbf7c10..0f63239129 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -23,6 +23,8 @@
#include "NetworkManagerUtils.h"
+#include <linux/fib_rules.h>
+
#include "nm-utils/nm-c-list.h"
#include "nm-common-macros.h"
@@ -908,6 +910,48 @@ nm_match_spec_device_by_pllink (const NMPlatformLink *pllink,
/*****************************************************************************/
+NMPlatformRoutingRule *
+nm_ip_routing_rule_to_platform (const NMIPRoutingRule *rule,
+ NMPlatformRoutingRule *out_pl)
+{
+ nm_assert (rule);
+ nm_assert (nm_ip_routing_rule_validate (rule, NULL));
+ nm_assert (out_pl);
+
+ *out_pl = (NMPlatformRoutingRule) {
+ .addr_family = nm_ip_routing_rule_get_addr_family (rule),
+ .flags = ( nm_ip_routing_rule_get_invert (rule)
+ ? FIB_RULE_INVERT
+ : 0),
+ .priority = nm_ip_routing_rule_get_priority (rule),
+ .tos = nm_ip_routing_rule_get_tos (rule),
+ .ip_proto = nm_ip_routing_rule_get_ipproto (rule),
+ .fwmark = nm_ip_routing_rule_get_fwmark (rule),
+ .fwmask = nm_ip_routing_rule_get_fwmask (rule),
+ .sport_range = {
+ .start = nm_ip_routing_rule_get_source_port_start (rule),
+ .end = nm_ip_routing_rule_get_source_port_end (rule),
+ },
+ .dport_range = {
+ .start = nm_ip_routing_rule_get_destination_port_start (rule),
+ .end = nm_ip_routing_rule_get_destination_port_end (rule),
+ },
+ .src = *(nm_ip_routing_rule_get_from_bin (rule) ?: &nm_ip_addr_zero),
+ .dst = *(nm_ip_routing_rule_get_to_bin (rule) ?: &nm_ip_addr_zero),
+ .src_len = nm_ip_routing_rule_get_from_len (rule),
+ .dst_len = nm_ip_routing_rule_get_to_len (rule),
+ .action = nm_ip_routing_rule_get_action (rule),
+ .table = nm_ip_routing_rule_get_table (rule),
+ };
+
+ nm_ip_routing_rule_get_xifname_bin (rule, TRUE, out_pl->iifname);
+ nm_ip_routing_rule_get_xifname_bin (rule, FALSE, out_pl->oifname);
+
+ return out_pl;
+}
+
+/*****************************************************************************/
+
struct _NMShutdownWaitObjHandle {
CList lst;
GObject *watched_obj;
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index 5e7012241a..2b1f5ed891 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -24,6 +24,9 @@
#include "nm-core-utils.h"
+#include "nm-setting-ip-config.h"
+#include "platform/nm-platform.h"
+
/*****************************************************************************/
const char *nm_utils_get_ip_config_method (NMConnection *connection,
@@ -60,6 +63,11 @@ int nm_match_spec_device_by_pllink (const NMPlatformLink *pllink,
/*****************************************************************************/
+NMPlatformRoutingRule *nm_ip_routing_rule_to_platform (const NMIPRoutingRule *rule,
+ NMPlatformRoutingRule *out_pl);
+
+/*****************************************************************************/
+
/* during shutdown, there are two relevant timeouts. One is
* NM_SHUTDOWN_TIMEOUT_MS which is plenty of time, that we give for all
* actions to complete. Of course, during shutdown components should hurry
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index f87ebf9096..3959bd7d2d 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -47,6 +47,7 @@
#include "nm-manager.h"
#include "platform/nm-platform.h"
#include "platform/nmp-object.h"
+#include "platform/nmp-rules-manager.h"
#include "ndisc/nm-ndisc.h"
#include "ndisc/nm-lndp-ndisc.h"
#include "dhcp/nm-dhcp-manager.h"
@@ -6408,6 +6409,84 @@ lldp_init (NMDevice *self, gboolean restart)
}
}
+/* set-mode can be:
+ * - TRUE: sync with new rules.
+ * - FALSE: sync, but remove all rules (== flush)
+ * - DEFAULT: forget about all the rules that we previously tracked,
+ * but don't actually remove them. This is when quitting NM
+ * we want to keep the rules.
+ * The problem is, after restart of NM, the rule manager will
+ * no longer remember that NM added these rules and treat them
+ * as externally added ones. Don't restart NetworkManager if
+ * you care about that.
+ */
+static void
+_routing_rules_sync (NMDevice *self,
+ NMTernary set_mode)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMPRulesManager *rules_manager = nm_netns_get_rules_manager (nm_device_get_netns (self));
+ gboolean untrack_only_dirty = FALSE;
+ gboolean keep_deleted_rules;
+ gpointer user_tag;
+
+ user_tag = priv;
+
+ if (set_mode == NM_TERNARY_TRUE) {
+ NMConnection *applied_connection;
+ NMSettingIPConfig *s_ip;
+ guint i, num;
+ int is_ipv4;
+
+ untrack_only_dirty = TRUE;
+ nmp_rules_manager_set_dirty (rules_manager, user_tag);
+
+ applied_connection = nm_device_get_applied_connection (self);
+
+ for (is_ipv4 = 0; applied_connection && is_ipv4 < 2; is_ipv4++) {
+ int addr_family = is_ipv4 ? AF_INET : AF_INET6;
+
+ s_ip = nm_connection_get_setting_ip_config (applied_connection, addr_family);
+ if (!s_ip)
+ continue;
+
+ num = nm_setting_ip_config_get_num_routing_rules (s_ip);
+ for (i = 0; i < num; i++) {
+ NMPlatformRoutingRule plrule;
+ NMIPRoutingRule *rule;
+
+ rule = nm_setting_ip_config_get_routing_rule (s_ip, i);
+ nm_ip_routing_rule_to_platform (rule, &plrule);
+ nmp_rules_manager_track (rules_manager,
+ &plrule,
+ 10,
+ user_tag);
+ }
+ }
+ }
+
+ nmp_rules_manager_untrack_all (rules_manager, user_tag, !untrack_only_dirty);
+
+ keep_deleted_rules = FALSE;
+ if (set_mode == NM_TERNARY_DEFAULT) {
+ /* when exiting NM, we leave the device up and the rules configured.
+ * We just all nmp_rules_manager_sync() to forget about the synced rules,
+ * but we don't actually delete them.
+ *
+ * FIXME: that is a problem after restart of NetworkManager, because these
+ * rules will look like externally added, and NM will no longer remove
+ * them.
+ * To fix that, we could during "assume" mark the rules of the profile
+ * as owned (and "added" by the device). The problem with that is that it
+ * wouldn't cover rules that devices add by internal decision (not because
+ * of a setting in the profile, e.g. WireGuard could setup policy routing).
+ * Maybe it would be better to remember these orphaned rules at exit in a
+ * file and track them after restart again. */
+ keep_deleted_rules = TRUE;
+ }
+ nmp_rules_manager_sync (rules_manager, keep_deleted_rules);
+}
+
static gboolean
tc_commit (NMDevice *self)
{
@@ -6519,6 +6598,8 @@ activate_stage2_device_config (NMDevice *self)
}
}
+ _routing_rules_sync (self, NM_TERNARY_TRUE);
+
if (!nm_device_sys_iface_state_is_external_or_assume (self)) {
if (!nm_device_bring_up (self, FALSE, &no_firmware)) {
if (no_firmware)
@@ -14350,6 +14431,11 @@ nm_device_cleanup (NMDevice *self, NMDeviceStateReason reason, CleanupType clean
}
}
+ _routing_rules_sync (self,
+ cleanup_type == CLEANUP_TYPE_KEEP
+ ? NM_TERNARY_DEFAULT
+ : NM_TERNARY_FALSE);
+
if (ifindex > 0)
nm_platform_ip4_dev_route_blacklist_set (nm_device_get_platform (self), ifindex, NULL);
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 57a017cd4a..a35fa16a9d 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -4144,7 +4144,7 @@ _nl_msg_new_routing_rule (int nlmsg_type,
.src_len = routing_rule->src_len,
.dst_len = routing_rule->dst_len,
.tos = routing_rule->tos,
- .table = table,
+ .table = table < 0x100u ? (guint8) table : (guint8) RT_TABLE_UNSPEC,
.action = routing_rule->action,
/* we only allow setting the "not" flag. */
diff --git a/src/platform/nmp-rules-manager.c b/src/platform/nmp-rules-manager.c
index 2c486fdaa6..9e3435507b 100644
--- a/src/platform/nmp-rules-manager.c
+++ b/src/platform/nmp-rules-manager.c
@@ -471,7 +471,8 @@ nmp_rules_manager_untrack_all (NMPRulesManager *self,
}
void
-nmp_rules_manager_sync (NMPRulesManager *self)
+nmp_rules_manager_sync (NMPRulesManager *self,
+ gboolean keep_deleted_rules)
{
const NMDedupMultiHeadEntry *pl_head_entry;
NMDedupMultiIter pl_iter;
@@ -486,7 +487,7 @@ nmp_rules_manager_sync (NMPRulesManager *self)
if (!self->by_data)
return;
- _LOGD ("sync");
+ _LOGD ("sync%s", keep_deleted_rules ? " (don't remove any rules)" : "");
pl_head_entry = nm_platform_lookup_obj_type (self->platform, NMP_OBJECT_TYPE_ROUTING_RULE);
if (pl_head_entry) {
@@ -508,6 +509,11 @@ nmp_rules_manager_sync (NMPRulesManager *self)
obj_data->added_by_us = FALSE;
}
+ if (keep_deleted_rules) {
+ _LOGD ("forget/leak rule added by us: %s", nmp_object_to_string (plobj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0));
+ continue;
+ }
+
if (!rules_to_delete)
rules_to_delete = g_ptr_array_new_with_free_func ((GDestroyNotify) nmp_object_unref);
@@ -558,6 +564,7 @@ nmp_rules_manager_track_default (NMPRulesManager *self,
.priority = 0,
.table = RT_TABLE_LOCAL,
.action = FR_ACT_TO_TBL,
+ .protocol = RTPROT_KERNEL,
}),
priority,
user_tag);
@@ -567,6 +574,7 @@ nmp_rules_manager_track_default (NMPRulesManager *self,
.priority = 32766,
.table = RT_TABLE_MAIN,
.action = FR_ACT_TO_TBL,
+ .protocol = RTPROT_KERNEL,
}),
priority,
user_tag);
@@ -576,6 +584,7 @@ nmp_rules_manager_track_default (NMPRulesManager *self,
.priority = 32767,
.table = RT_TABLE_DEFAULT,
.action = FR_ACT_TO_TBL,
+ .protocol = RTPROT_KERNEL,
}),
priority,
user_tag);
@@ -587,6 +596,7 @@ nmp_rules_manager_track_default (NMPRulesManager *self,
.priority = 0,
.table = RT_TABLE_LOCAL,
.action = FR_ACT_TO_TBL,
+ .protocol = RTPROT_KERNEL,
}),
priority,
user_tag);
@@ -596,6 +606,7 @@ nmp_rules_manager_track_default (NMPRulesManager *self,
.priority = 32766,
.table = RT_TABLE_MAIN,
.action = FR_ACT_TO_TBL,
+ .protocol = RTPROT_KERNEL,
}),
priority,
user_tag);
diff --git a/src/platform/nmp-rules-manager.h b/src/platform/nmp-rules-manager.h
index 491df31d4a..a1e5543548 100644
--- a/src/platform/nmp-rules-manager.h
+++ b/src/platform/nmp-rules-manager.h
@@ -54,7 +54,8 @@ void nmp_rules_manager_untrack_all (NMPRulesManager *self,
gconstpointer user_tag,
gboolean all /* or only dirty */);
-void nmp_rules_manager_sync (NMPRulesManager *self);
+void nmp_rules_manager_sync (NMPRulesManager *self,
+ gboolean keep_deleted_rules);
/*****************************************************************************/
diff --git a/src/platform/tests/test-route.c b/src/platform/tests/test-route.c
index 60bd4e0170..ae3367779c 100644
--- a/src/platform/tests/test-route.c
+++ b/src/platform/tests/test-route.c
@@ -1546,12 +1546,12 @@ again:
USER_TAG_2);
}
if (nmtst_get_rand_int () % objs_sync->len == 0) {
- nmp_rules_manager_sync (rules_manager);
+ nmp_rules_manager_sync (rules_manager, FALSE);
g_assert_cmpint (nmtstp_platform_routing_rules_get_count (platform, AF_UNSPEC), ==, i + 1);
}
}
- nmp_rules_manager_sync (rules_manager);
+ nmp_rules_manager_sync (rules_manager, FALSE);
g_assert_cmpint (nmtstp_platform_routing_rules_get_count (platform, AF_UNSPEC), ==, objs_sync->len);
for (i = 0; i < objs_sync->len; i++) {
@@ -1578,12 +1578,12 @@ again:
break;
}
if (nmtst_get_rand_int () % objs_sync->len == 0) {
- nmp_rules_manager_sync (rules_manager);
+ nmp_rules_manager_sync (rules_manager, FALSE);
g_assert_cmpint (nmtstp_platform_routing_rules_get_count (platform, AF_UNSPEC), ==, objs_sync->len - i - 1);
}
}
- nmp_rules_manager_sync (rules_manager);
+ nmp_rules_manager_sync (rules_manager, FALSE);
} else {
for (i = 0; i < objs->len;) {
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 de45c084ef..f9722b8f37 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -2083,7 +2083,7 @@ make_ip6_setting (shvarFile *ifcfg,
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, v, NULL);
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME,
- svGetValueBoolean (ifcfg, "DHCPV6_SEND_HOSTNAME", TRUE), NULL);
+ svGetValueBoolean (ifcfg, "DHCPV6_SEND_HOSTNAME", TRUE), NULL);
/* Read static IP addresses.
* Read them even for AUTO and DHCP methods - in this case the addresses are
@@ -4316,6 +4316,84 @@ parse_ethtool_option (const char *value,
}
}
+static GPtrArray *
+read_routing_rules_parse (shvarFile *ifcfg,
+ gboolean routes_read)
+{
+ gs_unref_ptrarray GPtrArray *arr = NULL;
+ gs_free const char **keys = NULL;
+ guint i, len;
+
+ keys = svGetKeysSorted (ifcfg, SV_KEY_TYPE_ROUTING_RULE4 | SV_KEY_TYPE_ROUTING_RULE6, &len);
+ if (len == 0)
+ return NULL;
+
+ if (!routes_read) {
+ PARSE_WARNING ("'rule-' or 'rule6-' files are present; Policy routing rules (ROUTING_RULE*) settings are ignored");
+ return NULL;
+ }
+
+ arr = g_ptr_array_new_full (len, (GDestroyNotify) nm_ip_routing_rule_unref);
+ for (i = 0; i < len; i++) {
+ const char *key = keys[i];
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rule = NULL;
+ gs_free_error GError *local = NULL;
+ gs_free char *value_to_free = NULL;
+ const char *value;
+ gboolean key_is_ipv4;
+
+ key_is_ipv4 = (key[NM_STRLEN ("ROUTING_RULE")] == '_');
+ nm_assert ( key_is_ipv4 == NM_STR_HAS_PREFIX (key, "ROUTING_RULE_"));
+ nm_assert (!key_is_ipv4 == NM_STR_HAS_PREFIX (key, "ROUTING_RULE6_"));
+
+ value = svGetValueStr (ifcfg, key, &value_to_free);
+ if (!value)
+ continue;
+
+ rule = nm_ip_routing_rule_from_string (value,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | (key_is_ipv4
+ ? NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET
+ : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6),
+ NULL,
+ &local);
+ if (!rule) {
+ PARSE_WARNING ("invalid routing rule %s=\"%s\": %s", key, value, local->message);
+ continue;
+ }
+
+ g_ptr_array_add (arr, g_steal_pointer (&rule));
+ }
+
+ if (arr->len == 0)
+ return NULL;
+
+ return g_steal_pointer (&arr);
+}
+
+static void
+read_routing_rules (shvarFile *ifcfg,
+ gboolean routes_read,
+ NMSettingIPConfig *s_ip4,
+ NMSettingIPConfig *s_ip6)
+{
+ gs_unref_ptrarray GPtrArray *routing_rules = NULL;
+ guint i;
+
+ routing_rules = read_routing_rules_parse (ifcfg, routes_read);
+ if (!routing_rules)
+ return;
+
+ for (i = 0; i < routing_rules->len; i++) {
+ NMIPRoutingRule *rule = routing_rules->pdata[i];
+
+ nm_setting_ip_config_add_routing_rule ( (nm_ip_routing_rule_get_addr_family (rule) == AF_INET)
+ ? s_ip4
+ : s_ip6,
+ rule);
+ }
+}
+
static void
parse_ethtool_options (shvarFile *ifcfg, NMConnection *connection)
{
@@ -5817,8 +5895,7 @@ connection_from_file_full (const char *filename,
error);
if (!s_ip6)
return NULL;
- else
- nm_connection_add_setting (connection, s_ip6);
+ nm_connection_add_setting (connection, s_ip6);
s_ip4 = make_ip4_setting (main_ifcfg,
network_ifcfg,
@@ -5827,12 +5904,15 @@ connection_from_file_full (const char *filename,
error);
if (!s_ip4)
return NULL;
- else {
- read_aliases (NM_SETTING_IP_CONFIG (s_ip4),
- !has_ip4_defroute && !nm_setting_ip_config_get_gateway (NM_SETTING_IP_CONFIG (s_ip4)),
- filename);
- nm_connection_add_setting (connection, s_ip4);
- }
+ read_aliases (NM_SETTING_IP_CONFIG (s_ip4),
+ !has_ip4_defroute && !nm_setting_ip_config_get_gateway (NM_SETTING_IP_CONFIG (s_ip4)),
+ filename);
+ nm_connection_add_setting (connection, s_ip4);
+
+ read_routing_rules (main_ifcfg,
+ !has_complex_routes_v4 && !has_complex_routes_v6,
+ NM_SETTING_IP_CONFIG (s_ip4),
+ NM_SETTING_IP_CONFIG (s_ip6));
s_sriov = make_sriov_setting (main_ifcfg);
if (s_sriov)
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 f6b8f8c21a..a57e6c3a60 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -2954,6 +2954,52 @@ write_ip6_setting (NMConnection *connection,
return TRUE;
}
+static void
+write_ip_routing_rules (NMConnection *connection,
+ shvarFile *ifcfg,
+ gboolean route_ignore)
+{
+ gsize idx;
+ int is_ipv4;
+
+ svUnsetAll (ifcfg, SV_KEY_TYPE_ROUTING_RULE4 | SV_KEY_TYPE_ROUTING_RULE6);
+
+ if (route_ignore)
+ return;
+
+ idx = 0;
+
+ for (is_ipv4 = 1; is_ipv4 >= 0; is_ipv4--) {
+ const int addr_family = is_ipv4 ? AF_INET : AF_INET6;
+ NMSettingIPConfig *s_ip;
+ guint i, num;
+
+ s_ip = nm_connection_get_setting_ip_config (connection, addr_family);
+ if (!s_ip)
+ continue;
+
+ num = nm_setting_ip_config_get_num_routing_rules (s_ip);
+ for (i = 0; i < num; i++) {
+ NMIPRoutingRule *rule = nm_setting_ip_config_get_routing_rule (s_ip, i);
+ gs_free const char *s = NULL;
+ char key[64];
+
+ s = nm_ip_routing_rule_to_string (rule,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE,
+ NULL,
+ NULL);
+ if (!s)
+ continue;
+
+ if (is_ipv4)
+ numbered_tag (key, "ROUTING_RULE_", ++idx);
+ else
+ numbered_tag (key, "ROUTING_RULE6_", ++idx);
+ svSetValueStr (ifcfg, key, s);
+ }
+ }
+}
+
static char *
escape_id (const char *id)
{
@@ -3176,6 +3222,15 @@ do_write_construct (NMConnection *connection,
has_complex_routes_v4 ? "" : "6");
return FALSE;
}
+ if ( ( s_ip4
+ && nm_setting_ip_config_get_num_routing_rules (s_ip4) > 0)
+ || ( s_ip6
+ && nm_setting_ip_config_get_num_routing_rules (s_ip6) > 0)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "Cannot configure routing rules on a connection that has an associated 'rule%s-' file",
+ has_complex_routes_v4 ? "" : "6");
+ return FALSE;
+ }
route_ignore = TRUE;
} else
route_ignore = FALSE;
@@ -3193,6 +3248,10 @@ do_write_construct (NMConnection *connection,
error))
return FALSE;
+ write_ip_routing_rules (connection,
+ ifcfg,
+ route_ignore);
+
write_connection_setting (s_con, ifcfg);
NM_SET_OUT (out_ifcfg, g_steal_pointer (&ifcfg));
diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c
index f3d58e26c7..02aba1c57f 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.c
+++ b/src/settings/plugins/ifcfg-rh/shvar.c
@@ -879,10 +879,25 @@ _is_all_digits (const char *str)
#define IS_NUMBERED_TAG(key, tab_name) \
({ \
+ const char *_key2 = (key); \
+ \
+ ( (strncmp (_key2, tab_name, NM_STRLEN (tab_name)) == 0) \
+ && _is_all_digits (&_key2[NM_STRLEN (tab_name)])); \
+ })
+
+#define IS_NUMBERED_TAG_PARSE(key, tab_name, out_idx) \
+ ({ \
const char *_key = (key); \
+ gint64 _idx; \
+ gboolean _good = FALSE; \
+ gint64 *_out_idx = (out_idx); \
\
- ( (strncmp (_key, tab_name, NM_STRLEN (tab_name)) == 0) \
- && _is_all_digits (&_key[NM_STRLEN (tab_name)])); \
+ if ( IS_NUMBERED_TAG (_key, ""tab_name"") \
+ && (_idx = _nm_utils_ascii_str_to_int64 (&_key[NM_STRLEN (tab_name)], 10, 0, G_MAXINT64, -1)) != -1) { \
+ NM_SET_OUT (_out_idx, _idx); \
+ _good = TRUE; \
+ } \
+ _good; \
})
static gboolean
@@ -919,10 +934,30 @@ _svKeyMatchesType (const char *key, SvKeyType match_key_type)
if (IS_NUMBERED_TAG (key, "SRIOV_VF"))
return TRUE;
}
+ if (NM_FLAGS_HAS (match_key_type, SV_KEY_TYPE_ROUTING_RULE4)) {
+ if (IS_NUMBERED_TAG_PARSE (key, "ROUTING_RULE_", NULL))
+ return TRUE;
+ }
+ if (NM_FLAGS_HAS (match_key_type, SV_KEY_TYPE_ROUTING_RULE6)) {
+ if (IS_NUMBERED_TAG_PARSE (key, "ROUTING_RULE6_", NULL))
+ return TRUE;
+ }
return FALSE;
}
+gint64
+svNumberedParseKey (const char *key)
+{
+ gint64 idx;
+
+ if (IS_NUMBERED_TAG_PARSE (key, "ROUTING_RULE_", &idx))
+ return idx;
+ if (IS_NUMBERED_TAG_PARSE (key, "ROUTING_RULE6_", &idx))
+ return idx;
+ return -1;
+}
+
GHashTable *
svGetKeys (shvarFile *s, SvKeyType match_key_type)
{
@@ -947,6 +982,42 @@ svGetKeys (shvarFile *s, SvKeyType match_key_type)
return keys;
}
+static int
+_get_keys_sorted_cmp (gconstpointer a,
+ gconstpointer b,
+ gpointer user_data)
+{
+ const char *k_a = *((const char *const*) a);
+ const char *k_b = *((const char *const*) b);
+ gint64 n_a;
+ gint64 n_b;
+
+ n_a = svNumberedParseKey (k_a);
+ n_b = svNumberedParseKey (k_b);
+ NM_CMP_DIRECT (n_a, n_b);
+ NM_CMP_RETURN (strcmp (k_a, k_b));
+ nm_assert_not_reached ();
+ return 0;
+}
+
+const char **
+svGetKeysSorted (shvarFile *s,
+ SvKeyType match_key_type,
+ guint *out_len)
+{
+ gs_unref_hashtable GHashTable *keys_hash = NULL;
+
+ keys_hash = svGetKeys (s, match_key_type);
+ if (!keys_hash) {
+ NM_SET_OUT (out_len, 0);
+ return NULL;
+ }
+ return (const char **) nm_utils_hash_keys_to_array (keys_hash,
+ _get_keys_sorted_cmp,
+ NULL,
+ out_len);
+}
+
/*****************************************************************************/
const char *
diff --git a/src/settings/plugins/ifcfg-rh/shvar.h b/src/settings/plugins/ifcfg-rh/shvar.h
index 622bb474b1..b38a855760 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.h
+++ b/src/settings/plugins/ifcfg-rh/shvar.h
@@ -40,6 +40,8 @@ typedef enum {
SV_KEY_TYPE_TC = (1LL << 3),
SV_KEY_TYPE_USER = (1LL << 4),
SV_KEY_TYPE_SRIOV_VF = (1LL << 5),
+ SV_KEY_TYPE_ROUTING_RULE4 = (1LL << 6),
+ SV_KEY_TYPE_ROUTING_RULE6 = (1LL << 7),
} SvKeyType;
const char *svFileGetName (const shvarFile *s);
@@ -67,8 +69,14 @@ char *svGetValueStr_cp (shvarFile *s, const char *key);
int svParseBoolean (const char *value, int def);
+gint64 svNumberedParseKey (const char *key);
+
GHashTable *svGetKeys (shvarFile *s, SvKeyType match_key_type);
+const char **svGetKeysSorted (shvarFile *s,
+ SvKeyType match_key_type,
+ guint *out_len);
+
/* return TRUE if <key> resolves to any truth value (e.g. "yes", "y", "true")
* return FALSE if <key> resolves to any non-truth value (e.g. "no", "n", "false")
* return <def> otherwise
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Routing_Rules.cexpected b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Routing_Rules.cexpected
new file mode 100644
index 0000000000..0c2fa035cf
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Routing_Rules.cexpected
@@ -0,0 +1,19 @@
+TYPE=Ethernet
+PROXY_METHOD=none
+BROWSER_ONLY=no
+BOOTPROTO=dhcp
+DEFROUTE=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=yes
+IPV6_AUTOCONF=yes
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
+ROUTING_RULE_1="priority 10 from 0.0.0.0/0 table 1"
+ROUTING_RULE_2="priority 10 to 192.167.8.0/24 table 2"
+ROUTING_RULE6_3="priority 10 from ::/0 table 10"
+ROUTING_RULE6_4="priority 10 to 1:2:3::5/24 table 22"
+ROUTING_RULE6_5="priority 10 to 1:3:3::5 table 55"
+NAME="Test Write Routing Rules"
+UUID=${UUID}
+ONBOOT=yes
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index 99ffae403b..09e2c0e4b5 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -4465,6 +4465,101 @@ test_write_wired_dhcp (void)
nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
}
+static NMIPRoutingRule *
+_ip_routing_rule_new (int addr_family,
+ const char *str)
+{
+ NMIPRoutingRuleAsStringFlags flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE;
+ gs_free_error GError *local = NULL;
+ NMIPRoutingRule *rule;
+
+ if (addr_family != AF_UNSPEC) {
+ if (addr_family == AF_INET)
+ flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET;
+ else {
+ g_assert (addr_family == AF_INET6);
+ flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6;
+ }
+ }
+
+ rule = nm_ip_routing_rule_from_string (str,
+ NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+ | flags,
+ NULL,
+ nmtst_get_rand_bool () ? &local : NULL);
+ nmtst_assert_success (rule, local);
+
+ if (addr_family != AF_UNSPEC)
+ g_assert_cmpint (nm_ip_routing_rule_get_addr_family (rule), ==, addr_family);
+ return rule;
+}
+
+static void
+_ip_routing_rule_add_to_setting (NMSettingIPConfig *s_ip,
+ const char *str)
+{
+ nm_auto_unref_ip_routing_rule NMIPRoutingRule *rule = NULL;
+
+ rule = _ip_routing_rule_new (nm_setting_ip_config_get_addr_family (s_ip), str);
+ nm_setting_ip_config_add_routing_rule (s_ip, rule);
+}
+
+static void
+test_write_routing_rules (void)
+{
+ nmtst_auto_unlinkfile char *testfile = NULL;
+ gs_unref_object NMConnection *connection = NULL;
+ gs_unref_object NMConnection *reread = NULL;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
+
+ connection = nm_simple_connection_new ();
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Write Routing Rules",
+ NM_SETTING_CONNECTION_UUID, nm_utils_uuid_generate_a (),
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+
+ s_wired = (NMSettingWired *) nm_setting_wired_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ g_object_set (s_ip6,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NULL);
+
+ _ip_routing_rule_add_to_setting (s_ip4, "pref 10 from 0.0.0.0/0 table 1");
+ _ip_routing_rule_add_to_setting (s_ip4, "priority 10 to 192.167.8.0/24 table 2");
+ _ip_routing_rule_add_to_setting (s_ip6, "pref 10 from ::/0 table 10");
+ _ip_routing_rule_add_to_setting (s_ip6, "pref 10 from ::/0 to 1:2:3::5/24 table 22");
+ _ip_routing_rule_add_to_setting (s_ip6, "pref 10 from ::/0 to 1:3:3::5/128 table 55");
+
+ nmtst_assert_connection_verifies (connection);
+
+ _writer_new_connec_exp (connection,
+ TEST_SCRATCH_DIR,
+ TEST_IFCFG_DIR"/ifcfg-Test_Write_Routing_Rules.cexpected",
+ &testfile);
+ reread = _connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL);
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
+}
+
static void
test_write_wired_match (void)
{
@@ -10200,6 +10295,7 @@ int main (int argc, char **argv)
g_test_add_func (TPATH "wired/write-dhcp-plus-ip", test_write_wired_dhcp_plus_ip);
g_test_add_func (TPATH "wired/write/dhcp-8021x-peap-mschapv2", test_write_wired_dhcp_8021x_peap_mschapv2);
g_test_add_func (TPATH "wired/write/match", test_write_wired_match);
+ g_test_add_func (TPATH "wired/write/routing-rules", test_write_routing_rules);
#define _add_test_write_wired_8021x_tls(testpath, scheme, flags) \
nmtst_add_test_func (testpath, test_write_wired_8021x_tls, GINT_TO_POINTER (scheme), GINT_TO_POINTER (flags))