From 49ddb96d4ef78e5289e64bbf9f0d257c7df25873 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 28 Jul 2022 18:38:42 +0200 Subject: [PATCH 01/21] std-aux: add nm_utils_addr_family_to_size_untrusted() helper --- src/libnm-std-aux/nm-std-aux.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/libnm-std-aux/nm-std-aux.h b/src/libnm-std-aux/nm-std-aux.h index 18c467b3b3..77243ab186 100644 --- a/src/libnm-std-aux/nm-std-aux.h +++ b/src/libnm-std-aux/nm-std-aux.h @@ -1307,6 +1307,28 @@ nm_utils_addr_family_to_size(int addr_family) return nm_assert_unreachable_val(0); } +static inline size_t +nm_utils_addr_family_to_size_untrusted(int addr_family) +{ + /* This is almost the same as nm_utils_addr_family_to_size(). + * The difference is that nm_utils_addr_family_to_size() requires that + * addr_family is either AF_INET or AF_INET6 (it asserts against that). + * + * This variant accepts any addr_family, but returns zero for any unknown + * family. + * + * Use this, if the address family is untrusted or not guaranteed to be valid. + * Of course, then you also need to handle that this function potentially returns + * zero. */ + switch (addr_family) { + case NM_AF_INET: + return NM_AF_INET_SIZE; + case NM_AF_INET6: + return NM_AF_INET6_SIZE; + } + return 0; +} + static inline int nm_utils_addr_family_from_size(size_t len) { From e0fc8a11d5310303e680f101604291a4139317dd Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 1 Aug 2022 20:44:08 +0200 Subject: [PATCH 02/21] glib-aux: add nm_g_hash_table_contains_any() helper --- src/libnm-glib-aux/nm-shared-utils.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index d8ec065732..3decea9b37 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -2405,6 +2405,25 @@ nm_g_hash_table_contains(GHashTable *hash, gconstpointer key) return hash ? g_hash_table_contains(hash, key) : FALSE; } +#define nm_g_hash_table_contains_any(hash, ...) \ + ({ \ + GHashTable *const _hash = (hash); \ + gconstpointer const _keys[] = {__VA_ARGS__}; \ + int _i_key; \ + gboolean _contains = FALSE; \ + \ + if (_hash) { \ + for (_i_key = 0; _i_key < (int) G_N_ELEMENTS(_keys); _i_key++) { \ + if (g_hash_table_contains(_hash, _keys[_i_key])) { \ + _contains = TRUE; \ + break; \ + } \ + } \ + } \ + \ + _contains; \ + }) + static inline gboolean nm_g_hash_table_remove(GHashTable *hash, gconstpointer key) { From 8f67a80537565b0d3103f1b1f18142ebcba72787 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 3 Aug 2022 18:49:28 +0200 Subject: [PATCH 03/21] glib-aux: add nm_utils_ip6_is_ula() helper --- src/libnm-glib-aux/nm-shared-utils.c | 7 +++++++ src/libnm-glib-aux/nm-shared-utils.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 85ea3a1116..ddebcfa7a6 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -1021,6 +1021,13 @@ nm_utils_ip_is_site_local(int addr_family, const void *address) } } +gboolean +nm_utils_ip6_is_ula(const struct in6_addr *address) +{ + /* Unique local IPv6 address (ULA) fc00::/7 */ + return (address->s6_addr32[0] & htonl(0xfe000000u)) == htonl(0xfc000000u); +} + /*****************************************************************************/ static gboolean diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 3decea9b37..3d8eaced07 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -504,6 +504,7 @@ nm_utils_ip_address_same_prefix(int addr_family, /*****************************************************************************/ gboolean nm_utils_ip_is_site_local(int addr_family, const void *address); +gboolean nm_utils_ip6_is_ula(const struct in6_addr *address); /*****************************************************************************/ From 13d334cdbbc0f8140051c964b4075370fcb31b85 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 3 Aug 2022 18:50:08 +0200 Subject: [PATCH 04/21] glib-aux,platform: add comments to nm_platform_ip_address_get_scope()/nm_utils_ip_is_site_local() About site-local IPv6 addresses (unique local addresses, ULA). --- src/libnm-glib-aux/nm-shared-utils.c | 3 +++ src/libnm-platform/nm-platform.h | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index ddebcfa7a6..624f9a3e97 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -1015,6 +1015,9 @@ nm_utils_ip_is_site_local(int addr_family, const void *address) return (addr4 & 0xff000000) == 0x0a000000 || (addr4 & 0xfff00000) == 0xac100000 || (addr4 & 0xffff0000) == 0xc0a80000; case AF_INET6: + /* IN6_IS_ADDR_SITELOCAL() is for deprecated fec0::/10 addresses (see rfc3879, 4.). + * Note that for unique local IPv6 addresses (ULA, fc00::/7) this returns false, + * which may or may not be a bug. */ return IN6_IS_ADDR_SITELOCAL(address); default: g_return_val_if_reached(FALSE); diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index d93843a854..2f41b0c8bf 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -1617,6 +1617,18 @@ nm_platform_ip6_address_get_scope(const struct in6_addr *addr) static inline guint8 nm_platform_ip_address_get_scope(int addr_family, gconstpointer addr) { + /* Note that this function returns the scope as we configure + * it in kernel (for IPv4) or as kernel chooses it (for IPv6). + * + * That means, rfc1918 private addresses nm_utils_ip_is_site_local() are + * considered RT_SCOPE_UNIVERSE. + * + * Also, the deprecated IN6_IS_ADDR_SITELOCAL() addresses (fec0::/10) + * are considered RT_SCOPE_SITE, while unique local addresses (ULA, fc00::/7) + * are considered RT_SCOPE_UNIVERSE. + * + * You may not want to use this function when reasoning about + * site-local addresses (RFC1918, ULA). */ if (NM_IS_IPv4(addr_family)) return nm_platform_ip4_address_get_scope(*((in_addr_t *) addr)); return nm_platform_ip6_address_get_scope(addr); From f4b128c63bff29ee096ef6e09f49e6c0c7744d18 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 1 Aug 2022 20:53:02 +0200 Subject: [PATCH 05/21] device: fix reapply for lldp/mdns/llmnr/dns-over-tls settings When only one of those connection.{lldp,mdns,llmnr,dns-over-tls} settings changes, we still need to do a full restart of the IP configuration to reapply the changes. Fixes: 58287cbcc0c8 ('core: rework IP configuration in NetworkManager using layer 3 configuration') --- src/core/devices/nm-device.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 97dfe9ba97..676d08d983 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -12873,6 +12873,16 @@ check_and_reapply_connection(NMDevice *self, if (nm_g_hash_table_lookup(diffs, NM_SETTING_IP6_CONFIG_SETTING_NAME)) priv->ip_data_6.do_reapply = TRUE; + if (nm_g_hash_table_contains_any( + nm_g_hash_table_lookup(diffs, NM_SETTING_CONNECTION_SETTING_NAME), + NM_SETTING_CONNECTION_LLDP, + NM_SETTING_CONNECTION_MDNS, + NM_SETTING_CONNECTION_LLMNR, + NM_SETTING_CONNECTION_DNS_OVER_TLS)) { + priv->ip_data_4.do_reapply = TRUE; + priv->ip_data_6.do_reapply = TRUE; + } + nm_device_activate_schedule_stage3_ip_config(self, FALSE); _routing_rules_sync(self, NM_TERNARY_TRUE); From 6e5dae732a8d14f0aab6d68b8a5a8aae87be81e7 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 1 Aug 2022 17:37:09 +0200 Subject: [PATCH 06/21] nmcli: improve handling nicks for enum values For enum type properties, we support to specify a list of aliases. - the getter uses a separate list from the setter. The idea is that some of these aliases are only for showing, but not for setting. Add a special marker GOBJECT_ENUM_VALUE_INFOS_GET_FROM_SETTER which indicates that the value information from the setter should also be used by the getter. - extend _values_fcn_gobject_enum() to also return the nicks from the setter for bash completion. After all, they can be set too. --- src/libnmc-setting/nm-meta-setting-desc.c | 49 +++++++++++++++++------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c index 0952c016cf..4d0085c7d8 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.c +++ b/src/libnmc-setting/nm-meta-setting-desc.c @@ -30,6 +30,8 @@ static char *secret_flags_to_string(guint32 flags, NMMetaAccessorGetType get_typ (NM_SETTING_SECRET_FLAG_NONE | NM_SETTING_SECRET_FLAG_AGENT_OWNED \ | NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_NOT_REQUIRED) +const NMUtilsEnumValueInfo GOBJECT_ENUM_VALUE_INFOS_GET_FROM_SETTER[1]; + /*****************************************************************************/ static GType @@ -1082,7 +1084,7 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) GType gtype = 0; nm_auto_unref_gtypeclass GTypeClass *gtype_class = NULL; nm_auto_unref_gtypeclass GTypeClass *gtype_prop_class = NULL; - const struct _NMUtilsEnumValueInfo *value_infos = NULL; + const NMUtilsEnumValueInfo *value_infos = NULL; gboolean has_gtype = FALSE; nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; gint64 v; @@ -1198,11 +1200,12 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) RETURN_STR_TO_FREE(g_steal_pointer(&s)); } - /* the gobject_enum.value_infos are currently ignored for the getter. They - * only declare additional aliases for the setter. */ - - if (property_info->property_typ_data) + if (property_info->property_typ_data) { value_infos = property_info->property_typ_data->subtype.gobject_enum.value_infos_get; + if (value_infos == GOBJECT_ENUM_VALUE_INFOS_GET_FROM_SETTER) + value_infos = property_info->property_typ_data->subtype.gobject_enum.value_infos; + } + s = _nm_utils_enum_to_str_full(gtype, (int) v, ", ", value_infos); if (!format_numeric) @@ -1676,12 +1679,13 @@ fail: static const char *const * _values_fcn_gobject_enum(ARGS_VALUES_FCN) { - GType gtype = 0; - gboolean has_gtype = FALSE; - gboolean has_minmax = FALSE; - int min = G_MININT; - int max = G_MAXINT; - char **v; + const NMUtilsEnumValueInfo *value_infos = NULL; + GType gtype = 0; + gboolean has_gtype = FALSE; + gboolean has_minmax = FALSE; + int min = G_MININT; + int max = G_MAXINT; + char **v; if (property_info->property_typ_data) { if (property_info->property_typ_data->subtype.gobject_enum.min @@ -1711,10 +1715,29 @@ _values_fcn_gobject_enum(ARGS_VALUES_FCN) } } - /* the gobject_enum.value_infos are currently ignored for the list of - * values. They only declare additional (hidden) aliases for the setter. */ + /* There is a problem. For flags, we don't expand to all the values that we could + * complete for. We only expand to a single flag "FLAG1", but if the property + * is already set to "FLAG2", we should also expand to "FLAG1,FLAG2". */ v = nm_strv_make_deep_copied(nm_utils_enum_get_values(gtype, min, max)); + + if (property_info->property_typ_data + && (value_infos = property_info->property_typ_data->subtype.gobject_enum.value_infos)) { + const guint V_N = NM_PTRARRAY_LEN(v); + guint n; + guint i; + + nm_assert(value_infos[0].nick); + + for (n = 0; value_infos[n].nick;) + n++; + + v = g_realloc(v, (V_N + n + 1) * sizeof(char *)); + for (i = 0; i < n; i++) + v[V_N + i] = g_strdup(value_infos[i].nick); + v[V_N + n] = NULL; + } + return (const char *const *) (*out_to_free = v); } From c74c783c2892ab0e73876751de71bf2ba9c28a72 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Aug 2022 21:59:30 +0200 Subject: [PATCH 07/21] platform/netlink: make callback parameters to nl_recvmsg() const --- src/libnm-platform/nm-linux-platform.c | 2 +- src/libnm-platform/nm-netlink.c | 6 +++--- src/libnm-platform/nm-netlink.h | 8 +++++--- .../wifi/nm-wifi-utils-nl80211.c | 18 +++++++++--------- src/libnm-platform/wpan/nm-wpan-utils.c | 10 +++++----- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index 5f78d5da1a..27904d4570 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -2576,7 +2576,7 @@ typedef struct { } WireGuardParseData; static int -_wireguard_get_device_cb(struct nl_msg *msg, void *arg) +_wireguard_get_device_cb(const struct nl_msg *msg, void *arg) { static const struct nla_policy policy[] = { [WGDEVICE_A_IFINDEX] = {.type = NLA_U32}, diff --git a/src/libnm-platform/nm-netlink.c b/src/libnm-platform/nm-netlink.c index ecb700fc9b..3d89a4c1d6 100644 --- a/src/libnm-platform/nm-netlink.c +++ b/src/libnm-platform/nm-netlink.c @@ -255,7 +255,7 @@ flags_done: /*****************************************************************************/ struct nlmsghdr * -nlmsg_hdr(struct nl_msg *n) +nlmsg_hdr(const struct nl_msg *n) { return n->nm_nlh; } @@ -856,7 +856,7 @@ const struct nla_policy genl_ctrl_policy[CTRL_ATTR_MCAST_GROUPS + 1] = { }; static int -_genl_parse_getfamily(struct nl_msg *msg, void *arg) +_genl_parse_getfamily(const struct nl_msg *msg, void *arg) { struct nlattr *tb[G_N_ELEMENTS(genl_ctrl_policy)]; struct nlmsghdr *nlh = nlmsg_hdr(msg); @@ -1155,7 +1155,7 @@ _cb_init(struct nl_cb *dst, const struct nl_cb *src) } static int -ack_wait_handler(struct nl_msg *msg, void *arg) +ack_wait_handler(const struct nl_msg *msg, void *arg) { return NL_STOP; } diff --git a/src/libnm-platform/nm-netlink.h b/src/libnm-platform/nm-netlink.h index 07557b99c9..d21abb5002 100644 --- a/src/libnm-platform/nm-netlink.h +++ b/src/libnm-platform/nm-netlink.h @@ -454,7 +454,7 @@ nlmsg_tail(const struct nlmsghdr *nlh) return (unsigned char *) nlh + NLMSG_ALIGN(nlh->nlmsg_len); } -struct nlmsghdr *nlmsg_hdr(struct nl_msg *n); +struct nlmsghdr *nlmsg_hdr(const struct nl_msg *n); static inline int nlmsg_valid_hdr(const struct nlmsghdr *nlh, int hdrlen) @@ -585,9 +585,11 @@ enum nl_cb_action { NL_STOP, }; -typedef int (*nl_recvmsg_msg_cb_t)(struct nl_msg *msg, void *arg); +typedef int (*nl_recvmsg_msg_cb_t)(const struct nl_msg *msg, void *arg); -typedef int (*nl_recvmsg_err_cb_t)(struct sockaddr_nl *nla, struct nlmsgerr *nlerr, void *arg); +typedef int (*nl_recvmsg_err_cb_t)(const struct sockaddr_nl *nla, + const struct nlmsgerr *nlerr, + void *arg); struct nl_cb { nl_recvmsg_msg_cb_t valid_cb; diff --git a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c index 08eded3103..37edd928e3 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c @@ -58,7 +58,7 @@ typedef struct { G_DEFINE_TYPE(NMWifiUtilsNl80211, nm_wifi_utils_nl80211, NM_TYPE_WIFI_UTILS) static int -ack_handler(struct nl_msg *msg, void *arg) +ack_handler(const struct nl_msg *msg, void *arg) { int *done = arg; *done = 1; @@ -66,7 +66,7 @@ ack_handler(struct nl_msg *msg, void *arg) } static int -finish_handler(struct nl_msg *msg, void *arg) +finish_handler(const struct nl_msg *msg, void *arg) { int *done = arg; *done = 1; @@ -74,7 +74,7 @@ finish_handler(struct nl_msg *msg, void *arg) } static int -error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) +error_handler(const struct sockaddr_nl *nla, const struct nlmsgerr *err, void *arg) { int *done = arg; *done = err->error; @@ -106,7 +106,7 @@ nl80211_alloc_msg(NMWifiUtilsNl80211 *self, uint8_t cmd, uint16_t flags) static int nl80211_send_and_recv(NMWifiUtilsNl80211 *self, struct nl_msg *msg, - int (*valid_handler)(struct nl_msg *, void *), + int (*valid_handler)(const struct nl_msg *, void *), void *valid_data) { int err; @@ -167,7 +167,7 @@ struct nl80211_iface_info { }; static int -nl80211_iface_info_handler(struct nl_msg *msg, void *arg) +nl80211_iface_info_handler(const struct nl_msg *msg, void *arg) { struct nl80211_iface_info *info = arg; struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); @@ -269,7 +269,7 @@ nla_put_failure: } static int -nl80211_get_wake_on_wlan_handler(struct nl_msg *msg, void *arg) +nl80211_get_wake_on_wlan_handler(const struct nl_msg *msg, void *arg) { _NMSettingWirelessWakeOnWLan *wowl = arg; struct nlattr *attrs[NL80211_ATTR_MAX + 1]; @@ -422,7 +422,7 @@ struct nl80211_station_info { }; static int -nl80211_station_dump_handler(struct nl_msg *msg, void *arg) +nl80211_station_dump_handler(const struct nl_msg *msg, void *arg) { static const struct nla_policy stats_policy[] = { [NL80211_STA_INFO_INACTIVE_TIME] = {.type = NLA_U32}, @@ -576,7 +576,7 @@ struct nl80211_device_info { #define WLAN_CIPHER_SUITE_SMS4 0x00147201 static int -nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg) +nl80211_wiphy_info_handler(const struct nl_msg *msg, void *arg) { static const struct nla_policy freq_policy[] = { [NL80211_FREQUENCY_ATTR_FREQ] = {.type = NLA_U32}, @@ -816,7 +816,7 @@ struct nl80211_csme_conn_info { }; static int -nl80211_csme_conn_event_handler(struct nl_msg *msg, void *arg) +nl80211_csme_conn_event_handler(const struct nl_msg *msg, void *arg) { struct nl80211_csme_conn_info *info = arg; NMPlatformCsmeConnInfo *out_conn_info = info->conn_info; diff --git a/src/libnm-platform/wpan/nm-wpan-utils.c b/src/libnm-platform/wpan/nm-wpan-utils.c index 9350a2a780..675efe5a59 100644 --- a/src/libnm-platform/wpan/nm-wpan-utils.c +++ b/src/libnm-platform/wpan/nm-wpan-utils.c @@ -51,7 +51,7 @@ G_DEFINE_TYPE(NMWpanUtils, nm_wpan_utils, G_TYPE_OBJECT) /*****************************************************************************/ static int -ack_handler(struct nl_msg *msg, void *arg) +ack_handler(const struct nl_msg *msg, void *arg) { int *done = arg; *done = 1; @@ -59,7 +59,7 @@ ack_handler(struct nl_msg *msg, void *arg) } static int -finish_handler(struct nl_msg *msg, void *arg) +finish_handler(const struct nl_msg *msg, void *arg) { int *done = arg; *done = 1; @@ -67,7 +67,7 @@ finish_handler(struct nl_msg *msg, void *arg) } static int -error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) +error_handler(const struct sockaddr_nl *nla, const struct nlmsgerr *err, void *arg) { int *done = arg; *done = err->error; @@ -98,7 +98,7 @@ nl802154_alloc_msg(NMWpanUtils *self, uint8_t cmd, uint16_t flags) static int nl802154_send_and_recv(NMWpanUtils *self, struct nl_msg *msg, - int (*valid_handler)(struct nl_msg *, void *), + int (*valid_handler)(const struct nl_msg *, void *), void *valid_data) { int err; @@ -144,7 +144,7 @@ struct nl802154_interface { }; static int -nl802154_get_interface_handler(struct nl_msg *msg, void *arg) +nl802154_get_interface_handler(const struct nl_msg *msg, void *arg) { static const struct nla_policy nl802154_policy[] = { [NL802154_ATTR_PAN_ID] = {.type = NLA_U16}, From 6e7d8f0335e36c0cccb34d915a67532fd9df92ca Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Aug 2022 22:00:12 +0200 Subject: [PATCH 08/21] platform/netlink: add nlmsg_undata() helper --- src/libnm-platform/nm-netlink.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libnm-platform/nm-netlink.h b/src/libnm-platform/nm-netlink.h index d21abb5002..1b4267c517 100644 --- a/src/libnm-platform/nm-netlink.h +++ b/src/libnm-platform/nm-netlink.h @@ -442,16 +442,23 @@ void nlmsg_set_creds(struct nl_msg *msg, struct ucred *creds); NM_AUTO_DEFINE_FCN0(struct nl_msg *, _nm_auto_nl_msg_cleanup, nlmsg_free); #define nm_auto_nlmsg nm_auto(_nm_auto_nl_msg_cleanup) +static inline const struct nlmsghdr * +nlmsg_undata(const void *data) +{ + /* from the data, get back the header. It's the inverse of nlmsg_data(). */ + return (void *) (((unsigned char *) data) - NLMSG_HDRLEN); +} + static inline void * nlmsg_data(const struct nlmsghdr *nlh) { - return (unsigned char *) nlh + NLMSG_HDRLEN; + return ((unsigned char *) nlh) + NLMSG_HDRLEN; } static inline void * nlmsg_tail(const struct nlmsghdr *nlh) { - return (unsigned char *) nlh + NLMSG_ALIGN(nlh->nlmsg_len); + return ((unsigned char *) nlh) + NLMSG_ALIGN(nlh->nlmsg_len); } struct nlmsghdr *nlmsg_hdr(const struct nl_msg *n); From 494b3d82c104903167395fa8fe61f7b263f0cc06 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Aug 2022 22:17:35 +0200 Subject: [PATCH 09/21] platform/netlink: add nlmsg_parse_error() helper --- src/libnm-glib-aux/nm-errno.c | 1 + src/libnm-glib-aux/nm-errno.h | 1 + src/libnm-platform/nm-netlink.c | 46 +++++++++++++++++++++++++++++++++ src/libnm-platform/nm-netlink.h | 2 ++ 4 files changed, 50 insertions(+) diff --git a/src/libnm-glib-aux/nm-errno.c b/src/libnm-glib-aux/nm-errno.c index 14d93d64c9..b76386a6fe 100644 --- a/src/libnm-glib-aux/nm-errno.c +++ b/src/libnm-glib-aux/nm-errno.c @@ -28,6 +28,7 @@ static NM_UTILS_LOOKUP_STR_DEFINE( NM_UTILS_LOOKUP_STR_ITEM(NME_NL_ATTRSIZE, "NME_NL_ATTRSIZE"), NM_UTILS_LOOKUP_STR_ITEM(NME_NL_BAD_SOCK, "NME_NL_BAD_SOCK"), NM_UTILS_LOOKUP_STR_ITEM(NME_NL_DUMP_INTR, "NME_NL_DUMP_INTR"), + NM_UTILS_LOOKUP_STR_ITEM(NME_NL_MSG_INVAL, "NME_NL_MSG_INVAL"), NM_UTILS_LOOKUP_STR_ITEM(NME_NL_MSG_OVERFLOW, "NME_NL_MSG_OVERFLOW"), NM_UTILS_LOOKUP_STR_ITEM(NME_NL_MSG_TOOSHORT, "NME_NL_MSG_TOOSHORT"), NM_UTILS_LOOKUP_STR_ITEM(NME_NL_MSG_TRUNC, "NME_NL_MSG_TRUNC"), diff --git a/src/libnm-glib-aux/nm-errno.h b/src/libnm-glib-aux/nm-errno.h index 62c8379f83..f893a528b2 100644 --- a/src/libnm-glib-aux/nm-errno.h +++ b/src/libnm-glib-aux/nm-errno.h @@ -39,6 +39,7 @@ enum _NMErrno { /* netlink errors. */ NME_NL_SEQ_MISMATCH, + NME_NL_MSG_INVAL, NME_NL_MSG_TRUNC, NME_NL_MSG_TOOSHORT, NME_NL_DUMP_INTR, diff --git a/src/libnm-platform/nm-netlink.c b/src/libnm-platform/nm-netlink.c index 3d89a4c1d6..36841d5626 100644 --- a/src/libnm-platform/nm-netlink.c +++ b/src/libnm-platform/nm-netlink.c @@ -291,6 +291,52 @@ nlmsg_reserve(struct nl_msg *n, uint32_t len, uint32_t pad) /*****************************************************************************/ +int +nlmsg_parse_error(const struct nlmsghdr *nlh, const char **out_extack_msg) +{ + const struct nlmsgerr *e; + + nm_assert(nlh); + + NM_SET_OUT(out_extack_msg, NULL); + + if (nlh->nlmsg_type != NLMSG_ERROR) + return -NME_NL_MSG_INVAL; + + if (nlh->nlmsg_len < nlmsg_size(sizeof(struct nlmsgerr))) { + /* Truncated error message, the default action + * is to stop parsing. The user may overrule + * this action by returning NL_SKIP or + * NL_PROCEED (dangerous) */ + return -NME_NL_MSG_TRUNC; + } + + e = nlmsg_data(nlh); + + if (!e->error) + return 0; + + if (NM_FLAGS_HAS(nlh->nlmsg_flags, NLM_F_ACK_TLVS) && out_extack_msg + && nlh->nlmsg_len >= sizeof(*e) + e->msg.nlmsg_len) { + static const struct nla_policy policy[] = { + [NLMSGERR_ATTR_MSG] = {.type = NLA_STRING}, + [NLMSGERR_ATTR_OFFS] = {.type = NLA_U32}, + }; + struct nlattr *tb[G_N_ELEMENTS(policy)]; + struct nlattr *tlvs; + + tlvs = (struct nlattr *) ((char *) e + sizeof(*e) + e->msg.nlmsg_len - NLMSG_HDRLEN); + if (nla_parse_arr(tb, tlvs, nlh->nlmsg_len - sizeof(*e) - e->msg.nlmsg_len, policy) >= 0) { + if (tb[NLMSGERR_ATTR_MSG]) + *out_extack_msg = nla_get_string(tb[NLMSGERR_ATTR_MSG]); + } + } + + return -nm_errno_from_native(e->error); +} + +/*****************************************************************************/ + struct nlattr * nla_reserve(struct nl_msg *msg, int attrtype, int attrlen) { diff --git a/src/libnm-platform/nm-netlink.h b/src/libnm-platform/nm-netlink.h index 1b4267c517..fd1450cc12 100644 --- a/src/libnm-platform/nm-netlink.h +++ b/src/libnm-platform/nm-netlink.h @@ -497,6 +497,8 @@ nlmsg_find_attr(struct nlmsghdr *nlh, int hdrlen, int attrtype) return nla_find(nlmsg_attrdata(nlh, hdrlen), nlmsg_attrlen(nlh, hdrlen), attrtype); } +int nlmsg_parse_error(const struct nlmsghdr *nlh, const char **out_extack_msg); + int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[], From 413c1e3fa03cb11dcf2e3b1449516d8ce555bf2f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 8 Aug 2022 17:37:45 +0200 Subject: [PATCH 10/21] platform/netlink: add NLA_NEST_END() helper macro It's upper case like NLA_PUT(), which also does a goto nla_put_failure; on error. Otherwise, the upper case naming is a bit odd. --- src/libnm-platform/nm-netlink.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libnm-platform/nm-netlink.h b/src/libnm-platform/nm-netlink.h index fd1450cc12..44ed70af75 100644 --- a/src/libnm-platform/nm-netlink.h +++ b/src/libnm-platform/nm-netlink.h @@ -354,6 +354,14 @@ void nla_nest_cancel(struct nl_msg *msg, const struct nlattr *attr); struct nlattr *nla_nest_start(struct nl_msg *msg, int attrtype); int nla_nest_end(struct nl_msg *msg, struct nlattr *start); +#define NLA_NEST_END(msg, nest_start) \ + G_STMT_START \ + { \ + if (nla_nest_end((msg), (nest_start)) < 0) \ + goto nla_put_failure; \ + } \ + G_STMT_END + int nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, From 92fe4c383eca478ed3f59bb29af96777ff40baab Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 8 Aug 2022 17:40:37 +0200 Subject: [PATCH 11/21] platform: use NLA_NEST_END() macro in _wireguard_create_change_nlmsgs() --- src/libnm-platform/nm-linux-platform.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index 27904d4570..37cef59261 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -2873,14 +2873,6 @@ _wireguard_create_change_nlmsgs(NMPlatform *platfo struct nlattr *nest_curr_allowed_ip; NMPlatformWireGuardChangePeerFlags p_flags = NM_PLATFORM_WIREGUARD_CHANGE_PEER_FLAG_DEFAULT; -#define _nla_nest_end(msg, nest_start) \ - G_STMT_START \ - { \ - if (nla_nest_end((msg), (nest_start)) < 0) \ - g_return_val_if_reached(-NME_BUG); \ - } \ - G_STMT_END - /* Adapted from LGPL-2.1+ code [1]. * * [1] https://git.zx2c4.com/WireGuard/tree/contrib/examples/embeddable-wg-library/wireguard.c?id=5e99a6d43fe2351adf36c786f5ea2086a8fe7ab8#n1073 */ @@ -3036,36 +3028,36 @@ again: if (nla_put_uint8(msg, WGALLOWEDIP_A_CIDR_MASK, aip->mask) < 0) goto toobig_allowedips; - _nla_nest_end(msg, nest_curr_allowed_ip); + NLA_NEST_END(msg, nest_curr_allowed_ip); nest_curr_allowed_ip = NULL; } idx_allowed_ips_curr = IDX_NIL; - _nla_nest_end(msg, nest_allowed_ips); + NLA_NEST_END(msg, nest_allowed_ips); nest_allowed_ips = NULL; } } - _nla_nest_end(msg, nest_curr_peer); + NLA_NEST_END(msg, nest_curr_peer); nest_curr_peer = NULL; } - _nla_nest_end(msg, nest_peers); + NLA_NEST_END(msg, nest_peers); goto send; toobig_allowedips: if (nest_curr_allowed_ip) nla_nest_cancel(msg, nest_curr_allowed_ip); if (nest_allowed_ips) - _nla_nest_end(msg, nest_allowed_ips); - _nla_nest_end(msg, nest_curr_peer); - _nla_nest_end(msg, nest_peers); + NLA_NEST_END(msg, nest_allowed_ips); + NLA_NEST_END(msg, nest_curr_peer); + NLA_NEST_END(msg, nest_peers); goto send; toobig_peers: if (nest_curr_peer) nla_nest_cancel(msg, nest_curr_peer); - _nla_nest_end(msg, nest_peers); + NLA_NEST_END(msg, nest_peers); goto send; send: @@ -3081,8 +3073,6 @@ send: nla_put_failure: g_return_val_if_reached(-NME_BUG); - -#undef _nla_nest_end } static int From 8bdd416972b2c3907ac99bc79f45690b21c32ada Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Aug 2022 22:18:18 +0200 Subject: [PATCH 12/21] platform: use nlmsg_parse_error() in _netlink_recv_handle() --- src/libnm-platform/nm-linux-platform.c | 45 +++++--------------------- 1 file changed, 8 insertions(+), 37 deletions(-) diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index 37cef59261..fc3ca60aeb 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -9856,49 +9856,20 @@ continue_reading: * NL_SKIP or NL_PROCEED (dangerous) */ retval = -NME_NL_MSG_OVERFLOW; } else if (msg.nm_nlh->nlmsg_type == NLMSG_ERROR) { - /* Message carries a nlmsgerr */ - struct nlmsgerr *e = nlmsg_data(msg.nm_nlh); + int errsv; - if (msg.nm_nlh->nlmsg_len < nlmsg_size(sizeof(*e))) { - /* Truncated error message, the default action - * is to stop parsing. The user may overrule - * this action by returning NL_SKIP or - * NL_PROCEED (dangerous) */ - retval = -NME_NL_MSG_TRUNC; - } else if (e->error) { - int errsv = nm_errno_native(e->error); - - if (NM_FLAGS_HAS(msg.nm_nlh->nlmsg_flags, NLM_F_ACK_TLVS) - && msg.nm_nlh->nlmsg_len >= sizeof(*e) + e->msg.nlmsg_len) { - static const struct nla_policy policy[] = { - [NLMSGERR_ATTR_MSG] = {.type = NLA_STRING}, - [NLMSGERR_ATTR_OFFS] = {.type = NLA_U32}, - }; - struct nlattr *tb[G_N_ELEMENTS(policy)]; - struct nlattr *tlvs; - - tlvs = (struct nlattr *) ((char *) e + sizeof(*e) + e->msg.nlmsg_len - - NLMSG_HDRLEN); - if (nla_parse_arr(tb, - tlvs, - msg.nm_nlh->nlmsg_len - sizeof(*e) - e->msg.nlmsg_len, - policy) - >= 0) { - if (tb[NLMSGERR_ATTR_MSG]) - extack_msg = nla_get_string(tb[NLMSGERR_ATTR_MSG]); - } - } - - /* Error message reported back from kernel. */ + errsv = nlmsg_parse_error(msg.nm_nlh, &extack_msg); + if (errsv == 0) + seq_result = WAIT_FOR_NL_RESPONSE_RESULT_RESPONSE_OK; + else { _LOGD("%s: recvmsg: error message from kernel: %s (%d)%s%s%s for request %d", log_prefix, - nm_strerror_native(errsv), + nm_strerror(errsv), errsv, NM_PRINT_FMT_QUOTED(extack_msg, " \"", extack_msg, "\"", ""), msg.nm_nlh->nlmsg_seq); - seq_result = -NM_ERRNO_NATIVE(errsv); - } else - seq_result = WAIT_FOR_NL_RESPONSE_RESULT_RESPONSE_OK; + seq_result = errsv; + } } else process_valid_msg = TRUE; From d92053fc6ee43994f64d33ab0f446bfa8e1316b0 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 26 Jul 2022 18:19:14 +0200 Subject: [PATCH 13/21] platform: fix nm_platform_mptcp_addr_cmp() to compare port Fixes: 1a0c8772b0d9 ('platform: add NMPlatformMptcpAddr object') --- src/libnm-platform/nm-platform.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index e2bc22e4c0..987b8f2dd2 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -7804,12 +7804,13 @@ nm_platform_mptcp_addr_cmp(const NMPlatformMptcpAddr *a, const NMPlatformMptcpAd nm_assert_addr_family_or_unspec(a->addr_family); nm_assert_addr_family_or_unspec(b->addr_family); + NM_CMP_FIELD(a, b, ifindex); NM_CMP_FIELD(a, b, id); NM_CMP_FIELD_UNSAFE(a, b, in_kernel); NM_CMP_FIELD(a, b, addr_family); if (NM_IN_SET(a->addr_family, AF_INET, AF_INET6)) NM_CMP_FIELD_MEMCMP_LEN(a, b, addr, nm_utils_addr_family_to_size(a->addr_family)); - NM_CMP_FIELD(a, b, ifindex); + NM_CMP_FIELD(a, b, port); return 0; } From e1c18e9ed2cc2f5ddaeeb79191f01d56d8010ef2 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 28 Jul 2022 18:58:45 +0200 Subject: [PATCH 14/21] platform: adjust identity for MPTCP addr objects It's not very clear what the best identity is. For example, in kernel you cannot add two MPTCP addresses that only differ by ifindex. Thus (as far as kernel is concerned), the ifindex is not part of the identity. Still, as we will have an interface centric view, this will be useful for us. On the other hand, to kernel is the "id" a second primary key, along side "addr:port". However, to us it's not useful to consider that as part of nmp_object_id_equal(), because usually kernel will pick an "id" for us, and when we track objects that we are about to add, they don't have an "id" yet. So, adjust nmp_object_id_equal(). However -- somewhat unusual -- let it deviate from kernel's understanding of what defines an MPTCP address. --- src/libnm-platform/nmp-object.c | 52 ++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/libnm-platform/nmp-object.c b/src/libnm-platform/nmp-object.c index f5a2a10cf0..67f508ef14 100644 --- a/src/libnm-platform/nmp-object.c +++ b/src/libnm-platform/nmp-object.c @@ -1553,20 +1553,34 @@ _vt_cmd_plobj_id_cmp_routing_rule(const NMPlatformObject *obj1, const NMPlatform } _vt_cmd_plobj_id_cmp(mptcp_addr, NMPlatformMptcpAddr, { - NM_CMP_FIELD(obj1, obj2, id); - NM_CMP_FIELD_UNSAFE(obj1, obj2, in_kernel); - if (!obj1->in_kernel) { - /* See comment NMPlatformMptcpAddr.in_kernel for why. */ - NM_CMP_FIELD(obj1, obj2, addr_family); - - /* nm_utils_addr_family_to_size() asserts that addr-family is either AF_INET or AF_INET6. - * This means, we cannot compare totally bogus objects. That is in particular fine - * for instances which are not "in_kernel". While we might receive unexpected values - * from kernel, we should not create them for internal purposes. */ - NM_CMP_FIELD_MEMCMP_LEN(obj1, obj2, addr, nm_utils_addr_family_to_size(obj1->addr_family)); - - NM_CMP_FIELD(obj1, obj2, port); - } + /* The primary key of an MPTCP endpoint is only the address:port@ifindex. + * + * Which does not fully correspond to kernel's view. Kernel's view is determined + * by the question whether you can add two objects that only differ by one + * attribute. If you can, the attribute is part of the ID otherwise it isn't. + * + * Note that for kernel, the "ifindex" is not part of the identity. + * That is, you cannot two add two endpoints that only differ by + * ifindex. However, for our purpose, it is very useful to make + * the "ifindex" part of the identity. For example, NMPGlobalTracker will use + * this to track MPTCP addresses from independent callers (NML3Cfg). + * It would be bad, if objects that differ by "ifindex" would be + * combined. + * + * The "id" is intentionally not part of the identity for us. Note however, that kernel + * does not allow configuring duplicates "id" -- so the "id" could be a primary key + * as far as kernel is concerned. However, when we track MPTCP endpoints that + * we want to configure, the "id" is left undefined (and we let kernel choose it). + * If the "id" would be part of the NMPObject's ID, we could not lookup + * an object unless we know the "id" -- which we often don't. + */ + NM_CMP_FIELD(obj1, obj2, ifindex); + NM_CMP_FIELD(obj1, obj2, addr_family); + NM_CMP_FIELD_MEMCMP_LEN(obj1, + obj2, + addr, + nm_utils_addr_family_to_size_untrusted(obj1->addr_family)); + NM_CMP_FIELD(obj1, obj2, port); }); void @@ -1655,13 +1669,9 @@ _vt_cmd_plobj_id_hash_update(tfilter, NMPlatformTfilter, { }); _vt_cmd_plobj_id_hash_update(mptcp_addr, NMPlatformMptcpAddr, { - if (obj->in_kernel) { - nm_hash_update_val(h, obj->id); - } else { - /* _vt_cmd_plobj_id_cmp_mptcp_addr for why. */ - nm_hash_update_vals(h, obj->id, obj->addr_family, obj->port); - nm_hash_update(h, &obj->addr, nm_utils_addr_family_to_size(obj->addr_family)); - } + /* See the corresponding ID cmp function for details. */ + nm_hash_update_vals(h, obj->addr_family, obj->port, obj->ifindex); + nm_hash_update(h, &obj->addr, nm_utils_addr_family_to_size_untrusted(obj->addr_family)); }); static void From 370147cf9da093cffc50cf2a298ef2a49d93fe06 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 2 Aug 2022 19:17:28 +0200 Subject: [PATCH 15/21] platform: drop unnecessary NMPlatformMptcpAddr.in_kernel flag Since we don't get netlink notifications when the MPTCP endpoints change, we don't cache them. And since we don't cache them, there is less need to mark whether they were received from kernel or created internally. --- src/libnm-platform/nm-platform.c | 11 +---------- src/libnm-platform/nm-platform.h | 10 ---------- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index 987b8f2dd2..cceabb7f9b 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -7761,14 +7761,12 @@ nm_platform_mptcp_addr_to_string(const NMPlatformMptcpAddr *mptcp_addr, char *bu g_snprintf(buf, len, - "%s" /* in_kernel */ "%s" /* address */ "%s" /* port */ "%s" /* id */ "%s" /* flags */ "%s" /* ifindex */ "", - mptcp_addr->in_kernel ? "" : "[nm] ", str_addr, mptcp_addr->port == 0 ? "" : nm_sprintf_buf(str_port, " port %u", mptcp_addr->port), mptcp_addr->id == 0 ? "" : nm_sprintf_buf(str_id, " id %u", mptcp_addr->id), @@ -7785,13 +7783,7 @@ nm_platform_mptcp_addr_hash_update(const NMPlatformMptcpAddr *obj, NMHashState * nm_assert(obj); nm_assert_addr_family_or_unspec(obj->addr_family); - nm_hash_update_vals(h, - obj->id, - obj->flags, - obj->port, - obj->addr_family, - (bool) obj->in_kernel, - obj->ifindex); + nm_hash_update_vals(h, obj->id, obj->flags, obj->port, obj->addr_family, obj->ifindex); if (NM_IN_SET(obj->addr_family, AF_INET, AF_INET6)) nm_hash_update(h, &obj->addr, nm_utils_addr_family_to_size(obj->addr_family)); } @@ -7806,7 +7798,6 @@ nm_platform_mptcp_addr_cmp(const NMPlatformMptcpAddr *a, const NMPlatformMptcpAd NM_CMP_FIELD(a, b, ifindex); NM_CMP_FIELD(a, b, id); - NM_CMP_FIELD_UNSAFE(a, b, in_kernel); NM_CMP_FIELD(a, b, addr_family); if (NM_IN_SET(a->addr_family, AF_INET, AF_INET6)) NM_CMP_FIELD_MEMCMP_LEN(a, b, addr, nm_utils_addr_family_to_size(a->addr_family)); diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index 2f41b0c8bf..367f4316d1 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -1098,21 +1098,11 @@ typedef void (*NMPlatformAsyncCallback)(GError *error, gpointer user_data); typedef struct { __NMPlatformObjWithIfindex_COMMON; - guint32 id; guint32 flags; guint16 port; NMIPAddr addr; gint8 addr_family; - - /* If TRUE, then the instance was received by kernel and is inside NMPlatform - * cache. In that case, the "id" is set and acts as primary key for the instance. - * - * If FALSE, this instance is not yet configured in kernel. In this case, - * the tuple (id, addr_family, addr) is the primary key of the instance. - * This way, we can track mptcp addresses in NetworkManager internally, - * before configuring them in kernel. */ - bool in_kernel : 1; } NMPlatformMptcpAddr; #undef __NMPlatformObjWithIfindex_COMMON From 3a8864a5858df5628b77c4e8900816c741a4d473 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 26 Jul 2022 17:58:20 +0200 Subject: [PATCH 16/21] platform: delete conflicting route/rule during nmp_global_tracker_sync() The ID of an object does not entail all properties/attributes. During sync, if we already have an object with the same ID configured, it may still differ in other aspects. Handle those cases, by deleting such routes/rules before adding the desired object. --- src/libnm-platform/nmp-global-tracker.c | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/libnm-platform/nmp-global-tracker.c b/src/libnm-platform/nmp-global-tracker.c index dd3df38d80..c4f50918f8 100644 --- a/src/libnm-platform/nmp-global-tracker.c +++ b/src/libnm-platform/nmp-global-tracker.c @@ -691,8 +691,32 @@ nmp_global_tracker_sync(NMPGlobalTracker *self, NMPObjectType obj_type, gboolean plobj = nm_platform_lookup_obj(self->platform, NMP_CACHE_ID_TYPE_OBJECT_TYPE, obj_data->obj); - if (plobj) - continue; + if (plobj) { + int c; + + switch (obj_type) { + case NMP_OBJECT_TYPE_ROUTING_RULE: + c = nm_platform_routing_rule_cmp(NMP_OBJECT_CAST_ROUTING_RULE(obj_data->obj), + NMP_OBJECT_CAST_ROUTING_RULE(plobj), + NM_PLATFORM_ROUTING_RULE_CMP_TYPE_SEMANTICALLY); + break; + case NMP_OBJECT_TYPE_IP4_ROUTE: + c = nm_platform_ip4_route_cmp(NMP_OBJECT_CAST_IP4_ROUTE(obj_data->obj), + NMP_OBJECT_CAST_IP4_ROUTE(plobj), + NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY); + break; + case NMP_OBJECT_TYPE_IP6_ROUTE: + c = nm_platform_ip6_route_cmp(NMP_OBJECT_CAST_IP6_ROUTE(obj_data->obj), + NMP_OBJECT_CAST_IP6_ROUTE(plobj), + NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY); + break; + default: + nm_assert_not_reached(); + } + if (c == 0) + continue; + nm_platform_object_delete(self->platform, plobj); + } obj_data->config_state = CONFIG_STATE_ADDED_BY_US; From ec64559caab3057d32a38e1ec7ed813764be10b4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Jul 2022 13:50:43 +0200 Subject: [PATCH 17/21] platform: add hash functions for NMPlatformMptcpAddr instances We already have two hash functions for MPTCP addresses: nmp_object_id_hash*() which compares the identity of objects and nm_platform_mptcp_addr_hash*(), which compares all fields. There is also a need to hash only the address. Add it. Will be used next. --- src/libnm-platform/nm-platform.c | 22 ++++++++++++++++++++++ src/libnm-platform/nm-platform.h | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index cceabb7f9b..e6cba638b4 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -7806,6 +7806,28 @@ nm_platform_mptcp_addr_cmp(const NMPlatformMptcpAddr *a, const NMPlatformMptcpAd return 0; } +guint +nm_platform_mptcp_addr_index_addr_cmp(gconstpointer data) +{ + const NMPlatformMptcpAddr *mptcp_addr = data; + NMHashState h; + + nm_hash_init(&h, 1408914077u); + nm_hash_update_val(&h, mptcp_addr->addr_family); + nm_hash_update(&h, &mptcp_addr->addr, nm_utils_addr_family_to_size(mptcp_addr->addr_family)); + return nm_hash_complete(&h); +} + +gboolean +nm_platform_mptcp_addr_index_addr_equal(gconstpointer data_a, gconstpointer data_b) +{ + const NMPlatformMptcpAddr *mptcp_addr_a = data_a; + const NMPlatformMptcpAddr *mptcp_addr_b = data_b; + + return mptcp_addr_a->addr_family == mptcp_addr_b->addr_family + && nm_ip_addr_equal(mptcp_addr_a->addr_family, &mptcp_addr_a->addr, &mptcp_addr_b->addr); +} + const char * nm_platform_vf_to_string(const NMPlatformVF *vf, char *buf, gsize len) { diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index 367f4316d1..a4aebee573 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -2589,6 +2589,9 @@ void nm_platform_tfilter_hash_update(const NMPlatformTfilter *obj, NMHashState * void nm_platform_mptcp_addr_hash_update(const NMPlatformMptcpAddr *obj, NMHashState *h); +guint nm_platform_mptcp_addr_index_addr_cmp(gconstpointer data); +gboolean nm_platform_mptcp_addr_index_addr_equal(gconstpointer data_a, gconstpointer data_b); + #define NM_PLATFORM_LINK_FLAGS2STR_MAX_LEN ((gsize) 162) const char *nm_platform_link_flags2str(unsigned flags, char *buf, gsize len); From ce635c4339125a30cb470fee222e73c2125ecfd7 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 14 Jul 2022 22:19:47 +0200 Subject: [PATCH 18/21] platform: add dump/update function for MPTCP addresses Since the generic netlink API does (currently) not support notifications about changes of the MPTCP addresses, we won't get notifications when they change, and it seems wrong to put such things in the NMPlatform cache. We can just get the list of endpoints by polling, so add a function nm_platform_mptcp_addrs_dump() for that. Also, add nm_platform_mptcp_addr_update() which can add/remove/update MPTCP addresses. --- src/core/platform/tests/monitor.c | 15 ++ src/libnm-platform/nm-linux-platform.c | 300 +++++++++++++++++++++++++ src/libnm-platform/nm-platform.c | 59 +++-- src/libnm-platform/nm-platform.h | 9 + src/libnm-platform/nmp-object.c | 2 +- 5 files changed, 366 insertions(+), 19 deletions(-) diff --git a/src/core/platform/tests/monitor.c b/src/core/platform/tests/monitor.c index 1a71e6335d..8d0e01074a 100644 --- a/src/core/platform/tests/monitor.c +++ b/src/core/platform/tests/monitor.c @@ -9,6 +9,7 @@ #include #include "libnm-platform/nm-linux-platform.h" +#include "libnm-platform/nmp-object.h" #include "nm-test-utils-core.h" @@ -50,6 +51,18 @@ read_argv(int *argc, char ***argv) return TRUE; } +/*****************************************************************************/ + +static void +mptcp_addr_dump(NMPlatform *platform) +{ + gs_unref_ptrarray GPtrArray *addrs = NULL; + + addrs = nm_platform_mptcp_addrs_dump(platform); +} + +/*****************************************************************************/ + int main(int argc, char **argv) { @@ -69,6 +82,8 @@ main(int argc, char **argv) nm_linux_platform_setup(); + mptcp_addr_dump(NM_PLATFORM_GET); + if (global_opt.persist) g_main_loop_run(loop); diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index fc3ca60aeb..cd685fe20e 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -9334,6 +9334,9 @@ object_delete(NMPlatform *platform, const NMPObject *obj) case NMP_OBJECT_TYPE_TFILTER: nlmsg = _nl_msg_new_tfilter(RTM_DELTFILTER, 0, NMP_OBJECT_CAST_TFILTER(obj)); break; + case NMP_OBJECT_TYPE_MPTCP_ADDR: + return (nm_platform_mptcp_addr_update(platform, FALSE, NMP_OBJECT_CAST_MPTCP_ADDR(obj)) + >= 0); default: break; } @@ -10101,6 +10104,301 @@ out: /*****************************************************************************/ +static const NMPObject * +_mptcp_addrs_dump_parse_addr(struct nlattr *attr) +{ + static const struct nla_policy policy[] = { + [MPTCP_PM_ADDR_ATTR_FAMILY] = {.type = NLA_U16}, + [MPTCP_PM_ADDR_ATTR_ID] = {.type = NLA_U8}, + [MPTCP_PM_ADDR_ATTR_ADDR4] = {.minlen = sizeof(in_addr_t)}, + [MPTCP_PM_ADDR_ATTR_ADDR6] = {.minlen = sizeof(struct in6_addr)}, + [MPTCP_PM_ADDR_ATTR_PORT] = {.type = NLA_U16}, + [MPTCP_PM_ADDR_ATTR_FLAGS] = {.type = NLA_U32}, + [MPTCP_PM_ADDR_ATTR_IF_IDX] = {.type = NLA_S32}, + }; + struct nlattr *tb[G_N_ELEMENTS(policy)]; + nm_auto_nmpobj NMPObject *obj = NULL; + NMPlatformMptcpAddr *mptcp_addr; + int addr_family; + int addr_attr; + + if (nla_parse_nested_arr(tb, attr, policy) < 0) + return NULL; + + if (!tb[MPTCP_PM_ADDR_ATTR_ID]) + return NULL; + + obj = nmp_object_new(NMP_OBJECT_TYPE_MPTCP_ADDR, NULL); + mptcp_addr = &obj->mptcp_addr; + + mptcp_addr->id = nla_get_u8(tb[MPTCP_PM_ADDR_ATTR_ID]); + + if (!tb[MPTCP_PM_ADDR_ATTR_FAMILY]) { + /* If we don't have the family. Only create a stub object containing + * the ID. */ + goto out; + } + + addr_family = nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_FAMILY]); + + if (addr_family == AF_INET) + addr_attr = MPTCP_PM_ADDR_ATTR_ADDR4; + else if (addr_family == AF_INET6) + addr_attr = MPTCP_PM_ADDR_ATTR_ADDR6; + else + goto out; + + if (!tb[addr_attr]) + goto out; + + mptcp_addr->addr_family = addr_family; + memcpy(&mptcp_addr->addr, nla_data(tb[addr_attr]), nm_utils_addr_family_to_size(addr_family)); + + if (tb[MPTCP_PM_ADDR_ATTR_PORT]) + mptcp_addr->port = nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_PORT]); + + if (tb[MPTCP_PM_ADDR_ATTR_IF_IDX]) + mptcp_addr->ifindex = nla_get_s32(tb[MPTCP_PM_ADDR_ATTR_IF_IDX]); + + if (tb[MPTCP_PM_ADDR_ATTR_FLAGS]) + mptcp_addr->flags = nla_get_u32(tb[MPTCP_PM_ADDR_ATTR_FLAGS]); + +out: + + return g_steal_pointer(&obj); +} + +typedef struct { + GPtrArray *addrs; +} FetchMptcpAddrParseData; + +static int +_mptcp_addrs_dump_parse_cb(const struct nl_msg *msg, void *arg) +{ + static const struct nla_policy policy[] = { + [MPTCP_PM_ATTR_ADDR] = {.type = NLA_NESTED}, + }; + struct nlattr *tb[G_N_ELEMENTS(policy)]; + FetchMptcpAddrParseData *parse_data = arg; + + if (genlmsg_parse_arr(nlmsg_hdr(msg), 0, tb, policy) < 0) + return NL_SKIP; + + if (tb[MPTCP_PM_ATTR_ADDR]) { + const NMPObject *obj; + + obj = _mptcp_addrs_dump_parse_addr(tb[MPTCP_PM_ATTR_ADDR]); + if (obj) + g_ptr_array_add(parse_data->addrs, (gpointer) obj); + } + + return NL_OK; +} + +#define EXTACK_MSG_BUFSIZE 200 + +static int +_mptcp_addr_update_err_cb(const struct sockaddr_nl *nla, const struct nlmsgerr *nlerr, void *arg) +{ + char *out_extack_msg = arg; + const char *extack_msg; + int errsv; + + errsv = nlmsg_parse_error(nlmsg_undata(nlerr), &extack_msg); + if (extack_msg) + g_strlcpy(out_extack_msg, extack_msg, EXTACK_MSG_BUFSIZE); + return errsv; +} + +static int +mptcp_addr_update(NMPlatform *platform, NMOptionBool add, const NMPlatformMptcpAddr *addr) +{ + NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE(platform); + nm_auto_nlmsg struct nl_msg *nlmsg = NULL; + struct nlattr *nla_nest; + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + guint16 genl_family_id; + guint8 cmd_num; + const char *cmd_str; + int nle; + char extack_msg[EXTACK_MSG_BUFSIZE]; + const struct nl_cb cb = { + .err_cb = _mptcp_addr_update_err_cb, + .err_arg = extack_msg, + }; + + extack_msg[0] = '\0'; + + if (add == NM_OPTION_BOOL_DEFAULT) { + cmd_num = MPTCP_PM_CMD_SET_FLAGS; + cmd_str = "update"; + } else if (add) { + cmd_num = MPTCP_PM_CMD_ADD_ADDR; + cmd_str = "add"; + } else { + cmd_num = MPTCP_PM_CMD_DEL_ADDR; + cmd_str = "delete"; + } + + nm_assert_addr_family_or_unspec(addr->addr_family); + nm_assert(cmd_num != MPTCP_PM_CMD_ADD_ADDR + || (addr->port == 0 && addr->addr_family != AF_UNSPEC)); + nm_assert(cmd_num != MPTCP_PM_CMD_SET_FLAGS || (addr->id != 0 && addr->port == 0)); + nm_assert(cmd_num != MPTCP_PM_CMD_DEL_ADDR || addr->id != 0); + + genl_family_id = nm_platform_genl_get_family_id(platform, NMP_GENL_FAMILY_TYPE_MPTCP_PM); + if (genl_family_id == 0) { + _LOGT("mptcp: %s address %s fails because %s generic netlink family is unknown", + cmd_str, + nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf)), + nmp_genl_family_infos[NMP_GENL_FAMILY_TYPE_MPTCP_PM].name); + return -ENOSYS; + } + + _LOGT("mptcp: %s address %s", + cmd_str, + nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf))); + + nlmsg = nlmsg_alloc_size(nlmsg_total_size(GENL_HDRLEN) + 200); + + if (!genlmsg_put(nlmsg, + NL_AUTO_PORT, + NL_AUTO_SEQ, + genl_family_id, + 0, + NLM_F_REQUEST, + cmd_num, + MPTCP_PM_VER)) + goto nla_put_failure; + + nla_nest = nla_nest_start(nlmsg, MPTCP_PM_ATTR_ADDR | NLA_F_NESTED); + if (!nla_nest) + goto nla_put_failure; + + if (addr->id != 0) + NLA_PUT_U8(nlmsg, MPTCP_PM_ADDR_ATTR_ID, addr->id); + if (addr->flags != 0) + NLA_PUT_U32(nlmsg, MPTCP_PM_ADDR_ATTR_FLAGS, addr->flags); + if (addr->ifindex != 0) + NLA_PUT_S32(nlmsg, MPTCP_PM_ADDR_ATTR_IF_IDX, addr->ifindex); + if (addr->port != 0) + NLA_PUT_U16(nlmsg, MPTCP_PM_ADDR_ATTR_PORT, addr->port); + if (addr->addr_family != AF_UNSPEC) { + int addr_attr; + + NLA_PUT_U16(nlmsg, MPTCP_PM_ADDR_ATTR_FAMILY, addr->addr_family); + if (addr->addr_family == AF_INET) + addr_attr = MPTCP_PM_ADDR_ATTR_ADDR4; + else if (addr->addr_family == AF_INET6) + addr_attr = MPTCP_PM_ADDR_ATTR_ADDR6; + else + g_return_val_if_reached(-NME_BUG); + NLA_PUT(nlmsg, addr_attr, nm_utils_addr_family_to_size(addr->addr_family), &addr->addr); + } + + NLA_NEST_END(nlmsg, nla_nest); + + nle = nl_send_auto(priv->sk_genl_sync, nlmsg); + if (nle < 0) { + _LOGT("mptcp: %s address %s: failed sending request: %s (%d)", + cmd_str, + nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf)), + nm_strerror(nle), + nle); + return nle; + } + + do { + nle = nl_recvmsgs(priv->sk_genl_sync, &cb); + } while (nle == -EAGAIN); + + if (nle < 0) { + _LOGT("mptcp: %s address %s: failed: %s (%d)%s%s%s", + cmd_str, + nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf)), + nm_strerror(nle), + nle, + NM_PRINT_FMT_QUOTED(extack_msg[0] != '\0', " \"", extack_msg, "\"", "")); + return nle; + } + + _LOGT("mptcp: %s address %s: success", + cmd_str, + nm_platform_mptcp_addr_to_string(addr, sbuf, sizeof(sbuf))); + + return 0; + +nla_put_failure: + g_return_val_if_reached(-NME_BUG); +} + +static GPtrArray * +mptcp_addrs_dump(NMPlatform *platform) +{ + NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE(platform); + gs_unref_ptrarray GPtrArray *addrs = NULL; + nm_auto_nlmsg struct nl_msg *nlmsg = NULL; + FetchMptcpAddrParseData parse_data; + guint16 genl_family_id; + int r; + guint i; + + genl_family_id = nm_platform_genl_get_family_id(platform, NMP_GENL_FAMILY_TYPE_MPTCP_PM); + if (genl_family_id == 0) { + _LOGT("mptcp: dump addresses fails because %s generic netlink family is unknown", + nmp_genl_family_infos[NMP_GENL_FAMILY_TYPE_MPTCP_PM].name); + return NULL; + } + + nlmsg = nlmsg_alloc_size(nlmsg_total_size(GENL_HDRLEN)); + + if (!genlmsg_put(nlmsg, + NL_AUTO_PORT, + NL_AUTO_SEQ, + genl_family_id, + 0, + NLM_F_REQUEST | NLM_F_DUMP, + MPTCP_PM_CMD_GET_ADDR, + MPTCP_PM_VER)) + g_return_val_if_reached(NULL); + + r = nl_send_auto(priv->sk_genl_sync, nlmsg); + if (r < 0) { + _LOGT("mptcp: dump addresses failed to send dump request: %s", nm_strerror(r)); + return NULL; + } + + addrs = g_ptr_array_new_with_free_func((GDestroyNotify) nmp_object_unref); + + parse_data = (FetchMptcpAddrParseData){ + .addrs = addrs, + }; + + nl_recvmsgs(priv->sk_genl_sync, + &((const struct nl_cb){ + .valid_cb = _mptcp_addrs_dump_parse_cb, + .valid_arg = (gpointer) &parse_data, + })); + + if (_LOGT_ENABLED()) { + _LOGT("mptcp: %u addresses dumped", addrs->len); + for (i = 0; i < addrs->len; i++) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + + _LOGT("mptcp: address[%04d]: %s", + i, + nmp_object_to_string(addrs->pdata[i], + NMP_OBJECT_TO_STRING_PUBLIC, + sbuf, + sizeof(sbuf))); + } + } + + return g_steal_pointer(&addrs); +} + +/*****************************************************************************/ + static void cache_update_link_udev(NMPlatform *platform, int ifindex, struct udev_device *udevice) { @@ -10589,4 +10887,6 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass) platform_class->process_events = process_events; platform_class->genl_get_family_id = genl_get_family_id; + platform_class->mptcp_addr_update = mptcp_addr_update; + platform_class->mptcp_addrs_dump = mptcp_addrs_dump; } diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index e6cba638b4..ab9664d2ee 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -7,6 +7,8 @@ #include "nm-platform.h" +#include "libnm-std-aux/nm-linux-compat.h" + #include #include #include @@ -402,7 +404,7 @@ const NMPGenlFamilyInfo nmp_genl_family_infos[_NMP_GENL_FAMILY_TYPE_NUM] = { }, [NMP_GENL_FAMILY_TYPE_MPTCP_PM] = { - .name = "mptcp_pm", + .name = MPTCP_PM_NAME, }, [NMP_GENL_FAMILY_TYPE_NL80211] = { @@ -5320,23 +5322,26 @@ nm_platform_object_delete(NMPlatform *self, const NMPObject *obj) _CHECK_SELF(self, klass, FALSE); - switch (NMP_OBJECT_GET_TYPE(obj)) { - case NMP_OBJECT_TYPE_ROUTING_RULE: - _LOGD("%s: delete %s", - NMP_OBJECT_GET_CLASS(obj)->obj_type_name, - nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); - break; - case NMP_OBJECT_TYPE_IP4_ROUTE: - case NMP_OBJECT_TYPE_IP6_ROUTE: - case NMP_OBJECT_TYPE_QDISC: - case NMP_OBJECT_TYPE_TFILTER: - ifindex = NMP_OBJECT_CAST_OBJ_WITH_IFINDEX(obj)->ifindex; - _LOG3D("%s: delete %s", - NMP_OBJECT_GET_CLASS(obj)->obj_type_name, - nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); - break; - default: - g_return_val_if_reached(FALSE); + if (_LOGD_ENABLED()) { + switch (NMP_OBJECT_GET_TYPE(obj)) { + case NMP_OBJECT_TYPE_ROUTING_RULE: + case NMP_OBJECT_TYPE_MPTCP_ADDR: + _LOGD("%s: delete %s", + NMP_OBJECT_GET_CLASS(obj)->obj_type_name, + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + break; + case NMP_OBJECT_TYPE_IP4_ROUTE: + case NMP_OBJECT_TYPE_IP6_ROUTE: + case NMP_OBJECT_TYPE_QDISC: + case NMP_OBJECT_TYPE_TFILTER: + ifindex = NMP_OBJECT_CAST_OBJ_WITH_IFINDEX(obj)->ifindex; + _LOG3D("%s: delete %s", + NMP_OBJECT_GET_CLASS(obj)->obj_type_name, + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + break; + default: + g_return_val_if_reached(FALSE); + } } return klass->object_delete(self, obj); @@ -9393,6 +9398,24 @@ nm_platform_genl_get_family_id(NMPlatform *self, NMPGenlFamilyType family_type) /*****************************************************************************/ +int +nm_platform_mptcp_addr_update(NMPlatform *self, NMOptionBool add, const NMPlatformMptcpAddr *addr) +{ + _CHECK_SELF(self, klass, -NME_BUG); + + return klass->mptcp_addr_update(self, add, addr); +} + +GPtrArray * +nm_platform_mptcp_addrs_dump(NMPlatform *self) +{ + _CHECK_SELF(self, klass, NULL); + + return klass->mptcp_addrs_dump(self); +} + +/*****************************************************************************/ + GHashTable * nm_platform_ip4_address_addr_to_hash(NMPlatform *self, int ifindex) { diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index a4aebee573..90ffbed02e 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -1394,6 +1394,10 @@ typedef struct { guint16 (*genl_get_family_id)(NMPlatform *platform, NMPGenlFamilyType family_type); + int (*mptcp_addr_update)(NMPlatform *self, NMOptionBool add, const NMPlatformMptcpAddr *addr); + + GPtrArray *(*mptcp_addrs_dump)(NMPlatform *self); + } NMPlatformClass; /* NMPlatform signals @@ -2668,4 +2672,9 @@ gboolean nm_platform_ip_address_match(int addr_family, guint16 nm_platform_genl_get_family_id(NMPlatform *self, NMPGenlFamilyType family_type); +int +nm_platform_mptcp_addr_update(NMPlatform *self, NMOptionBool add, const NMPlatformMptcpAddr *addr); + +GPtrArray *nm_platform_mptcp_addrs_dump(NMPlatform *self); + #endif /* __NETWORKMANAGER_PLATFORM_H__ */ diff --git a/src/libnm-platform/nmp-object.c b/src/libnm-platform/nmp-object.c index 67f508ef14..d06aa9cdf3 100644 --- a/src/libnm-platform/nmp-object.c +++ b/src/libnm-platform/nmp-object.c @@ -1785,7 +1785,7 @@ _vt_cmd_obj_is_alive_tfilter(const NMPObject *obj) static gboolean _vt_cmd_obj_is_alive_mptcp_addr(const NMPObject *obj) { - return NM_IN_SET(obj->mptcp_addr.addr_family, AF_INET, AF_INET6); + return NM_IN_SET(obj->mptcp_addr.addr_family, AF_INET, AF_INET6, AF_UNSPEC); } gboolean From 5374c403d285b542cf2ed95d6208cc792a4d18db Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 18 Jul 2022 10:16:31 +0200 Subject: [PATCH 19/21] platfrom: handle MPTCP addresses with NMPGlobalTracker When we configure MPTCP addresses, we usually do so per interface (ifindex). That is, because each interface (via NMDevice and NML3Cfg) decides how to configure MPTCP, and then we always add MTCP addresses for this certain ifindex. With that, we could have a purely interface-specific view and not a global sync method. However, there are two problems: The minor problem is that we don't cache the endpoints (because we don't get notifications). We can only get a dump of all endpoints. It seems odd to have a mptcp-addr-sync method that is per-ifindex, when it needs to dump all addresses. The much more important reason is that the number of endpoints that we can configure in kernel is very limited. So we need to make a choice which endpoints to configure, and for that we need to holistic view that NMPGlobalTracker has. --- src/core/platform/tests/test-common.h | 5 + src/core/platform/tests/test-route.c | 199 ++++++++++++ src/libnm-platform/nmp-global-tracker.c | 394 +++++++++++++++++++++++- src/libnm-platform/nmp-global-tracker.h | 7 + 4 files changed, 590 insertions(+), 15 deletions(-) diff --git a/src/core/platform/tests/test-common.h b/src/core/platform/tests/test-common.h index 77f2c50de0..da30b0ed2f 100644 --- a/src/core/platform/tests/test-common.h +++ b/src/core/platform/tests/test-common.h @@ -518,6 +518,11 @@ void nmtstp_link_delete(NMPlatform *platform, /*****************************************************************************/ +#define nmtst_object_new_mptcp_addr(...) \ + nmp_object_new(NMP_OBJECT_TYPE_MPTCP_ADDR, &((const NMPlatformMptcpAddr){__VA_ARGS__})) + +/*****************************************************************************/ + extern int NMTSTP_ENV1_IFINDEX; extern int NMTSTP_ENV1_EX; diff --git a/src/core/platform/tests/test-route.c b/src/core/platform/tests/test-route.c index f0142fcb5f..061b99a34f 100644 --- a/src/core/platform/tests/test-route.c +++ b/src/core/platform/tests/test-route.c @@ -1961,6 +1961,200 @@ test_blackhole(gconstpointer test_data) /*****************************************************************************/ +static gboolean +_mptcp_has_permissions(void) +{ + static int has_permissions = -1; + int p; + + /* We create a new netns for testing, where we also have CAP_NET_ADMIN. + * However, that is not enough for configuring MPTCP endpoints. Probably + * you can only create them, by running the test as root. Detect the + * inability, to skip the test. + * + * See https://lore.kernel.org/mptcp/20220805115020.525181-1-thaller@redhat.com/T/#u */ + +again: + p = g_atomic_int_get(&has_permissions); + + if (p == -1) { + static gsize lock; + const NMPlatformMptcpAddr mptcp_addr = (NMPlatformMptcpAddr){ + .id = 1, + .addr_family = AF_INET, + .addr.addr4 = nmtst_inet4_from_string("1.2.3.4"), + }; + int r; + + if (!g_once_init_enter(&lock)) + goto again; + + if (nmtst_get_rand_one_case_in(3)) { + gs_unref_ptrarray GPtrArray *arr = NULL; + + arr = nm_platform_mptcp_addrs_dump(NM_PLATFORM_GET); + g_assert_cmpint(nm_g_ptr_array_len(arr), ==, 0); + } + + r = nm_platform_mptcp_addr_update(NM_PLATFORM_GET, TRUE, &mptcp_addr); + if (r == 0) + p = TRUE; + else if (r == -EPERM) + p = FALSE; + else + g_assert_cmpint(r, ==, 0); + + if (p) { + if (nmtst_get_rand_one_case_in(3)) { + gs_unref_ptrarray GPtrArray *arr = NULL; + + arr = nm_platform_mptcp_addrs_dump(NM_PLATFORM_GET); + g_assert_cmpint(nm_g_ptr_array_len(arr), ==, 1); + } + + r = nm_platform_mptcp_addr_update(NM_PLATFORM_GET, FALSE, &mptcp_addr); + g_assert_cmpint(r, ==, 0); + } + + if (nmtst_get_rand_one_case_in(3)) { + gs_unref_ptrarray GPtrArray *arr = NULL; + + arr = nm_platform_mptcp_addrs_dump(NM_PLATFORM_GET); + g_assert_cmpint(nm_g_ptr_array_len(arr), ==, 0); + } + + g_atomic_int_set(&has_permissions, p); + g_once_init_leave(&lock, 1); + } + + return p; +} + +static gboolean +_mptcp_skip_test(void) +{ + if (nm_platform_genl_get_family_id(NM_PLATFORM_GET, NMP_GENL_FAMILY_TYPE_MPTCP_PM) == 0) { + g_test_skip("mptcp not available"); + return TRUE; + } + + if (!_mptcp_has_permissions()) { + g_test_skip("No permissions to create MPTCP endpoints"); + return TRUE; + } + + return FALSE; +} + +static void +test_mptcp(gconstpointer test_data) +{ + const int TEST_IDX = GPOINTER_TO_INT(test_data); + gs_unref_object NMPlatform *platform = g_object_ref(NM_PLATFORM_GET); + nm_auto_unref_global_tracker NMPGlobalTracker *global_tracker = + nmp_global_tracker_new(platform); + gconstpointer const USER_TAG = &TEST_IDX; + const int IFINDEX = nm_platform_link_get_ifindex(platform, DEVICE_NAME); + guint i; + guint j; + int r; + gs_unref_ptrarray GPtrArray *arr_external = + g_ptr_array_new_with_free_func((GDestroyNotify) nmp_object_unref); + gs_unref_ptrarray GPtrArray *arr_tracked = + g_ptr_array_new_with_free_func((GDestroyNotify) nmp_object_unref); + const NMPObject *obj; + gboolean delete_extra; + + g_assert_cmpint(IFINDEX, >, 0); + + if (_mptcp_skip_test()) + return; + + j = nmtst_get_rand_uint32() % 5; + for (i = 0; i < j; i++) { + obj = nmtst_object_new_mptcp_addr(.id = i + 1, + .ifindex = IFINDEX, + .addr_family = AF_INET, + .addr.addr4 = htonl(0xC0A80001u + i)); + g_ptr_array_add(arr_external, (gpointer) obj); + r = nm_platform_mptcp_addr_update(platform, TRUE, NMP_OBJECT_CAST_MPTCP_ADDR(obj)); + g_assert_cmpint(r, ==, 0); + } + + j = nmtst_get_rand_uint32() % 10; + for (i = 0; i < j; i++) { + obj = nmtst_object_new_mptcp_addr(.ifindex = IFINDEX, + .addr_family = AF_INET, + .addr.addr4 = htonl(0xC0A80001u + i)); + g_ptr_array_add(arr_tracked, (gpointer) obj); + nmp_global_tracker_track(global_tracker, + NMP_OBJECT_TYPE_MPTCP_ADDR, + NMP_OBJECT_CAST_MPTCP_ADDR(obj), + 20 - i, + USER_TAG, + NULL); + } + for (i = 0; i < arr_tracked->len;) { + if (nmtst_get_rand_bool()) { + nmp_global_tracker_untrack(global_tracker, + NMP_OBJECT_TYPE_MPTCP_ADDR, + NMP_OBJECT_CAST_MPTCP_ADDR(arr_tracked->pdata[i]), + USER_TAG); + g_ptr_array_remove_index(arr_tracked, i); + } else + i++; + } + + if (arr_tracked->len == 0 || nmtst_get_rand_bool()) { + NMPlatformMptcpAddr a; + + /* Track a dummy object that marks the ifindex as managed. */ + nmp_global_tracker_track(global_tracker, + NMP_OBJECT_TYPE_MPTCP_ADDR, + nmp_global_tracker_mptcp_addr_init_for_ifindex(&a, IFINDEX), + 10, + USER_TAG, + NULL); + } + + nmp_global_tracker_sync_mptcp_addrs(global_tracker, FALSE, FALSE); + + if (nmtst_get_rand_bool()) { + gboolean reapply; + + nmp_global_tracker_untrack_all(global_tracker, USER_TAG, TRUE, FALSE); + reapply = nmtst_get_rand_bool(); + nmp_global_tracker_sync_mptcp_addrs(global_tracker, reapply, FALSE); + + delete_extra = !reapply; + } else + delete_extra = TRUE; + + if (delete_extra) { + gs_unref_ptrarray GPtrArray *arr = NULL; + + /* We need to delete all MPTCP address again, because the next test uses the + * same netns (this test setup doesn't create a netns per test). */ + arr = nm_platform_mptcp_addrs_dump(platform); + for (i = 0; i < nm_g_ptr_array_len(arr); i++) { + r = nm_platform_mptcp_addr_update(platform, + FALSE, + NMP_OBJECT_CAST_MPTCP_ADDR(arr->pdata[i])); + g_assert(NMTST_NM_ERR_SUCCESS(r)); + } + } + + { + gs_unref_ptrarray GPtrArray *arr = NULL; + + arr = nm_platform_mptcp_addrs_dump(platform); + g_assert(arr); + g_assert_cmpint(arr->len, ==, 0); + } +} + +/*****************************************************************************/ + NMTstpSetupFunc const _nmtstp_setup_platform_func = SETUP; void @@ -1975,6 +2169,7 @@ _nmtstp_setup_tests(void) #define add_test_func(testpath, test_func) nmtstp_env1_add_test_func(testpath, test_func, TRUE) #define add_test_func_data(testpath, test_func, arg) \ nmtstp_env1_add_test_func_data(testpath, test_func, arg, TRUE) + add_test_func("/route/ip4", test_ip4_route); add_test_func("/route/ip6", test_ip6_route); add_test_func("/route/ip4_metric0", test_ip4_route_metric0); @@ -2002,4 +2197,8 @@ _nmtstp_setup_tests(void) add_test_func_data("/route/blackhole/1", test_blackhole, GINT_TO_POINTER(1)); add_test_func_data("/route/blackhole/2", test_blackhole, GINT_TO_POINTER(2)); } + if (nmtstp_is_root_test()) { + add_test_func_data("/route/mptcp/1", test_mptcp, GINT_TO_POINTER(1)); + add_test_func_data("/route/mptcp/2", test_mptcp, GINT_TO_POINTER(2)); + } } diff --git a/src/libnm-platform/nmp-global-tracker.c b/src/libnm-platform/nmp-global-tracker.c index c4f50918f8..1f9a6ce2f1 100644 --- a/src/libnm-platform/nmp-global-tracker.c +++ b/src/libnm-platform/nmp-global-tracker.c @@ -11,6 +11,10 @@ #include "libnm-std-aux/c-list-util.h" #include "nmp-object.h" +/* This limit comes from kernel, and it limits the number of MPTCP addresses + * we can configure. */ +#define MPTCP_PM_ADDR_MAX 8 + /*****************************************************************************/ /* NMPGlobalTracker tracks certain objects for the entire network namespace and can @@ -48,7 +52,7 @@ struct _NMPGlobalTracker { GHashTable *by_obj; GHashTable *by_user_tag; GHashTable *by_data; - CList by_obj_lst_heads[3]; + CList by_obj_lst_heads[4]; guint ref_count; }; @@ -93,6 +97,9 @@ typedef struct { guint32 track_priority_val; bool track_priority_present : 1; + /* Calling nmp_global_tracker_track() will ensure that the tracked entry is + * non-dirty. Together with nmp_global_tracker_set_dirty() and nmp_global_tracker_untrack_all()'s + * @all parameter, this can be used to remove stale entries. */ bool dirty : 1; } TrackData; @@ -149,7 +156,7 @@ static void _track_data_untrack(NMPGlobalTracker *self, static CList * _by_obj_lst_head(NMPGlobalTracker *self, NMPObjectType obj_type) { - G_STATIC_ASSERT(G_N_ELEMENTS(self->by_obj_lst_heads) == 3); + G_STATIC_ASSERT(G_N_ELEMENTS(self->by_obj_lst_heads) == 4); switch (obj_type) { case NMP_OBJECT_TYPE_IP4_ROUTE: @@ -158,6 +165,8 @@ _by_obj_lst_head(NMPGlobalTracker *self, NMPObjectType obj_type) return &self->by_obj_lst_heads[1]; case NMP_OBJECT_TYPE_ROUTING_RULE: return &self->by_obj_lst_heads[2]; + case NMP_OBJECT_TYPE_MPTCP_ADDR: + return &self->by_obj_lst_heads[3]; default: return nm_assert_unreachable_val(NULL); } @@ -172,7 +181,8 @@ _track_data_assert(const TrackData *track_data, gboolean linked) nm_assert(NM_IN_SET(NMP_OBJECT_GET_TYPE(track_data->obj), NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE, - NMP_OBJECT_TYPE_ROUTING_RULE)); + NMP_OBJECT_TYPE_ROUTING_RULE, + NMP_OBJECT_TYPE_MPTCP_ADDR)); nm_assert(nmp_object_is_visible(track_data->obj)); nm_assert(track_data->user_tag); nm_assert(!linked || !c_list_is_empty(&track_data->obj_lst)); @@ -296,13 +306,42 @@ _track_data_lookup(GHashTable *by_data, const NMPObject *obj, gconstpointer user /*****************************************************************************/ +static const NMPObject * +_obj_stackinit(NMPObject *obj_stack, NMPObjectType obj_type, gconstpointer obj) +{ + nmp_object_stackinit(obj_stack, obj_type, obj); + + if (NM_MORE_ASSERTS > 10) { + if (obj_type == NMP_OBJECT_TYPE_MPTCP_ADDR) { + NMPlatformMptcpAddr *m = NMP_OBJECT_CAST_MPTCP_ADDR(obj_stack); + NMPlatformMptcpAddr m_dummy; + + /* Only certain MPTCP addresses can be added. */ + nm_assert(m->ifindex > 0); + if (nm_platform_mptcp_addr_cmp( + nmp_global_tracker_mptcp_addr_init_for_ifindex(&m_dummy, m->ifindex), + m) + == 0) { + /* This is a dummy instance. We are good. */ + } else { + nm_assert_addr_family(m->addr_family); + nm_assert(m->port == 0); + nm_assert(m->id == 0); + } + } + } + + nm_assert(nmp_object_is_visible(obj_stack)); + return obj_stack; +} + /** * nmp_global_tracker_track: * @self: the #NMPGlobalTracker instance * @obj_type: the NMPObjectType of @obj that we are tracking. * @obj: the NMPlatformObject (of type NMPObjectType) to track. Usually - * a #NMPlatformRoutingRule, #NMPlatformIP4Route or #NMPlatformIP6Route - * pointer. + * a #NMPlatformRoutingRule, #NMPlatformIP4Route, #NMPlatformIP6Route + * or #NMPlatformMptcpAddr pointer. * @track_priority: the priority for tracking the rule. Note that * negative values indicate a forced absence of the rule. Priorities * are compared with their absolute values (with higher absolute @@ -345,16 +384,15 @@ nmp_global_tracker_track(NMPGlobalTracker *self, /* The route must not be tied to an interface. We can only handle here * blackhole/unreachable/prohibit route types. */ g_return_val_if_fail( - obj_type == NMP_OBJECT_TYPE_ROUTING_RULE + NM_IN_SET(obj_type, NMP_OBJECT_TYPE_ROUTING_RULE, NMP_OBJECT_TYPE_MPTCP_ADDR) || (NM_IN_SET(obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE) && ((const NMPlatformIPRoute *) obj)->ifindex == 0), FALSE); - nm_assert(track_priority != G_MININT32); + /* only positive track priorities are implemented for MPTCP addrs. */ + nm_assert(obj_type != NMP_OBJECT_TYPE_MPTCP_ADDR || track_priority > 0); - p_obj_stack = nmp_object_stackinit(&obj_stack, obj_type, obj); - - nm_assert(nmp_object_is_visible(p_obj_stack)); + p_obj_stack = _obj_stackinit(&obj_stack, obj_type, obj); if (track_priority >= 0) { track_priority_val = track_priority; @@ -512,13 +550,12 @@ nmp_global_tracker_untrack(NMPGlobalTracker *self, nm_assert(NM_IN_SET(obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE, - NMP_OBJECT_TYPE_ROUTING_RULE)); + NMP_OBJECT_TYPE_ROUTING_RULE, + NMP_OBJECT_TYPE_MPTCP_ADDR)); g_return_val_if_fail(obj, FALSE); g_return_val_if_fail(user_tag, FALSE); - p_obj_stack = nmp_object_stackinit(&obj_stack, obj_type, obj); - - nm_assert(nmp_object_is_visible(p_obj_stack)); + p_obj_stack = _obj_stackinit(&obj_stack, obj_type, obj); track_data = _track_data_lookup(self->by_data, p_obj_stack, user_tag); if (track_data) { @@ -584,12 +621,335 @@ nmp_global_tracker_untrack_all(NMPGlobalTracker *self, /*****************************************************************************/ +/* Usually, we track NMPlatformMptcpAddr instances with an ifindex set. + * If we have *any* such instance, we know that the ifindex is fully + * synched (meaning, we will delete all unknown endpoints for that interface). + * However, if we don't have an endpoint on the interface, we may still + * want to track that a certain ifindex is fully managed. + * + * This initializes a dummy instance for exactly that purpose. */ +const NMPlatformMptcpAddr * +nmp_global_tracker_mptcp_addr_init_for_ifindex(NMPlatformMptcpAddr *addr, int ifindex) +{ + nm_assert(addr); + nm_assert(ifindex > 0); + + *addr = (NMPlatformMptcpAddr){ + .ifindex = ifindex, + .addr_family = AF_UNSPEC, + }; + + return addr; +} + +/*****************************************************************************/ + +typedef struct { + TrackObjData *obj_data; + const TrackData *td_best; +} MptcpSyncData; + +static int +_mptcp_entries_cmp(gconstpointer a, gconstpointer b, gpointer user_data) +{ + const MptcpSyncData *d_a = a; + const MptcpSyncData *d_b = b; + + /* 1) prefer addresses based on the priority (highest priority + * sorted first). */ + NM_CMP_FIELD(d_b->td_best, d_a->td_best, track_priority_val); + + /* Finally, we only care about the order in which they were tracked. + * Rely on the stable sort to get that right. */ + return 0; +} + +void +nmp_global_tracker_sync_mptcp_addrs(NMPGlobalTracker *self, gboolean reapply, gboolean keep_deleted) +{ + char sbuf[64 + NM_UTILS_TO_STRING_BUFFER_SIZE]; + gs_unref_ptrarray GPtrArray *kaddrs_arr = NULL; + gs_unref_hashtable GHashTable *kaddrs_idx = NULL; + TrackObjData *obj_data; + TrackObjData *obj_data_safe; + CList *by_obj_lst_head; + const TrackData *td_best; + gs_unref_hashtable GHashTable *handled_ifindexes = NULL; + gs_unref_array GArray *entries = NULL; + gs_unref_hashtable GHashTable *entries_hash_by_addr = NULL; + gs_unref_hashtable GHashTable *entries_to_delete = NULL; + guint i; + guint j; + + g_return_if_fail(NMP_IS_GLOBAL_TRACKER(self)); + + _LOGD("sync mptcp-addr%s%s", + reapply ? " (reapply)" : "", + keep_deleted ? " (keep-deleted)" : ""); + + /* Iterate over the tracked objects and construct @handled_ifindexes, @entries + * and @entries_to_delete. + * - @handled_ifindexes is a hash with all managed interfaces (their ifindex). + * - @entries are the MptcpSyncData instances for the tracked objects. + * - @entries_to_delete are the NMPObject which we added earlier, but now not + * anymore (and which we shall delete). */ + by_obj_lst_head = _by_obj_lst_head(self, NMP_OBJECT_TYPE_MPTCP_ADDR); + c_list_for_each_entry_safe (obj_data, obj_data_safe, by_obj_lst_head, by_obj_lst) { + const NMPlatformMptcpAddr *mptcp_addr = NMP_OBJECT_CAST_MPTCP_ADDR(obj_data->obj); + NMPlatformMptcpAddr xtst; + + nm_assert(mptcp_addr->port == 0); + nm_assert(mptcp_addr->ifindex > 0); + nm_assert(mptcp_addr->id == 0); + nm_assert_addr_family_or_unspec(mptcp_addr->addr_family); + + /* AF_UNSPEC means this is the dummy object. We only care about it to make the + * ifindex as managed via @handled_ifindexes. */ + nm_assert( + (mptcp_addr->addr_family == AF_UNSPEC) + == (nm_platform_mptcp_addr_cmp( + mptcp_addr, + nmp_global_tracker_mptcp_addr_init_for_ifindex(&xtst, mptcp_addr->ifindex)) + == 0)); + + if (reapply) { + /* For a reapply, we clear all configured MPTCP addresses that we no longer + * shall configured, provided they are on one of the ifindexes we care + * about. */ + if (!handled_ifindexes) + handled_ifindexes = g_hash_table_new(nm_direct_hash, NULL); + g_hash_table_add(handled_ifindexes, GINT_TO_POINTER(mptcp_addr->ifindex)); + } + + td_best = _track_obj_data_get_best_data(obj_data); + + if (!td_best) { + nm_assert(obj_data->config_state == CONFIG_STATE_ADDED_BY_US); + + /* This entry is a tombstone, that tells us that added the object earlier. + * We can delete the MPTCP address (if it's still configured). + * + * Then we can drop the tombstone. */ + + if (mptcp_addr->addr_family != AF_UNSPEC) { + if (!reapply) { + if (!entries_to_delete) { + entries_to_delete = g_hash_table_new_full((GHashFunc) nmp_object_id_hash, + (GEqualFunc) nmp_object_id_equal, + (GDestroyNotify) nmp_object_unref, + NULL); + } + g_hash_table_add(entries_to_delete, (gpointer) nmp_object_ref(obj_data->obj)); + } + } + + /* We can forget about this entry now. */ + g_hash_table_remove(self->by_obj, obj_data); + continue; + } + + /* negative and zero track priorities are not implemented (and make no sense?). */ + nm_assert(td_best->track_priority_val > 0); + nm_assert(td_best->track_priority_present); + + if (mptcp_addr->addr_family == AF_UNSPEC) { + /* This is a nmp_global_tracker_mptcp_addr_init_for_ifindex() dummy entry. + * It only exists so we can add the @handled_ifindexes entry above + * and handle addresses on this interface. */ + obj_data->config_state = CONFIG_STATE_ADDED_BY_US; + continue; + } + + if (!entries) + entries = g_array_new(FALSE, FALSE, sizeof(MptcpSyncData)); + + g_array_append_val(entries, + ((const MptcpSyncData){ + .obj_data = obj_data, + .td_best = td_best, + })); + } + /* We collected all the entires we want to configure. Now, sort them by + * priority, and drop all the duplicates (preferring the entries that + * appear first, where first means "older"). In kernel, we can only configure an IP + * address (without port) as endpoint once. If two interfaces provide the same IP + * address, we can only configure one. We need to select one and filter out duplicates. + * While there is no solution, the idea is to select the preferred address + * somewhat consistently. + * + * Also, create a lookup index @entries_hash_by_addr to lookup by address. */ + if (entries) { + /* First we sort the entries by priority, to prefer the ones with higher + * priority. In case of equal priority, we rely on the stable sort to + * preserve the order in which things got tracked. */ + g_array_sort_with_data(entries, _mptcp_entries_cmp, NULL); + + entries_hash_by_addr = g_hash_table_new(nm_platform_mptcp_addr_index_addr_cmp, + nm_platform_mptcp_addr_index_addr_equal); + + /* Now, drop all duplicates addresses. Only keep the first one. */ + for (i = 0, j = 0; i < entries->len; i++) { + const MptcpSyncData *d = nm_g_array_index_p(entries, MptcpSyncData, i); + const NMPlatformMptcpAddr *mptcp_addr = NMP_OBJECT_CAST_MPTCP_ADDR(d->obj_data->obj); + + obj_data = g_hash_table_lookup(entries_hash_by_addr, (gpointer) mptcp_addr); + if (obj_data) { + /* This object is shadowed. We ignore it. + * + * However, we first propagate the config_state. For MPTCP addrs, it can only be + * NONE or ADDED_BY_US. */ + nm_assert(NM_IN_SET(d->obj_data->config_state, + CONFIG_STATE_NONE, + CONFIG_STATE_ADDED_BY_US)); + nm_assert( + NM_IN_SET(obj_data->config_state, CONFIG_STATE_NONE, CONFIG_STATE_ADDED_BY_US)); + + if (d->obj_data->config_state == CONFIG_STATE_ADDED_BY_US) { + obj_data->config_state = CONFIG_STATE_ADDED_BY_US; + d->obj_data->config_state = CONFIG_STATE_NONE; + } + continue; + } + + if (!g_hash_table_insert(entries_hash_by_addr, (gpointer) mptcp_addr, d->obj_data)) + nm_assert_not_reached(); + + if (i != j) + *(nm_g_array_index_p(entries, MptcpSyncData, j)) = *d; + j++; + + if (j >= MPTCP_PM_ADDR_MAX) { + /* Kernel limits the number of addresses we can configure. + * It's hard-coded here, taken from current kernel. Hopefully + * it matches the running kernel. + * + * It's worse. There might be other addresses already configured + * on other interfaces (or with a port). Our sync method will leave + * them alone, as they were not added by us. So the actual limit + * is possibly smaller, and kernel fails with EINVAL. + * + * Still, we definitely need to truncate the list here. Imagine + * during an earlier sync we added MAX addresses on one interface. + * Now, another interface activates, and wants to configure one + * address. That address will get a higher priority (chosen by NML3Cfg), + * so that part is good. However, it means we must drop the last from + * the other MAX addresses. We achieve that by truncating the list + * to MPTCP_PM_ADDR_MAX. + */ + break; + } + } + g_array_set_size(entries, j); + } + + /* Get the list of currently (in kernel) configured MPTCP endpoints. */ + kaddrs_arr = nm_platform_mptcp_addrs_dump(self->platform); + + /* First, delete all kaddrs which we no longer want... */ + if (kaddrs_arr) { + for (i = 0; i < kaddrs_arr->len; i++) { + const NMPObject *obj = kaddrs_arr->pdata[i]; + const NMPlatformMptcpAddr *mptcp_addr = NMP_OBJECT_CAST_MPTCP_ADDR(obj); + + if (mptcp_addr->port != 0 || mptcp_addr->ifindex <= 0) { + /* We ignore all endpoints that have a port or no ifindex. + * Those were never created by us, let the user who created + * them handle them. */ + nm_clear_pointer(&kaddrs_arr->pdata[i], nmp_object_unref); + continue; + } + + if (reapply) { + /* In full-sync-mode, we delete all MPTCP addrs that are for ifindexes + * that we care about. */ + if (!nm_g_hash_table_contains(handled_ifindexes, + GINT_TO_POINTER(mptcp_addr->ifindex))) { + goto index_and_next; + } + } else { + /* Otherwise, we only delete objects that we remember to have + * added earlier. */ + if (!nm_g_hash_table_contains(entries_to_delete, obj)) { + /* This object is not to delete. */ + goto index_and_next; + } + } + + /* We have the object in the delete-list. However, we might still also want + * to add it back. Check for that too. */ + obj_data = nm_g_hash_table_lookup(entries_hash_by_addr, mptcp_addr); + if (obj_data) { + const NMPlatformMptcpAddr *mptcp_addr2 = NMP_OBJECT_CAST_MPTCP_ADDR(obj_data->obj); + + if (mptcp_addr->flags == mptcp_addr2->flags + && mptcp_addr->ifindex == mptcp_addr2->ifindex) { + /* We also want to re-add this very same address. Don't delete it. */ + goto index_and_next; + } + } + + if (keep_deleted) { + _LOGD("forget/leak object added by us: %s \"%s\"", + NMP_OBJECT_GET_CLASS(obj)->obj_type_name, + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + goto index_and_next; + } + + /* This entry is marked for deletion. Delete it. */ + if (nm_platform_object_delete(self->platform, obj)) { + nm_clear_pointer(&kaddrs_arr->pdata[i], nmp_object_unref); + continue; + } + + /* We failed to delete it. It's unclear what is the matter with this + * object. Pretend it doesn't exist (don't add it to kaddrs_idx and + * proceed. */ + nm_clear_pointer(&kaddrs_arr->pdata[i], nmp_object_unref); + continue; + +index_and_next: + _LOGt("keep: %s \"%s\"", + NMP_OBJECT_GET_CLASS(obj)->obj_type_name, + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + if (!kaddrs_idx) { + kaddrs_idx = g_hash_table_new((GHashFunc) nmp_object_id_hash, + (GEqualFunc) nmp_object_id_equal); + } + g_hash_table_add(kaddrs_idx, (gpointer) obj); + } + } + + if (entries) { + for (i = 0; i < entries->len; i++) { + const MptcpSyncData *d = nm_g_array_index_p(entries, MptcpSyncData, i); + const NMPlatformMptcpAddr *mptcp_addr = NMP_OBJECT_CAST_MPTCP_ADDR(d->obj_data->obj); + const NMPObject *kobj; + + d->obj_data->config_state = CONFIG_STATE_ADDED_BY_US; + + kobj = nm_g_hash_table_lookup(kaddrs_idx, d->obj_data->obj); + if (kobj && kobj->mptcp_addr.flags == mptcp_addr->flags) { + /* This address is already added with the right flags. We can + * skip it. */ + continue; + } + + /* Kernel actually only allows us to add a small number of addresses. + * Also, if we have a conflicting address on another interface, the + * request will be rejected. + * + * Don't try to handle that. Just attempt to add the address, and if + * we fail, there is nothing we can do about it. */ + nm_platform_mptcp_addr_update(self->platform, TRUE, mptcp_addr); + } + } +} + void nmp_global_tracker_sync(NMPGlobalTracker *self, NMPObjectType obj_type, gboolean keep_deleted) { char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; const NMDedupMultiHeadEntry *pl_head_entry; - NMDedupMultiIter pl_iter; const NMPObject *plobj; gs_unref_ptrarray GPtrArray *objs_to_delete = NULL; TrackObjData *obj_data; @@ -614,6 +974,8 @@ nmp_global_tracker_sync(NMPGlobalTracker *self, NMPObjectType obj_type, gboolean pl_head_entry = nm_platform_lookup_object(self->platform, obj_type, 0); if (pl_head_entry) { + NMDedupMultiIter pl_iter; + nmp_cache_iter_for_each (&pl_iter, pl_head_entry, &plobj) { obj_data = g_hash_table_lookup(self->by_obj, &plobj); @@ -867,6 +1229,7 @@ nmp_global_tracker_new(NMPlatform *platform) .by_obj_lst_heads[0] = C_LIST_INIT(self->by_obj_lst_heads[0]), .by_obj_lst_heads[1] = C_LIST_INIT(self->by_obj_lst_heads[1]), .by_obj_lst_heads[2] = C_LIST_INIT(self->by_obj_lst_heads[2]), + .by_obj_lst_heads[3] = C_LIST_INIT(self->by_obj_lst_heads[3]), }; return self; } @@ -894,6 +1257,7 @@ nmp_global_tracker_unref(NMPGlobalTracker *self) nm_assert(c_list_is_empty(&self->by_obj_lst_heads[0])); nm_assert(c_list_is_empty(&self->by_obj_lst_heads[1])); nm_assert(c_list_is_empty(&self->by_obj_lst_heads[2])); + nm_assert(c_list_is_empty(&self->by_obj_lst_heads[3])); g_object_unref(self->platform); nm_g_slice_free(self); } diff --git a/src/libnm-platform/nmp-global-tracker.h b/src/libnm-platform/nmp-global-tracker.h index 61a4c1eb58..3cb45f831b 100644 --- a/src/libnm-platform/nmp-global-tracker.h +++ b/src/libnm-platform/nmp-global-tracker.h @@ -74,6 +74,13 @@ gboolean nmp_global_tracker_untrack_all(NMPGlobalTracker *self, void nmp_global_tracker_sync(NMPGlobalTracker *self, NMPObjectType obj_type, gboolean keep_deleted); +void nmp_global_tracker_sync_mptcp_addrs(NMPGlobalTracker *self, + gboolean reapply, + gboolean keep_deleted); + /*****************************************************************************/ +const NMPlatformMptcpAddr *nmp_global_tracker_mptcp_addr_init_for_ifindex(NMPlatformMptcpAddr *addr, + int ifindex); + #endif /* __NMP_GLOBAL_TRACKER_H__ */ From eb083eece5a2a7f080d7cf708698c70fe6ec6b22 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 18 Jul 2022 21:24:09 +0200 Subject: [PATCH 20/21] all: add NMMptcpFlags and connection.mptcp-flags property --- man/NetworkManager.conf.xml | 4 + src/core/devices/nm-device.c | 55 +- src/core/nm-l3-config-data.c | 41 ++ src/core/nm-l3-config-data.h | 4 + src/core/nm-l3cfg.c | 309 +++++++- .../plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 5 + .../plugins/ifcfg-rh/nms-ifcfg-rh-utils.c | 1 + .../plugins/ifcfg-rh/nms-ifcfg-rh-utils.h | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 5 + src/libnm-client-impl/libnm.ver | 1 + .../nm-libnm-core-utils.c | 33 + .../nm-libnm-core-utils.h | 16 + src/libnm-core-impl/nm-setting-connection.c | 185 +++++ src/libnm-core-impl/tests/test-general.c | 1 + src/libnm-core-public/nm-dbus-interface.h | 62 ++ src/libnm-core-public/nm-setting-connection.h | 4 + src/libnmc-setting/nm-meta-setting-desc.c | 15 + src/libnmc-setting/settings-docs.h.in | 1 + .../generate-docs-nm-settings-nmcli.xml.in | 2 + .../test_002.expected | 10 +- .../test_003.expected | 538 ++++++++------ .../test_004.expected | 678 ++++++++++-------- 22 files changed, 1424 insertions(+), 548 deletions(-) diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index 9be7a69e91..1b917c1740 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -854,6 +854,10 @@ ipv6.ip6-privacy=0 connection.mdns If unspecified, the ultimate default values depends on the DNS plugin. With systemd-resolved the default currently is "no" (0) and for all other plugins also "no" (0). + + connection.mptcp-flags + If unspecified, the fallback is either 0 ("disabled") or 0x22 ("enabled-on-global-iface,subflow"), depending on /proc/sys/net/mptcp/enabled. + connection.dns-over-tls If unspecified, the ultimate default values depends on the DNS plugin. With systemd-resolved the default currently is global setting and for all other plugins "no" (0). diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 676d08d983..bff1e74eba 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -1398,6 +1398,56 @@ _prop_get_connection_dns_over_tls(NMDevice *self) NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT); } +static NMMptcpFlags +_prop_get_connection_mptcp_flags(NMDevice *self) +{ + NMConnection *connection; + NMMptcpFlags mptcp_flags = NM_MPTCP_FLAGS_NONE; + + g_return_val_if_fail(NM_IS_DEVICE(self), NM_MPTCP_FLAGS_DISABLED); + + connection = nm_device_get_applied_connection(self); + if (connection) { + mptcp_flags = + nm_setting_connection_get_mptcp_flags(nm_connection_get_setting_connection(connection)); + if (mptcp_flags != NM_MPTCP_FLAGS_NONE) + mptcp_flags = nm_mptcp_flags_normalize(mptcp_flags); + } + + if (mptcp_flags == NM_MPTCP_FLAGS_NONE) { + guint64 v; + + v = nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, + NM_CON_DEFAULT("connection.mptcp-flags"), + self, + 0, + G_MAXINT64, + NM_MPTCP_FLAGS_NONE); + /* We filter out all invalid settings and accept it. Somewhat intentionally, we don't do a + * strict parsing of the value to support forward compatibility. */ + if (v != NM_MPTCP_FLAGS_NONE) + mptcp_flags = nm_mptcp_flags_normalize(v); + } + + if (mptcp_flags == NM_MPTCP_FLAGS_NONE) { + gint32 v; + + v = nm_platform_sysctl_get_int32(nm_device_get_platform(self), + NMP_SYSCTL_PATHID_ABSOLUTE("/proc/sys/net/mptcp/enabled"), + -1); + if (v > 0) { + /* if MPTCP is enabled via the sysctl, we use the default. */ + mptcp_flags = _NM_MPTCP_FLAGS_DEFAULT; + } else + mptcp_flags = NM_MPTCP_FLAGS_DISABLED; + } + + nm_assert(mptcp_flags != NM_MPTCP_FLAGS_NONE + && mptcp_flags == nm_mptcp_flags_normalize(mptcp_flags)); + + return mptcp_flags; +} + static guint32 _prop_get_ipvx_route_table(NMDevice *self, int addr_family) { @@ -2773,6 +2823,7 @@ nm_device_create_l3_config_data_from_connection(NMDevice *self, NMConnection *co nm_l3_config_data_set_llmnr(l3cd, _prop_get_connection_llmnr(self)); nm_l3_config_data_set_dns_over_tls(l3cd, _prop_get_connection_dns_over_tls(self)); nm_l3_config_data_set_ip6_privacy(l3cd, _prop_get_ipv6_ip6_privacy(self)); + nm_l3_config_data_set_mptcp_flags(l3cd, _prop_get_connection_mptcp_flags(self)); return l3cd; } @@ -12662,6 +12713,7 @@ can_reapply_change(NMDevice *self, NM_SETTING_CONNECTION_MDNS, NM_SETTING_CONNECTION_LLMNR, NM_SETTING_CONNECTION_DNS_OVER_TLS, + NM_SETTING_CONNECTION_MPTCP_FLAGS, NM_SETTING_CONNECTION_WAIT_ACTIVATION_DELAY); } @@ -12878,7 +12930,8 @@ check_and_reapply_connection(NMDevice *self, NM_SETTING_CONNECTION_LLDP, NM_SETTING_CONNECTION_MDNS, NM_SETTING_CONNECTION_LLMNR, - NM_SETTING_CONNECTION_DNS_OVER_TLS)) { + NM_SETTING_CONNECTION_DNS_OVER_TLS, + NM_SETTING_CONNECTION_MPTCP_FLAGS)) { priv->ip_data_4.do_reapply = TRUE; priv->ip_data_6.do_reapply = TRUE; } diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 54934fe1de..bcd0b62a84 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -149,6 +149,8 @@ struct _NML3ConfigData { NMSettingIP6ConfigPrivacy ip6_privacy : 4; + NMMptcpFlags mptcp_flags : 18; + bool is_sealed : 1; bool has_routes_with_type_local_4_set : 1; @@ -582,6 +584,16 @@ nm_l3_config_data_log(const NML3ConfigData *self, NULL))); } + if (self->mptcp_flags != NM_MPTCP_FLAGS_NONE) { + gs_free char *s = NULL; + + _L("mptcp-flags: %s", + (s = _nm_utils_enum_to_str_full(nm_mptcp_flags_get_type(), + self->mptcp_flags, + " ", + NULL))); + } + if (self->ip6_token.id != 0) { _L("ipv6-token: %s", nm_utils_inet6_interface_identifier_to_token(&self->ip6_token, sbuf_addr)); @@ -694,6 +706,7 @@ nm_l3_config_data_new(NMDedupMultiIndex *multi_idx, int ifindex, NMIPConfigSourc .never_default_4 = NM_OPTION_BOOL_DEFAULT, .source = source, .ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN, + .mptcp_flags = NM_MPTCP_FLAGS_NONE, .ndisc_hop_limit_set = FALSE, .ndisc_reachable_time_msec_set = FALSE, .ndisc_retrans_timer_msec_set = FALSE, @@ -1875,6 +1888,30 @@ nm_l3_config_data_set_ip6_token(NML3ConfigData *self, NMUtilsIPv6IfaceId ipv6_to return TRUE; } +NMMptcpFlags +nm_l3_config_data_get_mptcp_flags(const NML3ConfigData *self) +{ + nm_assert(!self || _NM_IS_L3_CONFIG_DATA(self, TRUE)); + + if (!self) + return NM_MPTCP_FLAGS_NONE; + + return self->mptcp_flags; +} + +gboolean +nm_l3_config_data_set_mptcp_flags(NML3ConfigData *self, NMMptcpFlags mptcp_flags) +{ + nm_assert(_NM_IS_L3_CONFIG_DATA(self, FALSE)); + nm_assert(!NM_FLAGS_ANY(mptcp_flags, ~_NM_MPTCP_FLAGS_ALL)); + + if (self->mptcp_flags == mptcp_flags) + return FALSE; + self->mptcp_flags = mptcp_flags; + nm_assert(self->mptcp_flags == mptcp_flags); + return TRUE; +} + NMProxyConfigMethod nm_l3_config_data_get_proxy_method(const NML3ConfigData *self) { @@ -2324,6 +2361,7 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a, NM_CMP_DIRECT_REF_STRING(a->proxy_pac_url, b->proxy_pac_url); NM_CMP_DIRECT_REF_STRING(a->proxy_pac_script, b->proxy_pac_script); NM_CMP_DIRECT_UNSAFE(a->ip6_privacy, b->ip6_privacy); + NM_CMP_DIRECT_UNSAFE(a->mptcp_flags, b->mptcp_flags); NM_CMP_DIRECT_UNSAFE(a->ndisc_hop_limit_set, b->ndisc_hop_limit_set); if (a->ndisc_hop_limit_set) @@ -3242,6 +3280,9 @@ nm_l3_config_data_merge(NML3ConfigData *self, if (self->ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN) self->ip6_privacy = src->ip6_privacy; + if (self->mptcp_flags == NM_MPTCP_FLAGS_NONE) + self->mptcp_flags = src->mptcp_flags; + if (!self->ndisc_hop_limit_set && src->ndisc_hop_limit_set) { self->ndisc_hop_limit_set = TRUE; self->ndisc_hop_limit_val = src->ndisc_hop_limit_val; diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index 20a32c62aa..ca42d4a104 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -487,6 +487,10 @@ NMUtilsIPv6IfaceId nm_l3_config_data_get_ip6_token(const NML3ConfigData *self); gboolean nm_l3_config_data_set_ip6_token(NML3ConfigData *self, NMUtilsIPv6IfaceId ipv6_token); +NMMptcpFlags nm_l3_config_data_get_mptcp_flags(const NML3ConfigData *self); + +gboolean nm_l3_config_data_set_mptcp_flags(NML3ConfigData *self, NMMptcpFlags mptcp_flags); + const in_addr_t *nm_l3_config_data_get_wins(const NML3ConfigData *self, guint *out_len); gboolean nm_l3_config_data_add_wins(NML3ConfigData *self, in_addr_t wins); diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 839aacb853..703ec1484c 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4,6 +4,8 @@ #include "nm-l3cfg.h" +#include "libnm-std-aux/nm-linux-compat.h" + #include #include #include @@ -270,6 +272,15 @@ typedef struct _NML3CfgPrivate { NMIPConfig *ipconfig_x[2]; }; + /* Whether we earlier configured MPTCP endpoints for the interface. */ + union { + struct { + bool mptcp_set_6; + bool mptcp_set_4; + }; + bool mptcp_set_x[2]; + }; + /* This is for rate-limiting the creation of nacd instance. */ GSource *nacd_instance_ensure_retry; @@ -311,6 +322,9 @@ typedef struct _NML3CfgPrivate { bool changed_configs_configs : 1; bool changed_configs_acd_state : 1; + + bool rp_filter_handled : 1; + bool rp_filter_set : 1; } NML3CfgPrivate; struct _NML3CfgClass { @@ -321,6 +335,13 @@ G_DEFINE_TYPE(NML3Cfg, nm_l3cfg, G_TYPE_OBJECT) /*****************************************************************************/ +#define _NODEV_ROUTES_TAG(self, IS_IPv4) \ + ((gconstpointer) (&(((const char *) (self))[0 + (!(IS_IPv4))]))) + +#define _MPTCP_TAG(self, IS_IPv4) ((gconstpointer) (&(((const char *) (self))[2 + (!(IS_IPv4))]))) + +/*****************************************************************************/ + #define _NMLOG_DOMAIN LOGD_CORE #define _NMLOG_PREFIX_NAME "l3cfg" #define _NMLOG(level, ...) \ @@ -3450,9 +3471,6 @@ nm_l3cfg_remove_config_all_dirty(NML3Cfg *self, gconstpointer tag) /*****************************************************************************/ -#define _NODEV_ROUTES_TAG(self, IS_IPv4) \ - ((gconstpointer) (&(&(self)->priv.global_tracker)[IS_IPv4])) - static gboolean _nodev_routes_untrack(NML3Cfg *self, int addr_family) { @@ -3492,10 +3510,11 @@ out_clear: if (_nodev_routes_untrack(self, addr_family)) changed = TRUE; - if (changed || commit_type >= NM_L3_CFG_COMMIT_TYPE_REAPPLY) + if (changed || commit_type >= NM_L3_CFG_COMMIT_TYPE_REAPPLY) { nmp_global_tracker_sync(self->priv.global_tracker, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4), FALSE); + } } /*****************************************************************************/ @@ -4184,6 +4203,277 @@ _l3_commit_ip6_token(NML3Cfg *self, NML3CfgCommitType commit_type) } } +/*****************************************************************************/ + +static void +_rp_filter_update(NML3Cfg *self, gboolean reapply) +{ + gboolean rp_filter_relax = FALSE; + const char *ifname; + int rf_val; + + /* The rp_filter sysctl is only an IPv4 thing. We only enable the rp-filter + * handling, if we did anything to MPTCP about IPv4 addresses. + * + * While we only have one "connection.mptcp-flags=enabled" property, whether + * we handle MPTCP is still tracked per AF. In particular, with "enabled-on-global-iface" + * flag, which honors the AF-specific default route. */ + if (self->priv.p->mptcp_set_4 && self->priv.p->combined_l3cd_commited + && !NM_FLAGS_HAS(nm_l3_config_data_get_mptcp_flags(self->priv.p->combined_l3cd_commited), + NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER)) { + rp_filter_relax = TRUE; + } + + if (!rp_filter_relax) { + if (self->priv.p->rp_filter_handled) { + self->priv.p->rp_filter_handled = FALSE; + if (self->priv.p->rp_filter_set) { + self->priv.p->rp_filter_set = FALSE; + + ifname = nm_l3cfg_get_ifname(self, TRUE); + rf_val = nm_platform_sysctl_ip_conf_get_rp_filter_ipv4(self->priv.platform, + ifname, + FALSE, + NULL); + if (rf_val == 2) { + /* We only relaxed from 1 to 2. Only if that is still the case, reset. */ + nm_platform_sysctl_ip_conf_set(self->priv.platform, + AF_INET, + ifname, + "rp_filter", + "1"); + } + } + } + return; + } + + if (self->priv.p->rp_filter_handled && !reapply) { + /* We only set rp_filter once (except reapply). */ + return; + } + + /* No matter whether we actually reset the value below, we set the "handled" flag + * so that we only do this once (except during reapply). */ + self->priv.p->rp_filter_handled = TRUE; + + ifname = nm_l3cfg_get_ifname(self, TRUE); + + rf_val = + nm_platform_sysctl_ip_conf_get_rp_filter_ipv4(self->priv.platform, ifname, FALSE, NULL); + + if (rf_val != 1) { + /* We only relax from strict (1) to loose (2). No other transition. Nothing to do. */ + return; + } + + /* We actually loosen the flag. We need to remember to reset it. */ + self->priv.p->rp_filter_set = TRUE; + nm_platform_sysctl_ip_conf_set(self->priv.platform, AF_INET, ifname, "rp_filter", "2"); +} + +/*****************************************************************************/ + +static gboolean +_global_tracker_mptcp_untrack(NML3Cfg *self, int addr_family) +{ + return nmp_global_tracker_untrack_all(self->priv.global_tracker, + _MPTCP_TAG(self, NM_IS_IPv4(addr_family)), + FALSE, + TRUE); +} + +static gboolean +_l3_commit_mptcp_af(NML3Cfg *self, + NML3CfgCommitType commit_type, + int addr_family, + gboolean *out_reapply) +{ + const int IS_IPv4 = NM_IS_IPv4(addr_family); + NMMptcpFlags mptcp_flags; + gboolean reapply = FALSE; + gboolean changed = FALSE; + + nm_assert(NM_IS_L3CFG(self)); + nm_assert(NM_IN_SET(commit_type, + NM_L3_CFG_COMMIT_TYPE_NONE, + NM_L3_CFG_COMMIT_TYPE_REAPPLY, + NM_L3_CFG_COMMIT_TYPE_UPDATE)); + + if (commit_type >= NM_L3_CFG_COMMIT_TYPE_REAPPLY) + reapply = TRUE; + + if (commit_type != NM_L3_CFG_COMMIT_TYPE_NONE && self->priv.p->combined_l3cd_commited) + mptcp_flags = nm_l3_config_data_get_mptcp_flags(self->priv.p->combined_l3cd_commited); + else + mptcp_flags = NM_MPTCP_FLAGS_DISABLED; + + if (mptcp_flags == NM_MPTCP_FLAGS_NONE || NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_DISABLED)) + mptcp_flags = NM_MPTCP_FLAGS_DISABLED; + else if (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE)) { + /* Whether MPTCP is enabled/disabled, depends on whether we have a unicast default + * route (in the main routing table). */ + if (self->priv.p->combined_l3cd_commited + && nm_l3_config_data_get_best_default_route(self->priv.p->combined_l3cd_commited, + addr_family)) + mptcp_flags = NM_FLAGS_UNSET(mptcp_flags, NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE) + | NM_MPTCP_FLAGS_ENABLED; + else + mptcp_flags = NM_MPTCP_FLAGS_DISABLED; + } else + mptcp_flags |= NM_MPTCP_FLAGS_ENABLED; + + if (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_DISABLED)) { + if (!self->priv.p->mptcp_set_x[IS_IPv4] && !reapply) { + /* Nothing to configure, and we did not earlier configure MPTCP. Nothing to do. */ + NM_SET_OUT(out_reapply, FALSE); + return FALSE; + } + + self->priv.p->mptcp_set_x[IS_IPv4] = FALSE; + reapply = TRUE; + } else { + const NMPlatformIPXAddress *addr; + NMDedupMultiIter iter; + const guint32 FLAGS = + (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_SIGNAL) ? MPTCP_PM_ADDR_FLAG_SIGNAL : 0) + | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_SUBFLOW) ? MPTCP_PM_ADDR_FLAG_SUBFLOW : 0) + | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_BACKUP) ? MPTCP_PM_ADDR_FLAG_BACKUP : 0) + | (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_FULLMESH) ? MPTCP_PM_ADDR_FLAG_FULLMESH + : 0); + NMPlatformMptcpAddr a = { + .ifindex = self->priv.ifindex, + .id = 0, + .flags = FLAGS, + .addr_family = addr_family, + .port = 0, + }; + gboolean any_tracked = FALSE; + + self->priv.p->mptcp_set_x[IS_IPv4] = TRUE; + + if (self->priv.p->combined_l3cd_commited) { + gint32 addr_prio; + + addr_prio = 100; + + nm_l3_config_data_iter_ip_address_for_each (&iter, + self->priv.p->combined_l3cd_commited, + addr_family, + (const NMPlatformIPAddress **) &addr) { + /* We want to evaluate the with-{loopback,link_local}-{4,6} flags based on the actual + * ifa_scope that the address will have once we configure it. + * "addr" is an address we want to configure, we expect that it will + * later have the scope nm_platform_ip_address_get_scope() based on + * the address. */ + switch (nm_platform_ip_address_get_scope(addr_family, addr->ax.address_ptr)) { + case RT_SCOPE_HOST: + if (!NM_FLAGS_ANY(mptcp_flags, + IS_IPv4 ? NM_MPTCP_FLAGS_WITH_LOOPBACK_4 + : NM_MPTCP_FLAGS_WITH_LOOPBACK_6)) + goto skip_addr; + break; + case RT_SCOPE_LINK: + if (!NM_FLAGS_ANY(mptcp_flags, + IS_IPv4 ? NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4 + : NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6)) + goto skip_addr; + break; + default: + if (IS_IPv4) { + if (nm_utils_ip_is_site_local(AF_INET, &addr->a4.address)) { + /* By default we take rfc1918 private addresses, unless there + * is a flag to opt-out. */ + if (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4)) + goto skip_addr; + } else { + /* other addresses we take. */ + } + } else { + if (nm_utils_ip6_is_ula(&addr->a6.address)) { + /* Special treatment for unique local IPv6 addresses fc00::/7. */ + if (!NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6)) + goto skip_addr; + } else { + /* We take all other addresses, including deprecated IN6_IS_ADDR_SITELOCAL() + * (fec0::/10). */ + } + } + break; + } + + a.addr = nm_ip_addr_init(addr_family, addr->ax.address_ptr); + + /* We track the address with different priorities, that depends + * on the order in which they are listed here. NMPGlobalTracker + * will sort all tracked addresses by priority. That means, if we + * have multiple interfaces then we will prefer the first address + * of those interfaces, then the second, etc. + * + * That is relevant, because the overall number of addresses we + * can configure in kernel is strongly limited (MPTCP_PM_ADDR_MAX). */ + if (addr_prio > 10) + addr_prio--; + + if (nmp_global_tracker_track(self->priv.global_tracker, + NMP_OBJECT_TYPE_MPTCP_ADDR, + &a, + addr_prio, + _MPTCP_TAG(self, IS_IPv4), + NULL)) + changed = TRUE; + + any_tracked = TRUE; + +skip_addr: + (void) 0; + } + } + + if (!any_tracked) { + /* We need to make it known that this ifindex is used. Track a dummy object. */ + if (nmp_global_tracker_track( + self->priv.global_tracker, + NMP_OBJECT_TYPE_MPTCP_ADDR, + nmp_global_tracker_mptcp_addr_init_for_ifindex(&a, self->priv.ifindex), + 1, + _MPTCP_TAG(self, IS_IPv4), + NULL)) + changed = TRUE; + } + } + + if (_global_tracker_mptcp_untrack(self, addr_family)) + changed = TRUE; + + NM_SET_OUT(out_reapply, reapply); + return changed || reapply; +} + +static void +_l3_commit_mptcp(NML3Cfg *self, NML3CfgCommitType commit_type) +{ + gboolean changed = FALSE; + gboolean reapply = FALSE; + gboolean i_reapply = FALSE; + + if (_l3_commit_mptcp_af(self, commit_type, AF_INET, &i_reapply)) + changed = TRUE; + reapply |= i_reapply; + if (_l3_commit_mptcp_af(self, commit_type, AF_INET6, &i_reapply)) + changed = TRUE; + reapply |= i_reapply; + + nm_assert(commit_type < NM_L3_CFG_COMMIT_TYPE_REAPPLY || reapply); + + if (changed) + nmp_global_tracker_sync_mptcp_addrs(self->priv.global_tracker, reapply, FALSE); + else + nm_assert(!reapply); + + _rp_filter_update(self, reapply); +} + static gboolean _l3_commit_one(NML3Cfg *self, int addr_family, @@ -4382,6 +4672,8 @@ _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is_idle) _l3_commit_one(self, AF_INET, commit_type, changed_combined_l3cd, l3cd_old); _l3_commit_one(self, AF_INET6, commit_type, changed_combined_l3cd, l3cd_old); + _l3_commit_mptcp(self, commit_type); + _l3_acd_data_process_changes(self); if (self->priv.p->l3_config_datas) { @@ -4790,6 +5082,7 @@ static void finalize(GObject *object) { NML3Cfg *self = NM_L3CFG(object); + gboolean changed; nm_assert(!self->priv.p->ipconfig_4); nm_assert(!self->priv.p->ipconfig_6); @@ -4827,6 +5120,14 @@ finalize(GObject *object) if (_nodev_routes_untrack(self, AF_INET6)) nmp_global_tracker_sync(self->priv.global_tracker, NMP_OBJECT_TYPE_IP6_ROUTE, FALSE); + changed = FALSE; + if (_global_tracker_mptcp_untrack(self, AF_INET)) + changed = TRUE; + if (_global_tracker_mptcp_untrack(self, AF_INET6)) + changed = TRUE; + if (changed) + nmp_global_tracker_sync_mptcp_addrs(self->priv.global_tracker, FALSE, FALSE); + g_clear_object(&self->priv.netns); g_clear_object(&self->priv.platform); nm_clear_pointer(&self->priv.global_tracker, nmp_global_tracker_unref); diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 42c18ad62b..6452d72a48 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -645,6 +645,11 @@ make_connection_setting(const char *file, PARSE_WARNING("invalid DNS_OVER_TLS setting"); g_object_set(s_con, NM_SETTING_CONNECTION_DNS_OVER_TLS, i_val, NULL); + i_val = NM_MPTCP_FLAGS_NONE; + if (!svGetValueEnum(ifcfg, "MPTCP_FLAGS", nm_mptcp_flags_get_type(), &i_val, NULL)) + PARSE_WARNING("invalid MPTCP_FLAGS setting"); + g_object_set(s_con, NM_SETTING_CONNECTION_MPTCP_FLAGS, (guint) i_val, NULL); + vint32 = svGetValueInt64(ifcfg, "WAIT_ACTIVATION_DELAY", 10, -1, G_MAXINT32, -1); g_object_set(s_con, NM_SETTING_CONNECTION_WAIT_ACTIVATION_DELAY, (int) vint32, NULL); diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c index a8f2a95c8a..e1ef817478 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c @@ -1006,6 +1006,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = { _KEY_TYPE("MDNS", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("METRIC", NMS_IFCFG_KEY_TYPE_IS_NUMBERED), _KEY_TYPE("MODE", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("MPTCP_FLAGS", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("MTU", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("MUD_URL", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("MULTI_CONNECT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h index 3a49f09b2f..d1f8dbad9c 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h @@ -33,7 +33,7 @@ typedef struct { NMSIfcfgKeyTypeFlags key_flags; } NMSIfcfgKeyTypeInfo; -extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[255]; +extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[256]; const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info(const char *key, gssize *out_idx); diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index 7a1b82b1e1..96efc9e5d7 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -2095,6 +2095,7 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg) NMSettingConnectionMdns mdns; NMSettingConnectionLlmnr llmnr; NMSettingConnectionDnsOverTls dns_over_tls; + NMMptcpFlags mptcp_flags; guint32 vuint32; const char *tmp, *mud_url; @@ -2289,6 +2290,10 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg) nm_setting_connection_dns_over_tls_get_type(), dns_over_tls); } + + mptcp_flags = nm_setting_connection_get_mptcp_flags(s_con); + if (mptcp_flags != NM_MPTCP_FLAGS_NONE) + svSetValueEnum(ifcfg, "MPTCP_FLAGS", nm_mptcp_flags_get_type(), mptcp_flags); } static char * diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver index 0c4cec65c5..e414b7e64d 100644 --- a/src/libnm-client-impl/libnm.ver +++ b/src/libnm-client-impl/libnm.ver @@ -1839,6 +1839,7 @@ global: libnm_1_40_0 { global: nm_conn_wireguard_import; + nm_mptcp_flags_get_type; nm_setting_connection_get_wait_activation_delay; nm_setting_ip4_link_local_get_type; nm_setting_ip6_config_get_mtu; diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.c b/src/libnm-core-aux-intern/nm-libnm-core-utils.c index 1f2d687590..ba05b6cd48 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.c +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.c @@ -493,3 +493,36 @@ _nm_connection_new_setting(NMConnection *connection, GType gtype) nm_connection_add_setting(connection, setting); return setting; } + +/*****************************************************************************/ + +NMMptcpFlags +nm_mptcp_flags_normalize(NMMptcpFlags flags) +{ + /* Certain combinations of flags are incompatible. Normalize them. + * + * This function never returns 0x0 (NONE). If the flags are neither + * disabled,enabled-on-global-iface,enabled, then we default to "enabled". */ + + if (NM_FLAGS_HAS(flags, NM_MPTCP_FLAGS_DISABLED)) { + /* If the disabled flag is set, then that's the end of it. */ + return NM_MPTCP_FLAGS_DISABLED; + } + + /* Clear all unknown flags. */ + flags &= _NM_MPTCP_FLAGS_ALL; + + /* We must either set "enabled-on-global-iface" or "enabled". The + * former takes precedence, if they are both set. + * + * If neither is set, we default to "enabled". */ + if (NM_FLAGS_HAS(flags, NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE)) + flags = NM_FLAGS_UNSET(flags, NM_MPTCP_FLAGS_ENABLED); + else + flags = NM_FLAGS_SET(flags, NM_MPTCP_FLAGS_ENABLED); + + if (NM_FLAGS_ALL(flags, NM_MPTCP_FLAGS_SIGNAL | NM_MPTCP_FLAGS_FULLMESH)) + flags = NM_FLAGS_UNSET(flags, NM_MPTCP_FLAGS_FULLMESH); + + return flags; +} diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.h b/src/libnm-core-aux-intern/nm-libnm-core-utils.h index 2c3ee78d2a..daa55bda48 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h @@ -267,4 +267,20 @@ gboolean nm_settings_connection_validate_permission_user(const char *item, gssiz gpointer _nm_connection_ensure_setting(NMConnection *connection, GType gtype); gpointer _nm_connection_new_setting(NMConnection *connection, GType gtype); +/*****************************************************************************/ + +#define _NM_MPTCP_FLAGS_ALL \ + ((NMMptcpFlags) (NM_MPTCP_FLAGS_DISABLED | NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE \ + | NM_MPTCP_FLAGS_ENABLED | NM_MPTCP_FLAGS_SIGNAL | NM_MPTCP_FLAGS_SUBFLOW \ + | NM_MPTCP_FLAGS_BACKUP | NM_MPTCP_FLAGS_FULLMESH \ + | NM_MPTCP_FLAGS_WITH_LOOPBACK_4 | NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4 \ + | NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4 | NM_MPTCP_FLAGS_WITH_LOOPBACK_6 \ + | NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6 | NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6 \ + | NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER)) + +#define _NM_MPTCP_FLAGS_DEFAULT \ + ((NMMptcpFlags) (NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE | NM_MPTCP_FLAGS_SUBFLOW)) + +NMMptcpFlags nm_mptcp_flags_normalize(NMMptcpFlags flags); + #endif /* __NM_LIBNM_SHARED_UTILS_H__ */ diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index 987c4fa041..cc87cb82b5 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -65,6 +65,7 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingConnection, PROP_MDNS, PROP_LLMNR, PROP_DNS_OVER_TLS, + PROP_MPTCP_FLAGS, PROP_STABLE_ID, PROP_AUTH_RETRIES, PROP_WAIT_DEVICE_TIMEOUT, @@ -96,6 +97,7 @@ typedef struct { gint32 wait_device_timeout; gint32 lldp; gint32 wait_activation_delay; + guint32 mptcp_flags; guint32 gateway_ping_timeout; bool autoconnect; bool read_only; @@ -1015,6 +1017,22 @@ nm_setting_connection_get_dns_over_tls(NMSettingConnection *setting) return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->dns_over_tls; } +/** + * nm_setting_connection_get_mptcp_flags: + * @setting: the #NMSettingConnection + * + * Returns: the #NMSettingConnection:mptcp-flags property of the setting. + * + * Since: 1.40 + **/ +NMMptcpFlags +nm_setting_connection_get_mptcp_flags(NMSettingConnection *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), NM_MPTCP_FLAGS_NONE); + + return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->mptcp_flags; +} + static void _set_error_missing_base_setting(GError **error, const char *type) { @@ -1367,6 +1385,64 @@ after_interface_name: return FALSE; } + if (priv->mptcp_flags != 0) { + if (NM_FLAGS_HAS(priv->mptcp_flags, NM_MPTCP_FLAGS_DISABLED)) { + if (priv->mptcp_flags != NM_MPTCP_FLAGS_DISABLED) { + g_set_error_literal( + error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("\"disabled\" flag cannot be combined with other MPTCP flags")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_CONNECTION_SETTING_NAME, + NM_SETTING_CONNECTION_MPTCP_FLAGS); + return FALSE; + } + } else { + guint32 f; + + if (NM_FLAGS_ALL(priv->mptcp_flags, + NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE | NM_MPTCP_FLAGS_ENABLED)) { + g_set_error_literal( + error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("\"enabled\" and \"enabled-on-global-iface\" flag cannot be set together")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_CONNECTION_SETTING_NAME, + NM_SETTING_CONNECTION_MPTCP_FLAGS); + return FALSE; + } + if (NM_FLAGS_ALL(priv->mptcp_flags, NM_MPTCP_FLAGS_SIGNAL | NM_MPTCP_FLAGS_FULLMESH)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("cannot set both \"signal\" and \"fullmesh\" MPTCP flags")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_CONNECTION_SETTING_NAME, + NM_SETTING_CONNECTION_MPTCP_FLAGS); + return FALSE; + } + f = NM_FLAGS_UNSET(priv->mptcp_flags, NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE) + | ((guint32) NM_MPTCP_FLAGS_ENABLED); + if (f != nm_mptcp_flags_normalize(f)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("value %u is not a valid combination of MPTCP flags"), + priv->mptcp_flags); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_CONNECTION_SETTING_NAME, + NM_SETTING_CONNECTION_MPTCP_FLAGS); + return FALSE; + } + } + } + if (!NM_IN_SET(priv->multi_connect, (int) NM_CONNECTION_MULTI_CONNECT_DEFAULT, (int) NM_CONNECTION_MULTI_CONNECT_SINGLE, @@ -2483,6 +2559,115 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) NMSettingConnectionPrivate, dns_over_tls); + /* Notes about "mptcp-flags": + * + * It is a bit odd that NMMptcpFlags mixes flags with different purposes: + * + * - "disabled", "disabled-on-local-iface", "enable": whether MPTCP handling + * is enabled. The flag "disabled-on-local-iface" enables it based on whether + * the interface has a default route. + * - "signal", "subflow", "backup", "fullmesh": the endpoint flags + * that are used. + * - "with-loopback-4", "with-*", ..., "skip-site-local-4": to include/exclude addresses, + * which should be configured as endpoints. + * - "no-relax-rp-filter": controls whether to (not) change rp_filter. + * + * The reason is, that it is useful to have one "connection.mptcp-flags" + * property, that can express various aspects at once. The alternatives + * would be multiple properties like "connection.mptcp-enabled", + * "connection.mptcp-addr-flags" and "connection.mptcp-notify-flags". + * More properties does not necessarily make the API simpler. In particular + * for something like MPTCP, which should just work by default and only + * in special cases require special configuration. + * + * The entire idea is to only have one "connection.mptcp-flags" property (for now). + * That one can encode multiple aspects about MPTCP, whether it's enabled at all, + * which address flags to use when configuring endpoints, and opt-in addresses + * that otherwise would not be configured as endpoints. + * + * "connection.mptcp-flags" applies to all addresses on the interface (minus the ones + * that are not included via "with-*" and "skip-*" flags). The idea is that in the future we could have + * more properties like "ipv4.dhcp-mptcp-flags=subflow", "ipv6.link-local-mptcp-flags=disabled", + * "ipv4.addresses='192.168.1.5/24 mptcp-flags=signal,backup'", which can overwrite the + * flags on a per-address basis. + * + * But for that future extension, we now need a global "connection.mptcp-flags" property + * in the API that is the basis and applies to all addresses. + */ + + /** + * NMSettingConnection:mptcp-flags: + * + * Whether to configure MPTCP endpoints and the address flags. + * If MPTCP is enabled in NetworkManager, it will configure the + * addresses of the interface as MPTCP endpoints. The supported + * flags are as follows. + * + * If "disabled" (0x1), MPTCP handling for the interface is disabled and + * no endpoints are registered. + * + * The flag "enabled-on-global-iface" (0x2) means that MPTCP handling is enabled + * if the interface configures a default route in the main routing table. + * This choice is per-address family, for example if there is an IPv4 default route + * 0.0.0.0/0, IPv4 endpoints are configured. + * + * The "enabled" (0x4) flag means that MPTCP handling is explicitly enabled. + * This flag can also be implied from the presence of other flags. + * + * If MPTCP handling is enabled, then endpoints will be configured + * with the specified address flags "signal" (0x10), "subflow" (0x20), "backup" (0x40), + * "fullmesh" (0x80). See ip-mptcp(8) manual for additional information about the flags. + * + * The flag "with-loopback-4" (0x100) indicates that NetworkManager will + * also configure MPTCP endpoints for IPv4 loopback addresses 127.0.0.0/8. + * Likewise, the flag "with-link-local-4" (0x200) includes IPv4 link local + * addresses 169.254.0.0/16. + * + * The "skip-site-local-4" (0x400) flag indicates to exclude rfc1918 private addresses + * (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). + * + * The flags "with-loopback-6" (0x1000), "with-link-local-6" (0x2000) + * and "with-site-local-6" (0x4000) apply to the IPv6 loopback address (::1), + * IPv6 link local addresses (fe80::/10) and IPv6 unique local addresses (ULA, fc00::/7), + * respectively. IPv6 privacy addresses (rfc3041, ipv6.ip6-privacy) are excluded + * from MPTCP configuration. + * + * The flag "no-relax-rp-filter" (0x10000) causes NetworkManager to not touch + * IPv4 rp_filter. Strict reverse path filtering (rp_filter) breaks many MPTCP + * use cases, so when MPTCP handling on the interface is enabled, NetworkManager would + * loosen the strict reverse path filtering (1) to the loose setting (2). + * This flag prevents that. + * + * If the flags are zero, the global connection default from NetworkManager.conf is + * honored. If still unspecified, the fallback is either "disabled" or + * "enabled-on-global-iface,subflow" depending on "/proc/sys/net/mptcp/enabled". + * + * NetworkManager does not change the MPTCP limits nor enable MPTCP via + * "/proc/sys/net/mptcp/enabled". That is a host configuration which the + * admin can change via sysctl and ip-mptcp. + * + * Since: 1.40 + **/ + /* ---ifcfg-rh--- + * property: mptcp-flags + * variable: MPTCP_FLAGS(+) + * default: missing variable means global default + * description: The MPTCP flags that indicate whether MPTCP is enabled + * and which flags to use for the address endpoints. + * example: MPTCP_FLAGS="signal,subflow" + * ---end--- + */ + _nm_setting_property_define_direct_uint32(properties_override, + obj_properties, + NM_SETTING_CONNECTION_MPTCP_FLAGS, + PROP_MPTCP_FLAGS, + 0, + G_MAXUINT32, + NM_MPTCP_FLAGS_NONE, + NM_SETTING_PARAM_NONE, + NMSettingConnectionPrivate, + mptcp_flags); + /** * NMSettingConnection:wait-device-timeout: * diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c index c2b73b4833..3c8cd3bab2 100644 --- a/src/libnm-core-impl/tests/test-general.c +++ b/src/libnm-core-impl/tests/test-general.c @@ -3954,6 +3954,7 @@ test_connection_diff_a_only(void) {NM_SETTING_CONNECTION_MDNS, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_LLMNR, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_DNS_OVER_TLS, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_CONNECTION_MPTCP_FLAGS, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_MUD_URL, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_WAIT_ACTIVATION_DELAY, NM_SETTING_DIFF_RESULT_IN_A}, diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h index 94622793d9..703974eba9 100644 --- a/src/libnm-core-public/nm-dbus-interface.h +++ b/src/libnm-core-public/nm-dbus-interface.h @@ -1315,4 +1315,66 @@ typedef enum /*< flags >*/ { NM_RADIO_FLAG_WWAN_AVAILABLE = 0x2, } NMRadioFlags; +/** + * NMMptcpFlags: + * @NM_MPTCP_FLAGS_NONE: The default, meaning that no MPTCP flags are set. + * @NM_MPTCP_FLAGS_DISABLED: don't configure MPTCP endpoints on the device. + * @NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE: MPTCP handling is enabled + * or disabled depending on whether a /0 default route (either IPv4 or IPv6) is + * configured in the main routing table. + * @NM_MPTCP_FLAGS_ENABLED: MPTCP is enabled and endpoints will be configured. + * This flag is implied if any of the other flags indicate that + * MPTCP is enabled and therefore in most cases unnecessary. + * @NM_MPTCP_FLAGS_SIGNAL: Flag for the MPTCP endpoint. The endpoint will be + * announced/signaled to each peer via an MPTCP ADD_ADDR sub-option. + * @NM_MPTCP_FLAGS_SUBFLOW: Flag for the MPTCP endpoint. If additional subflow creation + * is allowed by the MPTCP limits, the MPTCP path manager will try to create an + * additional subflow using this endpoint as the source address after the MPTCP connection + * is established. + * @NM_MPTCP_FLAGS_BACKUP: Flag for the MPTCP endpoint. If this is a subflow endpoint, the + * subflows created using this endpoint will have the backup flag set during the connection + * process. This flag instructs the peer to only send data on a given subflow when all + * non-backup subflows are unavailable. This does not affect outgoing data, + * where subflow priority is determined by the backup/non-backup flag received + * from the peer + * @NM_MPTCP_FLAGS_FULLMESH: Flag for the MPTCP endpoint. If this is a subflow endpoint and additional + * subflow creation is allowed by the MPTCP limits, the MPTCP path manager will try to create an + * additional subflow for each known peer address, using this endpoint as the source address. + * This will occur after the MPTCP connection is established. If the peer did not announce + * any additional addresses using the MPTCP ADD_ADDR sub-option, this will behave the same + * as a plain subflow endpoint. When the peer does announce addresses, each received ADD_ADDR + * sub-option will trigger creation of an additional subflow to generate a full mesh topology. + * @NM_MPTCP_FLAGS_WITH_LOOPBACK_4: Also configure MPTCP endpoints for IPv4 addresses 127.0.0.0/8 with scope "host". + * @NM_MPTCP_FLAGS_WITH_LOOPBACK_6: Also configure MPTCP endpoints for the IPv6 address ::1 with scope "host". + * @NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4: Also configure MPTCP endpoints for IPv4 addresses 169.254.0.0/16 with scope "link". + * @NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6: Also configure MPTCP endpoints for IPv6 addresses fe80::/10 with scope "link". + * @NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4: Don't configure MPTCP endpoints for site local IPv4 addresses (RFC1918, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). + * @NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6: Also configure MPTCP endpoints for unique local IPv6 addresses (ULA, fc00::/7). + * @NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER: When configure MPTCP on an interface, NetworkManager will + * loosen a strict rp_filter source validation. This flag prevents changing rp_filter. + * + * Since: 1.40 + */ +typedef enum /*< flags >*/ { + NM_MPTCP_FLAGS_NONE = 0, + + NM_MPTCP_FLAGS_DISABLED = 0x1, + NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE = 0x2, + NM_MPTCP_FLAGS_ENABLED = 0x4, + + NM_MPTCP_FLAGS_SIGNAL = 0x10, + NM_MPTCP_FLAGS_SUBFLOW = 0x20, + NM_MPTCP_FLAGS_BACKUP = 0x40, + NM_MPTCP_FLAGS_FULLMESH = 0x80, + + NM_MPTCP_FLAGS_WITH_LOOPBACK_4 = 0x0100, + NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4 = 0x0200, + NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4 = 0x0400, + NM_MPTCP_FLAGS_WITH_LOOPBACK_6 = 0x1000, + NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6 = 0x2000, + NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6 = 0x4000, + + NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER = 0x10000, +} NMMptcpFlags; + #endif /* __NM_DBUS_INTERFACE_H__ */ diff --git a/src/libnm-core-public/nm-setting-connection.h b/src/libnm-core-public/nm-setting-connection.h index 3a570d90e3..4b6ce17c4a 100644 --- a/src/libnm-core-public/nm-setting-connection.h +++ b/src/libnm-core-public/nm-setting-connection.h @@ -57,6 +57,7 @@ G_BEGIN_DECLS #define NM_SETTING_CONNECTION_MDNS "mdns" #define NM_SETTING_CONNECTION_LLMNR "llmnr" #define NM_SETTING_CONNECTION_DNS_OVER_TLS "dns-over-tls" +#define NM_SETTING_CONNECTION_MPTCP_FLAGS "mptcp-flags" #define NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT "wait-device-timeout" #define NM_SETTING_CONNECTION_MUD_URL "mud-url" #define NM_SETTING_CONNECTION_WAIT_ACTIVATION_DELAY "wait-activation-delay" @@ -216,6 +217,9 @@ NMSettingConnectionLlmnr nm_setting_connection_get_llmnr(NMSettingConnection *se NM_AVAILABLE_IN_1_34 NMSettingConnectionDnsOverTls nm_setting_connection_get_dns_over_tls(NMSettingConnection *setting); +NM_AVAILABLE_IN_1_40 +NMMptcpFlags nm_setting_connection_get_mptcp_flags(NMSettingConnection *setting); + NM_AVAILABLE_IN_1_20 gint32 nm_setting_connection_get_wait_device_timeout(NMSettingConnection *setting); diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c index 4d0085c7d8..31beb65ef9 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.c +++ b/src/libnmc-setting/nm-meta-setting-desc.c @@ -5578,6 +5578,21 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { ), ), ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_MPTCP_FLAGS, + .property_type = &_pt_gobject_enum, + .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( + PROPERTY_TYP_DATA_SUBTYPE (gobject_enum, + .get_gtype = nm_mptcp_flags_get_type, + .value_infos_get = GOBJECT_ENUM_VALUE_INFOS_GET_FROM_SETTER, + .value_infos = ENUM_VALUE_INFOS ( + { + .value = NM_MPTCP_FLAGS_NONE, + .nick = "default", + }, + ), + ), + ), + ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_MUD_URL, .property_type = &_pt_gobject_string, .hide_if_default = TRUE, diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index db4a7f12ed..a16742e6be 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -14,6 +14,7 @@ #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MASTER N_("Interface name of the master device or UUID of the master connection.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MDNS N_("Whether mDNS is enabled for the connection. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable mDNS for the interface, \"resolve\" (1) do not register hostname but allow resolving of mDNS host names and \"default\" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, \"default\" ultimately depends on the DNS plugin (which for systemd-resolved currently means \"no\"). This feature requires a plugin which supports mDNS. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_METERED N_("Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MPTCP_FLAGS N_("Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. The supported flags are as follows. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The flag \"enabled-on-global-iface\" (0x2) means that MPTCP handling is enabled if the interface configures a default route in the main routing table. This choice is per-address family, for example if there is an IPv4 default route 0.0.0.0/0, IPv4 endpoints are configured. The \"enabled\" (0x4) flag means that MPTCP handling is explicitly enabled. This flag can also be implied from the presence of other flags. If MPTCP handling is enabled, then endpoints will be configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. The flag \"with-loopback-4\" (0x100) indicates that NetworkManager will also configure MPTCP endpoints for IPv4 loopback addresses 127.0.0.0/8. Likewise, the flag \"with-link-local-4\" (0x200) includes IPv4 link local addresses 169.254.0.0/16. The \"skip-site-local-4\" (0x400) flag indicates to exclude rfc1918 private addresses (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). The flags \"with-loopback-6\" (0x1000), \"with-link-local-6\" (0x2000) and \"with-site-local-6\" (0x4000) apply to the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10) and IPv6 unique local addresses (ULA, fc00::/7), respectively. IPv6 privacy addresses (rfc3041, ipv6.ip6-privacy) are excluded from MPTCP configuration. The flag \"no-relax-rp-filter\" (0x10000) causes NetworkManager to not touch IPv4 rp_filter. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2). This flag prevents that. If the flags are zero, the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is either \"disabled\" or \"enabled-on-global-iface,subflow\" depending on \"/proc/sys/net/mptcp/enabled\". NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MUD_URL N_("If configured, set to a Manufacturer Usage Description (MUD) URL that points to manufacturer-recommended network policies for IoT devices. It is transmitted as a DHCPv4 or DHCPv6 option. The value must be a valid URL starting with \"https://\". The special value \"none\" is allowed to indicate that no MUD URL is used. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the ultimate default is \"none\".") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MULTI_CONNECT N_("Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_PERMISSIONS N_("An array of strings defining what access a given user has to this connection. If this is NULL or empty, all users are allowed to access this connection; otherwise users are allowed if and only if they are in this list. When this is not empty, the connection can be active only when one of the specified users is logged into an active session. Each entry is of the form \"[type]:[id]:[reserved]\"; for example, \"user:dcbw:blah\". At this time only the \"user\" [type] is allowed. Any other values are ignored and reserved for future use. [id] is the username that this permission refers to, which may not contain the \":\" character. Any [reserved] information present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.") diff --git a/src/nmcli/generate-docs-nm-settings-nmcli.xml.in b/src/nmcli/generate-docs-nm-settings-nmcli.xml.in index 68ac3468c1..a13e3c0eb3 100644 --- a/src/nmcli/generate-docs-nm-settings-nmcli.xml.in +++ b/src/nmcli/generate-docs-nm-settings-nmcli.xml.in @@ -419,6 +419,8 @@ description="Whether Link-Local Multicast Name Resolution (LLMNR) is enabled for the connection. LLMNR is a protocol based on the Domain Name System (DNS) packet format that allows both IPv4 and IPv6 hosts to perform name resolution for hosts on the same local link. The permitted values are: "yes" (2) register hostname and resolving for the connection, "no" (0) disable LLMNR for the interface, "resolve" (1) do not register hostname but allow resolving of LLMNR host names If unspecified, "default" ultimately depends on the DNS plugin (which for systemd-resolved currently means "yes"). This feature requires a plugin which supports LLMNR. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved." /> + >> connection.id: con-1 connection.uuid: 5fcfd6d7-1e63-3332-8826-a7eda103792d @@ -533,16 +533,17 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 <<< -size: 1374 +size: 1428 location: src/tests/client/test-client.py:test_002()/24 cmd: $NMCLI c s con-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1236 bytes +stdout: 1290 bytes >>> connection.id: con-1 connection.uuid: 5fcfd6d7-1e63-3332-8826-a7eda103792d @@ -568,6 +569,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 diff --git a/src/tests/client/test-client.check-on-disk/test_003.expected b/src/tests/client/test-client.check-on-disk/test_003.expected index 9e30a5b641..f350e3c554 100644 --- a/src/tests/client/test-client.check-on-disk/test_003.expected +++ b/src/tests/client/test-client.check-on-disk/test_003.expected @@ -182,12 +182,12 @@ id path uuid <<< -size: 4830 +size: 4884 location: src/tests/client/test-client.py:test_003()/14 cmd: $NMCLI con s con-gsm1 lang: C returncode: 0 -stdout: 4697 bytes +stdout: 4751 bytes >>> connection.id: con-gsm1 connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL @@ -213,6 +213,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -294,12 +295,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4868 +size: 4922 location: src/tests/client/test-client.py:test_003()/15 cmd: $NMCLI con s con-gsm1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4725 bytes +stdout: 4779 bytes >>> connection.id: con-gsm1 connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL @@ -325,6 +326,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -406,14 +408,14 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 489 +size: 493 location: src/tests/client/test-client.py:test_003()/16 cmd: $NMCLI -g all con s con-gsm1 lang: C returncode: 0 -stdout: 350 bytes +stdout: 354 bytes >>> -connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: serial:5:8:even:1:100 @@ -421,14 +423,14 @@ gsm:no::::0:xyz.con-gsm1:::0:no::::auto proxy:none:no:: <<< -size: 499 +size: 503 location: src/tests/client/test-client.py:test_003()/17 cmd: $NMCLI -g all con s con-gsm1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 350 bytes +stdout: 354 bytes >>> -connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: serial:5:8:even:1:100 @@ -436,12 +438,12 @@ gsm:no::::0:xyz.con-gsm1:::0:no::::auto proxy:none:no:: <<< -size: 4818 +size: 4872 location: src/tests/client/test-client.py:test_003()/18 cmd: $NMCLI con s con-gsm2 lang: C returncode: 0 -stdout: 4685 bytes +stdout: 4739 bytes >>> connection.id: con-gsm2 connection.uuid: UUID-con-gsm2-REPLACED-REPLACED-REPL @@ -467,6 +469,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -548,12 +551,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4856 +size: 4910 location: src/tests/client/test-client.py:test_003()/19 cmd: $NMCLI con s con-gsm2 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4713 bytes +stdout: 4767 bytes >>> connection.id: con-gsm2 connection.uuid: UUID-con-gsm2-REPLACED-REPLACED-REPL @@ -579,6 +582,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -660,14 +664,14 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 477 +size: 481 location: src/tests/client/test-client.py:test_003()/20 cmd: $NMCLI -g all con s con-gsm2 lang: C returncode: 0 -stdout: 338 bytes +stdout: 342 bytes >>> -connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: serial:5:8:even:1:100 @@ -675,14 +679,14 @@ gsm:no::::0::::0:no::::auto proxy:none:no:: <<< -size: 487 +size: 491 location: src/tests/client/test-client.py:test_003()/21 cmd: $NMCLI -g all con s con-gsm2 lang: pl_PL.UTF-8 returncode: 0 -stdout: 338 bytes +stdout: 342 bytes >>> -connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: serial:5:8:even:1:100 @@ -690,12 +694,12 @@ gsm:no::::0::::0:no::::auto proxy:none:no:: <<< -size: 4818 +size: 4872 location: src/tests/client/test-client.py:test_003()/22 cmd: $NMCLI con s con-gsm3 lang: C returncode: 0 -stdout: 4685 bytes +stdout: 4739 bytes >>> connection.id: con-gsm3 connection.uuid: UUID-con-gsm3-REPLACED-REPLACED-REPL @@ -721,6 +725,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -802,12 +807,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4856 +size: 4910 location: src/tests/client/test-client.py:test_003()/23 cmd: $NMCLI con s con-gsm3 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4713 bytes +stdout: 4767 bytes >>> connection.id: con-gsm3 connection.uuid: UUID-con-gsm3-REPLACED-REPLACED-REPL @@ -833,6 +838,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -914,14 +920,14 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 478 +size: 482 location: src/tests/client/test-client.py:test_003()/24 cmd: $NMCLI -g all con s con-gsm3 lang: C returncode: 0 -stdout: 339 bytes +stdout: 343 bytes >>> -connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: serial:5:8:even:1:100 @@ -929,14 +935,14 @@ gsm:no::::0: :::0:no::::auto proxy:none:no:: <<< -size: 488 +size: 492 location: src/tests/client/test-client.py:test_003()/25 cmd: $NMCLI -g all con s con-gsm3 lang: pl_PL.UTF-8 returncode: 0 -stdout: 339 bytes +stdout: 343 bytes >>> -connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: serial:5:8:even:1:100 @@ -1084,12 +1090,12 @@ UUID NAME UUID-ethernet-REPLACED-REPLACED-REPL ethernet <<< -size: 4656 +size: 4710 location: src/tests/client/test-client.py:test_003()/37 cmd: $NMCLI -f ALL con s ethernet lang: C returncode: 0 -stdout: 4516 bytes +stdout: 4570 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1115,6 +1121,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -1192,12 +1199,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4692 +size: 4746 location: src/tests/client/test-client.py:test_003()/38 cmd: $NMCLI -f ALL con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 4542 bytes +stdout: 4596 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1223,6 +1230,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -1320,12 +1328,12 @@ stdout: 51 bytes GENERAL.STATE: aktywowano <<< -size: 5358 +size: 5412 location: src/tests/client/test-client.py:test_003()/41 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 5225 bytes +stdout: 5279 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1351,6 +1359,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -1441,12 +1450,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5398 +size: 5452 location: src/tests/client/test-client.py:test_003()/42 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5255 bytes +stdout: 5309 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1472,6 +1481,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -2048,12 +2058,12 @@ UUID NAME UUID-ethernet-REPLACED-REPLACED-REPL ethernet <<< -size: 4656 +size: 4710 location: src/tests/client/test-client.py:test_003()/62 cmd: $NMCLI -f ALL con s ethernet lang: C returncode: 0 -stdout: 4516 bytes +stdout: 4570 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2079,6 +2089,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -2156,12 +2167,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4692 +size: 4746 location: src/tests/client/test-client.py:test_003()/63 cmd: $NMCLI -f ALL con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 4542 bytes +stdout: 4596 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2187,6 +2198,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -2288,12 +2300,12 @@ GENERAL.STATE: aktywowano GENERAL.STATE: aktywowano <<< -size: 6068 +size: 6122 location: src/tests/client/test-client.py:test_003()/66 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 5935 bytes +stdout: 5989 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2319,6 +2331,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -2423,12 +2436,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6112 +size: 6166 location: src/tests/client/test-client.py:test_003()/67 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5969 bytes +stdout: 6023 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2454,6 +2467,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -3036,12 +3050,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6071 +size: 6125 location: src/tests/client/test-client.py:test_003()/82 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 5938 bytes +stdout: 5992 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3067,6 +3081,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -3171,12 +3186,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6116 +size: 6170 location: src/tests/client/test-client.py:test_003()/83 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5973 bytes +stdout: 6027 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3202,6 +3217,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -3306,12 +3322,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5401 +size: 5455 location: src/tests/client/test-client.py:test_003()/84 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5228 bytes +stdout: 5282 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3337,6 +3353,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -3427,12 +3444,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5442 +size: 5496 location: src/tests/client/test-client.py:test_003()/85 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5259 bytes +stdout: 5313 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3458,6 +3475,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -3758,12 +3776,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6083 +size: 6137 location: src/tests/client/test-client.py:test_003()/92 cmd: $NMCLI --color yes con s ethernet lang: C returncode: 0 -stdout: 5938 bytes +stdout: 5992 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3789,6 +3807,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -3893,12 +3912,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6128 +size: 6182 location: src/tests/client/test-client.py:test_003()/93 cmd: $NMCLI --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5973 bytes +stdout: 6027 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3924,6 +3943,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -4028,12 +4048,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5413 +size: 5467 location: src/tests/client/test-client.py:test_003()/94 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5228 bytes +stdout: 5282 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -4059,6 +4079,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -4149,12 +4170,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5454 +size: 5508 location: src/tests/client/test-client.py:test_003()/95 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5259 bytes +stdout: 5313 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -4180,6 +4201,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -4496,12 +4518,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 7324 +size: 7378 location: src/tests/client/test-client.py:test_003()/102 cmd: $NMCLI --pretty con s ethernet lang: C returncode: 0 -stdout: 7181 bytes +stdout: 7235 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4530,6 +4552,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -4647,12 +4670,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7390 +size: 7444 location: src/tests/client/test-client.py:test_003()/103 cmd: $NMCLI --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7237 bytes +stdout: 7291 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -4681,6 +4704,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -4798,12 +4822,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6342 +size: 6396 location: src/tests/client/test-client.py:test_003()/104 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6159 bytes +stdout: 6213 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4832,6 +4856,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -4931,12 +4956,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6396 +size: 6450 location: src/tests/client/test-client.py:test_003()/105 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6203 bytes +stdout: 6257 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -4965,6 +4990,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -5314,12 +5340,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 7336 +size: 7390 location: src/tests/client/test-client.py:test_003()/112 cmd: $NMCLI --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 7181 bytes +stdout: 7235 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -5348,6 +5374,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -5465,12 +5492,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7402 +size: 7456 location: src/tests/client/test-client.py:test_003()/113 cmd: $NMCLI --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7237 bytes +stdout: 7291 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -5499,6 +5526,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -5616,12 +5644,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6354 +size: 6408 location: src/tests/client/test-client.py:test_003()/114 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6159 bytes +stdout: 6213 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -5650,6 +5678,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -5749,12 +5778,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6408 +size: 6462 location: src/tests/client/test-client.py:test_003()/115 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6203 bytes +stdout: 6257 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -5783,6 +5812,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -6112,12 +6142,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 3254 +size: 3281 location: src/tests/client/test-client.py:test_003()/122 cmd: $NMCLI --terse con s ethernet lang: C returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6143,6 +6173,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -6247,12 +6278,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3264 +size: 3291 location: src/tests/client/test-client.py:test_003()/123 cmd: $NMCLI --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6278,6 +6309,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -6382,12 +6414,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2904 +size: 2931 location: src/tests/client/test-client.py:test_003()/124 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6413,6 +6445,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -6503,12 +6536,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2914 +size: 2941 location: src/tests/client/test-client.py:test_003()/125 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6534,6 +6567,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -6830,12 +6864,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 3266 +size: 3293 location: src/tests/client/test-client.py:test_003()/132 cmd: $NMCLI --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6861,6 +6895,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -6965,12 +7000,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3276 +size: 3303 location: src/tests/client/test-client.py:test_003()/133 cmd: $NMCLI --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6996,6 +7031,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -7100,12 +7136,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2916 +size: 2943 location: src/tests/client/test-client.py:test_003()/134 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -7131,6 +7167,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -7221,12 +7258,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2926 +size: 2953 location: src/tests/client/test-client.py:test_003()/135 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -7252,6 +7289,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -7552,15 +7590,15 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 4075 +size: 4105 location: src/tests/client/test-client.py:test_003()/142 cmd: $NMCLI --mode tabular con s ethernet lang: C returncode: 0 -stdout: 3926 bytes +stdout: 3956 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- -1 (default) @@ -7583,15 +7621,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 4125 +size: 4155 location: src/tests/client/test-client.py:test_003()/143 cmd: $NMCLI --mode tabular con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3966 bytes +stdout: 3996 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- -1 (default) @@ -7614,15 +7652,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3613 +size: 3643 location: src/tests/client/test-client.py:test_003()/144 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 3424 bytes +stdout: 3454 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- -1 (default) @@ -7641,15 +7679,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 3661 +size: 3691 location: src/tests/client/test-client.py:test_003()/145 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3462 bytes +stdout: 3492 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- -1 (default) @@ -7804,15 +7842,15 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 4087 +size: 4117 location: src/tests/client/test-client.py:test_003()/152 cmd: $NMCLI --mode tabular --color yes con s ethernet lang: C returncode: 0 -stdout: 3926 bytes +stdout: 3956 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- -1 (default) @@ -7835,15 +7873,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 4137 +size: 4167 location: src/tests/client/test-client.py:test_003()/153 cmd: $NMCLI --mode tabular --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3966 bytes +stdout: 3996 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- -1 (default) @@ -7866,15 +7904,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3625 +size: 3655 location: src/tests/client/test-client.py:test_003()/154 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 3424 bytes +stdout: 3454 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- no -- -- -- -- auto -- -- -- default -- -1 (default) @@ -7893,15 +7931,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 3673 +size: 3703 location: src/tests/client/test-client.py:test_003()/155 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3462 bytes +stdout: 3492 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 dns-over-tls wait-device-timeout wait-activation-delay -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses 802-3-ethernet -- 0 -- nie -- -- -- -- automatyczne -- -- -- default -- -1 (default) @@ -8072,19 +8110,19 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6584 +size: 6629 location: src/tests/client/test-client.py:test_003()/162 cmd: $NMCLI --mode tabular --pretty con s ethernet lang: C returncode: 0 -stdout: 6426 bytes +stdout: 6471 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -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 dns-over-tls wait-device-timeout wait-activation-delay ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8119,19 +8157,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 6714 +size: 6759 location: src/tests/client/test-client.py:test_003()/163 cmd: $NMCLI --mode tabular --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6546 bytes +stdout: 6591 bytes >>> =========================================== Szczegóły profilu połączenia (ethernet) =========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8166,19 +8204,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 5666 +size: 5711 location: src/tests/client/test-client.py:test_003()/164 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5468 bytes +stdout: 5513 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -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 dns-over-tls wait-device-timeout wait-activation-delay ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8205,19 +8243,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 5768 +size: 5813 location: src/tests/client/test-client.py:test_003()/165 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5560 bytes +stdout: 5605 bytes >>> =========================================== Szczegóły profilu połączenia (ethernet) =========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8420,19 +8458,19 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6596 +size: 6641 location: src/tests/client/test-client.py:test_003()/172 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 6426 bytes +stdout: 6471 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -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 dns-over-tls wait-device-timeout wait-activation-delay ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8467,19 +8505,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 6726 +size: 6771 location: src/tests/client/test-client.py:test_003()/173 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6546 bytes +stdout: 6591 bytes >>> =========================================== Szczegóły profilu połączenia (ethernet) =========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8514,19 +8552,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 5678 +size: 5723 location: src/tests/client/test-client.py:test_003()/174 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5468 bytes +stdout: 5513 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -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 dns-over-tls wait-device-timeout wait-activation-delay ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8553,19 +8591,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 5780 +size: 5825 location: src/tests/client/test-client.py:test_003()/175 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5560 bytes +stdout: 5605 bytes >>> =========================================== Szczegóły profilu połączenia (ethernet) =========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection ethernet UUID-ethernet-REPLACED-REPLACED-REPL -- 802-3-ethernet -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name port speed duplex auto-negotiate mac-address cloned-mac-address generate-mac-address-mask mac-address-blacklist mtu s390-subchannels s390-nettype s390-options wake-on-lan wake-on-lan-password accept-all-mac-addresses ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8748,14 +8786,14 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 871 +size: 875 location: src/tests/client/test-client.py:test_003()/182 cmd: $NMCLI --mode tabular --terse con s ethernet lang: C returncode: 0 -stdout: 715 bytes +stdout: 719 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8765,14 +8803,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6:: <<< -size: 881 +size: 885 location: src/tests/client/test-client.py:test_003()/183 cmd: $NMCLI --mode tabular --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 715 bytes +stdout: 719 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8782,14 +8820,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6:: <<< -size: 719 +size: 723 location: src/tests/client/test-client.py:test_003()/184 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 523 bytes +stdout: 527 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8797,14 +8835,14 @@ proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6:: <<< -size: 729 +size: 733 location: src/tests/client/test-client.py:test_003()/185 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 523 bytes +stdout: 527 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8910,14 +8948,14 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 883 +size: 887 location: src/tests/client/test-client.py:test_003()/192 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 715 bytes +stdout: 719 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8927,14 +8965,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6:: <<< -size: 893 +size: 897 location: src/tests/client/test-client.py:test_003()/193 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 715 bytes +stdout: 719 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8944,14 +8982,14 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6:: <<< -size: 731 +size: 735 location: src/tests/client/test-client.py:test_003()/194 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 523 bytes +stdout: 527 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -8959,14 +8997,14 @@ proxy:none:no:: GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/6:: <<< -size: 741 +size: 745 location: src/tests/client/test-client.py:test_003()/195 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 523 bytes +stdout: 527 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: @@ -9280,12 +9318,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE: ethernet <<< -size: 6089 +size: 6143 location: src/tests/client/test-client.py:test_003()/202 cmd: $NMCLI --mode multiline con s ethernet lang: C returncode: 0 -stdout: 5938 bytes +stdout: 5992 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9311,6 +9349,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -9415,12 +9454,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6134 +size: 6188 location: src/tests/client/test-client.py:test_003()/203 cmd: $NMCLI --mode multiline con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5973 bytes +stdout: 6027 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9446,6 +9485,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -9550,12 +9590,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5419 +size: 5473 location: src/tests/client/test-client.py:test_003()/204 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5228 bytes +stdout: 5282 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9581,6 +9621,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -9671,12 +9712,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5460 +size: 5514 location: src/tests/client/test-client.py:test_003()/205 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5259 bytes +stdout: 5313 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9702,6 +9743,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -10206,12 +10248,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE: ethernet <<< -size: 6101 +size: 6155 location: src/tests/client/test-client.py:test_003()/212 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: C returncode: 0 -stdout: 5938 bytes +stdout: 5992 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10237,6 +10279,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -10341,12 +10384,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6146 +size: 6200 location: src/tests/client/test-client.py:test_003()/213 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5973 bytes +stdout: 6027 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10372,6 +10415,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -10476,12 +10520,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5431 +size: 5485 location: src/tests/client/test-client.py:test_003()/214 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5228 bytes +stdout: 5282 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10507,6 +10551,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -10597,12 +10642,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5472 +size: 5526 location: src/tests/client/test-client.py:test_003()/215 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5259 bytes +stdout: 5313 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10628,6 +10673,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-3-ethernet.port: -- @@ -11170,12 +11216,12 @@ TYPE: ethernet ------------------------------------------------------------------------------- <<< -size: 7341 +size: 7395 location: src/tests/client/test-client.py:test_003()/222 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: C returncode: 0 -stdout: 7181 bytes +stdout: 7235 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -11204,6 +11250,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11321,12 +11368,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7407 +size: 7461 location: src/tests/client/test-client.py:test_003()/223 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7237 bytes +stdout: 7291 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -11355,6 +11402,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11472,12 +11520,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6359 +size: 6413 location: src/tests/client/test-client.py:test_003()/224 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6159 bytes +stdout: 6213 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -11506,6 +11554,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11605,12 +11654,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6413 +size: 6467 location: src/tests/client/test-client.py:test_003()/225 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6203 bytes +stdout: 6257 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -11639,6 +11688,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -12214,12 +12264,12 @@ TYPE: ethernet ------------------------------------------------------------------------------- <<< -size: 7353 +size: 7407 location: src/tests/client/test-client.py:test_003()/232 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 7181 bytes +stdout: 7235 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -12248,6 +12298,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -12365,12 +12416,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7419 +size: 7473 location: src/tests/client/test-client.py:test_003()/233 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7237 bytes +stdout: 7291 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -12399,6 +12450,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -12516,12 +12568,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6371 +size: 6425 location: src/tests/client/test-client.py:test_003()/234 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6159 bytes +stdout: 6213 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -12550,6 +12602,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -12649,12 +12702,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6425 +size: 6479 location: src/tests/client/test-client.py:test_003()/235 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6203 bytes +stdout: 6257 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -12683,6 +12736,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -13220,12 +13274,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 3271 +size: 3298 location: src/tests/client/test-client.py:test_003()/242 cmd: $NMCLI --mode multiline --terse con s ethernet lang: C returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13251,6 +13305,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -13355,12 +13410,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3281 +size: 3308 location: src/tests/client/test-client.py:test_003()/243 cmd: $NMCLI --mode multiline --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13386,6 +13441,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -13490,12 +13546,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2921 +size: 2948 location: src/tests/client/test-client.py:test_003()/244 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13521,6 +13577,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -13611,12 +13668,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2931 +size: 2958 location: src/tests/client/test-client.py:test_003()/245 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13642,6 +13699,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -14146,12 +14204,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 3283 +size: 3310 location: src/tests/client/test-client.py:test_003()/252 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14177,6 +14235,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -14281,12 +14340,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3293 +size: 3320 location: src/tests/client/test-client.py:test_003()/253 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3112 bytes +stdout: 3139 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14312,6 +14371,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -14416,12 +14476,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2933 +size: 2960 location: src/tests/client/test-client.py:test_003()/254 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14447,6 +14507,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: @@ -14537,12 +14598,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2943 +size: 2970 location: src/tests/client/test-client.py:test_003()/255 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2722 bytes +stdout: 2749 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14568,6 +14629,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 802-3-ethernet.port: diff --git a/src/tests/client/test-client.check-on-disk/test_004.expected b/src/tests/client/test-client.check-on-disk/test_004.expected index 3cbcef3a7e..379544a396 100644 --- a/src/tests/client/test-client.check-on-disk/test_004.expected +++ b/src/tests/client/test-client.check-on-disk/test_004.expected @@ -58,12 +58,12 @@ location: src/tests/client/test-client.py:test_004()/7 cmd: $NMCLI connection mod con-xx1 ipv4.addresses 192.168.77.5/24 ipv4.routes '2.3.4.5/32 192.168.77.1' ipv6.addresses 1:2:3:4::6/64 ipv6.routes 1:2:3:4:5:6::5/128 lang: C returncode: 0 -size: 4898 +size: 4952 location: src/tests/client/test-client.py:test_004()/8 cmd: $NMCLI con s con-xx1 lang: C returncode: 0 -stdout: 4767 bytes +stdout: 4821 bytes >>> connection.id: con-xx1 connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA @@ -89,6 +89,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-11-wireless.ssid: foobar @@ -169,12 +170,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4934 +size: 4988 location: src/tests/client/test-client.py:test_004()/9 cmd: $NMCLI con s con-xx1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4793 bytes +stdout: 4847 bytes >>> connection.id: con-xx1 connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA @@ -200,6 +201,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 802-11-wireless.ssid: foobar @@ -316,12 +318,12 @@ con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn -- con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi -- <<< -size: 4312 +size: 4366 location: src/tests/client/test-client.py:test_004()/13 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 4178 bytes +stdout: 4232 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -347,6 +349,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -415,12 +418,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4340 +size: 4394 location: src/tests/client/test-client.py:test_004()/14 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4196 bytes +stdout: 4250 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -446,6 +449,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -586,12 +590,12 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0 con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet -- <<< -size: 5440 +size: 5494 location: src/tests/client/test-client.py:test_004()/21 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5306 bytes +stdout: 5360 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -617,6 +621,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -706,12 +711,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5474 +size: 5528 location: src/tests/client/test-client.py:test_004()/22 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5330 bytes +stdout: 5384 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -737,6 +742,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -908,12 +914,12 @@ Strony podręcznika nmcli(1) i nmcli-examples(7) zawierają pełne informacje o użyciu. <<< -size: 5446 +size: 5500 location: src/tests/client/test-client.py:test_004()/25 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -939,6 +945,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -1028,12 +1035,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5484 +size: 5538 location: src/tests/client/test-client.py:test_004()/26 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1059,6 +1066,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -1148,12 +1156,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5446 +size: 5500 location: src/tests/client/test-client.py:test_004()/27 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1179,6 +1187,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -1268,12 +1277,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5484 +size: 5538 location: src/tests/client/test-client.py:test_004()/28 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1299,6 +1308,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -1388,12 +1398,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4319 +size: 4373 location: src/tests/client/test-client.py:test_004()/29 cmd: $NMCLI -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4178 bytes +stdout: 4232 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1419,6 +1429,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -1487,12 +1498,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4347 +size: 4401 location: src/tests/client/test-client.py:test_004()/30 cmd: $NMCLI -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4196 bytes +stdout: 4250 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1518,6 +1529,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -4180,12 +4192,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 5458 +size: 5512 location: src/tests/client/test-client.py:test_004()/75 cmd: $NMCLI --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4211,6 +4223,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -4300,12 +4313,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5496 +size: 5550 location: src/tests/client/test-client.py:test_004()/76 cmd: $NMCLI --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4331,6 +4344,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -4420,12 +4434,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5458 +size: 5512 location: src/tests/client/test-client.py:test_004()/77 cmd: $NMCLI --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4451,6 +4465,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -4540,12 +4555,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5496 +size: 5550 location: src/tests/client/test-client.py:test_004()/78 cmd: $NMCLI --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4571,6 +4586,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -4660,12 +4676,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4331 +size: 4385 location: src/tests/client/test-client.py:test_004()/79 cmd: $NMCLI --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4178 bytes +stdout: 4232 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4691,6 +4707,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -4759,12 +4776,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4359 +size: 4413 location: src/tests/client/test-client.py:test_004()/80 cmd: $NMCLI --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4196 bytes +stdout: 4250 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4790,6 +4807,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -7452,12 +7470,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 6467 +size: 6521 location: src/tests/client/test-client.py:test_004()/125 cmd: $NMCLI --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -7486,6 +7504,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -7585,12 +7604,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6518 +size: 6572 location: src/tests/client/test-client.py:test_004()/126 cmd: $NMCLI --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -7619,6 +7638,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -7718,12 +7738,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6467 +size: 6521 location: src/tests/client/test-client.py:test_004()/127 cmd: $NMCLI --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -7752,6 +7772,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -7851,12 +7872,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6518 +size: 6572 location: src/tests/client/test-client.py:test_004()/128 cmd: $NMCLI --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -7885,6 +7906,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -7984,12 +8006,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 4948 +size: 5002 location: src/tests/client/test-client.py:test_004()/129 cmd: $NMCLI --pretty -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4797 bytes +stdout: 4851 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -8018,6 +8040,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -8091,12 +8114,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 4981 +size: 5035 location: src/tests/client/test-client.py:test_004()/130 cmd: $NMCLI --pretty -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4820 bytes +stdout: 4874 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -8125,6 +8148,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11396,12 +11420,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 6479 +size: 6533 location: src/tests/client/test-client.py:test_004()/175 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11430,6 +11454,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11529,12 +11554,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6530 +size: 6584 location: src/tests/client/test-client.py:test_004()/176 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -11563,6 +11588,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11662,12 +11688,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6479 +size: 6533 location: src/tests/client/test-client.py:test_004()/177 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11696,6 +11722,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11795,12 +11822,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6530 +size: 6584 location: src/tests/client/test-client.py:test_004()/178 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -11829,6 +11856,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -11928,12 +11956,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 4960 +size: 5014 location: src/tests/client/test-client.py:test_004()/179 cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4797 bytes +stdout: 4851 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11962,6 +11990,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -12035,12 +12064,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 4993 +size: 5047 location: src/tests/client/test-client.py:test_004()/180 cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4820 bytes +stdout: 4874 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -12069,6 +12098,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -15340,12 +15370,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 2743 +size: 2770 location: src/tests/client/test-client.py:test_004()/225 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15371,6 +15401,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -15460,12 +15491,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2753 +size: 2780 location: src/tests/client/test-client.py:test_004()/226 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15491,6 +15522,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -15580,12 +15612,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2743 +size: 2770 location: src/tests/client/test-client.py:test_004()/227 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15611,6 +15643,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -15700,12 +15733,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2753 +size: 2780 location: src/tests/client/test-client.py:test_004()/228 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15731,6 +15764,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -15820,12 +15854,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2168 +size: 2195 location: src/tests/client/test-client.py:test_004()/229 cmd: $NMCLI --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15851,6 +15885,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -15919,12 +15954,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2178 +size: 2205 location: src/tests/client/test-client.py:test_004()/230 cmd: $NMCLI --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15950,6 +15985,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -18582,12 +18618,12 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 2755 +size: 2782 location: src/tests/client/test-client.py:test_004()/275 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18613,6 +18649,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -18702,12 +18739,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2765 +size: 2792 location: src/tests/client/test-client.py:test_004()/276 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18733,6 +18770,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -18822,12 +18860,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2755 +size: 2782 location: src/tests/client/test-client.py:test_004()/277 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18853,6 +18891,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -18942,12 +18981,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2765 +size: 2792 location: src/tests/client/test-client.py:test_004()/278 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18973,6 +19012,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -19062,12 +19102,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2180 +size: 2207 location: src/tests/client/test-client.py:test_004()/279 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -19093,6 +19133,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -19161,12 +19202,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2190 +size: 2217 location: src/tests/client/test-client.py:test_004()/280 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -19192,6 +19233,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -21824,15 +21866,15 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 3564 +size: 3594 location: src/tests/client/test-client.py:test_004()/325 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: C returncode: 0 -stdout: 3414 bytes +stdout: 3444 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- @@ -21853,15 +21895,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 3603 +size: 3633 location: src/tests/client/test-client.py:test_004()/326 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3443 bytes +stdout: 3473 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- @@ -21882,15 +21924,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 3564 +size: 3594 location: src/tests/client/test-client.py:test_004()/327 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: C returncode: 0 -stdout: 3414 bytes +stdout: 3444 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- @@ -21911,15 +21953,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 3603 +size: 3633 location: src/tests/client/test-client.py:test_004()/328 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3443 bytes +stdout: 3473 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- @@ -21940,15 +21982,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 2812 +size: 2842 location: src/tests/client/test-client.py:test_004()/329 cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2655 bytes +stdout: 2685 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- @@ -21964,15 +22006,15 @@ proxy none no -- -- <<< -size: 2840 +size: 2870 location: src/tests/client/test-client.py:test_004()/330 cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2673 bytes +stdout: 2703 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- @@ -23478,15 +23520,15 @@ interface-name <<< -size: 3576 +size: 3606 location: src/tests/client/test-client.py:test_004()/375 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 3414 bytes +stdout: 3444 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- @@ -23507,15 +23549,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 3615 +size: 3645 location: src/tests/client/test-client.py:test_004()/376 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3443 bytes +stdout: 3473 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- @@ -23536,15 +23578,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 3576 +size: 3606 location: src/tests/client/test-client.py:test_004()/377 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 3414 bytes +stdout: 3444 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- @@ -23565,15 +23607,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 3615 +size: 3645 location: src/tests/client/test-client.py:test_004()/378 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3443 bytes +stdout: 3473 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- @@ -23594,15 +23636,15 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 2824 +size: 2854 location: src/tests/client/test-client.py:test_004()/379 cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2655 bytes +stdout: 2685 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- @@ -23618,15 +23660,15 @@ proxy none no -- -- <<< -size: 2852 +size: 2882 location: src/tests/client/test-client.py:test_004()/380 cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2673 bytes +stdout: 2703 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 dns-over-tls wait-device-timeout wait-activation-delay -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- @@ -25132,19 +25174,19 @@ interface-name <<< -size: 5616 +size: 5661 location: src/tests/client/test-client.py:test_004()/425 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 5457 bytes +stdout: 5502 bytes >>> ========================================== Connection profile details (con-vpn-1) ========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25174,19 +25216,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 5702 +size: 5747 location: src/tests/client/test-client.py:test_004()/426 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5533 bytes +stdout: 5578 bytes >>> ============================================ Szczegóły profilu połączenia (con-vpn-1) ============================================ -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25216,19 +25258,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 5616 +size: 5661 location: src/tests/client/test-client.py:test_004()/427 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 5457 bytes +stdout: 5502 bytes >>> ========================================== Connection profile details (con-vpn-1) ========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25258,19 +25300,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 5702 +size: 5747 location: src/tests/client/test-client.py:test_004()/428 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5533 bytes +stdout: 5578 bytes >>> ============================================ Szczegóły profilu połączenia (con-vpn-1) ============================================ -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25300,19 +25342,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 4278 +size: 4323 location: src/tests/client/test-client.py:test_004()/429 cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4112 bytes +stdout: 4157 bytes >>> ========================================== Connection profile details (con-vpn-1) ========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25332,19 +25374,19 @@ proxy none no -- -- <<< -size: 4325 +size: 4370 location: src/tests/client/test-client.py:test_004()/430 cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4149 bytes +stdout: 4194 bytes >>> ============================================ Szczegóły profilu połączenia (con-vpn-1) ============================================ -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27440,19 +27482,19 @@ interface-name <<< -size: 5628 +size: 5673 location: src/tests/client/test-client.py:test_004()/475 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5457 bytes +stdout: 5502 bytes >>> ========================================== Connection profile details (con-vpn-1) ========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27482,19 +27524,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 5714 +size: 5759 location: src/tests/client/test-client.py:test_004()/476 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5533 bytes +stdout: 5578 bytes >>> ============================================ Szczegóły profilu połączenia (con-vpn-1) ============================================ -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27524,19 +27566,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 5628 +size: 5673 location: src/tests/client/test-client.py:test_004()/477 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5457 bytes +stdout: 5502 bytes >>> ========================================== Connection profile details (con-vpn-1) ========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27566,19 +27608,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 5714 +size: 5759 location: src/tests/client/test-client.py:test_004()/478 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5533 bytes +stdout: 5578 bytes >>> ============================================ Szczegóły profilu połączenia (con-vpn-1) ============================================ -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27608,19 +27650,19 @@ NAME TYPE USERNAME GATEWAY BANNER VPN-STATE VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — Połączono z VPN key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 4290 +size: 4335 location: src/tests/client/test-client.py:test_004()/479 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4112 bytes +stdout: 4157 bytes >>> ========================================== Connection profile details (con-vpn-1) ========================================== -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- yes 0 -1 (default) 0 (default) -1 0 no -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27640,19 +27682,19 @@ proxy none no -- -- <<< -size: 4337 +size: 4382 location: src/tests/client/test-client.py:test_004()/480 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4149 bytes +stdout: 4194 bytes >>> ============================================ Szczegóły profilu połączenia (con-vpn-1) ============================================ -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp read-only permissions zone master slave-type autoconnect-slaves secondaries gateway-ping-timeout metered lldp mdns llmnr dns-over-tls wait-device-timeout wait-activation-delay ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) -1 -1 +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 dns-over-tls mptcp-flags wait-device-timeout wait-activation-delay +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +connection con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP -- vpn -- tak 0 -1 (default) 0 (default) -1 0 nie -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 name method dns dns-search dns-options dns-priority addresses gateway routes route-metric route-table routing-rules ignore-auto-routes ignore-auto-dns dhcp-client-id dhcp-iaid dhcp-timeout dhcp-send-hostname dhcp-hostname dhcp-fqdn dhcp-hostname-flags never-default may-fail required-timeout dad-timeout dhcp-vendor-class-identifier link-local dhcp-reject-servers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -29748,14 +29790,14 @@ interface-name <<< -size: 826 +size: 830 location: src/tests/client/test-client.py:test_004()/525 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -29764,14 +29806,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 836 +size: 840 location: src/tests/client/test-client.py:test_004()/526 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -29780,14 +29822,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 826 +size: 830 location: src/tests/client/test-client.py:test_004()/527 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -29796,14 +29838,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 836 +size: 840 location: src/tests/client/test-client.py:test_004()/528 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -29812,28 +29854,28 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 533 +size: 537 location: src/tests/client/test-client.py:test_004()/529 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 369 bytes +stdout: 373 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 proxy:none:no:: <<< -size: 543 +size: 547 location: src/tests/client/test-client.py:test_004()/530 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 369 bytes +stdout: 373 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -30686,14 +30728,14 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< -size: 838 +size: 842 location: src/tests/client/test-client.py:test_004()/575 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -30702,14 +30744,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 848 +size: 852 location: src/tests/client/test-client.py:test_004()/576 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -30718,14 +30760,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 838 +size: 842 location: src/tests/client/test-client.py:test_004()/577 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -30734,14 +30776,14 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 848 +size: 852 location: src/tests/client/test-client.py:test_004()/578 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 669 bytes +stdout: 673 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -30750,28 +30792,28 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 545 +size: 549 location: src/tests/client/test-client.py:test_004()/579 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 369 bytes +stdout: 373 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 proxy:none:no:: <<< -size: 555 +size: 559 location: src/tests/client/test-client.py:test_004()/580 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 369 bytes +stdout: 373 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:-1::0: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:-1:default:0:auto:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3::no:0 @@ -31624,12 +31666,12 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< -size: 5464 +size: 5518 location: src/tests/client/test-client.py:test_004()/625 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31655,6 +31697,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -31744,12 +31787,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5502 +size: 5556 location: src/tests/client/test-client.py:test_004()/626 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31775,6 +31818,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -31864,12 +31908,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5464 +size: 5518 location: src/tests/client/test-client.py:test_004()/627 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31895,6 +31939,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -31984,12 +32029,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5502 +size: 5556 location: src/tests/client/test-client.py:test_004()/628 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32015,6 +32060,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -32104,12 +32150,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4337 +size: 4391 location: src/tests/client/test-client.py:test_004()/629 cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4178 bytes +stdout: 4232 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32135,6 +32181,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -32203,12 +32250,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4365 +size: 4419 location: src/tests/client/test-client.py:test_004()/630 cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4196 bytes +stdout: 4250 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32234,6 +32281,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -35396,12 +35444,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 5476 +size: 5530 location: src/tests/client/test-client.py:test_004()/675 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35427,6 +35475,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -35516,12 +35565,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5514 +size: 5568 location: src/tests/client/test-client.py:test_004()/676 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35547,6 +35596,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -35636,12 +35686,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5476 +size: 5530 location: src/tests/client/test-client.py:test_004()/677 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5312 bytes +stdout: 5366 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35667,6 +35717,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -35756,12 +35807,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5514 +size: 5568 location: src/tests/client/test-client.py:test_004()/678 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5340 bytes +stdout: 5394 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35787,6 +35838,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -35876,12 +35928,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4349 +size: 4403 location: src/tests/client/test-client.py:test_004()/679 cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4178 bytes +stdout: 4232 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35907,6 +35959,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -35975,12 +36028,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4377 +size: 4431 location: src/tests/client/test-client.py:test_004()/680 cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4196 bytes +stdout: 4250 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -36006,6 +36059,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ipv4.method: auto @@ -39168,12 +39222,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 6484 +size: 6538 location: src/tests/client/test-client.py:test_004()/725 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -39202,6 +39256,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -39301,12 +39356,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6535 +size: 6589 location: src/tests/client/test-client.py:test_004()/726 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -39335,6 +39390,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -39434,12 +39490,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6484 +size: 6538 location: src/tests/client/test-client.py:test_004()/727 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -39468,6 +39524,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -39567,12 +39624,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6535 +size: 6589 location: src/tests/client/test-client.py:test_004()/728 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -39601,6 +39658,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -39700,12 +39758,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 4965 +size: 5019 location: src/tests/client/test-client.py:test_004()/729 cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4797 bytes +stdout: 4851 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -39734,6 +39792,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -39807,12 +39866,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 4998 +size: 5052 location: src/tests/client/test-client.py:test_004()/730 cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4820 bytes +stdout: 4874 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -39841,6 +39900,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -43642,12 +43702,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 6496 +size: 6550 location: src/tests/client/test-client.py:test_004()/775 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -43676,6 +43736,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -43775,12 +43836,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6547 +size: 6601 location: src/tests/client/test-client.py:test_004()/776 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -43809,6 +43870,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -43908,12 +43970,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6496 +size: 6550 location: src/tests/client/test-client.py:test_004()/777 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6323 bytes +stdout: 6377 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -43942,6 +44004,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -44041,12 +44104,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6547 +size: 6601 location: src/tests/client/test-client.py:test_004()/778 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6364 bytes +stdout: 6418 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -44075,6 +44138,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -44174,12 +44238,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 4977 +size: 5031 location: src/tests/client/test-client.py:test_004()/779 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4797 bytes +stdout: 4851 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -44208,6 +44272,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -44281,12 +44346,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 5010 +size: 5064 location: src/tests/client/test-client.py:test_004()/780 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4820 bytes +stdout: 4874 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -44315,6 +44380,7 @@ connection.lldp: default connection.mdns: -1 (default) connection.llmnr: -1 (default) connection.dns-over-tls: -1 (default) +connection.mptcp-flags: 0x0 (default) connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 ------------------------------------------------------------------------------- @@ -48116,12 +48182,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 2760 +size: 2787 location: src/tests/client/test-client.py:test_004()/825 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48147,6 +48213,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -48236,12 +48303,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2770 +size: 2797 location: src/tests/client/test-client.py:test_004()/826 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48267,6 +48334,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -48356,12 +48424,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2760 +size: 2787 location: src/tests/client/test-client.py:test_004()/827 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48387,6 +48455,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -48476,12 +48545,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2770 +size: 2797 location: src/tests/client/test-client.py:test_004()/828 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48507,6 +48576,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -48596,12 +48666,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2185 +size: 2212 location: src/tests/client/test-client.py:test_004()/829 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48627,6 +48697,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -48695,12 +48766,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2195 +size: 2222 location: src/tests/client/test-client.py:test_004()/830 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48726,6 +48797,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -51888,12 +51960,12 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 2772 +size: 2799 location: src/tests/client/test-client.py:test_004()/875 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -51919,6 +51991,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -52008,12 +52081,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2782 +size: 2809 location: src/tests/client/test-client.py:test_004()/876 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52039,6 +52112,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -52128,12 +52202,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2772 +size: 2799 location: src/tests/client/test-client.py:test_004()/877 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52159,6 +52233,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -52248,12 +52323,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2782 +size: 2809 location: src/tests/client/test-client.py:test_004()/878 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2600 bytes +stdout: 2627 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52279,6 +52354,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -52368,12 +52444,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2197 +size: 2224 location: src/tests/client/test-client.py:test_004()/879 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52399,6 +52475,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto @@ -52467,12 +52544,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2207 +size: 2234 location: src/tests/client/test-client.py:test_004()/880 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2018 bytes +stdout: 2045 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52498,6 +52575,7 @@ connection.lldp:default connection.mdns:-1 connection.llmnr:-1 connection.dns-over-tls:-1 +connection.mptcp-flags:0x0 connection.wait-device-timeout:-1 connection.wait-activation-delay:-1 ipv4.method:auto From f64dff693936f2cd1bb439ccafd92650959dc2d3 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Aug 2022 15:30:38 +0200 Subject: [PATCH 21/21] all: drop various NMMptcpFlags The default behavior might be sufficient. Drop those flags for now, and figure out a good solution when we have an actual use-case. --- src/core/nm-l3cfg.c | 32 ++++------------ .../nm-libnm-core-utils.h | 6 +-- src/libnm-core-impl/nm-setting-connection.c | 38 ++++++------------- src/libnm-core-public/nm-dbus-interface.h | 17 --------- src/libnmc-setting/settings-docs.h.in | 2 +- .../generate-docs-nm-settings-nmcli.xml.in | 2 +- 6 files changed, 22 insertions(+), 75 deletions(-) diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 703ec1484c..2f8619d47f 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4218,11 +4218,8 @@ _rp_filter_update(NML3Cfg *self, gboolean reapply) * While we only have one "connection.mptcp-flags=enabled" property, whether * we handle MPTCP is still tracked per AF. In particular, with "enabled-on-global-iface" * flag, which honors the AF-specific default route. */ - if (self->priv.p->mptcp_set_4 && self->priv.p->combined_l3cd_commited - && !NM_FLAGS_HAS(nm_l3_config_data_get_mptcp_flags(self->priv.p->combined_l3cd_commited), - NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER)) { + if (self->priv.p->mptcp_set_4) rp_filter_relax = TRUE; - } if (!rp_filter_relax) { if (self->priv.p->rp_filter_handled) { @@ -4368,32 +4365,17 @@ _l3_commit_mptcp_af(NML3Cfg *self, * the address. */ switch (nm_platform_ip_address_get_scope(addr_family, addr->ax.address_ptr)) { case RT_SCOPE_HOST: - if (!NM_FLAGS_ANY(mptcp_flags, - IS_IPv4 ? NM_MPTCP_FLAGS_WITH_LOOPBACK_4 - : NM_MPTCP_FLAGS_WITH_LOOPBACK_6)) - goto skip_addr; - break; + goto skip_addr; case RT_SCOPE_LINK: - if (!NM_FLAGS_ANY(mptcp_flags, - IS_IPv4 ? NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4 - : NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6)) - goto skip_addr; - break; + goto skip_addr; default: if (IS_IPv4) { - if (nm_utils_ip_is_site_local(AF_INET, &addr->a4.address)) { - /* By default we take rfc1918 private addresses, unless there - * is a flag to opt-out. */ - if (NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4)) - goto skip_addr; - } else { - /* other addresses we take. */ - } + /* We take all addresses, including rfc1918 private addresses + * (nm_utils_ip_is_site_local()). */ } else { if (nm_utils_ip6_is_ula(&addr->a6.address)) { - /* Special treatment for unique local IPv6 addresses fc00::/7. */ - if (!NM_FLAGS_HAS(mptcp_flags, NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6)) - goto skip_addr; + /* Exclude unique local IPv6 addresses fc00::/7. */ + goto skip_addr; } else { /* We take all other addresses, including deprecated IN6_IS_ADDR_SITELOCAL() * (fec0::/10). */ diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.h b/src/libnm-core-aux-intern/nm-libnm-core-utils.h index daa55bda48..5c827c01b5 100644 --- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h +++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h @@ -272,11 +272,7 @@ gpointer _nm_connection_new_setting(NMConnection *connection, GType gtype); #define _NM_MPTCP_FLAGS_ALL \ ((NMMptcpFlags) (NM_MPTCP_FLAGS_DISABLED | NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE \ | NM_MPTCP_FLAGS_ENABLED | NM_MPTCP_FLAGS_SIGNAL | NM_MPTCP_FLAGS_SUBFLOW \ - | NM_MPTCP_FLAGS_BACKUP | NM_MPTCP_FLAGS_FULLMESH \ - | NM_MPTCP_FLAGS_WITH_LOOPBACK_4 | NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4 \ - | NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4 | NM_MPTCP_FLAGS_WITH_LOOPBACK_6 \ - | NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6 | NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6 \ - | NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER)) + | NM_MPTCP_FLAGS_BACKUP | NM_MPTCP_FLAGS_FULLMESH)) #define _NM_MPTCP_FLAGS_DEFAULT \ ((NMMptcpFlags) (NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE | NM_MPTCP_FLAGS_SUBFLOW)) diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index cc87cb82b5..0d307be399 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -2568,9 +2568,6 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * the interface has a default route. * - "signal", "subflow", "backup", "fullmesh": the endpoint flags * that are used. - * - "with-loopback-4", "with-*", ..., "skip-site-local-4": to include/exclude addresses, - * which should be configured as endpoints. - * - "no-relax-rp-filter": controls whether to (not) change rp_filter. * * The reason is, that it is useful to have one "connection.mptcp-flags" * property, that can express various aspects at once. The alternatives @@ -2586,7 +2583,7 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * that otherwise would not be configured as endpoints. * * "connection.mptcp-flags" applies to all addresses on the interface (minus the ones - * that are not included via "with-*" and "skip-*" flags). The idea is that in the future we could have + * that are not included by default). The idea is that in the future we could have * more properties like "ipv4.dhcp-mptcp-flags=subflow", "ipv6.link-local-mptcp-flags=disabled", * "ipv4.addresses='192.168.1.5/24 mptcp-flags=signal,backup'", which can overwrite the * flags on a per-address basis. @@ -2600,8 +2597,13 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * * Whether to configure MPTCP endpoints and the address flags. * If MPTCP is enabled in NetworkManager, it will configure the - * addresses of the interface as MPTCP endpoints. The supported - * flags are as follows. + * addresses of the interface as MPTCP endpoints. Note that + * IPv4 loopback addresses (127.0.0.0/8), IPv4 link local + * addresses (169.254.0.0/16), the IPv6 loopback address (::1), + * IPv6 link local addresses (fe80::/10), IPv6 unique + * local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses + * (rfc3041, ipv6.ip6-privacy) will be excluded from being + * configured as endpoints. * * If "disabled" (0x1), MPTCP handling for the interface is disabled and * no endpoints are registered. @@ -2618,26 +2620,6 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * with the specified address flags "signal" (0x10), "subflow" (0x20), "backup" (0x40), * "fullmesh" (0x80). See ip-mptcp(8) manual for additional information about the flags. * - * The flag "with-loopback-4" (0x100) indicates that NetworkManager will - * also configure MPTCP endpoints for IPv4 loopback addresses 127.0.0.0/8. - * Likewise, the flag "with-link-local-4" (0x200) includes IPv4 link local - * addresses 169.254.0.0/16. - * - * The "skip-site-local-4" (0x400) flag indicates to exclude rfc1918 private addresses - * (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). - * - * The flags "with-loopback-6" (0x1000), "with-link-local-6" (0x2000) - * and "with-site-local-6" (0x4000) apply to the IPv6 loopback address (::1), - * IPv6 link local addresses (fe80::/10) and IPv6 unique local addresses (ULA, fc00::/7), - * respectively. IPv6 privacy addresses (rfc3041, ipv6.ip6-privacy) are excluded - * from MPTCP configuration. - * - * The flag "no-relax-rp-filter" (0x10000) causes NetworkManager to not touch - * IPv4 rp_filter. Strict reverse path filtering (rp_filter) breaks many MPTCP - * use cases, so when MPTCP handling on the interface is enabled, NetworkManager would - * loosen the strict reverse path filtering (1) to the loose setting (2). - * This flag prevents that. - * * If the flags are zero, the global connection default from NetworkManager.conf is * honored. If still unspecified, the fallback is either "disabled" or * "enabled-on-global-iface,subflow" depending on "/proc/sys/net/mptcp/enabled". @@ -2646,6 +2628,10 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * "/proc/sys/net/mptcp/enabled". That is a host configuration which the * admin can change via sysctl and ip-mptcp. * + * Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when + * MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would + * loosen the strict reverse path filtering (1) to the loose setting (2). + * * Since: 1.40 **/ /* ---ifcfg-rh--- diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h index 703974eba9..a980f5aaa9 100644 --- a/src/libnm-core-public/nm-dbus-interface.h +++ b/src/libnm-core-public/nm-dbus-interface.h @@ -1344,14 +1344,6 @@ typedef enum /*< flags >*/ { * any additional addresses using the MPTCP ADD_ADDR sub-option, this will behave the same * as a plain subflow endpoint. When the peer does announce addresses, each received ADD_ADDR * sub-option will trigger creation of an additional subflow to generate a full mesh topology. - * @NM_MPTCP_FLAGS_WITH_LOOPBACK_4: Also configure MPTCP endpoints for IPv4 addresses 127.0.0.0/8 with scope "host". - * @NM_MPTCP_FLAGS_WITH_LOOPBACK_6: Also configure MPTCP endpoints for the IPv6 address ::1 with scope "host". - * @NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4: Also configure MPTCP endpoints for IPv4 addresses 169.254.0.0/16 with scope "link". - * @NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6: Also configure MPTCP endpoints for IPv6 addresses fe80::/10 with scope "link". - * @NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4: Don't configure MPTCP endpoints for site local IPv4 addresses (RFC1918, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). - * @NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6: Also configure MPTCP endpoints for unique local IPv6 addresses (ULA, fc00::/7). - * @NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER: When configure MPTCP on an interface, NetworkManager will - * loosen a strict rp_filter source validation. This flag prevents changing rp_filter. * * Since: 1.40 */ @@ -1366,15 +1358,6 @@ typedef enum /*< flags >*/ { NM_MPTCP_FLAGS_SUBFLOW = 0x20, NM_MPTCP_FLAGS_BACKUP = 0x40, NM_MPTCP_FLAGS_FULLMESH = 0x80, - - NM_MPTCP_FLAGS_WITH_LOOPBACK_4 = 0x0100, - NM_MPTCP_FLAGS_WITH_LINK_LOCAL_4 = 0x0200, - NM_MPTCP_FLAGS_SKIP_SITE_LOCAL_4 = 0x0400, - NM_MPTCP_FLAGS_WITH_LOOPBACK_6 = 0x1000, - NM_MPTCP_FLAGS_WITH_LINK_LOCAL_6 = 0x2000, - NM_MPTCP_FLAGS_WITH_SITE_LOCAL_6 = 0x4000, - - NM_MPTCP_FLAGS_NO_RELAX_RP_FILTER = 0x10000, } NMMptcpFlags; #endif /* __NM_DBUS_INTERFACE_H__ */ diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index a16742e6be..11c85eb581 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -14,7 +14,7 @@ #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MASTER N_("Interface name of the master device or UUID of the master connection.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MDNS N_("Whether mDNS is enabled for the connection. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable mDNS for the interface, \"resolve\" (1) do not register hostname but allow resolving of mDNS host names and \"default\" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, \"default\" ultimately depends on the DNS plugin (which for systemd-resolved currently means \"no\"). This feature requires a plugin which supports mDNS. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_METERED N_("Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MPTCP_FLAGS N_("Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. The supported flags are as follows. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The flag \"enabled-on-global-iface\" (0x2) means that MPTCP handling is enabled if the interface configures a default route in the main routing table. This choice is per-address family, for example if there is an IPv4 default route 0.0.0.0/0, IPv4 endpoints are configured. The \"enabled\" (0x4) flag means that MPTCP handling is explicitly enabled. This flag can also be implied from the presence of other flags. If MPTCP handling is enabled, then endpoints will be configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. The flag \"with-loopback-4\" (0x100) indicates that NetworkManager will also configure MPTCP endpoints for IPv4 loopback addresses 127.0.0.0/8. Likewise, the flag \"with-link-local-4\" (0x200) includes IPv4 link local addresses 169.254.0.0/16. The \"skip-site-local-4\" (0x400) flag indicates to exclude rfc1918 private addresses (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). The flags \"with-loopback-6\" (0x1000), \"with-link-local-6\" (0x2000) and \"with-site-local-6\" (0x4000) apply to the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10) and IPv6 unique local addresses (ULA, fc00::/7), respectively. IPv6 privacy addresses (rfc3041, ipv6.ip6-privacy) are excluded from MPTCP configuration. The flag \"no-relax-rp-filter\" (0x10000) causes NetworkManager to not touch IPv4 rp_filter. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2). This flag prevents that. If the flags are zero, the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is either \"disabled\" or \"enabled-on-global-iface,subflow\" depending on \"/proc/sys/net/mptcp/enabled\". NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MPTCP_FLAGS N_("Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The flag \"enabled-on-global-iface\" (0x2) means that MPTCP handling is enabled if the interface configures a default route in the main routing table. This choice is per-address family, for example if there is an IPv4 default route 0.0.0.0/0, IPv4 endpoints are configured. The \"enabled\" (0x4) flag means that MPTCP handling is explicitly enabled. This flag can also be implied from the presence of other flags. If MPTCP handling is enabled, then endpoints will be configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero, the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is either \"disabled\" or \"enabled-on-global-iface,subflow\" depending on \"/proc/sys/net/mptcp/enabled\". NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MUD_URL N_("If configured, set to a Manufacturer Usage Description (MUD) URL that points to manufacturer-recommended network policies for IoT devices. It is transmitted as a DHCPv4 or DHCPv6 option. The value must be a valid URL starting with \"https://\". The special value \"none\" is allowed to indicate that no MUD URL is used. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the ultimate default is \"none\".") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MULTI_CONNECT N_("Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_PERMISSIONS N_("An array of strings defining what access a given user has to this connection. If this is NULL or empty, all users are allowed to access this connection; otherwise users are allowed if and only if they are in this list. When this is not empty, the connection can be active only when one of the specified users is logged into an active session. Each entry is of the form \"[type]:[id]:[reserved]\"; for example, \"user:dcbw:blah\". At this time only the \"user\" [type] is allowed. Any other values are ignored and reserved for future use. [id] is the username that this permission refers to, which may not contain the \":\" character. Any [reserved] information present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.") diff --git a/src/nmcli/generate-docs-nm-settings-nmcli.xml.in b/src/nmcli/generate-docs-nm-settings-nmcli.xml.in index a13e3c0eb3..29d7fdaab6 100644 --- a/src/nmcli/generate-docs-nm-settings-nmcli.xml.in +++ b/src/nmcli/generate-docs-nm-settings-nmcli.xml.in @@ -420,7 +420,7 @@ + description="Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If "disabled" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The flag "enabled-on-global-iface" (0x2) means that MPTCP handling is enabled if the interface configures a default route in the main routing table. This choice is per-address family, for example if there is an IPv4 default route 0.0.0.0/0, IPv4 endpoints are configured. The "enabled" (0x4) flag means that MPTCP handling is explicitly enabled. This flag can also be implied from the presence of other flags. If MPTCP handling is enabled, then endpoints will be configured with the specified address flags "signal" (0x10), "subflow" (0x20), "backup" (0x40), "fullmesh" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero, the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is either "disabled" or "enabled-on-global-iface,subflow" depending on "/proc/sys/net/mptcp/enabled". NetworkManager does not change the MPTCP limits nor enable MPTCP via "/proc/sys/net/mptcp/enabled". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2)." />