diff options
Diffstat (limited to 'src')
299 files changed, 14986 insertions, 8141 deletions
diff --git a/src/contrib/nm-vpn-editor-plugin-call.h b/src/contrib/nm-vpn-editor-plugin-call.h index bf6036ee..2f3eb074 100644 --- a/src/contrib/nm-vpn-editor-plugin-call.h +++ b/src/contrib/nm-vpn-editor-plugin-call.h @@ -103,7 +103,7 @@ nm_vpn_editor_plugin_get_service_add_details(NMVpnEditorPlugin *plugin, const ch if (vt.fcn_get_service_add_details) details = vt.fcn_get_service_add_details(plugin, service_name); if (!details) - return g_new0(char *, 1); + return nm_strv_empty_new(); return details; } diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c index 8606082c..cced1717 100644 --- a/src/core/NetworkManagerUtils.c +++ b/src/core/NetworkManagerUtils.c @@ -120,7 +120,7 @@ get_new_connection_name(NMConnection *const *existing_connections, * connection id. */ temp = g_strdup_printf(C_("connection id fallback", "%s %u"), fallback_prefix, i); - if (nm_strv_find_first(existing_names, existing_len, temp) < 0) + if (!nm_strv_contains(existing_names, existing_len, temp)) return temp; g_free(temp); @@ -670,9 +670,9 @@ check_connection_cloned_mac_address(NMConnection *orig, cand_mac = nm_setting_wired_get_cloned_mac_address(s_wired_cand); /* special cloned mac address entries are accepted. */ - if (NM_CLONED_MAC_IS_SPECIAL(orig_mac)) + if (NM_CLONED_MAC_IS_SPECIAL(orig_mac, FALSE)) orig_mac = NULL; - if (NM_CLONED_MAC_IS_SPECIAL(cand_mac)) + if (NM_CLONED_MAC_IS_SPECIAL(cand_mac, FALSE)) cand_mac = NULL; if (!orig_mac || !cand_mac) { @@ -695,7 +695,8 @@ check_connection_controller(NMConnection *orig, NMConnection *candidate, GHashTa props = check_property_in_hash(settings, NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER); + NM_SETTING_CONNECTION_CONTROLLER); + if (!props) return TRUE; @@ -722,6 +723,10 @@ check_connection_controller(NMConnection *orig, NMConnection *candidate, GHashTa props, NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_MASTER); + remove_from_hash(settings, + props, + NM_SETTING_CONNECTION_SETTING_NAME, + NM_SETTING_CONNECTION_CONTROLLER); return TRUE; } else { return FALSE; @@ -892,8 +897,8 @@ nm_utils_match_connection(NMConnection *const *connections, if (!nm_streq0(nm_setting_connection_get_connection_type(s_orig), nm_setting_connection_get_connection_type(s_cand))) continue; - if (!nm_streq0(nm_setting_connection_get_slave_type(s_orig), - nm_setting_connection_get_slave_type(s_cand))) + if (!nm_streq0(nm_setting_connection_get_port_type(s_orig), + nm_setting_connection_get_port_type(s_cand))) continue; /* this is good enough for a match */ @@ -1558,7 +1563,8 @@ nm_utils_ip_addresses_to_dbus(int addr_family, char addr_str[NM_INET_ADDRSTRLEN]; NMDedupMultiIter iter; const NMPObject *obj; - guint i; + const gsize MAX_ADDRESSES = 100; + gsize i; nm_assert_addr_family(addr_family); @@ -1580,6 +1586,11 @@ nm_utils_ip_addresses_to_dbus(int addr_family, nm_platform_dedup_multi_iter_next_obj(&iter, &obj, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4))) { const NMPlatformIPXAddress *address = NMP_OBJECT_CAST_IPX_ADDRESS(obj); + if (i > MAX_ADDRESSES) { + /* Limited. The rest is hidden. */ + break; + } + if (out_address_data) { GVariantBuilder addr_builder; gconstpointer p; @@ -1669,6 +1680,8 @@ nm_utils_ip_routes_to_dbus(int addr_family, GVariantBuilder builder_data; GVariantBuilder builder_legacy; char addr_str[NM_INET_ADDRSTRLEN]; + const gsize MAX_ROUTES = 100; + gsize i; nm_assert_addr_family(addr_family); @@ -1681,6 +1694,7 @@ nm_utils_ip_routes_to_dbus(int addr_family, g_variant_builder_init(&builder_legacy, G_VARIANT_TYPE("a(ayuayu)")); } + i = 0; nm_dedup_multi_iter_init(&iter, head_entry); while (nm_platform_dedup_multi_iter_next_obj(&iter, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))) { const NMPlatformIPXRoute *r = NMP_OBJECT_CAST_IPX_ROUTE(obj); @@ -1699,6 +1713,13 @@ nm_utils_ip_routes_to_dbus(int addr_family, if (r->rx.type_coerced != nm_platform_route_type_coerce(RTN_UNICAST)) continue; + if (i >= MAX_ROUTES) { + /* Limited. The rest is hidden. */ + break; + } + + i++; + if (out_route_data) { GVariantBuilder route_builder; gconstpointer gateway; diff --git a/src/core/devices/adsl/nm-device-adsl.c b/src/core/devices/adsl/nm-device-adsl.c index 89bc84d8..ba605077 100644 --- a/src/core/devices/adsl/nm-device-adsl.c +++ b/src/core/devices/adsl/nm-device-adsl.c @@ -683,7 +683,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_adsl = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_ADSL, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/bluetooth/nm-device-bt.c b/src/core/devices/bluetooth/nm-device-bt.c index 8b13e97d..ce110aa0 100644 --- a/src/core/devices/bluetooth/nm-device-bt.c +++ b/src/core/devices/bluetooth/nm-device-bt.c @@ -1306,7 +1306,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_bluetooth = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_BLUETOOTH, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Name", "s", NM_DEVICE_BT_NAME), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("BtCapabilities", "u", diff --git a/src/core/devices/nm-device-6lowpan.c b/src/core/devices/nm-device-6lowpan.c index f3386ddb..78ec634c 100644 --- a/src/core/devices/nm-device-6lowpan.c +++ b/src/core/devices/nm-device-6lowpan.c @@ -212,7 +212,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_6lowpan = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_6LOWPAN, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Parent", "o", NM_DEVICE_PARENT), ), ), }; diff --git a/src/core/devices/nm-device-bond.c b/src/core/devices/nm-device-bond.c index 10fe8092..a3467930 100644 --- a/src/core/devices/nm-device-bond.c +++ b/src/core/devices/nm-device-bond.c @@ -248,9 +248,9 @@ controller_update_port_connection(NMDevice *self, NULL); g_object_set(nm_connection_get_setting_connection(connection), - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, nm_connection_get_uuid(applied_connection), - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_BOND_SETTING_NAME, NULL); return TRUE; @@ -292,7 +292,7 @@ set_arp_targets(NMDevice *device, const char *cur_arp_ip_target, const char *new } } - if (nm_strv_find_first(new_strv, i, s) < 0) + if (!nm_strv_contains(new_strv, i, s)) new_strv[j++] = s; } new_strv[j] = NULL; @@ -683,6 +683,7 @@ commit_port_options(NMDevice *bond_device, NMDevice *port, NMSettingBondPort *s_ .prio = prio_has ? prio : 0, .prio_has = prio_has, }), + NULL, 0); } @@ -928,9 +929,21 @@ static const NMDBusInterfaceInfoExtended interface_info_device_bond = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_BOND, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Slaves", "ao", NM_DEVICE_SLAVES), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Slaves", + "ao", + NM_DEVICE_SLAVES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device-bridge.c b/src/core/devices/nm-device-bridge.c index 9a45dbf3..193b655c 100644 --- a/src/core/devices/nm-device-bridge.c +++ b/src/core/devices/nm-device-bridge.c @@ -421,22 +421,6 @@ static const Option master_options[] = { 0, }}; -static const Option slave_options[] = { - OPTION(NM_SETTING_BRIDGE_PORT_PRIORITY, - "priority", - OPTION_TYPE_INT(NM_BRIDGE_PORT_PRIORITY_MIN, - NM_BRIDGE_PORT_PRIORITY_MAX, - NM_BRIDGE_PORT_PRIORITY_DEF), - .default_if_zero = TRUE, ), - OPTION(NM_SETTING_BRIDGE_PORT_PATH_COST, - "path_cost", - OPTION_TYPE_INT(NM_BRIDGE_PORT_PATH_COST_MIN, - NM_BRIDGE_PORT_PATH_COST_MAX, - NM_BRIDGE_PORT_PATH_COST_DEF), - .default_if_zero = TRUE, ), - OPTION(NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "hairpin_mode", OPTION_TYPE_BOOL(FALSE), ), - {0}}; - static const NMPlatformBridgeVlan ** setting_vlans_to_platform(GPtrArray *array) { @@ -473,90 +457,26 @@ setting_vlans_to_platform(GPtrArray *array) static void commit_port_options(NMDevice *device, NMSettingBridgePort *setting) { - const Option *option; - NMSetting *s; - gs_unref_object NMSetting *s_clear = NULL; - int ifindex = nm_device_get_ifindex(device); - - if (setting) - s = NM_SETTING(setting); - else - s = s_clear = nm_setting_bridge_port_new(); - - for (option = slave_options; option->name; option++) { - nm_auto_unset_gvalue GValue val = G_VALUE_INIT; - GParamSpec *pspec; - const char *value; - char value_buf[100]; - - pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(s), option->name); - nm_assert(pspec); - - g_value_init(&val, G_PARAM_SPEC_VALUE_TYPE(pspec)); - g_object_get_property((GObject *) s, option->name, &val); - - if (option->to_sysfs) { - value = option->to_sysfs(&val); - goto out; - } - - switch (pspec->value_type) { - case G_TYPE_BOOLEAN: - value = g_value_get_boolean(&val) ? "1" : "0"; - break; - case G_TYPE_UINT64: - case G_TYPE_UINT: - { - guint64 uval; - - if (pspec->value_type == G_TYPE_UINT64) - uval = g_value_get_uint64(&val); - else - uval = (guint) g_value_get_uint(&val); - - /* zero means "unspecified" for some NM properties but isn't in the - * allowed kernel range, so reset the property to the default value. - */ - if (option->default_if_zero && uval == 0) { - if (pspec->value_type == G_TYPE_UINT64) - uval = NM_G_PARAM_SPEC_GET_DEFAULT_UINT64(pspec); - else - uval = NM_G_PARAM_SPEC_GET_DEFAULT_UINT(pspec); - } - - /* Linux kernel bridge interfaces use 'centiseconds' for time-based values. - * In reality it's not centiseconds, but depends on HZ and USER_HZ, which - * is almost always works out to be a multiplier of 100, so we can assume - * centiseconds. See clock_t_to_jiffies(). - */ - if (option->user_hz_compensate) - uval *= 100; - - if (pspec->value_type == G_TYPE_UINT64) - nm_sprintf_buf(value_buf, "%" G_GUINT64_FORMAT, uval); - else - nm_sprintf_buf(value_buf, "%u", (guint) uval); - - value = value_buf; - } break; - case G_TYPE_STRING: - value = g_value_get_string(&val); - break; - default: - nm_assert_not_reached(); - value = NULL; - break; - } - -out: - if (!value) - return; - - nm_platform_sysctl_slave_set_option(nm_device_get_platform(device), - ifindex, - option->sysname, - value); - } + guint32 path_cost, priority; + + path_cost = nm_setting_bridge_port_get_path_cost(setting); + if (path_cost == 0) + path_cost = NM_BRIDGE_PORT_PATH_COST_DEF; + + priority = nm_setting_bridge_port_get_priority(setting); + if (priority == 0) + priority = NM_BRIDGE_PORT_PRIORITY_DEF; + + nm_platform_link_change(nm_device_get_platform(device), + nm_device_get_ifindex(device), + NULL, + NULL, + &((NMPlatformLinkBridgePort){ + .path_cost = path_cost, + .priority = priority, + .hairpin = nm_setting_bridge_port_get_hairpin_mode(setting), + }), + 0); } static void @@ -662,50 +582,37 @@ master_update_slave_connection(NMDevice *device, NMConnection *connection, GError **error) { - NMDeviceBridge *self = NM_DEVICE_BRIDGE(device); - NMSettingConnection *s_con; - NMSettingBridgePort *s_port; - int ifindex_slave = nm_device_get_ifindex(slave); - NMConnection *applied_connection = nm_device_get_applied_connection(device); - - const Option *option; + NMSettingConnection *s_con; + NMSettingBridgePort *s_port; + int ifindex_slave = nm_device_get_ifindex(slave); + NMConnection *applied_connection = nm_device_get_applied_connection(device); + const NMPlatformLink *pllink; g_return_val_if_fail(ifindex_slave > 0, FALSE); s_con = nm_connection_get_setting_connection(connection); s_port = _nm_connection_ensure_setting(connection, NM_TYPE_SETTING_BRIDGE_PORT); - - for (option = slave_options; option->name; option++) { - gs_free char *str = nm_platform_sysctl_slave_get_option(nm_device_get_platform(device), - ifindex_slave, - option->sysname); - uint value; - - if (str) { - /* See comments in set_sysfs_uint() about centiseconds. */ - if (option->user_hz_compensate) { - value = _nm_utils_ascii_str_to_int64(str, - 10, - option->nm_min * 100, - option->nm_max * 100, - option->nm_default * 100); - value /= 100; - } else { - value = _nm_utils_ascii_str_to_int64(str, - 10, - option->nm_min, - option->nm_max, - option->nm_default); - } - g_object_set(s_port, option->name, value, NULL); - } else - _LOGW(LOGD_BRIDGE, "failed to read bridge port setting '%s'", option->sysname); + pllink = nm_platform_link_get(nm_device_get_platform(slave), ifindex_slave); + + if (pllink && pllink->port_kind == NM_PORT_KIND_BRIDGE) { + g_object_set(s_port, + NM_SETTING_BRIDGE_PORT_PATH_COST, + pllink->port_data.bridge.path_cost, + NULL); + g_object_set(s_port, + NM_SETTING_BRIDGE_PORT_PRIORITY, + pllink->port_data.bridge.priority, + NULL); + g_object_set(s_port, + NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, + pllink->port_data.bridge.hairpin, + NULL); } g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, nm_connection_get_uuid(applied_connection), - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_BRIDGE_SETTING_NAME, NULL); return TRUE; @@ -1234,9 +1141,21 @@ static const NMDBusInterfaceInfoExtended interface_info_device_bridge = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_BRIDGE, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Slaves", "ao", NM_DEVICE_SLAVES), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Slaves", + "ao", + NM_DEVICE_SLAVES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device-dummy.c b/src/core/devices/nm-device-dummy.c index 36a0ee6f..b7c4106a 100644 --- a/src/core/devices/nm-device-dummy.c +++ b/src/core/devices/nm-device-dummy.c @@ -107,9 +107,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_dummy = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_DUMMY, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", - "s", - NM_DEVICE_HW_ADDRESS), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c index aedacc24..0f7f9d65 100644 --- a/src/core/devices/nm-device-ethernet.c +++ b/src/core/devices/nm-device-ethernet.c @@ -1431,7 +1431,7 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) mtu = nm_setting_ppp_get_mtu(s_ppp); mru = nm_setting_ppp_get_mru(s_ppp); - mxu = MAX(mru, mtu); + mxu = NM_MAX(mru, mtu); if (mxu) { _LOGD(LOGD_PPP, "set MTU to %u (PPP interface MRU %u, MTU %u)", @@ -1711,10 +1711,8 @@ new_default_connection(NMDevice *self) NMSettingsConnection *const *connections; NMSetting *setting; gs_unref_hashtable GHashTable *existing_ids = NULL; - struct udev_device *dev; const char *perm_hw_addr; const char *iface; - const char *uprop = "0"; gs_free char *defname = NULL; gs_free char *uuid = NULL; guint i, n_connections; @@ -1760,30 +1758,6 @@ new_default_connection(NMDevice *self) iface, NULL); - /* Check if we should create a Link-Local only connection */ - dev = nm_platform_link_get_udev_device(nm_device_get_platform(NM_DEVICE(self)), - nm_device_get_ip_ifindex(self)); - if (dev) - uprop = udev_device_get_property_value(dev, "NM_AUTO_DEFAULT_LINK_LOCAL_ONLY"); - - if (_nm_utils_ascii_str_to_bool(uprop, FALSE)) { - setting = nm_setting_ip4_config_new(); - g_object_set(setting, - NM_SETTING_IP_CONFIG_METHOD, - NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL, - NULL); - nm_connection_add_setting(connection, setting); - - setting = nm_setting_ip6_config_new(); - g_object_set(setting, - NM_SETTING_IP_CONFIG_METHOD, - NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL, - NM_SETTING_IP_CONFIG_MAY_FAIL, - TRUE, - NULL); - nm_connection_add_setting(connection, setting); - } - return connection; } @@ -2043,14 +2017,20 @@ static const NMDBusInterfaceInfoExtended interface_info_device_wired = { NM_DBUS_INTERFACE_DEVICE_WIRED, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("PermHwAddress", - "s", - NM_DEVICE_PERM_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "PermHwAddress", + "s", + NM_DEVICE_PERM_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Speed", "u", NM_DEVICE_ETHERNET_SPEED), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("S390Subchannels", "as", NM_DEVICE_ETHERNET_S390_SUBCHANNELS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device-factory.c b/src/core/devices/nm-device-factory.c index 2f0ae2e8..c97fbb57 100644 --- a/src/core/devices/nm-device-factory.c +++ b/src/core/devices/nm-device-factory.c @@ -396,6 +396,7 @@ nm_device_factory_manager_load_factories(NMDeviceFactoryManagerFactoryFunc callb _ADD_INTERNAL(nm_bridge_device_factory_get_type); _ADD_INTERNAL(nm_dummy_device_factory_get_type); _ADD_INTERNAL(nm_ethernet_device_factory_get_type); + _ADD_INTERNAL(nm_hsr_device_factory_get_type); _ADD_INTERNAL(nm_infiniband_device_factory_get_type); _ADD_INTERNAL(nm_ip_tunnel_device_factory_get_type); _ADD_INTERNAL(nm_loopback_device_factory_get_type); diff --git a/src/core/devices/nm-device-generic.c b/src/core/devices/nm-device-generic.c index c0dcf0de..ead671d4 100644 --- a/src/core/devices/nm-device-generic.c +++ b/src/core/devices/nm-device-generic.c @@ -168,7 +168,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_generic = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_GENERIC, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( "TypeDescription", "s", diff --git a/src/core/devices/nm-device-hsr.c b/src/core/devices/nm-device-hsr.c new file mode 100644 index 00000000..8156fa77 --- /dev/null +++ b/src/core/devices/nm-device-hsr.c @@ -0,0 +1,287 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Red Hat, Inc. + */ + +#include "src/core/nm-default-daemon.h" + +#include "nm-manager.h" +#include "nm-device-hsr.h" + +#include <linux/if_ether.h> + +#include "libnm-core-intern/nm-core-internal.h" +#include "nm-act-request.h" +#include "nm-device-private.h" +#include "nm-setting-hsr.h" +#include "libnm-platform/nm-platform.h" +#include "nm-device-factory.h" + +#define _NMLOG_DEVICE_TYPE NMDeviceHsr +#include "nm-device-logging.h" + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE(NMDeviceHsr, + PROP_PORT1, + PROP_PORT2, + PROP_SUPERVISION_ADDRESS, + PROP_MULTICAST_SPEC, + PROP_PRP, ); + +typedef struct { + NMPlatformLnkHsr props; +} NMDeviceHsrPrivate; + +struct _NMDeviceHsr { + NMDevice parent; + NMDeviceHsrPrivate _priv; +}; + +struct _NMDeviceHsrClass { + NMDeviceClass parent; +}; + +G_DEFINE_TYPE(NMDeviceHsr, nm_device_hsr, NM_TYPE_DEVICE) + +#define NM_DEVICE_HSR_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMDeviceHsr, NM_IS_DEVICE_HSR, NMDevice) + +/*****************************************************************************/ + +static NMDeviceCapabilities +get_generic_capabilities(NMDevice *dev) +{ + return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_IS_SOFTWARE; +} + +static void +update_properties(NMDevice *device) +{ + NMDeviceHsr *self; + NMDeviceHsrPrivate *priv; + const NMPlatformLink *plink; + const NMPlatformLnkHsr *props; + int ifindex; + + g_return_if_fail(NM_IS_DEVICE_HSR(device)); + self = NM_DEVICE_HSR(device); + priv = NM_DEVICE_HSR_GET_PRIVATE(self); + + ifindex = nm_device_get_ifindex(device); + g_return_if_fail(ifindex > 0); + props = nm_platform_link_get_lnk_hsr(nm_device_get_platform(device), ifindex, &plink); + + if (!props) { + _LOGW(LOGD_PLATFORM, "could not get HSR properties"); + return; + } + + g_object_freeze_notify((GObject *) device); + +#define CHECK_PROPERTY_CHANGED(field, prop) \ + G_STMT_START \ + { \ + if (priv->props.field != props->field) { \ + priv->props.field = props->field; \ + _notify(self, prop); \ + } \ + } \ + G_STMT_END + + CHECK_PROPERTY_CHANGED(port1, PROP_PORT1); + CHECK_PROPERTY_CHANGED(port2, PROP_PORT2); + CHECK_PROPERTY_CHANGED(multicast_spec, PROP_MULTICAST_SPEC); + CHECK_PROPERTY_CHANGED(prp, PROP_PRP); + + if (!nm_ether_addr_equal(&priv->props.supervision_address, &props->supervision_address)) + _notify(self, PROP_SUPERVISION_ADDRESS); + + g_object_thaw_notify((GObject *) device); +} + +static void +link_changed(NMDevice *device, const NMPlatformLink *pllink) +{ + NM_DEVICE_CLASS(nm_device_hsr_parent_class)->link_changed(device, pllink); + update_properties(device); +} + +static gboolean +create_and_realize(NMDevice *device, + NMConnection *connection, + NMDevice *parent, + const NMPlatformLink **out_plink, + GError **error) +{ + const char *iface = nm_device_get_iface(device); + NMSettingHsr *s_hsr; + NMPlatformLnkHsr lnk = {}; + int r; + + s_hsr = _nm_connection_get_setting(connection, NM_TYPE_SETTING_HSR); + nm_assert(s_hsr); + + if (nm_setting_hsr_get_port1(s_hsr) != NULL) + lnk.port1 = nm_platform_link_get_ifindex(NM_PLATFORM_GET, nm_setting_hsr_get_port1(s_hsr)); + if (nm_setting_hsr_get_port2(s_hsr) != NULL) + lnk.port2 = nm_platform_link_get_ifindex(NM_PLATFORM_GET, nm_setting_hsr_get_port2(s_hsr)); + lnk.multicast_spec = nm_setting_hsr_get_multicast_spec(s_hsr); + lnk.prp = nm_setting_hsr_get_prp(s_hsr); + r = nm_platform_link_hsr_add(nm_device_get_platform(device), iface, &lnk, out_plink); + if (r < 0) { + g_set_error(error, + NM_DEVICE_ERROR, + NM_DEVICE_ERROR_CREATION_FAILED, + "Failed to create HSR interface '%s' for '%s': %s", + iface, + nm_connection_get_id(connection), + nm_strerror(r)); + return FALSE; + } + + return TRUE; +} + +/*****************************************************************************/ + +static void +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + NMDeviceHsr *self = NM_DEVICE_HSR(object); + NMDeviceHsrPrivate *priv = NM_DEVICE_HSR_GET_PRIVATE(self); + NMDevice *port; + + switch (prop_id) { + case PROP_PORT1: + port = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, priv->props.port1); + nm_dbus_utils_g_value_set_object_path(value, port); + break; + case PROP_PORT2: + port = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, priv->props.port2); + nm_dbus_utils_g_value_set_object_path(value, port); + break; + case PROP_SUPERVISION_ADDRESS: + g_value_take_string(value, nm_ether_addr_to_string_dup(&priv->props.supervision_address)); + break; + case PROP_MULTICAST_SPEC: + g_value_set_uchar(value, priv->props.multicast_spec); + break; + case PROP_PRP: + g_value_set_boolean(value, priv->props.prp); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +nm_device_hsr_init(NMDeviceHsr *self) +{} + +/*****************************************************************************/ + +static const NMDBusInterfaceInfoExtended interface_info_device_hsr = { + .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( + NM_DBUS_INTERFACE_DEVICE_HSR, + .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Port1", "o", NM_DEVICE_HSR_PORT1), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Port2", "o", NM_DEVICE_HSR_PORT2), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("SupervisionAddress", + "s", + NM_DEVICE_HSR_SUPERVISION_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("MulticastSpec", + "y", + NM_DEVICE_HSR_MULTICAST_SPEC), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Prp", "b", NM_DEVICE_HSR_PRP), ), ), +}; + +static void +nm_device_hsr_class_init(NMDeviceHsrClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS(klass); + NMDeviceClass *device_class = NM_DEVICE_CLASS(klass); + + object_class->get_property = get_property; + + dbus_object_class->interface_infos = NM_DBUS_INTERFACE_INFOS(&interface_info_device_hsr); + + device_class->connection_type_supported = NM_SETTING_HSR_SETTING_NAME; + device_class->connection_type_check_compatible = NM_SETTING_HSR_SETTING_NAME; + device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES(NM_LINK_TYPE_HSR); + + device_class->link_changed = link_changed; + device_class->create_and_realize = create_and_realize; + device_class->get_generic_capabilities = get_generic_capabilities; + + obj_properties[PROP_PORT1] = g_param_spec_string(NM_DEVICE_HSR_PORT1, + "", + "", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_PORT2] = g_param_spec_string(NM_DEVICE_HSR_PORT2, + "", + "", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_SUPERVISION_ADDRESS] = + g_param_spec_string(NM_DEVICE_HSR_SUPERVISION_ADDRESS, + "", + "", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_MULTICAST_SPEC] = + g_param_spec_uchar(NM_DEVICE_HSR_MULTICAST_SPEC, + "", + "", + 0, + G_MAXUINT8, + 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_PRP] = g_param_spec_boolean(NM_DEVICE_HSR_PRP, + "", + "", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); +} + +/*****************************************************************************/ + +#define NM_TYPE_HSR_DEVICE_FACTORY (nm_hsr_device_factory_get_type()) +#define NM_HSR_DEVICE_FACTORY(obj) \ + (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_HSR_DEVICE_FACTORY, NMHsrDeviceFactory)) + +static NMDevice * +create_device(NMDeviceFactory *factory, + const char *iface, + const NMPlatformLink *plink, + NMConnection *connection, + gboolean *out_ignore) +{ + return g_object_new(NM_TYPE_DEVICE_HSR, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "hsr", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_HSR, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_HSR, + NULL); +} + +NM_DEVICE_FACTORY_DEFINE_INTERNAL( + HSR, + Hsr, + hsr, + NM_DEVICE_FACTORY_DECLARE_LINK_TYPES(NM_LINK_TYPE_HSR) + NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES(NM_SETTING_HSR_SETTING_NAME), + factory_class->create_device = create_device;) diff --git a/src/core/devices/nm-device-hsr.h b/src/core/devices/nm-device-hsr.h new file mode 100644 index 00000000..1da90358 --- /dev/null +++ b/src/core/devices/nm-device-hsr.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Red Hat, Inc. + */ + +#ifndef __NETWORKMANAGER_DEVICE_HSR_H__ +#define __NETWORKMANAGER_DEVICE_HSR_H__ + +#include "nm-device.h" + +#define NM_TYPE_DEVICE_HSR (nm_device_hsr_get_type()) +#define NM_DEVICE_HSR(obj) (_NM_G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_HSR, NMDeviceHsr)) +#define NM_DEVICE_HSR_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_DEVICE_HSR, NMDeviceHsrClass)) +#define NM_IS_DEVICE_HSR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_DEVICE_HSR)) +#define NM_IS_DEVICE_HSR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_DEVICE_HSR)) +#define NM_DEVICE_HSR_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DEVICE_HSR, NMDeviceHsrClass)) + +#define NM_DEVICE_HSR_PORT1 "port1" +#define NM_DEVICE_HSR_PORT2 "port2" +#define NM_DEVICE_HSR_SUPERVISION_ADDRESS "supervision-address" +#define NM_DEVICE_HSR_MULTICAST_SPEC "multicast-spec" +#define NM_DEVICE_HSR_PRP "prp" + +typedef struct _NMDeviceHsr NMDeviceHsr; +typedef struct _NMDeviceHsrClass NMDeviceHsrClass; + +GType nm_device_hsr_get_type(void); + +#endif /* __NETWORKMANAGER_DEVICE_HSR_H__ */ diff --git a/src/core/devices/nm-device-infiniband.c b/src/core/devices/nm-device-infiniband.c index 6ce61d0b..c974696c 100644 --- a/src/core/devices/nm-device-infiniband.c +++ b/src/core/devices/nm-device-infiniband.c @@ -362,8 +362,16 @@ static const NMDBusInterfaceInfoExtended interface_info_device_infiniband = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_INFINIBAND, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device-tun.c b/src/core/devices/nm-device-tun.c index 430e62aa..28b03cec 100644 --- a/src/core/devices/nm-device-tun.c +++ b/src/core/devices/nm-device-tun.c @@ -452,9 +452,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_tun = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("MultiQueue", "b", NM_DEVICE_TUN_MULTI_QUEUE), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", - "s", - NM_DEVICE_HW_ADDRESS), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device-vlan.c b/src/core/devices/nm-device-vlan.c index 7849e724..cc649ec9 100644 --- a/src/core/devices/nm-device-vlan.c +++ b/src/core/devices/nm-device-vlan.c @@ -525,8 +525,16 @@ static const NMDBusInterfaceInfoExtended interface_info_device_vlan = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_VLAN, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Parent", "o", NM_DEVICE_PARENT), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("VlanId", "u", NM_DEVICE_VLAN_ID), ), ), }; diff --git a/src/core/devices/nm-device-vxlan.c b/src/core/devices/nm-device-vxlan.c index 061ee3f2..6a23d51e 100644 --- a/src/core/devices/nm-device-vxlan.c +++ b/src/core/devices/nm-device-vxlan.c @@ -576,7 +576,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_vxlan = { NM_DBUS_INTERFACE_DEVICE_VXLAN, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Parent", "o", NM_DEVICE_PARENT), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Id", "u", NM_DEVICE_VXLAN_ID), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Group", "s", NM_DEVICE_VXLAN_GROUP), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Local", "s", NM_DEVICE_VXLAN_LOCAL), diff --git a/src/core/devices/nm-device-wireguard.c b/src/core/devices/nm-device-wireguard.c index db02033d..dd40d11e 100644 --- a/src/core/devices/nm-device-wireguard.c +++ b/src/core/devices/nm-device-wireguard.c @@ -598,7 +598,7 @@ _peers_add(NMDeviceWireGuard *self, NMWireGuardPeer *peer) }; c_list_link_tail(&priv->lst_peers_head, &peer_data->lst_peers); - if (!nm_g_hash_table_add(priv->peers, peer_data)) + if (!g_hash_table_add(priv->peers, peer_data)) nm_assert_not_reached(); return peer_data; } @@ -720,7 +720,7 @@ _peers_retry_in_msec(PeerData *peer_data, gboolean after_failure) return RETRY_IN_MSEC_MAX; /* double the retry-time, starting with one second. */ - return NM_MIN(RETRY_IN_MSEC_MAX, (1u << peer_data->ep_resolv.resolv_fail_count) * 500); + return NM_MIN(RETRY_IN_MSEC_MAX, (1l << peer_data->ep_resolv.resolv_fail_count) * 500); } static void diff --git a/src/core/devices/nm-device-wpan.c b/src/core/devices/nm-device-wpan.c index 282eea87..7885355d 100644 --- a/src/core/devices/nm-device-wpan.c +++ b/src/core/devices/nm-device-wpan.c @@ -197,9 +197,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_wpan = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_WPAN, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", - "s", - NM_DEVICE_HW_ADDRESS), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index d1212560..16f8e1f2 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -22,6 +22,7 @@ #include <linux/rtnetlink.h> #include <linux/if_ether.h> #include <linux/if_infiniband.h> +#include <libudev.h> #include "libnm-std-aux/unaligned.h" #include "libnm-glib-aux/nm-uuid.h" @@ -303,6 +304,8 @@ typedef struct { NMEthtoolCoalesceState *coalesce; NMEthtoolRingState *ring; NMEthtoolPauseState *pause; + NMEthtoolChannelsState *channels; + NMEthtoolEEEState *eee; } EthtoolState; typedef enum { @@ -1030,12 +1033,14 @@ _prop_get_connection_stable_id(NMDevice *self, gs_free char *generated = NULL; NMUtilsStableType stable_type; NMSettingConnection *s_con; + NMSettingWireless *s_wifi; gboolean hwaddr_is_fake; const char *hwaddr; const char *stable_id; const char *uuid; - s_con = nm_connection_get_setting_connection(connection); + s_con = nm_connection_get_setting_connection(connection); + s_wifi = nm_connection_get_setting_wireless(connection); stable_id = nm_setting_connection_get_stable_id(s_con); @@ -1058,6 +1063,7 @@ _prop_get_connection_stable_id(NMDevice *self, !hwaddr_is_fake ? hwaddr : NULL, nm_utils_boot_id_str(), uuid, + s_wifi ? nm_setting_wireless_get_ssid(s_wifi) : NULL, &generated); /* current_stable_id_type is a bitfield! */ @@ -1517,7 +1523,7 @@ _prop_get_ipvx_route_table(NMDevice *self, int addr_family) if (route_table == 0u && connection && (s_con = nm_connection_get_setting_connection(connection)) - && (nm_streq0(nm_setting_connection_get_slave_type(s_con), NM_SETTING_VRF_SETTING_NAME) + && (nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_VRF_SETTING_NAME) && priv->master && nm_device_get_device_type(priv->master) == NM_DEVICE_TYPE_VRF)) { const NMPlatformLnkVrf *lnk; @@ -1655,7 +1661,7 @@ _prop_get_ipv4_dad_timeout(NMDevice *self) self, 0, NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX, - 0); + 200); } static guint32 @@ -2017,7 +2023,10 @@ _prop_get_connection_mud_url(NMDevice *self, NMSettingConnection *s_con) } static GBytes * -_prop_get_ipv4_dhcp_client_id(NMDevice *self, NMConnection *connection, GBytes *hwaddr) +_prop_get_ipv4_dhcp_client_id(NMDevice *self, + NMConnection *connection, + GBytes *hwaddr, + gboolean *out_send_client_id) { NMSettingIPConfig *s_ip4; const char *client_id; @@ -2030,6 +2039,8 @@ _prop_get_ipv4_dhcp_client_id(NMDevice *self, NMConnection *connection, GBytes * GBytes *result; gs_free char *logstr1 = NULL; + NM_SET_OUT(out_send_client_id, TRUE); + s_ip4 = nm_connection_get_setting_ip4_config(connection); client_id = nm_setting_ip4_config_get_dhcp_client_id(NM_SETTING_IP4_CONFIG(s_ip4)); @@ -2049,6 +2060,12 @@ _prop_get_ipv4_dhcp_client_id(NMDevice *self, NMConnection *connection, GBytes * return NULL; } + if (nm_streq(client_id, "none")) { + _LOGD(LOGD_DEVICE | LOGD_DHCP4 | LOGD_IP4, "ipv4.dhcp-client-id: set to \"none\""); + NM_SET_OUT(out_send_client_id, FALSE); + return NULL; + } + if (nm_streq(client_id, "mac")) { if (!hwaddr) { fail_reason = "missing link-layer address"; @@ -2335,7 +2352,7 @@ _prop_get_x_cloned_mac_address(NMDevice *self, NMConnection *connection, gboolea if (v == NM_SETTING_MAC_RANDOMIZATION_ALWAYS) addr = NM_CLONED_MAC_RANDOM; } - } else if (NM_CLONED_MAC_IS_SPECIAL(a) || nm_utils_hwaddr_valid(a, ETH_ALEN)) + } else if (NM_CLONED_MAC_IS_SPECIAL(a, is_wifi) || nm_utils_hwaddr_valid(a, ETH_ALEN)) addr = a; } @@ -2374,6 +2391,8 @@ _ethtool_features_reset(NMDevice *self, NMPlatform *platform, EthtoolState *etht gs_free NMEthtoolFeatureStates *features = NULL; features = g_steal_pointer(ðtool_state->features); + if (!features) + return; if (!nm_platform_ethtool_set_features(platform, ethtool_state->ifindex, @@ -2393,8 +2412,7 @@ _ethtool_features_set(NMDevice *self, { gs_free NMEthtoolFeatureStates *features = NULL; - if (ethtool_state->features) - _ethtool_features_reset(self, platform, ethtool_state); + _ethtool_features_reset(self, platform, ethtool_state); if (nm_setting_ethtool_init_features(s_ethtool, ethtool_state->requested) == 0) return; @@ -2592,6 +2610,104 @@ _ethtool_ring_set(NMDevice *self, } static void +_ethtool_channels_reset(NMDevice *self, NMPlatform *platform, EthtoolState *ethtool_state) +{ + gs_free NMEthtoolChannelsState *channels = NULL; + + nm_assert(NM_IS_DEVICE(self)); + nm_assert(NM_IS_PLATFORM(platform)); + nm_assert(ethtool_state); + + channels = g_steal_pointer(ðtool_state->channels); + if (!channels) + return; + + if (!nm_platform_ethtool_set_channels(platform, ethtool_state->ifindex, channels)) + _LOGW(LOGD_DEVICE, "ethtool: failure resetting one or more channels settings"); + else + _LOGD(LOGD_DEVICE, "ethtool: channels settings successfully reset"); +} + +static void +_ethtool_channels_set(NMDevice *self, + NMPlatform *platform, + EthtoolState *ethtool_state, + NMSettingEthtool *s_ethtool) +{ + NMEthtoolChannelsState channels_old; + NMEthtoolChannelsState channels_new; + GHashTable *hash; + GHashTableIter iter; + const char *name; + GVariant *variant; + gboolean has_old = FALSE; + + nm_assert(NM_IS_DEVICE(self)); + nm_assert(NM_IS_PLATFORM(platform)); + nm_assert(NM_IS_SETTING_ETHTOOL(s_ethtool)); + nm_assert(ethtool_state); + nm_assert(!ethtool_state->channels); + + hash = _nm_setting_option_hash(NM_SETTING(s_ethtool), FALSE); + if (!hash) + return; + + g_hash_table_iter_init(&iter, hash); + while (g_hash_table_iter_next(&iter, (gpointer *) &name, (gpointer *) &variant)) { + NMEthtoolID ethtool_id = nm_ethtool_id_get_by_name(name); + guint32 u32; + + if (!nm_ethtool_id_is_channels(ethtool_id)) + continue; + + nm_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_UINT32)); + + if (!has_old) { + if (!nm_platform_ethtool_get_link_channels(platform, + ethtool_state->ifindex, + &channels_old)) { + _LOGW(LOGD_DEVICE, + "ethtool: failure setting channels options (cannot read existing setting)"); + return; + } + has_old = TRUE; + channels_new = channels_old; + } + + u32 = g_variant_get_uint32(variant); + + switch (ethtool_id) { + case NM_ETHTOOL_ID_CHANNELS_RX: + channels_new.rx = u32; + break; + case NM_ETHTOOL_ID_CHANNELS_TX: + channels_new.tx = u32; + break; + case NM_ETHTOOL_ID_CHANNELS_OTHER: + channels_new.other = u32; + break; + case NM_ETHTOOL_ID_CHANNELS_COMBINED: + channels_new.combined = u32; + break; + default: + nm_assert_not_reached(); + } + } + + if (!has_old) + return; + + ethtool_state->channels = nm_memdup(&channels_old, sizeof(channels_old)); + + if (!nm_platform_ethtool_set_channels(platform, ethtool_state->ifindex, &channels_new)) { + _LOGW(LOGD_DEVICE, "ethtool: failure setting channels settings"); + return; + } + + _LOGD(LOGD_DEVICE, "ethtool: channels settings successfully set"); +} + +static void _ethtool_pause_reset(NMDevice *self, NMPlatform *platform, EthtoolState *ethtool_state) { gs_free NMEthtoolPauseState *pause = NULL; @@ -2611,6 +2727,25 @@ _ethtool_pause_reset(NMDevice *self, NMPlatform *platform, EthtoolState *ethtool } static void +_ethtool_eee_reset(NMDevice *self, NMPlatform *platform, EthtoolState *ethtool_state) +{ + gs_free NMEthtoolEEEState *eee = NULL; + + nm_assert(NM_IS_DEVICE(self)); + nm_assert(NM_IS_PLATFORM(platform)); + nm_assert(ethtool_state); + + eee = g_steal_pointer(ðtool_state->eee); + if (!eee) + return; + + if (!nm_platform_ethtool_set_eee(platform, ethtool_state->ifindex, eee)) + _LOGW(LOGD_DEVICE, "ethtool: failure resetting eee settings"); + else + _LOGD(LOGD_DEVICE, "ethtool: eee settings successfully reset"); +} + +static void _ethtool_pause_set(NMDevice *self, NMPlatform *platform, EthtoolState *ethtool_state, @@ -2699,6 +2834,73 @@ _ethtool_pause_set(NMDevice *self, } static void +_ethtool_eee_set(NMDevice *self, + NMPlatform *platform, + EthtoolState *ethtool_state, + NMSettingEthtool *s_ethtool) +{ + NMEthtoolEEEState eee_old; + NMEthtoolEEEState eee_new; + GHashTable *hash; + GHashTableIter iter; + const char *name; + GVariant *variant; + gboolean has_old = FALSE; + NMTernary eee = NM_TERNARY_DEFAULT; + + nm_assert(NM_IS_DEVICE(self)); + nm_assert(NM_IS_PLATFORM(platform)); + nm_assert(NM_IS_SETTING_ETHTOOL(s_ethtool)); + nm_assert(ethtool_state); + nm_assert(!ethtool_state->eee); + + hash = _nm_setting_option_hash(NM_SETTING(s_ethtool), FALSE); + if (!hash) + return; + + g_hash_table_iter_init(&iter, hash); + while (g_hash_table_iter_next(&iter, (gpointer *) &name, (gpointer *) &variant)) { + NMEthtoolID ethtool_id = nm_ethtool_id_get_by_name(name); + + if (!nm_ethtool_id_is_eee(ethtool_id)) + continue; + + nm_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_BOOLEAN)); + + if (!has_old) { + if (!nm_platform_ethtool_get_link_eee(platform, ethtool_state->ifindex, &eee_old)) { + _LOGW(LOGD_DEVICE, + "ethtool: failure setting eee options (cannot read " + "existing setting)"); + return; + } + has_old = TRUE; + } + + if (ethtool_id == NM_ETHTOOL_ID_EEE_ENABLED) + eee = g_variant_get_boolean(variant); + else + nm_assert_not_reached(); + } + + if (!has_old) + return; + + eee_new = eee_old; + if (eee != NM_TERNARY_DEFAULT) + eee_new.enabled = !!eee; + + ethtool_state->eee = nm_memdup(&eee_old, sizeof(eee_old)); + + if (!nm_platform_ethtool_set_eee(platform, ethtool_state->ifindex, &eee_new)) { + _LOGW(LOGD_DEVICE, "ethtool: failure setting eee settings"); + return; + } + + _LOGD(LOGD_DEVICE, "ethtool: eee settings successfully set"); +} + +static void _ethtool_state_reset(NMDevice *self) { NMPlatform *platform = nm_device_get_platform(self); @@ -2708,14 +2910,12 @@ _ethtool_state_reset(NMDevice *self) if (!ethtool_state) return; - if (ethtool_state->features) - _ethtool_features_reset(self, platform, ethtool_state); - if (ethtool_state->coalesce) - _ethtool_coalesce_reset(self, platform, ethtool_state); - if (ethtool_state->ring) - _ethtool_ring_reset(self, platform, ethtool_state); - if (ethtool_state->pause) - _ethtool_pause_reset(self, platform, ethtool_state); + _ethtool_features_reset(self, platform, ethtool_state); + _ethtool_coalesce_reset(self, platform, ethtool_state); + _ethtool_ring_reset(self, platform, ethtool_state); + _ethtool_pause_reset(self, platform, ethtool_state); + _ethtool_channels_reset(self, platform, ethtool_state); + _ethtool_eee_reset(self, platform, ethtool_state); } static void @@ -2750,9 +2950,11 @@ _ethtool_state_set(NMDevice *self) _ethtool_coalesce_set(self, platform, ethtool_state, s_ethtool); _ethtool_ring_set(self, platform, ethtool_state, s_ethtool); _ethtool_pause_set(self, platform, ethtool_state, s_ethtool); + _ethtool_channels_set(self, platform, ethtool_state, s_ethtool); + _ethtool_eee_set(self, platform, ethtool_state, s_ethtool); if (ethtool_state->features || ethtool_state->coalesce || ethtool_state->ring - || ethtool_state->pause) + || ethtool_state->pause || ethtool_state->channels || ethtool_state->eee) priv->ethtool_state = g_steal_pointer(ðtool_state); } @@ -2863,7 +3065,7 @@ nm_device_link_properties_set(NMDevice *self, gboolean reapply) _RESET(NM_PLATFORM_LINK_CHANGE_GSO_MAX_SEGMENTS, gso_max_segments); _RESET(NM_PLATFORM_LINK_CHANGE_GRO_MAX_SIZE, gro_max_size); - if (nm_platform_link_change(platform, ifindex, &props, NULL, flags)) { + if (nm_platform_link_change(platform, ifindex, &props, NULL, NULL, flags)) { _LOGD(LOGD_DEVICE, "link properties successfully set"); } else { _LOGW(LOGD_DEVICE, "failure setting link properties"); @@ -2891,6 +3093,7 @@ link_properties_reset(NMDevice *self) ifindex, &priv->link_props_state.props, NULL, + NULL, priv->link_props_state.flags)) { _LOGD(LOGD_DEVICE, "link properties successfully reset"); } else { @@ -4228,6 +4431,19 @@ update_external_connection(NMDevice *self) } static void +_dev_ipv6_log_conflicts(NMDevice *self, GArray *conflicts) +{ + guint i; + char sbuf[NM_INET_ADDRSTRLEN]; + + for (i = 0; i < conflicts->len; i++) { + const struct in6_addr *addr = &nm_g_array_index(conflicts, const struct in6_addr, i); + + _LOGI(LOGD_DEVICE, "Conflict detected for IPv6 address: %s", nm_inet6_ntop(addr, sbuf)); + } +} + +static void _dev_l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); @@ -4250,7 +4466,7 @@ _dev_l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, N char buf_addr[NM_INET_ADDRSTRLEN]; if (addr_info->state == NM_L3_ACD_ADDR_STATE_USED) { - _LOGI(LOGD_DEVICE, + _LOGW(LOGD_DEVICE, "IP address %s cannot be configured because it is already in use in the " "network by host %s", nm_inet4_ntop(addr_info->addr, buf_addr), @@ -4284,7 +4500,6 @@ _dev_l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, N if (priv->ipshared_data_4.state == NM_DEVICE_IP_STATE_PENDING && !priv->ipshared_data_4.v4.dnsmasq_manager && priv->ipshared_data_4.v4.l3cd) { _dev_ipshared4_spawn_dnsmasq(self); - nm_clear_l3cd(&priv->ipshared_data_4.v4.l3cd); } _dev_ip_state_check_async(self, AF_UNSPEC); _dev_ipmanual_check_ready(self); @@ -4322,6 +4537,10 @@ _dev_l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, N NM_L3CFG_CHECK_READY_FLAGS_IP6_DAD_READY, &conflicts); if (conflicts) { + if (_NMLOG_ENABLED(LOGL_INFO, LOGD_DEVICE)) { + _dev_ipv6_log_conflicts(self, conflicts); + } + /* nm_ndisc_dad_failed() will emit a new "NDisc:config-received" * signal; _dev_ipac6_ndisc_config_changed() will be called * synchronously to update the current state and schedule a commit. */ @@ -5231,6 +5450,8 @@ nm_device_get_route_metric_default(NMDeviceType device_type) return 200; case NM_DEVICE_TYPE_WIMAX: return 250; + case NM_DEVICE_TYPE_HSR: + return 275; case NM_DEVICE_TYPE_BOND: return 300; case NM_DEVICE_TYPE_TEAM: @@ -5715,7 +5936,7 @@ out: return FALSE; } -#define CONCHECK_P_PROBE_INTERVAL 1 +#define CONCHECK_P_PROBE_INTERVAL 1u static void concheck_periodic_schedule_set(NMDevice *self, int addr_family, ConcheckScheduleMode mode) @@ -5887,7 +6108,7 @@ concheck_update_interval(NMDevice *self, int addr_family, gboolean check_now) new_interval = nm_connectivity_get_interval(concheck_get_mgr(self)); - new_interval = NM_MIN(new_interval, 7 * 24 * 3600); + new_interval = NM_MIN(new_interval, 7u * 24u * 3600u); if (new_interval != priv->concheck_x[IS_IPv4].p_max_interval) { _LOGT(LOGD_CONCHECK, @@ -7133,7 +7354,7 @@ device_ip_link_changed(gpointer user_data) ip_iface = pllink->name; if (!ip_iface[0]) - return FALSE; + return G_SOURCE_REMOVE; if (!nm_streq(priv->ip_iface, ip_iface)) { _LOGI(LOGD_DEVICE, @@ -7989,6 +8210,40 @@ nm_device_owns_iface(NMDevice *self, const char *iface) return FALSE; } +static void +apply_udev_auto_default_configs(NMDevice *self, NMConnection *connection) +{ + struct udev_device *dev; + const char *uprop; + NMSetting *setting; + + dev = nm_platform_link_get_udev_device(nm_device_get_platform(NM_DEVICE(self)), + nm_device_get_ip_ifindex(self)); + if (!dev) + return; + + uprop = udev_device_get_property_value(dev, "NM_AUTO_DEFAULT_LINK_LOCAL_ONLY"); + uprop = uprop ?: udev_device_get_property_value(dev, "ID_NET_AUTO_LINK_LOCAL_ONLY"); + + if (_nm_utils_ascii_str_to_bool(uprop, FALSE)) { + setting = nm_setting_ip4_config_new(); + g_object_set(setting, + NM_SETTING_IP_CONFIG_METHOD, + NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL, + NULL); + nm_connection_add_setting(connection, setting); + + setting = nm_setting_ip6_config_new(); + g_object_set(setting, + NM_SETTING_IP_CONFIG_METHOD, + NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL, + NM_SETTING_IP_CONFIG_MAY_FAIL, + TRUE, + NULL); + nm_connection_add_setting(connection, setting); + } +} + NMConnection * nm_device_new_default_connection(NMDevice *self) { @@ -8002,6 +8257,8 @@ nm_device_new_default_connection(NMDevice *self) if (!connection) return NULL; + apply_udev_auto_default_configs(self, connection); + if (!nm_connection_normalize(connection, NULL, NULL, &error)) { _LOGD(LOGD_DEVICE, "device generated an invalid default connection: %s", error->message); g_error_free(error); @@ -8323,7 +8580,7 @@ nm_device_slave_notify_release(NMDevice *self, master_status = "failed"; break; case NM_DEVICE_STATE_REASON_USER_REQUESTED: - reason = NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED; + reason = NM_DEVICE_STATE_REASON_USER_REQUESTED; master_status = "deactivated by user request"; break; case NM_DEVICE_STATE_REASON_CONNECTION_REMOVED: @@ -9184,7 +9441,7 @@ nm_device_check_slave_connection_compatible(NMDevice *self, NMConnection *slave) s_con = nm_connection_get_setting_connection(slave); g_assert(s_con); - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (!slave_type) return FALSE; @@ -9746,10 +10003,16 @@ activate_stage1_device_prepare(NMDevice *self) master = nm_active_connection_get_master(active); if (master) { if (nm_active_connection_get_state(master) >= NM_ACTIVE_CONNECTION_STATE_DEACTIVATING) { + NMDevice *master_device = nm_active_connection_get_device(master); + NMDeviceStateReason failure_reason = NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED; + _LOGD(LOGD_DEVICE, "master connection is deactivating"); - nm_device_state_changed(self, - NM_DEVICE_STATE_FAILED, - NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED); + + if (master_device && NM_DEVICE_GET_PRIVATE(master_device)->queued_act_request) { + /* if the controller is going to activate again, don't block this device */ + failure_reason = NM_DEVICE_STATE_REASON_NONE; + } + nm_device_state_changed(self, NM_DEVICE_STATE_FAILED, failure_reason); return; } /* If the master connection is ready for slaves, attach ourselves */ @@ -10363,7 +10626,6 @@ _dev_ipmanual_check_ready(NMDevice *self) gboolean has_carrier; NML3CfgCheckReadyFlags flags; gboolean ready; - gs_unref_array GArray *conflicts = NULL; int IS_IPv4; if (priv->ipmanual_data.state_4 != NM_DEVICE_IP_STATE_PENDING @@ -10393,26 +10655,41 @@ _dev_ipmanual_check_ready(NMDevice *self) } } - flags = NM_L3CFG_CHECK_READY_FLAGS_NONE; - if (has_carrier) { - flags |= NM_L3CFG_CHECK_READY_FLAGS_IP4_ACD_READY; - flags |= NM_L3CFG_CHECK_READY_FLAGS_IP6_DAD_READY; - } + flags = NM_L3CFG_CHECK_READY_FLAGS_IP4_ACD_READY; + flags |= NM_L3CFG_CHECK_READY_FLAGS_IP6_DAD_READY; for (IS_IPv4 = 0; IS_IPv4 < 2; IS_IPv4++) { - const int addr_family = IS_IPv4 ? AF_INET : AF_INET6; + const int addr_family = IS_IPv4 ? AF_INET : AF_INET6; + gs_unref_array GArray *conflicts = NULL; ready = nm_l3cfg_check_ready(priv->l3cfg, priv->l3cds[L3_CONFIG_DATA_TYPE_MANUALIP].d, addr_family, flags, &conflicts); - if (conflicts) { - _dev_ipmanual_set_state(self, addr_family, NM_DEVICE_IP_STATE_FAILED); - _dev_ip_state_check_async(self, AF_UNSPEC); - } else if (ready) { - _dev_ipmanual_set_state(self, addr_family, NM_DEVICE_IP_STATE_READY); - _dev_ip_state_check_async(self, AF_UNSPEC); + + if (_NMLOG_ENABLED(LOGL_INFO, LOGD_DEVICE) && conflicts && !IS_IPv4) { + _dev_ipv6_log_conflicts(self, conflicts); + } + + if (ready) { + guint num_addrs = 0; + + num_addrs = + nm_l3_config_data_get_num_addresses(priv->l3cds[L3_CONFIG_DATA_TYPE_MANUALIP].d, + addr_family); + + if (conflicts && conflicts->len == num_addrs) { + _LOGD_ipmanual(addr_family, "all manual addresses failed DAD, failing"); + _dev_ipmanual_set_state(self, addr_family, NM_DEVICE_IP_STATE_FAILED); + _dev_ip_state_check_async(self, AF_UNSPEC); + } else { + if (conflicts) { + _LOGD_ipmanual(addr_family, "some manual addresses passed DAD, continuing"); + } + _dev_ipmanual_set_state(self, addr_family, NM_DEVICE_IP_STATE_READY); + _dev_ip_state_check_async(self, AF_UNSPEC); + } } } } @@ -10692,8 +10969,10 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family) const char *const *reject_servers; const char *hostname; gboolean hostname_is_fqdn; + gboolean send_client_id; + + client_id = _prop_get_ipv4_dhcp_client_id(self, connection, hwaddr, &send_client_id); - client_id = _prop_get_ipv4_dhcp_client_id(self, connection, hwaddr); vendor_class_identifier = _prop_get_ipv4_dhcp_vendor_class_identifier(self, NM_SETTING_IP4_CONFIG(s_ip)); reject_servers = nm_setting_ip_config_get_dhcp_reject_servers(s_ip, NULL); @@ -10730,6 +11009,7 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family) { .request_broadcast = request_broadcast, .acd_timeout_msec = _prop_get_ipv4_dad_timeout(self), + .send_client_id = send_client_id, }, .previous_lease = priv->l3cds[L3_CONFIG_DATA_TYPE_DHCP_X(IS_IPv4)].d, }; @@ -11560,13 +11840,13 @@ _commit_mtu(NMDevice *self) mtu_plat = nm_platform_link_get_mtu(nm_device_get_platform(self), ifindex); if (ip6_mtu) { - ip6_mtu = NM_MAX(1280, ip6_mtu); + ip6_mtu = NM_MAX(1280u, ip6_mtu); if (!mtu_desired) mtu_desired = mtu_plat; if (mtu_desired) { - mtu_desired = NM_MAX(1280, mtu_desired); + mtu_desired = NM_MAX(1280u, mtu_desired); if (mtu_desired < ip6_mtu) ip6_mtu = mtu_desired; @@ -11736,8 +12016,9 @@ _dev_ipac6_ndisc_config_changed(NMNDisc *ndisc, const NML3ConfigData *l3cd, NMDevice *self) { - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - gboolean ready; + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + gboolean ready; + gs_unref_array GArray *conflicts = NULL; /* The ndisc configuration changes when we receive a new RA or * when a lifetime expires; but also when DAD fails for a @@ -11754,7 +12035,12 @@ _dev_ipac6_ndisc_config_changed(NMNDisc *ndisc, l3cd, AF_INET6, NM_L3CFG_CHECK_READY_FLAGS_IP6_DAD_READY, - NULL); + &conflicts); + + if (_NMLOG_ENABLED(LOGL_INFO, LOGD_DEVICE) && conflicts) { + _dev_ipv6_log_conflicts(self, conflicts); + } + if (ready) { _dev_ipac6_set_state(self, NM_DEVICE_IP_STATE_READY); } else { @@ -11856,16 +12142,8 @@ _dev_ipac6_start(NMDevice *self) NMUtilsIPv6IfaceId iid; gboolean is_token; - if (priv->ipac6_data.state == NM_DEVICE_IP_STATE_NONE) { - if (!g_file_test("/proc/sys/net/ipv6", G_FILE_TEST_IS_DIR)) { - _LOGI_ipac6("addrconf6: kernel does not support IPv6"); - _dev_ipac6_set_state(self, NM_DEVICE_IP_STATE_FAILED); - _dev_ip_state_check_async(self, AF_INET6); - return; - } - + if (priv->ipac6_data.state == NM_DEVICE_IP_STATE_NONE) _dev_ipac6_set_state(self, NM_DEVICE_IP_STATE_PENDING); - } if (NM_IN_SET(priv->ipll_data_6.state, NM_DEVICE_IP_STATE_NONE, NM_DEVICE_IP_STATE_PENDING)) { _dev_ipac6_grace_period_start(self, 30, TRUE); @@ -12406,6 +12684,30 @@ activate_stage3_ip_config(NMDevice *self) ifindex = nm_device_get_ip_ifindex(self); + /* Add the interface to the specified firewall zone */ + switch (priv->fw_state) { + case FIREWALL_STATE_UNMANAGED: + if (nm_device_sys_iface_state_is_external(self)) { + /* fake success */ + priv->fw_state = FIREWALL_STATE_INITIALIZED; + } else if (ifindex > 0) { + priv->fw_state = FIREWALL_STATE_WAIT_STAGE_3; + fw_change_zone(self); + return; + } + /* no ifindex, nothing to do for now */ + break; + case FIREWALL_STATE_WAIT_STAGE_3: + /* a firewall call for stage3 is pending. Return and wait. */ + return; + default: + nm_assert(NM_IN_SET((FirewallState) priv->fw_state, + FIREWALL_STATE_INITIALIZED, + FIREWALL_STATE_WAIT_IP_CONFIG)); + break; + } + nm_assert(ifindex <= 0 || priv->fw_state == FIREWALL_STATE_INITIALIZED); + ipv4_method = nm_device_get_effective_ip_config_method(self, AF_INET); if (nm_streq(ipv4_method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { /* "auto" usually means DHCPv4 or autoconf6, but it doesn't have to be. Subclasses @@ -12414,8 +12716,18 @@ activate_stage3_ip_config(NMDevice *self) } ipv6_method = nm_device_get_effective_ip_config_method(self, AF_INET6); - - if (nm_streq(ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) { + if (!g_file_test("/proc/sys/net/ipv6", G_FILE_TEST_IS_DIR)) { + _NMLOG_ip((nm_device_sys_iface_state_is_external(self) + || NM_IN_STRSET(ipv6_method, + NM_SETTING_IP6_CONFIG_METHOD_AUTO, + NM_SETTING_IP6_CONFIG_METHOD_DISABLED, + NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) + ? LOGL_DEBUG + : LOGL_WARN, + AF_INET6, + "IPv6 not supported by kernel resulting in \"ipv6.method=disabled\""); + ipv6_method = NM_SETTING_IP6_CONFIG_METHOD_DISABLED; + } else if (nm_streq(ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) { ipv6_method = klass->get_ip_method_auto(self, AF_INET6); } @@ -12436,30 +12748,6 @@ activate_stage3_ip_config(NMDevice *self) nm_streq(ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)); } - /* Add the interface to the specified firewall zone */ - switch (priv->fw_state) { - case FIREWALL_STATE_UNMANAGED: - if (nm_device_sys_iface_state_is_external(self)) { - /* fake success */ - priv->fw_state = FIREWALL_STATE_INITIALIZED; - } else if (ifindex > 0) { - priv->fw_state = FIREWALL_STATE_WAIT_STAGE_3; - fw_change_zone(self); - return; - } - /* no ifindex, nothing to do for now */ - break; - case FIREWALL_STATE_WAIT_STAGE_3: - /* a firewall call for stage3 is pending. Return and wait. */ - return; - default: - nm_assert(NM_IN_SET((FirewallState) priv->fw_state, - FIREWALL_STATE_INITIALIZED, - FIREWALL_STATE_WAIT_IP_CONFIG)); - break; - } - nm_assert(ifindex <= 0 || priv->fw_state == FIREWALL_STATE_INITIALIZED); - if (priv->state < NM_DEVICE_STATE_IP_CONFIG) { _dev_ip_state_req_timeout_schedule(self, AF_INET); _dev_ip_state_req_timeout_schedule(self, AF_INET6); @@ -12726,18 +13014,32 @@ out_fail: static void _dev_ipshared4_spawn_dnsmasq(NMDevice *self) { - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const char *ip_iface; - gs_free_error GError *error = NULL; - NMSettingConnection *s_con; - gboolean announce_android_metered; - NMConnection *applied; + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + const char *ip_iface; + gs_free_error GError *error = NULL; + NMSettingConnection *s_con; + gboolean announce_android_metered; + NMConnection *applied; + gs_unref_array GArray *conflicts = NULL; + gboolean ready; nm_assert(priv->ipshared_data_4.v4.firewall_config); nm_assert(priv->ipshared_data_4.v4.dnsmasq_state_id == 0); nm_assert(!priv->ipshared_data_4.v4.dnsmasq_manager); nm_assert(priv->ipshared_data_4.v4.l3cd); + ready = nm_l3cfg_check_ready(priv->l3cfg, + priv->l3cds[L3_CONFIG_DATA_TYPE_SHARED_4].d, + AF_INET, + NM_L3CFG_CHECK_READY_FLAGS_IP4_ACD_READY, + &conflicts); + if (!ready) { + _LOGT_ipshared(AF_INET, "address not ready, wait"); + return; + } + if (conflicts) + goto out_fail; + ip_iface = nm_device_get_ip_iface(self); g_return_if_fail(ip_iface); @@ -12782,9 +13084,11 @@ _dev_ipshared4_spawn_dnsmasq(NMDevice *self) _dev_ipsharedx_set_state(self, AF_INET, NM_DEVICE_IP_STATE_READY); _dev_ip_state_check_async(self, AF_INET); + nm_clear_l3cd(&priv->ipshared_data_4.v4.l3cd); return; out_fail: + nm_clear_l3cd(&priv->ipshared_data_4.v4.l3cd); _dev_ipsharedx_set_state(self, AF_INET, NM_DEVICE_IP_STATE_FAILED); _dev_ip_state_check_async(self, AF_INET); } @@ -12993,7 +13297,7 @@ _nm_device_hash_check_invalid_keys(GHashTable *hash, g_hash_table_iter_init(&iter, hash); while (g_hash_table_iter_next(&iter, (gpointer *) &k, NULL)) { - if (nm_strv_find_first(whitelist, -1, k) < 0) { + if (!nm_strv_contains(whitelist, -1, k)) { first_invalid_key = k; break; } @@ -14952,20 +15256,23 @@ nm_device_set_unmanaged_by_user_settings(NMDevice *self, gboolean now) void nm_device_set_unmanaged_by_user_udev(NMDevice *self) { - int ifindex; - gboolean platform_unmanaged = FALSE; + NMOptionBool platform_unmanaged; + int ifindex; ifindex = self->_priv->ifindex; - if (ifindex <= 0 - || !nm_platform_link_get_unmanaged(nm_device_get_platform(self), - ifindex, - &platform_unmanaged)) + if (ifindex <= 0) + return; + + platform_unmanaged = nm_platform_link_get_unmanaged(nm_device_get_platform(self), ifindex); + if (platform_unmanaged == NM_OPTION_BOOL_DEFAULT) return; nm_device_set_unmanaged_by_flags(self, NM_UNMANAGED_USER_UDEV, - platform_unmanaged, + platform_unmanaged == NM_OPTION_BOOL_TRUE + ? NM_UNMAN_FLAG_OP_SET_UNMANAGED + : NM_UNMAN_FLAG_OP_SET_MANAGED, NM_DEVICE_STATE_REASON_USER_REQUESTED); } @@ -17128,9 +17435,12 @@ _hw_addr_get_cloned(NMDevice *self, addr_out = g_steal_pointer(&hw_addr_generated); type_out = HW_ADDR_TYPE_GENERATED; - } else if (NM_IN_STRSET(addr, NM_CLONED_MAC_STABLE)) { + } else if (nm_streq(addr, NM_CLONED_MAC_STABLE) + || (is_wifi && nm_streq(addr, NM_CLONED_MAC_STABLE_SSID))) { + gs_free char *stable_id_free = NULL; NMUtilsStableType stable_type; const char *stable_id; + GBytes *ssid = NULL; if (priv->hw_addr_type == HW_ADDR_TYPE_GENERATED) { /* hm, we already use a generate MAC address. Most certainly, that is from the same @@ -17138,7 +17448,28 @@ _hw_addr_get_cloned(NMDevice *self, goto out_no_action; } - stable_id = _prop_get_connection_stable_id(self, connection, &stable_type); + if (!nm_streq(addr, NM_CLONED_MAC_STABLE)) { + NMSettingWireless *s_wifi; + + s_wifi = nm_connection_get_setting_wireless(connection); + if (s_wifi) + ssid = nm_setting_wireless_get_ssid(s_wifi); + } + + if (G_UNLIKELY(ssid)) { + stable_type = nm_utils_stable_id_parse_network_ssid(ssid, + nm_connection_get_uuid(connection), + TRUE, + &stable_id_free); + stable_id = stable_id_free; + } else { + /* If @addr is NM_CLONED_MAC_STABLE_SSID, and this is not a Wi-Fi + * profile, the behavior is the same as NM_CLONED_MAC_STABLE. Note + * that this really shouldn't happen, because we have a Wi-Fi + * profile at hand, and an SSID should be set. */ + stable_id = _prop_get_connection_stable_id(self, connection, &stable_type); + } + hw_addr_generated = nm_utils_hw_addr_gen_stable_eth( stable_type, stable_id, @@ -17982,7 +18313,7 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps nm_assert(priv->type == NM_DEVICE_TYPE_UNKNOWN); priv->type = g_value_get_uint(value); nm_assert(priv->type > NM_DEVICE_TYPE_UNKNOWN); - nm_assert(priv->type <= NM_DEVICE_TYPE_LOOPBACK); + nm_assert(priv->type <= NM_DEVICE_TYPE_HSR); break; case PROP_LINK_TYPE: /* construct-only */ @@ -18331,9 +18662,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Capabilities", "u", NM_DEVICE_CAPABILITIES), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Ip4Address", - "u", - NM_DEVICE_IP4_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Ip4Address", + "u", + NM_DEVICE_IP4_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("State", "u", NM_DEVICE_STATE), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("StateReason", "(uu)", diff --git a/src/core/devices/ovs/nm-device-ovs-bridge.c b/src/core/devices/ovs/nm-device-ovs-bridge.c index ff1917b1..3bc03ac1 100644 --- a/src/core/devices/ovs/nm-device-ovs-bridge.c +++ b/src/core/devices/ovs/nm-device-ovs-bridge.c @@ -152,7 +152,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_ovs_bridge = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_OVS_BRIDGE, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Slaves", "ao", NM_DEVICE_SLAVES), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Slaves", + "ao", + NM_DEVICE_SLAVES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/ovs/nm-device-ovs-interface.c b/src/core/devices/ovs/nm-device-ovs-interface.c index fd48c2fd..17eb2c2d 100644 --- a/src/core/devices/ovs/nm-device-ovs-interface.c +++ b/src/core/devices/ovs/nm-device-ovs-interface.c @@ -24,10 +24,21 @@ typedef struct { NMOvsdb *ovsdb; - GSource *wait_link_idle_source; - gulong wait_link_signal_id; - int wait_link_ifindex; - bool wait_link_is_waiting : 1; + + struct { + /* The source for the idle handler to set the TUN ifindex */ + GSource *tun_set_ifindex_idle_source; + /* The cloned MAC to set */ + char *cloned_mac; + /* The id for the signal watching the TUN link to appear/change */ + gulong tun_link_signal_id; + /* The TUN ifindex to set in the idle handler */ + int tun_ifindex; + /* Whether we have determined the cloned MAC */ + bool cloned_mac_evaluated : 1; + /* Whether we are waiting for the kernel link */ + bool waiting : 1; + } wait_link; } NMDeviceOvsInterfacePrivate; struct _NMDeviceOvsInterface { @@ -46,6 +57,13 @@ G_DEFINE_TYPE(NMDeviceOvsInterface, nm_device_ovs_interface, NM_TYPE_DEVICE) /*****************************************************************************/ +static void _netdev_tun_link_cb(NMPlatform *platform, + int obj_type_i, + int ifindex, + NMPlatformLink *pllink, + int change_type_i, + NMDevice *device); + static const char * get_type_description(NMDevice *device) { @@ -117,35 +135,65 @@ check_connection_compatible(NMDevice *device, return TRUE; } +static gboolean +check_waiting_for_link(NMDevice *device, const char *from) +{ + NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); + NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); + NMPlatform *platform = nm_device_get_platform(device); + const NMPlatformLink *pllink; + int ip_ifindex; + const char *reason = NULL; + + if (!priv->wait_link.waiting) + return FALSE; + + nm_assert(priv->wait_link.cloned_mac_evaluated); + ip_ifindex = nm_device_get_ip_ifindex(device); + + if (ip_ifindex <= 0) { + reason = "no ifindex"; + } else if (!(pllink = nm_platform_link_get(platform, ip_ifindex))) { + reason = "platform link not found"; + } else if (priv->wait_link.cloned_mac + && !nm_utils_hwaddr_matches(priv->wait_link.cloned_mac, + -1, + pllink->l_address.data, + pllink->l_address.len)) { + reason = "cloned MAC address is not set yet"; + } else { + priv->wait_link.waiting = FALSE; + } + + if (priv->wait_link.waiting) + _LOGT(LOGD_DEVICE, "ovs-wait-link(%s): not ready: %s", from, reason); + + return priv->wait_link.waiting; +} + static void link_changed(NMDevice *device, const NMPlatformLink *pllink) { - NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(device); + NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); + NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); - if (!pllink || !priv->wait_link_is_waiting) + if (!pllink || !priv->wait_link.waiting) return; - priv->wait_link_is_waiting = FALSE; + if (nm_device_get_state(device) != NM_DEVICE_STATE_IP_CONFIG) + return; - if (nm_device_get_state(device) == NM_DEVICE_STATE_IP_CONFIG) { - if (!nm_device_hw_addr_set_cloned(device, - nm_device_get_applied_connection(device), - FALSE)) { - nm_device_devip_set_failed(device, AF_INET, NM_DEVICE_STATE_REASON_CONFIG_FAILED); - nm_device_devip_set_failed(device, AF_INET6, NM_DEVICE_STATE_REASON_CONFIG_FAILED); - return; - } + if (check_waiting_for_link(device, "link-changed")) + return; - nm_device_link_properties_set(device, FALSE); - nm_device_bring_up(device); + _LOGT(LOGD_CORE, "ovs-wait-link: link is ready after link changed event"); - nm_device_devip_set_state(device, AF_INET, NM_DEVICE_IP_STATE_PENDING, NULL); - nm_device_devip_set_state(device, AF_INET6, NM_DEVICE_IP_STATE_PENDING, NULL); - nm_device_activate_schedule_stage3_ip_config(device, FALSE); - return; - } + nm_device_link_properties_set(device, FALSE); + nm_device_bring_up(device); - nm_device_activate_schedule_stage2_device_config(device, FALSE); + nm_device_devip_set_state(device, AF_INET, NM_DEVICE_IP_STATE_PENDING, NULL); + nm_device_devip_set_state(device, AF_INET6, NM_DEVICE_IP_STATE_PENDING, NULL); + nm_device_activate_schedule_stage3_ip_config(device, FALSE); } static gboolean @@ -205,7 +253,9 @@ set_platform_mtu(NMDevice *device, guint32 mtu) static gboolean ready_for_ip_config(NMDevice *device, gboolean is_manual) { - return nm_device_get_ip_ifindex(device) > 0; + NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(device); + + return nm_device_get_ip_ifindex(device) > 0 && !priv->wait_link.waiting; } static gboolean @@ -215,10 +265,28 @@ _set_ip_ifindex_tun(gpointer user_data) NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); - nm_clear_g_source_inst(&priv->wait_link_idle_source); + _LOGT(LOGD_CORE, + "ovs-wait-link: setting ip-ifindex %d from tun interface", + priv->wait_link.tun_ifindex); + + nm_clear_g_source_inst(&priv->wait_link.tun_set_ifindex_idle_source); + + nm_device_set_ip_ifindex(device, priv->wait_link.tun_ifindex); + + if (check_waiting_for_link(device, "set-ip-ifindex-tun")) { + /* If the link is not ready, it means the MAC is not set yet. We don't have + * a convenient way to monitor for ip-ifindex changes other than listening + * for platform events again.*/ + nm_assert(!priv->wait_link.tun_link_signal_id); + priv->wait_link.tun_link_signal_id = g_signal_connect(nm_device_get_platform(device), + NM_PLATFORM_SIGNAL_LINK_CHANGED, + G_CALLBACK(_netdev_tun_link_cb), + self); + return G_SOURCE_CONTINUE; + } + + _LOGT(LOGD_CORE, "tun link is ready"); - priv->wait_link_is_waiting = FALSE; - nm_device_set_ip_ifindex(device, priv->wait_link_ifindex); nm_device_link_properties_set(device, FALSE); nm_device_devip_set_state(device, AF_INET, NM_DEVICE_IP_STATE_PENDING, NULL); @@ -239,75 +307,149 @@ _netdev_tun_link_cb(NMPlatform *platform, const NMPlatformSignalChangeType change_type = change_type_i; NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); + int ip_ifindex; - if (change_type == NM_PLATFORM_SIGNAL_ADDED) { - if (pllink->type == NM_LINK_TYPE_TUN - && nm_streq0(pllink->name, nm_device_get_iface(device))) { - nm_clear_g_signal_handler(platform, &priv->wait_link_signal_id); + if (pllink->type != NM_LINK_TYPE_TUN || !nm_streq0(pllink->name, nm_device_get_iface(device))) + return; - priv->wait_link_ifindex = ifindex; + ip_ifindex = nm_device_get_ip_ifindex(device); + if (ip_ifindex > 0) { + /* When we have an ifindex, we are only waiting for the MAC to settle */ + if (change_type != NM_PLATFORM_SIGNAL_CHANGED) + return; - priv->wait_link_idle_source = nm_g_idle_add_source(_set_ip_ifindex_tun, device); + if (!check_waiting_for_link(device, "tun-link-changed")) { + _LOGT(LOGD_CORE, "ovs-wait-link: tun link is ready, cloned MAC is set"); + + nm_clear_g_signal_handler(platform, &priv->wait_link.tun_link_signal_id); + nm_device_link_properties_set(device, FALSE); + + nm_device_devip_set_state(device, AF_INET, NM_DEVICE_IP_STATE_PENDING, NULL); + nm_device_devip_set_state(device, AF_INET6, NM_DEVICE_IP_STATE_PENDING, NULL); + nm_device_activate_schedule_stage3_ip_config(device, FALSE); } + return; } + + /* No ip-ifindex on the device, set it when the link appears */ + if (change_type != NM_PLATFORM_SIGNAL_ADDED) + return; + + _LOGT(LOGD_CORE, + "ovs-wait-link: found matching tun interface, schedule set-ip-ifindex(%d)", + ifindex); + nm_clear_g_signal_handler(platform, &priv->wait_link.tun_link_signal_id); + priv->wait_link.tun_ifindex = ifindex; + priv->wait_link.tun_set_ifindex_idle_source = nm_g_idle_add_source(_set_ip_ifindex_tun, device); +} + +static gboolean +ovs_interface_is_netdev_datapath(NMDeviceOvsInterface *self) +{ + NMDevice *device = NM_DEVICE(self); + NMActiveConnection *ac = NULL; + NMSettingOvsBridge *s_ovs_bridge = NULL; + + ac = NM_ACTIVE_CONNECTION(nm_device_get_act_request(device)); + if (!ac) + return FALSE; + + /* get ovs-port active-connection */ + ac = nm_active_connection_get_master(ac); + if (!ac) + return FALSE; + + /* get ovs-bridge active-connection */ + ac = nm_active_connection_get_master(ac); + if (!ac) + return FALSE; + + s_ovs_bridge = + nm_connection_get_setting_ovs_bridge(nm_active_connection_get_applied_connection(ac)); + if (!s_ovs_bridge) + return FALSE; + + return nm_streq0(nm_setting_ovs_bridge_get_datapath_type(s_ovs_bridge), "netdev"); } static void act_stage3_ip_config(NMDevice *device, int addr_family) { - NMActiveConnection *controller_act = NULL; - NMSettingOvsBridge *s_ovs_bridge = NULL; - NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); - NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); + NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); + NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); + + /* + * When the ovs-interface device enters stage3, it becomes eligible to be attached to + * its controller (a ovs-port). If also the ovs-bridge is ready, an entry is created + * in the ovsdb in NMDeviceOvsPort->attach_port(). + * FIXME(l3cfg): we should create the IP ifindex before stage3 start. + * + * NMDeviceOvsInterface->act_stage3_ip_config() is supposed to perform device-specific + * IP configuration on the device. An ovs-interface can be of different types, that + * require different handling: + * + * - "patch" and "dpdk" interfaces don't have any kernel link associated and thus + * NetworkManager completely skips any kind of IP configuration on them, by returning + * FALSE to ->ready_for_ip_config(). + * + * - "system" interfaces represent other interface types with kernel link (for + * example, ethernet, bond, etc.) that get attached to a ovs bridge. Once they are + * attached, NetworkManager can start the IP configuration right away. + * + * - "internal" interfaces are virtual interfaces created by openvswitch. Once the + * entry is created in the ovsdb, the kernel will create a link for the + * interface. When using the system datapath (the default), the link is of type + * "openvswitch", while when using the netdev (userspace) datapath, the link is a tun + * (tap) one. For both datapath types, we use this method to delay the IP + * configuration until the link appears. Note that ready_for_ip_config() returns FALSE + * when there is no ifindex, and so all the regular IP methods (static, auto, etc.) + * can't proceed. + */ if (!_is_internal_interface(device)) { nm_device_devip_set_state(device, addr_family, NM_DEVICE_IP_STATE_READY, NULL); return; } - /* When the ovs-bridge controller is using netdev datapath, the interface - * link created is a tun device instead of a ovs-interface. NetworkManager must - * detect the creation of the tun link and attach the ifindex to the - * ovs-interface device. */ - controller_act = NM_ACTIVE_CONNECTION(nm_device_get_act_request(device)); - if (controller_act && nm_device_get_ip_ifindex(device) <= 0 && priv->wait_link_signal_id == 0) { - controller_act = nm_active_connection_get_master(controller_act); - if (controller_act) { - controller_act = nm_active_connection_get_master(controller_act); - if (controller_act) - s_ovs_bridge = nm_connection_get_setting_ovs_bridge( - nm_active_connection_get_applied_connection(controller_act)); - if (s_ovs_bridge - && nm_streq0(nm_setting_ovs_bridge_get_datapath_type(s_ovs_bridge), "netdev")) - priv->wait_link_signal_id = g_signal_connect(nm_device_get_platform(device), - NM_PLATFORM_SIGNAL_LINK_CHANGED, - G_CALLBACK(_netdev_tun_link_cb), - self); - } + /* + * If a ovs interface has the cloned-mac-address property set, we pass the desired MAC + * to ovsdb when creating the db entry, and openvswitch will eventually assign it to + * the interface. Note that usually the link will not have the desired MAC when it's + * created, and so we need to also monitor link changes to detect when the MAC is + * ready; only after that we can start IP configuration. Otherwise, the ARP + * announcements, the DHCP client-id, etc will use the wrong MAC. + */ + if (!priv->wait_link.cloned_mac_evaluated) { + nm_assert(!priv->wait_link.cloned_mac); + nm_device_hw_addr_get_cloned(device, + nm_device_get_applied_connection(device), + FALSE, + &priv->wait_link.cloned_mac, + NULL, + NULL); + priv->wait_link.cloned_mac_evaluated = TRUE; } - /* FIXME(l3cfg): we should create the IP ifindex before stage3 start. - * - * For now it's here because when the ovs-interface enters stage3, then it's added to the - * controller (ovs-port) and the entry is create in the ovsdb. Only after that the kernel - * link appears. - * - * This should change. */ - if (nm_device_get_ip_ifindex(device) <= 0) { - _LOGT(LOGD_DEVICE, "waiting for link to appear"); - priv->wait_link_is_waiting = TRUE; + priv->wait_link.waiting = TRUE; + if (check_waiting_for_link(device, addr_family == AF_INET ? "stage3-ipv4" : "stage3-ipv6")) { nm_device_devip_set_state(device, addr_family, NM_DEVICE_IP_STATE_PENDING, NULL); + if (nm_device_get_ip_ifindex(device) <= 0 && priv->wait_link.tun_link_signal_id == 0 + && ovs_interface_is_netdev_datapath(self)) { + priv->wait_link.tun_link_signal_id = g_signal_connect(nm_device_get_platform(device), + NM_PLATFORM_SIGNAL_LINK_CHANGED, + G_CALLBACK(_netdev_tun_link_cb), + self); + } return; } - priv->wait_link_is_waiting = FALSE; - nm_clear_g_source_inst(&priv->wait_link_idle_source); - nm_clear_g_signal_handler(nm_device_get_platform(device), &priv->wait_link_signal_id); + _LOGT(LOGD_DEVICE, + "ovs-wait-link: link is ready, IPv%c can proceed", + nm_utils_addr_family_to_char(addr_family)); - if (!nm_device_hw_addr_set_cloned(device, nm_device_get_applied_connection(device), FALSE)) { - nm_device_devip_set_failed(device, addr_family, NM_DEVICE_STATE_REASON_CONFIG_FAILED); - return; - } + priv->wait_link.waiting = FALSE; + nm_clear_g_source_inst(&priv->wait_link.tun_set_ifindex_idle_source); + nm_clear_g_signal_handler(nm_device_get_platform(device), &priv->wait_link.tun_link_signal_id); nm_device_link_properties_set(device, FALSE); nm_device_devip_set_state(device, addr_family, NM_DEVICE_IP_STATE_READY, NULL); @@ -325,8 +467,11 @@ deactivate(NMDevice *device) NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(device); NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); - priv->wait_link_is_waiting = FALSE; - nm_clear_g_source_inst(&priv->wait_link_idle_source); + priv->wait_link.waiting = FALSE; + priv->wait_link.cloned_mac_evaluated = FALSE; + nm_clear_g_free(&priv->wait_link.cloned_mac); + nm_clear_g_signal_handler(nm_device_get_platform(device), &priv->wait_link.tun_link_signal_id); + nm_clear_g_source_inst(&priv->wait_link.tun_set_ifindex_idle_source); } typedef struct { @@ -418,13 +563,27 @@ deactivate_async(NMDevice *device, _LOGT(LOGD_CORE, "deactivate: start async"); - /* We want to ensure that the kernel link for this device is - * removed upon disconnection so that it will not interfere with - * later activations of the same device. Unfortunately there is - * no synchronization mechanism with vswitchd, we only update - * ovsdb and wait that changes are picked up. - */ + nm_clear_g_signal_handler(nm_device_get_platform(device), &priv->wait_link.tun_link_signal_id); + nm_clear_g_source_inst(&priv->wait_link.tun_set_ifindex_idle_source); + priv->wait_link.cloned_mac_evaluated = FALSE; + nm_clear_g_free(&priv->wait_link.cloned_mac); + /* We want to ensure that the kernel link for this device is removed upon + * disconnection, so that it will not interfere with later activations of the same + * device. + * + * To do so, we need to be very careful, because unfortunately there is no + * synchronization mechanism with vswitchd: we only update ovsdb, wait that changes + * are picked up and we see the effects on the kernel interface (appearing or going + * away). + * + * That means for example that if the ovs interface entered stage3 and the entry was + * added to the ovsdb, we expect a link to appear. If we disconnect at this point, we + * delete the entry from the ovsdb. Now we don't know if ovs-vswitchd will see two + * updates or only one. In other words, we don't know if the interface will appear and + * go away, or if it will not appear ever. In this situation, the solution is to wait + * with a timeout. + */ data = g_slice_new(DeactivateData); *data = (DeactivateData){ .self = g_object_ref(self), @@ -433,7 +592,7 @@ deactivate_async(NMDevice *device, .callback_user_data = callback_user_data, }; - if (!priv->wait_link_is_waiting + if (!priv->wait_link.waiting && !nm_platform_link_get_by_ifname(nm_device_get_platform(device), nm_device_get_iface(device))) { _LOGT(LOGD_CORE, "deactivate: link not present, proceeding"); @@ -442,20 +601,15 @@ deactivate_async(NMDevice *device, return; } - nm_clear_g_source_inst(&priv->wait_link_idle_source); - - if (priv->wait_link_is_waiting) { - /* At this point we have issued an INSERT and a DELETE - * command for the interface to ovsdb. We don't know if - * vswitchd will see the two updates or only one. We - * must add a timeout to avoid waiting forever in case - * the link doesn't appear. - */ + if (priv->wait_link.waiting) { + /* Here we have issued an INSERT and a DELETE command for the interface to ovsdb, + * and must wait with a timeout. */ data->link_timeout_id = g_timeout_add(6000, deactivate_link_timeout, data); _LOGT(LOGD_DEVICE, "deactivate: waiting for link to disappear in 6 seconds"); } else _LOGT(LOGD_DEVICE, "deactivate: waiting for link to disappear"); + priv->wait_link.waiting = FALSE; data->cancelled_id = g_cancellable_connect(cancellable, G_CALLBACK(deactivate_cancelled_cb), data, NULL); data->link_changed_id = g_signal_connect(nm_device_get_platform(device), @@ -506,6 +660,10 @@ dispose(GObject *object) NMDeviceOvsInterface *self = NM_DEVICE_OVS_INTERFACE(object); NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self); + nm_assert(!priv->wait_link.waiting); + nm_assert(priv->wait_link.tun_link_signal_id == 0); + nm_assert(!priv->wait_link.tun_set_ifindex_idle_source); + if (priv->ovsdb) { g_signal_handlers_disconnect_by_func(priv->ovsdb, G_CALLBACK(ovsdb_ready), self); g_clear_object(&priv->ovsdb); diff --git a/src/core/devices/ovs/nm-device-ovs-port.c b/src/core/devices/ovs/nm-device-ovs-port.c index 5ede46e9..258c72f2 100644 --- a/src/core/devices/ovs/nm-device-ovs-port.c +++ b/src/core/devices/ovs/nm-device-ovs-port.c @@ -266,7 +266,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_ovs_port = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_OVS_PORT, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Slaves", "ao", NM_DEVICE_SLAVES), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Slaves", + "ao", + NM_DEVICE_SLAVES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/devices/team/nm-device-team.c b/src/core/devices/team/nm-device-team.c index 4d748362..d8c3c2c2 100644 --- a/src/core/devices/team/nm-device-team.c +++ b/src/core/devices/team/nm-device-team.c @@ -290,9 +290,9 @@ master_update_slave_connection(NMDevice *device, g_free(port_config); g_object_set(nm_connection_get_setting_connection(connection), - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, nm_connection_get_uuid(applied_connection), - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_TEAM_SETTING_NAME, NULL); return TRUE; @@ -1090,9 +1090,21 @@ static const NMDBusInterfaceInfoExtended interface_info_device_team = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_TEAM, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Carrier", "b", NM_DEVICE_CARRIER), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Slaves", "ao", NM_DEVICE_SLAVES), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Carrier", + "b", + NM_DEVICE_CARRIER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Slaves", + "ao", + NM_DEVICE_SLAVES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Config", "s", NM_DEVICE_TEAM_CONFIG), ), ), diff --git a/src/core/devices/wifi/nm-device-iwd-p2p.c b/src/core/devices/wifi/nm-device-iwd-p2p.c index 73fd4716..fadc6722 100644 --- a/src/core/devices/wifi/nm-device-iwd-p2p.c +++ b/src/core/devices/wifi/nm-device-iwd-p2p.c @@ -1144,7 +1144,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_wifi_p2p = { .signals = NM_DEFINE_GDBUS_SIGNAL_INFOS(&nm_signal_info_wifi_p2p_peer_added, &nm_signal_info_wifi_p2p_peer_removed, ), .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Peers", "ao", NM_DEVICE_IWD_P2P_PEERS), ), ), diff --git a/src/core/devices/wifi/nm-device-olpc-mesh.c b/src/core/devices/wifi/nm-device-olpc-mesh.c index 436c7847..8e1e779b 100644 --- a/src/core/devices/wifi/nm-device-olpc-mesh.c +++ b/src/core/devices/wifi/nm-device-olpc-mesh.c @@ -497,7 +497,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_olpc_mesh = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_DEVICE_OLPC_MESH, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Companion", "o", NM_DEVICE_OLPC_MESH_COMPANION), diff --git a/src/core/devices/wifi/nm-device-wifi-p2p.c b/src/core/devices/wifi/nm-device-wifi-p2p.c index fa8cb8fa..981811a3 100644 --- a/src/core/devices/wifi/nm-device-wifi-p2p.c +++ b/src/core/devices/wifi/nm-device-wifi-p2p.c @@ -15,6 +15,7 @@ #include "NetworkManagerUtils.h" #include "devices/nm-device-private.h" #include "libnm-core-aux-intern/nm-libnm-core-utils.h" +#include "libnm-core-aux-intern/nm-common-macros.h" #include "libnm-core-intern/nm-core-internal.h" #include "libnm-glib-aux/nm-ref-string.h" #include "libnm-platform/nm-platform.h" @@ -982,23 +983,24 @@ device_state_changed(NMDevice *device, } static void -impl_device_wifi_p2p_start_find(NMDBusObject *obj, - const NMDBusInterfaceInfoExtended *interface_info, - const NMDBusMethodInfoExtended *method_info, - GDBusConnection *connection, - const char *sender, - GDBusMethodInvocation *invocation, - GVariant *parameters) +p2p_start_find_auth_cb(NMDevice *device, + GDBusMethodInvocation *invocation, + NMAuthSubject *subject, + GError *error, + gpointer user_data) { - NMDeviceWifiP2P *self = NM_DEVICE_WIFI_P2P(obj); + NMDeviceWifiP2P *self = NM_DEVICE_WIFI_P2P(device); NMDeviceWifiP2PPrivate *priv = NM_DEVICE_WIFI_P2P_GET_PRIVATE(self); - gs_unref_variant GVariant *options = NULL; + gs_unref_variant GVariant *options = user_data; const char *opts_key; GVariant *opts_val; GVariantIter iter; gint32 timeout = 30; - g_variant_get(parameters, "(@a{sv})", &options); + if (error) { + g_dbus_method_invocation_return_gerror(invocation, error); + return; + } g_variant_iter_init(&iter, options); while (g_variant_iter_next(&iter, "{&sv}", &opts_key, &opts_val)) { @@ -1050,17 +1052,43 @@ impl_device_wifi_p2p_start_find(NMDBusObject *obj, } static void -impl_device_wifi_p2p_stop_find(NMDBusObject *obj, - const NMDBusInterfaceInfoExtended *interface_info, - const NMDBusMethodInfoExtended *method_info, - GDBusConnection *connection, - const char *sender, - GDBusMethodInvocation *invocation, - GVariant *parameters) +impl_device_wifi_p2p_start_find(NMDBusObject *obj, + const NMDBusInterfaceInfoExtended *interface_info, + const NMDBusMethodInfoExtended *method_info, + GDBusConnection *connection, + const char *sender, + GDBusMethodInvocation *invocation, + GVariant *parameters) +{ + gs_unref_variant GVariant *options = NULL; + + g_variant_get(parameters, "(@a{sv})", &options); + + nm_device_auth_request(NM_DEVICE(obj), + invocation, + NULL, + NM_AUTH_PERMISSION_WIFI_SCAN, + TRUE, + NULL, + p2p_start_find_auth_cb, + g_steal_pointer(&options)); +} + +static void +p2p_stop_find_auth_cb(NMDevice *device, + GDBusMethodInvocation *invocation, + NMAuthSubject *subject, + GError *error, + gpointer user_data) { - NMDeviceWifiP2P *self = NM_DEVICE_WIFI_P2P(obj); + NMDeviceWifiP2P *self = NM_DEVICE_WIFI_P2P(device); NMDeviceWifiP2PPrivate *priv = NM_DEVICE_WIFI_P2P_GET_PRIVATE(self); + if (error) { + g_dbus_method_invocation_return_gerror(invocation, error); + return; + } + if (!priv->mgmt_iface) { g_dbus_method_invocation_return_error_literal( invocation, @@ -1075,6 +1103,25 @@ impl_device_wifi_p2p_stop_find(NMDBusObject *obj, g_dbus_method_invocation_return_value(invocation, NULL); } +static void +impl_device_wifi_p2p_stop_find(NMDBusObject *obj, + const NMDBusInterfaceInfoExtended *interface_info, + const NMDBusMethodInfoExtended *method_info, + GDBusConnection *connection, + const char *sender, + GDBusMethodInvocation *invocation, + GVariant *parameters) +{ + nm_device_auth_request(NM_DEVICE(obj), + invocation, + NULL, + NM_AUTH_PERMISSION_WIFI_SCAN, + TRUE, + NULL, + p2p_stop_find_auth_cb, + NULL); +} + /*****************************************************************************/ NMSupplicantInterface * @@ -1171,7 +1218,11 @@ static const NMDBusInterfaceInfoExtended interface_info_device_wifi_p2p = { .signals = NM_DEFINE_GDBUS_SIGNAL_INFOS(&nm_signal_info_wifi_p2p_peer_added, &nm_signal_info_wifi_p2p_peer_removed, ), .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "HwAddress", + "s", + NM_DEVICE_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Peers", "ao", NM_DEVICE_WIFI_P2P_PEERS), ), ), diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c index 43772834..2cd41b27 100644 --- a/src/core/devices/wifi/nm-device-wifi.c +++ b/src/core/devices/wifi/nm-device-wifi.c @@ -3191,27 +3191,28 @@ ensure_hotspot_frequency(NMDeviceWifi *self, NMSettingWireless *s_wifi, NMWifiAP GBytes *ssid; gsize ssid_len; const guint8 *ssid_data; - const guint8 random_seed[16] = {0x9a, - 0xdc, - 0x86, - 0x9a, - 0xa8, - 0xa2, - 0x07, - 0x97, - 0xbe, - 0x6d, - 0xe6, - 0x99, - 0x9f, - 0xa8, - 0x09, - 0x2b}; /* Calculate a stable "random" number based on the SSID. */ ssid = nm_setting_wireless_get_ssid(s_wifi); ssid_data = g_bytes_get_data(ssid, &ssid_len); - rnd = c_siphash_hash(random_seed, ssid_data, ssid_len); + rnd = c_siphash_hash(NM_HASH_SEED_16(0x9a, + 0xdc, + 0x86, + 0x9a, + 0xa8, + 0xa2, + 0x07, + 0x97, + 0xbe, + 0x6d, + 0xe6, + 0x99, + 0x9f, + 0xa8, + 0x09, + 0x2b), + ssid_data, + ssid_len); } if (nm_streq0(band, "a")) { diff --git a/src/core/devices/wifi/nm-iwd-manager.c b/src/core/devices/wifi/nm-iwd-manager.c index 0d4daf21..76a342e2 100644 --- a/src/core/devices/wifi/nm-iwd-manager.c +++ b/src/core/devices/wifi/nm-iwd-manager.c @@ -810,7 +810,7 @@ sett_conn_changed(NMSettingsConnection *sett_conn, nm_log_dbg(LOGD_WIFI, "iwd: profile at %s not removed: %s (%i)", orig_full_path, - strerror(errno), + nm_strerror_native(errno), errno); removed = TRUE; @@ -1431,7 +1431,10 @@ try_delete_file: if (g_remove(full_path) == 0) _LOGD("IWD profile at %s removed", full_path); else if (errno != ENOENT) - _LOGD("IWD profile at %s not removed: %s (%i)", full_path, strerror(errno), errno); + _LOGD("IWD profile at %s not removed: %s (%i)", + full_path, + nm_strerror_native(errno), + errno); } static void @@ -1899,7 +1902,7 @@ nm_iwd_manager_get_ap_mirror_connection(NMIwdManager *self, NMWifiAP *ap) NM80211ApSecurityFlags sec_flags = nm_wifi_ap_get_wpa_flags(ap) | nm_wifi_ap_get_rsn_flags(ap); ssid_bytes = g_bytes_get_data(nm_wifi_ap_get_ssid(ap), &ssid_len); - ssid_len = MIN(ssid_len, 32); + ssid_len = NM_MIN(ssid_len, 32u); memcpy(name_buf, ssid_bytes, ssid_len); name_buf[ssid_len] = '\0'; diff --git a/src/core/devices/wifi/nm-wifi-ap.c b/src/core/devices/wifi/nm-wifi-ap.c index 825a5aa8..d4d3815e 100644 --- a/src/core/devices/wifi/nm-wifi-ap.c +++ b/src/core/devices/wifi/nm-wifi-ap.c @@ -36,6 +36,7 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMWifiAP, PROP_HW_ADDRESS, PROP_MODE, PROP_MAX_BITRATE, + PROP_BANDWIDTH, PROP_STRENGTH, PROP_LAST_SEEN, ); @@ -47,6 +48,7 @@ struct _NMWifiAPPrivate { guint8 strength; guint32 freq; /* Frequency in MHz; ie 2412 (== 2.412 GHz) */ guint32 max_bitrate; /* Maximum bitrate of the AP in Kbit/s (ie 54000 Kb/s == 54Mbit/s) */ + guint32 bandwidth; /* Bandwidth of the AP in MHz */ gint64 last_seen_msec; /* Timestamp when the AP was seen lastly (in nm_utils_get_monotonic_timestamp_*() scale). @@ -277,6 +279,32 @@ nm_wifi_ap_get_max_bitrate(NMWifiAP *ap) return NM_WIFI_AP_GET_PRIVATE(ap)->max_bitrate; } +guint32 +nm_wifi_ap_get_bandwidth(NMWifiAP *ap) +{ + g_return_val_if_fail(NM_IS_WIFI_AP(ap), 0); + g_return_val_if_fail(nm_dbus_object_is_exported(NM_DBUS_OBJECT(ap)), 0); + + return NM_WIFI_AP_GET_PRIVATE(ap)->bandwidth; +} + +gboolean +nm_wifi_ap_set_bandwidth(NMWifiAP *ap, guint32 bandwidth) +{ + NMWifiAPPrivate *priv; + + g_return_val_if_fail(NM_IS_WIFI_AP(ap), FALSE); + + priv = NM_WIFI_AP_GET_PRIVATE(ap); + + if (priv->bandwidth != bandwidth) { + priv->bandwidth = bandwidth; + _notify(ap, PROP_BANDWIDTH); + return TRUE; + } + return FALSE; +} + gboolean nm_wifi_ap_set_max_bitrate(NMWifiAP *ap, guint32 bitrate) { @@ -393,6 +421,7 @@ nm_wifi_ap_update_from_properties(NMWifiAP *ap, const NMSupplicantBssInfo *bss_i } changed |= nm_wifi_ap_set_max_bitrate(ap, bss_info->max_rate); + changed |= nm_wifi_ap_set_bandwidth(ap, bss_info->bandwidth); if (priv->metered != bss_info->metered) { priv->metered = bss_info->metered; @@ -683,6 +712,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) case PROP_MAX_BITRATE: g_value_set_uint(value, priv->max_bitrate); break; + case PROP_BANDWIDTH: + g_value_set_uint(value, priv->bandwidth); + break; case PROP_STRENGTH: g_value_set_uchar(value, priv->strength); break; @@ -873,6 +905,7 @@ static const NMDBusInterfaceInfoExtended interface_info_access_point = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("MaxBitrate", "u", NM_WIFI_AP_MAX_BITRATE), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Bandwidth", "u", NM_WIFI_AP_BANDWIDTH), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Strength", "y", NM_WIFI_AP_STRENGTH), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("LastSeen", "i", @@ -979,6 +1012,14 @@ nm_wifi_ap_class_init(NMWifiAPClass *ap_class) -1, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_BANDWIDTH] = g_param_spec_uint(NM_WIFI_AP_BANDWIDTH, + "", + "", + 0, + G_MAXUINT32, + 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); } diff --git a/src/core/devices/wifi/nm-wifi-ap.h b/src/core/devices/wifi/nm-wifi-ap.h index 93dc8edf..0f229640 100644 --- a/src/core/devices/wifi/nm-wifi-ap.h +++ b/src/core/devices/wifi/nm-wifi-ap.h @@ -27,6 +27,7 @@ #define NM_WIFI_AP_HW_ADDRESS "hw-address" #define NM_WIFI_AP_MODE "mode" #define NM_WIFI_AP_MAX_BITRATE "max-bitrate" +#define NM_WIFI_AP_BANDWIDTH "bandwidth" #define NM_WIFI_AP_STRENGTH "strength" #define NM_WIFI_AP_LAST_SEEN "last-seen" @@ -78,6 +79,8 @@ guint32 nm_wifi_ap_get_freq(NMWifiAP *ap); gboolean nm_wifi_ap_set_freq(NMWifiAP *ap, guint32 freq); guint32 nm_wifi_ap_get_max_bitrate(NMWifiAP *ap); gboolean nm_wifi_ap_set_max_bitrate(NMWifiAP *ap, guint32 bitrate); +guint32 nm_wifi_ap_get_bandwidth(NMWifiAP *ap); +gboolean nm_wifi_ap_set_bandwidth(NMWifiAP *ap, guint32 bandwidth); gboolean nm_wifi_ap_get_fake(const NMWifiAP *ap); gboolean nm_wifi_ap_set_fake(NMWifiAP *ap, gboolean fake); NM80211ApFlags nm_wifi_ap_get_flags(const NMWifiAP *self); diff --git a/src/core/devices/wifi/nm-wifi-common.c b/src/core/devices/wifi/nm-wifi-common.c index 681d9cb5..e3639ec5 100644 --- a/src/core/devices/wifi/nm-wifi-common.c +++ b/src/core/devices/wifi/nm-wifi-common.c @@ -132,7 +132,8 @@ const NMDBusInterfaceInfoExtended nm_interface_info_device_wireless = { NM_DEFINE_GDBUS_METHOD_INFO_INIT( "GetAccessPoints", .out_args = NM_DEFINE_GDBUS_ARG_INFOS( - NM_DEFINE_GDBUS_ARG_INFO("access_points", "ao"), ), ), + NM_DEFINE_GDBUS_ARG_INFO("access_points", "ao"), ), + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), .handle = impl_device_wifi_get_access_points, ), NM_DEFINE_DBUS_METHOD_INFO_EXTENDED( NM_DEFINE_GDBUS_METHOD_INFO_INIT( @@ -150,9 +151,11 @@ const NMDBusInterfaceInfoExtended nm_interface_info_device_wireless = { &nm_signal_info_wireless_access_point_removed, ), .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("HwAddress", "s", NM_DEVICE_HW_ADDRESS), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("PermHwAddress", - "s", - NM_DEVICE_PERM_HW_ADDRESS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "PermHwAddress", + "s", + NM_DEVICE_PERM_HW_ADDRESS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Mode", "u", NM_DEVICE_WIFI_MODE), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Bitrate", "u", NM_DEVICE_WIFI_BITRATE), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("AccessPoints", diff --git a/src/core/dhcp/nm-dhcp-client.c b/src/core/dhcp/nm-dhcp-client.c index 6978bd3c..4be03f4b 100644 --- a/src/core/dhcp/nm-dhcp-client.c +++ b/src/core/dhcp/nm-dhcp-client.c @@ -527,7 +527,7 @@ _acd_reglist_data_remove(NMDhcpClient *self, guint idx, gboolean do_log) nm_clear_l3cd(®list_data->l3cd); - nm_l3cfg_commit_on_idle_schedule(priv->config.l3cfg, NM_L3_CFG_COMMIT_TYPE_UPDATE); + nm_l3cfg_commit_on_idle_schedule(priv->config.l3cfg, NM_L3_CFG_COMMIT_TYPE_AUTO); g_array_remove_index(priv->v4.acd.reglist, idx); diff --git a/src/core/dhcp/nm-dhcp-client.h b/src/core/dhcp/nm-dhcp-client.h index 903ea6ac..4dd2c4fd 100644 --- a/src/core/dhcp/nm-dhcp-client.h +++ b/src/core/dhcp/nm-dhcp-client.h @@ -162,6 +162,9 @@ typedef struct { * will always broadcast replies. */ bool request_broadcast : 1; + /* Whether to send or not the client identifier */ + bool send_client_id : 1; + } v4; struct { /* If set, the DUID from the connection is used; otherwise diff --git a/src/core/dhcp/nm-dhcp-dhclient-utils.c b/src/core/dhcp/nm-dhcp-dhclient-utils.c index ea8943fa..286f7aa1 100644 --- a/src/core/dhcp/nm-dhcp-dhclient-utils.c +++ b/src/core/dhcp/nm-dhcp-dhclient-utils.c @@ -120,7 +120,10 @@ add_ip4_config(GString *str, } g_string_append(str, CLIENTID_TAG " "); - if (i < l) { + if (l == 0) { + /* An empty value effectively unsets the client-id to avoid sending it */ + g_string_append(str, "\"\""); + } else if (i < l) { /* Unprintable; convert to a hex string */ for (i = 0; i < l; i++) { if (i > 0) @@ -293,6 +296,7 @@ char * nm_dhcp_dhclient_create_config(const char *interface, int addr_family, GBytes *client_id, + gboolean send_client_id, const char *anycast_address, const char *hostname, guint32 timeout, @@ -391,8 +395,8 @@ nm_dhcp_dhclient_create_config(const char *interface, continue; if (NM_STR_HAS_PREFIX(p, CLIENTID_TAG)) { - /* Override config file "dhcp-client-id" and use one from the connection */ - if (client_id) + /* Skip "dhcp-client-id" if the connection has defined a custom one or "none" */ + if (client_id || !send_client_id) continue; /* Otherwise, capture and return the existing client id */ @@ -477,6 +481,8 @@ nm_dhcp_dhclient_create_config(const char *interface, } if (addr_family == AF_INET) { + nm_auto_unref_bytes GBytes *client_id_none = NULL; + client_id = send_client_id ? client_id : (client_id_none = g_bytes_new_static("", 0)); add_ip4_config(new_contents, client_id, hostname, use_fqdn, hostname_flags); add_request(reqs, "rfc3442-classless-static-routes"); add_request(reqs, "ms-classless-static-routes"); diff --git a/src/core/dhcp/nm-dhcp-dhclient-utils.h b/src/core/dhcp/nm-dhcp-dhclient-utils.h index 6187cce0..34b26175 100644 --- a/src/core/dhcp/nm-dhcp-dhclient-utils.h +++ b/src/core/dhcp/nm-dhcp-dhclient-utils.h @@ -12,6 +12,7 @@ char *nm_dhcp_dhclient_create_config(const char *interface, int addr_family, GBytes *client_id, + gboolean send_client_id, const char *anycast_addr, const char *hostname, guint32 timeout, diff --git a/src/core/dhcp/nm-dhcp-dhclient.c b/src/core/dhcp/nm-dhcp-dhclient.c index 4aab4b1e..2a3af10a 100644 --- a/src/core/dhcp/nm-dhcp-dhclient.c +++ b/src/core/dhcp/nm-dhcp-dhclient.c @@ -148,56 +148,6 @@ get_dhclient_leasefile(int addr_family, return NULL; } -static gboolean -merge_dhclient_config(NMDhcpDhclient *self, - int addr_family, - const char *iface, - const char *conf_file, - GBytes *client_id, - const char *anycast_address, - const char *hostname, - guint32 timeout, - gboolean use_fqdn, - NMDhcpHostnameFlags hostname_flags, - const char *mud_url, - const char *const *reject_servers, - const char *orig_path, - GBytes **out_new_client_id, - GError **error) -{ - gs_free char *orig = NULL; - gs_free char *new = NULL; - - g_return_val_if_fail(iface, FALSE); - g_return_val_if_fail(conf_file, FALSE); - - if (orig_path && g_file_test(orig_path, G_FILE_TEST_EXISTS)) { - GError *read_error = NULL; - - if (!g_file_get_contents(orig_path, &orig, NULL, &read_error)) { - _LOGW("error reading dhclient configuration %s: %s", orig_path, read_error->message); - g_error_free(read_error); - } - } - - new = nm_dhcp_dhclient_create_config(iface, - addr_family, - client_id, - anycast_address, - hostname, - timeout, - use_fqdn, - hostname_flags, - mud_url, - reject_servers, - orig_path, - orig, - out_new_client_id); - nm_assert(new); - - return g_file_set_contents(conf_file, new, -1, error); -} - static char * find_existing_config(NMDhcpDhclient *self, int addr_family, const char *iface, const char *uuid) { @@ -283,6 +233,7 @@ create_dhclient_config(NMDhcpDhclient *self, const char *iface, const char *uuid, GBytes *client_id, + gboolean send_client_id, const char *anycast_address, const char *hostname, guint32 timeout, @@ -292,44 +243,56 @@ create_dhclient_config(NMDhcpDhclient *self, const char *const *reject_servers, GBytes **out_new_client_id) { - gs_free char *orig = NULL; - char *new = NULL; - GError *error = NULL; + gs_free char *orig_path = NULL; + gs_free char *orig_content = NULL; + char *new_path = NULL; + gs_free char *new_content = NULL; + GError *error = NULL; g_return_val_if_fail(iface != NULL, NULL); - new = g_strdup_printf(NMSTATEDIR "/dhclient%s-%s.conf", - _addr_family_to_path_part(addr_family), - iface); - - _LOGD("creating composite dhclient config %s", new); + new_path = g_strdup_printf(NMSTATEDIR "/dhclient%s-%s.conf", + _addr_family_to_path_part(addr_family), + iface); + _LOGD("creating composite dhclient config %s", new_path); - orig = find_existing_config(self, addr_family, iface, uuid); - if (orig) - _LOGD("merging existing dhclient config %s", orig); + orig_path = find_existing_config(self, addr_family, iface, uuid); + if (orig_path) + _LOGD("merging existing dhclient config %s", orig_path); else _LOGD("no existing dhclient configuration to merge"); - if (!merge_dhclient_config(self, - addr_family, - iface, - new, - client_id, - anycast_address, - hostname, - timeout, - use_fqdn, - hostname_flags, - mud_url, - reject_servers, - orig, - out_new_client_id, - &error)) { + if (orig_path && g_file_test(orig_path, G_FILE_TEST_EXISTS)) { + if (!g_file_get_contents(orig_path, &orig_content, NULL, &error)) { + _LOGW("error reading dhclient configuration %s: %s", orig_path, error->message); + g_error_free(error); + } + } + + new_content = nm_dhcp_dhclient_create_config(iface, + addr_family, + client_id, + send_client_id, + anycast_address, + hostname, + timeout, + use_fqdn, + hostname_flags, + mud_url, + reject_servers, + orig_path, + orig_content, + out_new_client_id); + nm_assert(new_content); + + if (!g_file_set_contents(new_path, new_content, -1, &error)) { _LOGW("error creating dhclient configuration: %s", error->message); - g_clear_error(&error); + g_error_free(error); + g_free(new_path); + return NULL; } - return new; + return new_path; } static gboolean @@ -547,11 +510,14 @@ ip4_start(NMDhcpClient *client, GError **error) client_config = nm_dhcp_client_get_config(client); + nm_assert(client_config->addr_family == AF_INET); + priv->conf_file = create_dhclient_config(self, AF_INET, client_config->iface, client_config->uuid, client_config->client_id, + client_config->v4.send_client_id, client_config->anycast_address, client_config->hostname, client_config->timeout, @@ -584,6 +550,8 @@ ip6_start(NMDhcpClient *client, const struct in6_addr *ll_addr, GError **error) config = nm_dhcp_client_get_config(client); + nm_assert(config->addr_family == AF_INET6); + if (config->v6.iaid_explicit) _LOGW("dhclient does not support specifying an IAID for DHCPv6, it will be ignored"); @@ -592,6 +560,7 @@ ip6_start(NMDhcpClient *client, const struct in6_addr *ll_addr, GError **error) config->iface, config->uuid, NULL, + TRUE, config->anycast_address, config->hostname, config->timeout, diff --git a/src/core/dhcp/nm-dhcp-dhcpcd.c b/src/core/dhcp/nm-dhcp-dhcpcd.c index 8d2f928b..7c95994a 100644 --- a/src/core/dhcp/nm-dhcp-dhcpcd.c +++ b/src/core/dhcp/nm-dhcp-dhcpcd.c @@ -174,7 +174,7 @@ stop(NMDhcpClient *client, gboolean release) */ if (kill(pid, sig) == -1) { errsv = errno; - _LOGE("failed to kill dhcpcd %d:%s", errsv, strerror(errsv)); + _LOGE("failed to kill dhcpcd %d:%s", errsv, nm_strerror_native(errsv)); } /* When this function exits NM expects the PID to be -1. diff --git a/src/core/dhcp/nm-dhcp-helper.c b/src/core/dhcp/nm-dhcp-helper.c index ee95abb7..9e4cedf2 100644 --- a/src/core/dhcp/nm-dhcp-helper.c +++ b/src/core/dhcp/nm-dhcp-helper.c @@ -159,7 +159,7 @@ do_connect: error->message, try_count, (long long) (time_end - remaining_time - time_start) / 1000); - interval = NM_CLAMP((gint64) (100L * (1L << NM_MIN(try_count, 31))), 5000, 100000); + interval = NM_CLAMP((gint64) (100L * (1L << NM_MIN(try_count, 31u))), 5000, 100000); g_usleep(NM_MIN(interval, remaining_time)); g_clear_error(&error); goto do_connect; @@ -222,7 +222,7 @@ do_notify: gint64 interval; _LOGi("failure to call notify: %s (retry %u)", error->message, try_count); - interval = NM_CLAMP((gint64) (100L * (1L << NM_MIN(try_count, 31))), 5000, 25000); + interval = NM_CLAMP((gint64) (100L * (1L << NM_MIN(try_count, 31u))), 5000, 25000); g_usleep(NM_MIN(interval, remaining_time)); g_clear_error(&error); goto do_notify; diff --git a/src/core/dhcp/nm-dhcp-nettools.c b/src/core/dhcp/nm-dhcp-nettools.c index f36dfb4d..fc468d4c 100644 --- a/src/core/dhcp/nm-dhcp-nettools.c +++ b/src/core/dhcp/nm-dhcp-nettools.c @@ -1119,6 +1119,7 @@ nettools_create(NMDhcpNettools *self, GBytes **out_effective_client_id, GError * gs_unref_bytes GBytes *client_id_new = NULL; const uint8_t *client_id_arr; size_t client_id_len; + bool send_client_id; int r, fd, arp_type, transport; const NMDhcpClientConfig *client_config; @@ -1150,20 +1151,37 @@ nettools_create(NMDhcpNettools *self, GBytes **out_effective_client_id, GError * return FALSE; } - /* Note that we always set a client-id. In particular for infiniband that is necessary, - * see https://tools.ietf.org/html/rfc4390#section-2.1 . */ - client_id = client_config->client_id; - if (!client_id) { + client_id = client_config->client_id; + send_client_id = client_config->v4.send_client_id; + + if (!send_client_id && transport == N_DHCP4_TRANSPORT_INFINIBAND) { + /* Client-id is mandatory for infiniband: https://tools.ietf.org/html/rfc4390#section-2.1 */ + _LOGI("ipv4.client-id is set to \"none\", but it's mandatory for Infiniband. Setting a " + "default one."); + send_client_id = TRUE; + } + + if (send_client_id && !client_id) { client_id_new = nm_utils_dhcp_client_id_mac(arp_type, hwaddr_arr, hwaddr_len); client_id = client_id_new; } - if (!(client_id_arr = g_bytes_get_data(client_id, &client_id_len)) || client_id_len < 2) { - /* invalid client-ids are not expected. */ - nm_assert_not_reached(); + g_return_val_if_fail(client_id || !send_client_id, FALSE); - nm_utils_error_set_literal(error, NM_UTILS_ERROR_UNKNOWN, "no valid IPv4 client-id"); - return FALSE; + if (send_client_id) { + client_id_arr = g_bytes_get_data(client_id, &client_id_len); + client_id_len = NM_MIN(client_id_len, 1 + _NM_MAX_CLIENT_ID_LEN); + + if (!client_id_arr || client_id_len < 2) { + /* invalid client-ids are not expected. */ + nm_assert_not_reached(); + nm_utils_error_set_literal(error, NM_UTILS_ERROR_UNKNOWN, "no valid IPv4 client-id"); + return FALSE; + } + } else { + client_id_arr = NULL; + /* This will unset the client-id and prevent it from being sent */ + client_id_len = 0; } r = n_dhcp4_client_config_new(&config); @@ -1177,9 +1195,7 @@ nettools_create(NMDhcpNettools *self, GBytes **out_effective_client_id, GError * n_dhcp4_client_config_set_mac(config, hwaddr_arr, hwaddr_len); n_dhcp4_client_config_set_broadcast_mac(config, bcast_hwaddr_arr, bcast_hwaddr_len); n_dhcp4_client_config_set_request_broadcast(config, client_config->v4.request_broadcast); - r = n_dhcp4_client_config_set_client_id(config, - client_id_arr, - NM_MIN(client_id_len, 1 + _NM_MAX_CLIENT_ID_LEN)); + r = n_dhcp4_client_config_set_client_id(config, client_id_arr, client_id_len); if (r) { set_error_nettools(error, r, "failed to set client-id"); return FALSE; diff --git a/src/core/dhcp/tests/test-dhcp-dhclient.c b/src/core/dhcp/tests/test-dhcp-dhclient.c index e95f218e..0edcc296 100644 --- a/src/core/dhcp/tests/test-dhcp-dhclient.c +++ b/src/core/dhcp/tests/test-dhcp-dhclient.c @@ -36,11 +36,14 @@ test_config(const char *orig, const char *anycast_addr, const char *mud_url) { - gs_free char *new = NULL; - gs_unref_bytes GBytes *client_id = NULL; - gs_unref_bytes GBytes *new_client_id = NULL; - - if (dhcp_client_id) { + gs_free char *new = NULL; + gs_unref_bytes GBytes *client_id = NULL; + gs_unref_bytes GBytes *new_client_id = NULL; + gboolean send_client_id = TRUE; + + if (nm_streq0(dhcp_client_id, "none")) { + send_client_id = FALSE; + } else if (dhcp_client_id) { client_id = nm_dhcp_utils_client_id_string_to_bytes(dhcp_client_id); g_assert(client_id); } @@ -48,6 +51,7 @@ test_config(const char *orig, new = nm_dhcp_dhclient_create_config(iface, addr_family, client_id, + send_client_id, anycast_addr, hostname, timeout, @@ -502,6 +506,90 @@ test_existing_ascii_client_id(void) NULL, NULL); } + +/*****************************************************************************/ + +static const char *none_client_id_orig = "send dhcp-client-identifier 10:30:04:20:7A:08;\n"; + +static const char *none_client_id_expected = + "# Created by NetworkManager\n" + "# Merged from /path/to/dhclient.conf\n" + "\n" + "send dhcp-client-identifier \"\"; # added by NetworkManager\n" + "\n" + "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n" + "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n" + "option wpad code 252 = string;\n" + "\n" + "also request rfc3442-classless-static-routes;\n" + "also request ms-classless-static-routes;\n" + "also request static-routes;\n" + "also request wpad;\n" + "also request ntp-servers;\n" + "also request root-path;\n" + "\n"; + +static void +test_none_client_id(void) +{ + const char *connection_client_id = "none"; + gs_unref_bytes GBytes *expected_client_id = NULL; + + test_config(none_client_id_orig, + none_client_id_expected, + AF_INET, + NULL, + 0, + FALSE, + NM_DHCP_HOSTNAME_FLAG_NONE, + connection_client_id, + expected_client_id, + "eth0", + NULL, + NULL); +} + +/*****************************************************************************/ + +static const char *missing_client_id_orig = ""; + +static const char *missing_client_id_expected = + "# Created by NetworkManager\n" + "# Merged from /path/to/dhclient.conf\n" + "\n" + "\n" + "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n" + "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n" + "option wpad code 252 = string;\n" + "\n" + "also request rfc3442-classless-static-routes;\n" + "also request ms-classless-static-routes;\n" + "also request static-routes;\n" + "also request wpad;\n" + "also request ntp-servers;\n" + "also request root-path;\n" + "\n"; + +static void +test_missing_client_id(void) +{ + const char *connection_client_id = NULL; + gs_unref_bytes GBytes *expected_client_id = NULL; + + test_config(missing_client_id_orig, + missing_client_id_expected, + AF_INET, + NULL, + 0, + FALSE, + NM_DHCP_HOSTNAME_FLAG_NONE, + connection_client_id, + expected_client_id, + "eth0", + NULL, + NULL); +} + /*****************************************************************************/ static const char *fqdn_expected = @@ -1364,6 +1452,8 @@ main(int argc, char **argv) g_test_add_func("/dhcp/dhclient/existing-hex-client-id", test_existing_hex_client_id); g_test_add_func("/dhcp/dhclient/existing-client-id", test_existing_escaped_client_id); g_test_add_func("/dhcp/dhclient/existing-ascii-client-id", test_existing_ascii_client_id); + g_test_add_func("/dhcp/dhclient/none-client-id", test_none_client_id); + g_test_add_func("/dhcp/dhclient/missing-client-id", test_missing_client_id); g_test_add_func("/dhcp/dhclient/fqdn", test_fqdn); g_test_add_func("/dhcp/dhclient/fqdn_options_override", test_fqdn_options_override); g_test_add_func("/dhcp/dhclient/override_hostname", test_override_hostname); diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index 53564693..8f87fec1 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -543,7 +543,7 @@ add_string_item(GPtrArray *array, const char *str, gboolean dup) static void add_dns_option_item(GPtrArray *array, const char *str) { - if (_nm_utils_dns_option_find_idx(array, str) < 0) + if (_nm_utils_dns_option_find_idx((const char *const *) array->pdata, array->len, str) < 0) g_ptr_array_add(array, g_strdup(str)); } @@ -1876,8 +1876,11 @@ plugin_skip:; nameservers = g_new0(char *, 2); nameservers[0] = g_strdup(lladdr); - need_edns0 = nm_strv_find_first(options, -1, NM_SETTING_DNS_OPTION_EDNS0) < 0; - need_trust = nm_strv_find_first(options, -1, NM_SETTING_DNS_OPTION_TRUST_AD) < 0; + need_edns0 = !nm_strv_contains(options, -1, NM_SETTING_DNS_OPTION_EDNS0) + && !nm_strv_contains(options, -1, NM_SETTING_DNS_OPTION_INTERNAL_NO_ADD_EDNS0); + need_trust = + !nm_strv_contains(options, -1, NM_SETTING_DNS_OPTION_TRUST_AD) + && !nm_strv_contains(options, -1, NM_SETTING_DNS_OPTION_INTERNAL_NO_ADD_TRUST_AD); if (need_edns0 || need_trust) { gsize len; @@ -1892,6 +1895,23 @@ plugin_skip:; } } + if (options) { + guint i; + guint j; + + /* Skip internal options, those starting with '_' */ + for (i = 0, j = 0; options[i]; i++) { + if (options[i][0] == '_') { + g_free(options[i]); + continue; + } + if (i != j) + options[j] = options[i]; + j++; + } + options[j] = NULL; + } + if (do_update) { switch (priv->rc_manager) { case NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK: @@ -1948,7 +1968,7 @@ plugin_skip:; } /* signal that DNS resolution configs were changed */ - if ((do_update || caching || force_emit) && result == SR_SUCCESS) + if ((caching || force_emit) && result == SR_SUCCESS) g_signal_emit(self, signals[CONFIG_CHANGED], 0); nm_clear_pointer(&priv->config_variant, g_variant_unref); @@ -1964,6 +1984,16 @@ plugin_skip:; return TRUE; } +gboolean +nm_dns_manager_is_unmanaged(NMDnsManager *self) +{ + NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE(self); + + return NM_IN_SET(priv->rc_manager, + NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED, + NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE); +} + /*****************************************************************************/ gboolean @@ -2391,7 +2421,7 @@ _resolvconf_resolved_managed(void) * We want to handle that, because systemd-resolved might not * have started yet. */ full_path = g_file_read_link(_PATH_RESCONF, NULL); - if (nm_strv_find_first(RESOLVED_PATHS, G_N_ELEMENTS(RESOLVED_PATHS), full_path) >= 0) + if (nm_strv_contains(RESOLVED_PATHS, G_N_ELEMENTS(RESOLVED_PATHS), full_path)) return TRUE; /* see if resolv.conf is a symlink that resolves exactly one @@ -2403,7 +2433,7 @@ _resolvconf_resolved_managed(void) * We want to handle that, because systemd-resolved might not * have started yet. */ real_path = realpath(_PATH_RESCONF, NULL); - if (nm_strv_find_first(RESOLVED_PATHS, G_N_ELEMENTS(RESOLVED_PATHS), real_path) >= 0) + if (nm_strv_contains(RESOLVED_PATHS, G_N_ELEMENTS(RESOLVED_PATHS), real_path)) return TRUE; /* fall-through and resolve the symlink, to check the file diff --git a/src/core/dns/nm-dns-manager.h b/src/core/dns/nm-dns-manager.h index 42f9dec5..9b8c2972 100644 --- a/src/core/dns/nm-dns-manager.h +++ b/src/core/dns/nm-dns-manager.h @@ -148,4 +148,6 @@ char *nmtst_dns_create_resolv_conf(const char *const *searches, const char *const *nameservers, const char *const *options); +gboolean nm_dns_manager_is_unmanaged(NMDnsManager *self); + #endif /* __NETWORKMANAGER_DNS_MANAGER_H__ */ diff --git a/src/core/dnsmasq/nm-dnsmasq-utils.c b/src/core/dnsmasq/nm-dnsmasq-utils.c index 69424d74..8d15c2e3 100644 --- a/src/core/dnsmasq/nm-dnsmasq-utils.c +++ b/src/core/dnsmasq/nm-dnsmasq-utils.c @@ -83,12 +83,12 @@ nm_dnsmasq_utils_get_range(const NMPlatformIP4Address *addr, mid = (host & netmask) | (((first + last) / 2) & ~netmask); if (host > mid) { /* use lower range */ - reserved = NM_MIN(((host - first) / 10), 8); + reserved = NM_MIN(((host - first) / 10u), 8u); last = host - 1 - reserved; first = NM_MAX(first, last > NUM ? last - NUM : 0); } else { /* use upper range */ - reserved = NM_MIN(((last - host) / 10), 8); + reserved = NM_MIN(((last - host) / 10u), 8u); first = host + 1 + reserved; last = NM_MIN(last, first < 0xFFFFFFFF - NUM ? first + NUM : 0xFFFFFFFF); } diff --git a/src/core/main-utils.c b/src/core/main-utils.c index 9360d688..0f62da29 100644 --- a/src/core/main-utils.c +++ b/src/core/main-utils.c @@ -192,10 +192,7 @@ nm_main_utils_ensure_not_running_pidfile(const char *pidfile) if (strcmp(process_name, prgname) == 0) { /* Check that the process exists */ if (kill(pid, 0) == 0) { - fprintf(stderr, - _("%s is already running (pid %" G_GINT64_FORMAT ")\n"), - prgname, - (gint64) pid); + fprintf(stderr, _("%s is already running (pid %lld)\n"), prgname, (long long) pid); exit(1); } } diff --git a/src/core/meson.build b/src/core/meson.build index 6c1d463e..45b068a6 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -102,6 +102,7 @@ libNetworkManager = static_library( 'devices/nm-device-ethernet-utils.c', 'devices/nm-device-factory.c', 'devices/nm-device-generic.c', + 'devices/nm-device-hsr.c', 'devices/nm-device-infiniband.c', 'devices/nm-device-ip-tunnel.c', 'devices/nm-device-loopback.c', diff --git a/src/core/ndisc/nm-fake-ndisc.c b/src/core/ndisc/nm-fake-ndisc.c index f305e771..f0b6dcf6 100644 --- a/src/core/ndisc/nm-fake-ndisc.c +++ b/src/core/ndisc/nm-fake-ndisc.c @@ -239,7 +239,7 @@ receive_ra(gpointer user_data) priv->receive_ra_id = 0; /* preserve the "most managed" level on updates. */ - dhcp_level = MAX(rdata->public.dhcp_level, ra->dhcp_level); + dhcp_level = NM_MAX(rdata->public.dhcp_level, ra->dhcp_level); if (rdata->public.dhcp_level != dhcp_level) { rdata->public.dhcp_level = dhcp_level; diff --git a/src/core/ndisc/nm-lndp-ndisc.c b/src/core/ndisc/nm-lndp-ndisc.c index 63dde5a5..932366ff 100644 --- a/src/core/ndisc/nm-lndp-ndisc.c +++ b/src/core/ndisc/nm-lndp-ndisc.c @@ -161,7 +161,7 @@ receive_ra(struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) * let's keep the "most managed" level. */ G_STATIC_ASSERT_EXPR(NM_NDISC_DHCP_LEVEL_MANAGED > NM_NDISC_DHCP_LEVEL_OTHERCONF); G_STATIC_ASSERT_EXPR(NM_NDISC_DHCP_LEVEL_OTHERCONF > NM_NDISC_DHCP_LEVEL_NONE); - dhcp_level = MAX(dhcp_level, rdata->public.dhcp_level); + dhcp_level = NM_MAX(dhcp_level, rdata->public.dhcp_level); if (dhcp_level != rdata->public.dhcp_level) { rdata->public.dhcp_level = dhcp_level; diff --git a/src/core/ndisc/nm-ndisc.c b/src/core/ndisc/nm-ndisc.c index 20dd2121..c8f7ed0c 100644 --- a/src/core/ndisc/nm-ndisc.c +++ b/src/core/ndisc/nm-ndisc.c @@ -1293,10 +1293,8 @@ nm_ndisc_dad_failed(NMNDisc *ndisc, GArray *addresses, gboolean emit_changed_sig NMNDiscAddress *item = &nm_g_array_index(rdata->addresses, NMNDiscAddress, j); if (IN6_ARE_ADDR_EQUAL(&item->address, addr)) { - char sbuf[NM_INET_ADDRSTRLEN]; - - _LOGI("DAD failed for discovered address %s", nm_inet6_ntop(addr, sbuf)); changed = TRUE; + if (!complete_address(ndisc, item)) { g_array_remove_index(rdata->addresses, j); continue; diff --git a/src/core/nm-act-request.c b/src/core/nm-act-request.c index dce18ba4..bed7ffde 100644 --- a/src/core/nm-act-request.c +++ b/src/core/nm-act-request.c @@ -259,7 +259,8 @@ static void device_state_changed(NMActiveConnection *active, NMDevice *device, NMDeviceState new_state, - NMDeviceState old_state) + NMDeviceState old_state, + NMDeviceStateReason reason) { NMActiveConnectionState cur_ac_state = nm_active_connection_get_state(active); NMActiveConnectionState ac_state = NM_ACTIVE_CONNECTION_STATE_UNKNOWN; @@ -319,14 +320,20 @@ device_state_changed(NMActiveConnection *active, active); break; case NM_DEVICE_STATE_DEACTIVATING: + if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED) + ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED; + ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATING; break; case NM_DEVICE_STATE_FAILED: case NM_DEVICE_STATE_DISCONNECTED: case NM_DEVICE_STATE_UNMANAGED: case NM_DEVICE_STATE_UNAVAILABLE: - ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATED; - ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED; + ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATED; + if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED) + ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED; + else + ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED; g_signal_handlers_disconnect_by_func(device, G_CALLBACK(device_notify), active); break; diff --git a/src/core/nm-active-connection.c b/src/core/nm-active-connection.c index 36a11f71..eb7b1cca 100644 --- a/src/core/nm-active-connection.c +++ b/src/core/nm-active-connection.c @@ -636,7 +636,8 @@ device_state_changed(NMDevice *device, NM_ACTIVE_CONNECTION_GET_CLASS(self)->device_state_changed(self, device, new_state, - old_state); + old_state, + reason); } static void @@ -1604,9 +1605,11 @@ static const NMDBusInterfaceInfoExtended interface_info_active_connection = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Controller", "o", NM_ACTIVE_CONNECTION_CONTROLLER), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Master", - "o", - NM_ACTIVE_CONNECTION_MASTER), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Master", + "o", + NM_ACTIVE_CONNECTION_MASTER, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void diff --git a/src/core/nm-active-connection.h b/src/core/nm-active-connection.h index 15db68c3..8032294f 100644 --- a/src/core/nm-active-connection.h +++ b/src/core/nm-active-connection.h @@ -78,7 +78,8 @@ typedef struct { void (*device_state_changed)(NMActiveConnection *connection, NMDevice *device, NMDeviceState new_state, - NMDeviceState old_state); + NMDeviceState old_state, + NMDeviceStateReason reason); void (*master_failed)(NMActiveConnection *connection); void (*device_changed)(NMActiveConnection *connection, diff --git a/src/core/nm-auth-utils.c b/src/core/nm-auth-utils.c index 7739f443..aa2547b3 100644 --- a/src/core/nm-auth-utils.c +++ b/src/core/nm-auth-utils.c @@ -8,6 +8,7 @@ #include "nm-auth-utils.h" #include "libnm-glib-aux/nm-c-list.h" +#include "libnm-core-intern/nm-core-internal.h" #include "nm-setting-connection.h" #include "libnm-core-aux-intern/nm-auth-subject.h" #include "nm-auth-manager.h" @@ -603,7 +604,6 @@ gboolean nm_auth_is_subject_in_acl(NMConnection *connection, NMAuthSubject *subject, char **out_error_desc) { NMSettingConnection *s_con; - gs_free char *user = NULL; gulong uid; g_return_val_if_fail(connection, FALSE); @@ -621,13 +621,6 @@ nm_auth_is_subject_in_acl(NMConnection *connection, NMAuthSubject *subject, char if (0 == uid) return TRUE; - user = nm_utils_uid_to_name(uid); - if (!user) { - NM_SET_OUT(out_error_desc, - g_strdup_printf("Could not determine username for uid %lu", uid)); - return FALSE; - } - s_con = nm_connection_get_setting_connection(connection); if (!s_con) { /* This can only happen when called from AddAndActivate, so we know @@ -637,7 +630,7 @@ nm_auth_is_subject_in_acl(NMConnection *connection, NMAuthSubject *subject, char } /* Match the username returned by the session check to a user in the ACL */ - if (!nm_setting_connection_permissions_user_allowed(s_con, user)) { + if (!nm_setting_connection_permissions_user_allowed_by_uid(s_con, uid)) { NM_SET_OUT(out_error_desc, g_strdup_printf("uid %lu has no permission to perform this operation", uid)); return FALSE; diff --git a/src/core/nm-config-data.c b/src/core/nm-config-data.c index ed6d8381..468e56b8 100644 --- a/src/core/nm-config-data.c +++ b/src/core/nm-config-data.c @@ -1219,7 +1219,7 @@ load_global_dns(GKeyFile *keyfile, gboolean internal) if (strv) { nm_strv_cleanup(strv, TRUE, TRUE, TRUE); for (i = 0, j = 0; strv[i]; i++) { - if (_nm_utils_dns_option_validate(strv[i], NULL, NULL, TRUE, NULL)) + if (_nm_utils_dns_option_validate(strv[i], NULL, NULL, AF_UNSPEC, NULL)) strv[j++] = strv[i]; else g_free(strv[i]); @@ -1453,7 +1453,7 @@ nm_global_dns_config_from_dbus(const GValue *value, GError **error) nm_strv_cleanup(strv, TRUE, TRUE, TRUE); for (i = 0, j = 0; strv && strv[i]; i++) { - if (_nm_utils_dns_option_validate(strv[i], NULL, NULL, TRUE, NULL)) + if (_nm_utils_dns_option_validate(strv[i], NULL, NULL, AF_UNSPEC, NULL)) strv[j++] = strv[i]; else g_free(strv[i]); diff --git a/src/core/nm-config.c b/src/core/nm-config.c index b8df41b7..5db4a92a 100644 --- a/src/core/nm-config.c +++ b/src/core/nm-config.c @@ -858,7 +858,6 @@ static const ConfigGroup config_groups[] = { NM_CONFIG_KEYFILE_KEY_MAIN_NO_AUTO_DEFAULT, NM_CONFIG_KEYFILE_KEY_MAIN_PLUGINS, NM_CONFIG_KEYFILE_KEY_MAIN_RC_MANAGER, - NM_CONFIG_KEYFILE_KEY_MAIN_SLAVES_ORDER, NM_CONFIG_KEYFILE_KEY_MAIN_SYSTEMD_RESOLVED, ), }, { @@ -1129,12 +1128,12 @@ read_config(GKeyFile *keyfile, /* merge the string lists, by omitting duplicates. */ for (iter_val = old_val; iter_val && *iter_val; iter_val++) { - if (last_char != '-' || nm_strv_find_first(new_val, -1, *iter_val) < 0) + if (last_char != '-' || !nm_strv_contains(new_val, -1, *iter_val)) g_ptr_array_add(new, g_strdup(*iter_val)); } for (iter_val = new_val; iter_val && *iter_val; iter_val++) { /* don't add duplicates. That means an "option=a,b"; "option+=a,c" results in "option=a,b,c" */ - if (last_char == '+' && nm_strv_find_first(old_val, -1, *iter_val) < 0) + if (last_char == '+' && !nm_strv_contains(old_val, -1, *iter_val)) g_ptr_array_add(new, *iter_val); else g_free(*iter_val); @@ -3019,8 +3018,7 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps gboolean nm_config_kernel_command_line_nm_debug(void) { - return (nm_strv_find_first(nm_utils_proc_cmdline_split(), -1, NM_CONFIG_KERNEL_CMDLINE_NM_DEBUG) - >= 0); + return nm_strv_contains(nm_utils_proc_cmdline_split(), -1, NM_CONFIG_KERNEL_CMDLINE_NM_DEBUG); } /*****************************************************************************/ diff --git a/src/core/nm-connectivity.c b/src/core/nm-connectivity.c index 92de44f1..15dc31aa 100644 --- a/src/core/nm-connectivity.c +++ b/src/core/nm-connectivity.c @@ -79,9 +79,9 @@ struct _NMConnectivityCheckHandle { struct curl_slist *request_headers; struct curl_slist *hosts; - gsize response_good_cnt; + GSource *curl_timer; - guint curl_timer; + gsize response_good_cnt; } concheck; #endif @@ -241,7 +241,7 @@ cb_data_complete(NMConnectivityCheckHandle *cb_data, curl_slist_free_all(cb_data->concheck.request_headers); curl_slist_free_all(cb_data->concheck.hosts); } - nm_clear_g_source(&cb_data->concheck.curl_timer); + nm_clear_g_source_inst(&cb_data->concheck.curl_timer); nm_clear_g_cancellable(&cb_data->concheck.resolve_cancellable); #endif @@ -406,6 +406,7 @@ _con_curl_timeout_cb(gpointer user_data) { NMConnectivityCheckHandle *cb_data = user_data; + nm_clear_g_source_inst(&cb_data->concheck.curl_timer); _con_curl_check_connectivity(cb_data->concheck.curl_mhandle, CURL_SOCKET_TIMEOUT, 0); _complete_queued(cb_data->self); return G_SOURCE_CONTINUE; @@ -416,9 +417,11 @@ multi_timer_cb(CURLM *multi, long timeout_msec, void *userdata) { NMConnectivityCheckHandle *cb_data = userdata; - nm_clear_g_source(&cb_data->concheck.curl_timer); - if (timeout_msec != -1) - cb_data->concheck.curl_timer = g_timeout_add(timeout_msec, _con_curl_timeout_cb, cb_data); + nm_clear_g_source_inst(&cb_data->concheck.curl_timer); + if (timeout_msec != -1) { + cb_data->concheck.curl_timer = + nm_g_timeout_add_source(timeout_msec, _con_curl_timeout_cb, cb_data); + } return 0; } @@ -1292,7 +1295,7 @@ update_config(NMConnectivity *self, NMConfigData *config_data) priv->uri_valid = new_uri_valid; interval = nm_config_data_get_connectivity_interval(config_data); - interval = MIN(interval, (7 * 24 * 3600)); + interval = NM_MIN(interval, (7u * 24 * 3600)); if (priv->interval != interval) { priv->interval = interval; changed = TRUE; diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 5442efbf..178ea3c4 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -738,19 +738,20 @@ nm_utils_kill_child_sync(pid_t pid, if (!was_waiting) { nm_log_dbg(log_domain, - LOG_NAME_FMT ": waiting up to %ld milliseconds for process to terminate " + LOG_NAME_FMT ": waiting up to %lu milliseconds for process to terminate " "normally after sending %s...", LOG_NAME_ARGS, - (long) MAX(wait_before_kill_msec, 0), + (unsigned long) wait_before_kill_msec, _kc_signal_to_string(sig)); was_waiting = TRUE; } - sleep_time = MIN(wait_until - now, sleep_duration_usec); + sleep_time = NM_MIN(wait_until - now, (gint64) sleep_duration_usec); if (loop_count < 20) { /* At the beginning we expect the process to die fast. * Limit the sleep time, the limit doubles with every iteration. */ - sleep_time = MIN(sleep_time, (((guint64) 1) << loop_count) * G_USEC_PER_SEC / 2000); + sleep_time = + NM_MIN(sleep_time, (((guint64) 1) << loop_count) * G_USEC_PER_SEC / 2000); loop_count++; } g_usleep(sleep_time); @@ -1031,17 +1032,17 @@ nm_utils_kill_process_sync(pid_t pid, loop_count = 0; /* reset the loop_count. Now we really expect the process to die quickly. */ } else - sleep_time = MIN(wait_until_sigkill - now, sleep_duration_usec); + sleep_time = NM_MIN(wait_until_sigkill - now, (gint64) sleep_duration_usec); } if (!was_waiting) { if (wait_until_sigkill != 0) { nm_log_dbg(log_domain, LOG_NAME_PROCESS_FMT - ": waiting up to %ld milliseconds for process to disappear before " + ": waiting up to %lu milliseconds for process to disappear before " "sending KILL signal after sending %s...", LOG_NAME_ARGS, - (long) wait_before_kill_msec, + (unsigned long) wait_before_kill_msec, _kc_signal_to_string(sig)); } else if (max_wait_until != 0) { nm_log_dbg( @@ -1064,7 +1065,7 @@ nm_utils_kill_process_sync(pid_t pid, if (loop_count < 20) { /* At the beginning we expect the process to die fast. * Limit the sleep time, the limit doubles with every iteration. */ - sleep_time = MIN(sleep_time, (((guint64) 1) << loop_count) * G_USEC_PER_SEC / 2000); + sleep_time = NM_MIN(sleep_time, (((guint64) 1) << loop_count) * G_USEC_PER_SEC / 2000); loop_count++; } g_usleep(sleep_time); @@ -2711,7 +2712,7 @@ _host_id_read_timestamp(gboolean use_secret_key_file, #define EPOCH_TWO_YEARS (G_GINT64_CONSTANT(2 * 365 * 24 * 3600) * NM_UTILS_NSEC_PER_SEC) - v = nm_hash_siphash42(1156657133u, host_id, host_id_len); + v = c_siphash_hash(NM_HASH_SEED_16_U64(1156657133u), host_id, host_id_len); now = time(NULL); *out_timestamp_ns = @@ -3396,6 +3397,7 @@ nm_utils_stable_id_parse(const char *stable_id, const char *hwaddr, const char *bootid, const char *uuid, + GBytes *ssid, char **out_generated) { nm_auto_str_buf NMStrBuf str = NM_STR_BUF_INIT_A(NM_UTILS_GET_NEXT_REALLOC_SIZE_232, FALSE); @@ -3481,7 +3483,29 @@ nm_utils_stable_id_parse(const char *stable_id, _stable_id_append(&str, deviceid); else if (CHECK_PREFIX("${MAC}")) _stable_id_append(&str, hwaddr); - else if (g_str_has_prefix(&stable_id[i], "${RANDOM}")) { + else if (CHECK_PREFIX("${NETWORK_SSID}")) { + gs_free char *value_free = NULL; + gs_free char *s = NULL; + const char *value; + const char *type_id; + + if (ssid) { + type_id = "s:"; + value = nm_utils_buf_utf8safe_escape_bytes(ssid, + NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL, + &value_free); + } else { + /* If we have no SSID, we fallback to the connection's UUID. + * + * Give a separate prefix (@type_id), so that an SSID and a UUID + * fallback never result in the same output. */ + type_id = "c:"; + value = uuid ?: ""; + } + + s = g_strjoin("", type_id, value, NULL); + _stable_id_append(&str, s); + } else if (g_str_has_prefix(&stable_id[i], "${RANDOM}")) { /* RANDOM makes not so much sense for cloned-mac-address * as the result is similar to specifying "cloned-mac-address=random". * It makes however sense for RFC 7217 Stable Privacy IPv6 addresses @@ -3522,6 +3546,29 @@ nm_utils_stable_id_parse(const char *stable_id, return NM_UTILS_STABLE_TYPE_GENERATED; } +NMUtilsStableType +nm_utils_stable_id_parse_network_ssid(GBytes *ssid, + const char *uuid, + gboolean complete, + char **out_stable_id) +{ + NMUtilsStableType stable_type; + + stable_type = + nm_utils_stable_id_parse("${NETWORK_SSID}", NULL, NULL, NULL, uuid, ssid, out_stable_id); + + nm_assert(stable_type == NM_UTILS_STABLE_TYPE_GENERATED); + nm_assert(!out_stable_id || nm_str_not_empty(*out_stable_id)); + + if (complete && out_stable_id) { + gs_free char *ss = g_steal_pointer(out_stable_id); + + *out_stable_id = nm_utils_stable_id_generated_complete(ss); + } + + return stable_type; +} + /*****************************************************************************/ static gboolean @@ -3567,7 +3614,7 @@ nm_utils_ipv6_addr_set_stable_privacy_with_host_id(NMUtilsStableType stable_type sum = g_checksum_new(G_CHECKSUM_SHA256); - host_id_len = MIN(host_id_len, G_MAXUINT32); + host_id_len = NM_MIN(host_id_len, G_MAXUINT32); if (stable_type != NM_UTILS_STABLE_TYPE_UUID) { guint8 stable_type_uint8; @@ -3742,7 +3789,7 @@ _hw_addr_gen_stable_eth(NMUtilsStableType stable_type, sum = g_checksum_new(G_CHECKSUM_SHA256); - host_id_len = MIN(host_id_len, G_MAXUINT32); + host_id_len = NM_MIN(host_id_len, G_MAXUINT32); nm_assert(stable_type < (NMUtilsStableType) 255); stable_type_uint8 = stable_type; @@ -3819,23 +3866,23 @@ nm_utils_dhcp_client_id_mac(int arp_type, const guint8 *hwaddr, gsize hwaddr_len return g_bytes_new_take(client_id_buf, hwaddr_len + 1); } -#define HASH_KEY \ - ((const guint8[16]){0x80, \ - 0x11, \ - 0x8c, \ - 0xc2, \ - 0xfe, \ - 0x4a, \ - 0x03, \ - 0xee, \ - 0x3e, \ - 0xd6, \ - 0x0c, \ - 0x6f, \ - 0x36, \ - 0x39, \ - 0x14, \ - 0x09}) +#define HASH_KEY \ + NM_HASH_SEED_16(0x80, \ + 0x11, \ + 0x8c, \ + 0xc2, \ + 0xfe, \ + 0x4a, \ + 0x03, \ + 0xee, \ + 0x3e, \ + 0xd6, \ + 0x0c, \ + 0x6f, \ + 0x36, \ + 0x39, \ + 0x14, \ + 0x09) /** * nm_utils_create_dhcp_iaid: @@ -4255,8 +4302,8 @@ read_device_factory_paths_sort_fcn(gconstpointer a, gconstpointer b) const struct plugin_info *db = b; time_t ta, tb; - ta = MAX(da->st.st_mtime, da->st.st_ctime); - tb = MAX(db->st.st_mtime, db->st.st_ctime); + ta = NM_MAX(da->st.st_mtime, da->st.st_ctime); + tb = NM_MAX(db->st.st_mtime, db->st.st_ctime); if (ta < tb) return 1; @@ -4779,15 +4826,91 @@ get_max_rate_vht(const guint8 *bytes, guint len, guint32 *out_maxrate) return TRUE; } +static gboolean +get_bandwidth_ht(const guint8 *bytes, guint len, guint32 *out_bandwidth) +{ + guint8 ht_op_flag_group; + + /* http://standards.ieee.org/getieee802/download/802.11-2012.pdf + * https://mrncciew.com/2014/11/04/cwap-ht-operations-ie/ + * IEEE std 802.11-2020 section 9.4.2.56 + */ + + if (len != 22) + return FALSE; + + ht_op_flag_group = bytes[1]; + + /* Check bit for 20Mhz or 40Mhz */ + if (ht_op_flag_group & (1 << 2)) + *out_bandwidth = 40; + else + *out_bandwidth = 20; + + return TRUE; +} + +static gboolean +get_bandwidth_vht(const guint8 *bytes, guint len, guint32 *out_bandwidth) +{ + guint8 sta_channel_width; + guint8 ccfs0; + guint8 ccfs1; + + /* http://chimera.labs.oreilly.com/books/1234000001739/ch03.html#management_frames + * https://community.arubanetworks.com/community-home/librarydocuments/viewdocument?DocumentKey=799aad1b-d9c4-421a-a492-a111e8680d34&CommunityKey=39a6bdf4-2376-46f9-853a-49420d2d0caa&tab=librarydocuments + * IEEE Std 802.11-2020 section 9.4.2.158 + */ + + if (len < 3) + return FALSE; + + sta_channel_width = bytes[0]; + ccfs0 = bytes[1]; + ccfs1 = bytes[2]; + switch (sta_channel_width) { + case 0: + /* we rely on HT Operation IE value*/ + return FALSE; + case 1: + if (ccfs1 == 0) + *out_bandwidth = 80; + else if (abs(ccfs1 - ccfs0) == 8) + *out_bandwidth = 160; + else if (abs(ccfs1 - ccfs0) > 16) + /* we are considering 80+80 as 160 */ + *out_bandwidth = 160; + else + /* falling back to 80 MHz */ + *out_bandwidth = 80; + break; + case 2: + /* deprecated */ + *out_bandwidth = 160; + break; + case 3: + /* deprecated */ + *out_bandwidth = 160; + break; + default: + return FALSE; + } + + return TRUE; +} + /* Management Frame Information Element IDs, ieee80211_eid */ #define WLAN_EID_HT_CAPABILITY 45 +#define WLAN_EID_HT_OPERATION 61 #define WLAN_EID_VHT_CAPABILITY 191 +#define WLAN_EID_VHT_OPERATION 192 #define WLAN_EID_VENDOR_SPECIFIC 221 void nm_wifi_utils_parse_ies(const guint8 *bytes, gsize len, guint32 *out_max_rate, + guint32 *out_bandwidth, gboolean *out_metered, gboolean *out_owe_transition_mode) { @@ -4795,6 +4918,7 @@ nm_wifi_utils_parse_ies(const guint8 *bytes, guint32 m; NM_SET_OUT(out_max_rate, 0); + NM_SET_OUT(out_bandwidth, 0); NM_SET_OUT(out_metered, FALSE); NM_SET_OUT(out_owe_transition_mode, FALSE); @@ -4816,12 +4940,20 @@ nm_wifi_utils_parse_ies(const guint8 *bytes, *out_max_rate = NM_MAX(*out_max_rate, m); } break; + case WLAN_EID_HT_OPERATION: + if (out_bandwidth) + get_bandwidth_ht(bytes, elem_len, out_bandwidth); + break; case WLAN_EID_VHT_CAPABILITY: if (out_max_rate) { if (get_max_rate_vht(bytes, elem_len, &m)) *out_max_rate = NM_MAX(*out_max_rate, m); } break; + case WLAN_EID_VHT_OPERATION: + if (out_bandwidth) + get_bandwidth_vht(bytes, elem_len, out_bandwidth); + break; case WLAN_EID_VENDOR_SPECIFIC: if (len == 8 && bytes[0] == 0x00 /* OUI: Microsoft */ && bytes[1] == 0x50 && bytes[2] == 0xf2 @@ -5333,7 +5465,7 @@ nm_utils_shorten_hostname(const char *hostname, char **shortened) l = (dot - hostname); else l = strlen(hostname); - l = MIN(l, (gsize) NM_HOST_NAME_MAX); + l = NM_MIN(l, (gsize) NM_HOST_NAME_MAX); s = g_strndup(hostname, l); diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index 55112504..f015236d 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -313,8 +313,14 @@ NMUtilsStableType nm_utils_stable_id_parse(const char *stable_id, const char *hwaddr, const char *bootid, const char *uuid, + GBytes *ssid, char **out_generated); +NMUtilsStableType nm_utils_stable_id_parse_network_ssid(GBytes *ssid, + const char *uuid, + gboolean complete, + char **out_stable_id); + char *nm_utils_stable_id_random(void); char *nm_utils_stable_id_generated_complete(const char *msg); @@ -455,6 +461,7 @@ const char *nm_utils_parse_dns_domain(const char *domain, gboolean *is_routing); void nm_wifi_utils_parse_ies(const guint8 *bytes, gsize len, guint32 *out_max_rate, + guint32 *out_bandwidth, gboolean *out_metered, gboolean *out_owe_transition_mode); diff --git a/src/core/nm-dbus-manager.c b/src/core/nm-dbus-manager.c index 0bde5971..7e6757f0 100644 --- a/src/core/nm-dbus-manager.c +++ b/src/core/nm-dbus-manager.c @@ -1644,8 +1644,8 @@ _new_unix_process(GDBusMethodInvocation *context, /* polkit glib library stores uid and pid as int. There might be some * pitfalls if the id ever happens to be larger then that. Just assert against * it here. */ - g_return_val_if_fail(uid <= MIN(G_MAXINT, G_MAXINT32), NULL); - g_return_val_if_fail(pid > 0 && pid <= MIN(G_MAXINT, G_MAXINT32), NULL); + g_return_val_if_fail(uid <= NM_MIN(G_MAXINT, G_MAXINT32), NULL); + g_return_val_if_fail(pid > 0 && pid <= NM_MIN(G_MAXINT, G_MAXINT32), NULL); self = nm_auth_subject_new_unix_process(dbus_sender, pid, uid); diff --git a/src/core/nm-dbus-utils.c b/src/core/nm-dbus-utils.c index 05eca84f..0a1be4a2 100644 --- a/src/core/nm-dbus-utils.c +++ b/src/core/nm-dbus-utils.c @@ -11,6 +11,18 @@ /*****************************************************************************/ +const GDBusAnnotationInfo _nm_gdbus_annotation_info_deprecated = { + .key = "org.freedesktop.DBus.Deprecated", + .value = "true", +}; + +const GDBusAnnotationInfo *const _nm_gdbus_annotation_info_list_deprecated[] = { + NM_GDBUS_ANNOTATION_INFO_DEPRECATED(), + NULL, +}; + +/*****************************************************************************/ + GDBusPropertyInfo * nm_dbus_utils_interface_info_lookup_property(const GDBusInterfaceInfo *interface_info, const char *property_name, diff --git a/src/core/nm-dbus-utils.h b/src/core/nm-dbus-utils.h index 54b50634..237b37d8 100644 --- a/src/core/nm-dbus-utils.h +++ b/src/core/nm-dbus-utils.h @@ -45,34 +45,55 @@ typedef struct { G_STATIC_ASSERT(G_STRUCT_OFFSET(NMDBusPropertyInfoExtended, property_name) == G_STRUCT_OFFSET(struct _NMDBusPropertyInfoExtendedBase, property_name)); -#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE(m_name, m_signature, m_property_name) \ - ((GDBusPropertyInfo *) &((const struct _NMDBusPropertyInfoExtendedBase){ \ - ._parent = \ - { \ - .ref_count = -1, \ - .name = m_name, \ - .signature = m_signature, \ - .flags = G_DBUS_PROPERTY_INFO_FLAGS_READABLE, \ - }, \ - .property_name = m_property_name, \ +extern const GDBusAnnotationInfo _nm_gdbus_annotation_info_deprecated; + +#define NM_GDBUS_ANNOTATION_INFO_DEPRECATED() \ + ((GDBusAnnotationInfo *) &_nm_gdbus_annotation_info_deprecated) + +#define NM_DEFINE_DBUS_ANNOTATION_INFO(a_key, a_value) \ + ((GDBusAnnotationInfo *) &((const GDBusAnnotationInfo){ \ + .key = (a_key), \ + .value = (a_value), \ + })) + +extern const GDBusAnnotationInfo *const _nm_gdbus_annotation_info_list_deprecated[]; + +/* This is a (NULL terminated) list of GDBusAnnotationInfo with only one entry: + * NM_GDBUS_ANNOTATION_INFO_DEPRECATED. This single instance can be reused for the + * common case where we only have one annotation (and it's the deprecation). + * + * Otherwise, NM_DEFINE_DBUS_ANNOTATION_INFOS() is for defining a new list. */ +#define NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED() \ + ((GDBusAnnotationInfo **) _nm_gdbus_annotation_info_list_deprecated) + +#define NM_DEFINE_DBUS_ANNOTATION_INFOS(...) \ + ((GDBusAnnotationInfo **) ((const GDBusAnnotationInfo *const[]){__VA_ARGS__, NULL})) + +#define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE(m_name, m_signature, m_property_name, ...) \ + ((GDBusPropertyInfo *) &((const struct _NMDBusPropertyInfoExtendedBase){ \ + ._parent = {.ref_count = -1, \ + .name = m_name, \ + .signature = m_signature, \ + .flags = G_DBUS_PROPERTY_INFO_FLAGS_READABLE, \ + __VA_ARGS__}, \ + .property_name = m_property_name, \ })) #define NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE(m_name, \ m_signature, \ m_property_name, \ m_permission, \ - m_audit_op) \ + m_audit_op, \ + ...) \ ((GDBusPropertyInfo *) &((const struct _NMDBusPropertyInfoExtendedReadWritable){ \ ._base = \ { \ - ._parent = \ - { \ - .ref_count = -1, \ - .name = m_name, \ - .signature = m_signature, \ - .flags = G_DBUS_PROPERTY_INFO_FLAGS_READABLE \ - | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, \ - }, \ + ._parent = {.ref_count = -1, \ + .name = m_name, \ + .signature = m_signature, \ + .flags = G_DBUS_PROPERTY_INFO_FLAGS_READABLE \ + | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, \ + __VA_ARGS__}, \ .property_name = m_property_name, \ }, \ .permission = m_permission, \ diff --git a/src/core/nm-dispatcher.c b/src/core/nm-dispatcher.c index cdc07dd6..9aa4194e 100644 --- a/src/core/nm-dispatcher.c +++ b/src/core/nm-dispatcher.c @@ -50,6 +50,8 @@ } \ G_STMT_END +static gboolean nm_dispatcher_need_device(NMDispatcherAction action); + /*****************************************************************************/ struct NMDispatcherCallId { @@ -469,7 +471,8 @@ static const char *action_table[] = {[NM_DISPATCHER_ACTION_HOSTNAME] = NMD_ [NM_DISPATCHER_ACTION_DHCP_CHANGE_6] = NMD_ACTION_DHCP6_CHANGE, [NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE] = NMD_ACTION_CONNECTIVITY_CHANGE, - [NM_DISPATCHER_ACTION_REAPPLY] = NMD_ACTION_REAPPLY}; + [NM_DISPATCHER_ACTION_REAPPLY] = NMD_ACTION_REAPPLY, + [NM_DISPATCHER_ACTION_DNS_CHANGE] = NMD_ACTION_DNS_CHANGE}; static const char * action_to_string(NMDispatcherAction action) @@ -530,9 +533,7 @@ _dispatcher_call(NMDispatcherAction action, if (G_UNLIKELY(!request_id)) request_id = ++gl.request_id_counter; - /* All actions except 'hostname' and 'connectivity-change' require a device */ - if (action == NM_DISPATCHER_ACTION_HOSTNAME - || action == NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE) { + if (!nm_dispatcher_need_device(action)) { _LOG2D(request_id, log_ifname, log_con_uuid, @@ -592,9 +593,8 @@ _dispatcher_call(NMDispatcherAction action, g_variant_builder_init(&vpn_ip4_props, G_VARIANT_TYPE_VARDICT); g_variant_builder_init(&vpn_ip6_props, G_VARIANT_TYPE_VARDICT); - /* hostname and connectivity-change actions don't send device data */ - if (action != NM_DISPATCHER_ACTION_HOSTNAME - && action != NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE) { + /* hostname, DNS and connectivity-change actions don't send device data */ + if (nm_dispatcher_need_device(action)) { fill_device_props(device, &device_props, &device_proxy_props, @@ -925,6 +925,30 @@ nm_dispatcher_call_connectivity(NMConnectivityState connectivity_state, out_call_id); } +/** + * nm_dispatcher_call_dns_change(): + * + * This method does not block the caller. + * + * Returns: %TRUE if the action was dispatched, %FALSE on failure + */ +gboolean +nm_dispatcher_call_dns_change(void) +{ + return _dispatcher_call(NM_DISPATCHER_ACTION_DNS_CHANGE, + FALSE, + NULL, + NULL, + NULL, + FALSE, + NM_CONNECTIVITY_UNKNOWN, + NULL, + NULL, + NULL, + NULL, + NULL); +} + void nm_dispatcher_call_cancel(NMDispatcherCallId *call_id) { @@ -937,3 +961,16 @@ nm_dispatcher_call_cancel(NMDispatcherCallId *call_id) _LOG3D(call_id, "cancelling dispatcher callback action"); call_id->callback = NULL; } + +/* All actions except 'hostname', 'connectivity-change' and 'dns-change' require + * a device */ +static gboolean +nm_dispatcher_need_device(NMDispatcherAction action) +{ + if (action == NM_DISPATCHER_ACTION_HOSTNAME + || action == NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE + || action == NM_DISPATCHER_ACTION_DNS_CHANGE) { + return FALSE; + } + return TRUE; +} diff --git a/src/core/nm-dispatcher.h b/src/core/nm-dispatcher.h index 30716399..a1cb96b7 100644 --- a/src/core/nm-dispatcher.h +++ b/src/core/nm-dispatcher.h @@ -23,6 +23,7 @@ typedef enum { NM_DISPATCHER_ACTION_DHCP_CHANGE_6, NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE, NM_DISPATCHER_ACTION_REAPPLY, + NM_DISPATCHER_ACTION_DNS_CHANGE, } NMDispatcherAction; #define NM_DISPATCHER_ACTION_DHCP_CHANGE_X(IS_IPv4) \ @@ -69,6 +70,8 @@ gboolean nm_dispatcher_call_connectivity(NMConnectivityState state, gpointer user_data, NMDispatcherCallId **out_call_id); +gboolean nm_dispatcher_call_dns_change(void); + void nm_dispatcher_call_cancel(NMDispatcherCallId *call_id); #endif /* __NM_DISPATCHER_H__ */ diff --git a/src/core/nm-ip-config.c b/src/core/nm-ip-config.c index bec67d9a..c4dc04da 100644 --- a/src/core/nm-ip-config.c +++ b/src/core/nm-ip-config.c @@ -16,6 +16,10 @@ /*****************************************************************************/ +#define NOTIFY_PLATFORM_RATELIMIT_MSEC 333 + +/*****************************************************************************/ + GType nm_ip4_config_get_type(void); GType nm_ip6_config_get_type(void); @@ -68,6 +72,73 @@ _value_set_variant_as(GValue *value, const char *const *strv, guint len) /*****************************************************************************/ static void +_notify_platform_handle(NMIPConfig *self, gint64 now_msec) +{ + NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); + guint32 obj_type_flags; + + nm_clear_g_source_inst(&priv->notify_platform_timeout_source); + + priv->notify_platform_rlimited_until_msec = now_msec + NOTIFY_PLATFORM_RATELIMIT_MSEC; + + obj_type_flags = nm_steal_int(&priv->notify_platform_obj_type_flags); + + nm_assert(obj_type_flags != 0u); + + _handle_platform_change(self, obj_type_flags, FALSE); +} + +static gboolean +_notify_platform_cb(gpointer user_data) +{ + _notify_platform_handle(user_data, nm_utils_get_monotonic_timestamp_msec()); + return G_SOURCE_CONTINUE; +} + +static void +_notify_platform(NMIPConfig *self, guint32 obj_type_flags) +{ + const int addr_family = nm_ip_config_get_addr_family(self); + const int IS_IPv4 = NM_IS_IPv4(addr_family); + NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); + gint64 now_msec; + + obj_type_flags &= (nmp_object_type_to_flags(NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) + | nmp_object_type_to_flags(NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))); + + if (obj_type_flags == 0u) + return; + + priv->notify_platform_obj_type_flags |= obj_type_flags; + + if (priv->notify_platform_timeout_source) { + /* We are currently rate limited. Don't bother to check whether + * (now_msec < priv->notify_platform_rlimited_until_msec), just always + * delegate to the timeout handler. It is scheduled with a lower idle + * priority, so we want that additional backoff. */ + return; + } + + now_msec = nm_utils_get_monotonic_timestamp_msec(); + + if (now_msec < priv->notify_platform_rlimited_until_msec) { + priv->notify_platform_timeout_source = nm_g_source_attach( + /* Schedule with a low G_PRIORITY_LOW. */ + nm_g_timeout_source_new(priv->notify_platform_rlimited_until_msec - now_msec, + G_PRIORITY_LOW - 10, + _notify_platform_cb, + self, + NULL), + NULL); + return; + } + + _notify_platform_handle(self, now_msec); +} + +/*****************************************************************************/ + +static void _l3cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, NMIPConfig *self) { switch (notify_data->notify_type) { @@ -76,7 +147,7 @@ _l3cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, NMIPCo _handle_l3cd_changed(self, notify_data->l3cd_changed.l3cd_new); break; case NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE_ON_IDLE: - _handle_platform_change(self, notify_data->platform_change_on_idle.obj_type_flags, FALSE); + _notify_platform(self, notify_data->platform_change_on_idle.obj_type_flags); break; default: break; @@ -207,6 +278,8 @@ finalize(GObject *object) NMIPConfig *self = NM_IP_CONFIG(object); NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE(self); + nm_clear_g_source_inst(&priv->notify_platform_timeout_source); + nm_clear_g_signal_handler(priv->l3cfg, &priv->l3cfg_notify_id); g_object_unref(priv->l3cfg); @@ -412,23 +485,31 @@ static const NMDBusInterfaceInfoExtended interface_info_ip4_config = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_IP4_CONFIG, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Addresses", - "aau", - NM_IP4_CONFIG_ADDRESSES), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Addresses", + "aau", + NM_IP4_CONFIG_ADDRESSES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("AddressData", "aa{sv}", NM_IP_CONFIG_ADDRESS_DATA), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Gateway", "s", NM_IP_CONFIG_GATEWAY), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Routes", "aau", NM_IP4_CONFIG_ROUTES), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Routes", + "aau", + NM_IP4_CONFIG_ROUTES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("RouteData", "aa{sv}", NM_IP_CONFIG_ROUTE_DATA), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("NameserverData", "aa{sv}", NM_IP4_CONFIG_NAMESERVER_DATA), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Nameservers", - "au", - NM_IP4_CONFIG_NAMESERVERS), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Nameservers", + "au", + NM_IP4_CONFIG_NAMESERVERS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Domains", "as", NM_IP_CONFIG_DOMAINS), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Searches", "as", NM_IP_CONFIG_SEARCHES), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("DnsOptions", @@ -440,9 +521,11 @@ static const NMDBusInterfaceInfoExtended interface_info_ip4_config = { NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("WinsServerData", "as", NM_IP4_CONFIG_WINS_SERVER_DATA), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("WinsServers", - "au", - NM_IP4_CONFIG_WINS_SERVERS), ), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "WinsServers", + "au", + NM_IP4_CONFIG_WINS_SERVERS, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), ), ), }; static void @@ -541,16 +624,20 @@ static const NMDBusInterfaceInfoExtended interface_info_ip6_config = { .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT( NM_DBUS_INTERFACE_IP6_CONFIG, .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS( - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Addresses", - "a(ayuay)", - NM_IP6_CONFIG_ADDRESSES), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Addresses", + "a(ayuay)", + NM_IP6_CONFIG_ADDRESSES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("AddressData", "aa{sv}", NM_IP_CONFIG_ADDRESS_DATA), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Gateway", "s", NM_IP_CONFIG_GATEWAY), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("Routes", - "a(ayuayu)", - NM_IP6_CONFIG_ROUTES), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "Routes", + "a(ayuayu)", + NM_IP6_CONFIG_ROUTES, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("RouteData", "aa{sv}", NM_IP_CONFIG_ROUTE_DATA), diff --git a/src/core/nm-ip-config.h b/src/core/nm-ip-config.h index 0dcea83b..47a40bd2 100644 --- a/src/core/nm-ip-config.h +++ b/src/core/nm-ip-config.h @@ -32,7 +32,10 @@ struct _NMIPConfigPrivate { struct { const NMPObject *best_default_route; } v_gateway; - gulong l3cfg_notify_id; + GSource *notify_platform_timeout_source; + gint64 notify_platform_rlimited_until_msec; + gulong l3cfg_notify_id; + guint32 notify_platform_obj_type_flags; }; struct _NMIPConfig { diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 96274ba9..a4647116 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -157,6 +157,8 @@ struct _NML3ConfigData { bool has_routes_with_type_local_6_set : 1; bool has_routes_with_type_local_4_val : 1; bool has_routes_with_type_local_6_val : 1; + bool dhcp_enabled_4 : 1; + bool dhcp_enabled_6 : 1; bool ndisc_hop_limit_set : 1; bool ndisc_reachable_time_msec_set : 1; @@ -324,7 +326,7 @@ _strv_ptrarray_merge(GPtrArray **p_dst, const GPtrArray *src) const char *s = src->pdata[i]; if (dst_initial_len > 0 - && nm_strv_find_first((const char *const *) ((*p_dst)->pdata), dst_initial_len, s) >= 0) + && nm_strv_contains((const char *const *) ((*p_dst)->pdata), dst_initial_len, s)) continue; g_ptr_array_add(*p_dst, g_strdup(s)); @@ -1642,7 +1644,7 @@ nm_l3_config_data_get_dns_priority(const NML3ConfigData *self, int addr_family, case AF_UNSPEC: if (NM_FLAGS_ANY(self->flags, NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY_4)) { if (NM_FLAGS_ANY(self->flags, NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY_6)) { - NM_SET_OUT(out_prio, MIN(self->dns_priority_4, self->dns_priority_6)); + NM_SET_OUT(out_prio, NM_MIN(self->dns_priority_4, self->dns_priority_6)); return TRUE; } NM_SET_OUT(out_prio, self->dns_priority_4); @@ -1933,6 +1935,19 @@ nm_l3_config_data_set_mptcp_flags(NML3ConfigData *self, NMMptcpFlags mptcp_flags return TRUE; } +gboolean +nm_l3_config_data_get_dhcp_enabled(const NML3ConfigData *self, int addr_family) +{ + const int IS_IPv4 = NM_IS_IPv4(addr_family); + + nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); + if (IS_IPv4) { + return self->dhcp_enabled_4; + } else { + return self->dhcp_enabled_6; + } +} + NMProxyConfigMethod nm_l3_config_data_get_proxy_method(const NML3ConfigData *self) { @@ -2231,14 +2246,23 @@ static const NML3ConfigData * get_empty_l3cd(void) { static NML3ConfigData *empty_l3cd; + NML3ConfigData *l3cd; + +again: + l3cd = g_atomic_pointer_get(&empty_l3cd); + if (G_UNLIKELY(!l3cd)) { + l3cd = nm_l3_config_data_new(nm_dedup_multi_index_new(), 1, NM_IP_CONFIG_SOURCE_UNKNOWN); + l3cd->ifindex = 0; - if (!empty_l3cd) { - empty_l3cd = - nm_l3_config_data_new(nm_dedup_multi_index_new(), 1, NM_IP_CONFIG_SOURCE_UNKNOWN); - empty_l3cd->ifindex = 0; + nm_l3_config_data_seal(l3cd); + + if (!g_atomic_pointer_compare_and_exchange(&empty_l3cd, NULL, l3cd)) { + nm_l3_config_data_unref(l3cd); + goto again; + } } - return empty_l3cd; + return l3cd; } int @@ -2713,6 +2737,7 @@ _init_from_connection_ip(NML3ConfigData *self, int addr_family, NMConnection *co guint nnameservers; guint nsearches; const char *gateway_str; + const char *method; NMIPAddr gateway_bin; guint i; int idx; @@ -2730,6 +2755,24 @@ _init_from_connection_ip(NML3ConfigData *self, int addr_family, NMConnection *co never_default = nm_setting_ip_config_get_never_default(s_ip); + method = nm_setting_ip_config_get_method(s_ip); + if (IS_IPv4) { + if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { + self->dhcp_enabled_4 = TRUE; + } else { + self->dhcp_enabled_4 = FALSE; + } + } else { + method = nm_setting_ip_config_get_method(s_ip); + if (NM_IN_STRSET(method, + NM_SETTING_IP6_CONFIG_METHOD_AUTO, + NM_SETTING_IP6_CONFIG_METHOD_DHCP)) { + self->dhcp_enabled_6 = TRUE; + } else { + self->dhcp_enabled_6 = FALSE; + } + } + nm_l3_config_data_set_never_default(self, addr_family, !!never_default); if (!never_default && (gateway_str = nm_setting_ip_config_get_gateway(s_ip)) @@ -3413,6 +3456,11 @@ nm_l3_config_data_merge(NML3ConfigData *self, self->dhcp_lease_x[0] = nm_dhcp_lease_ref(self->dhcp_lease_x[0]); self->dhcp_lease_x[1] = nm_dhcp_lease_ref(self->dhcp_lease_x[1]); } + if (src->dhcp_enabled_4) + self->dhcp_enabled_4 = TRUE; + + if (src->dhcp_enabled_6) + self->dhcp_enabled_6 = TRUE; } NML3ConfigData * diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index 80abb00d..b55b2f41 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -554,6 +554,8 @@ NMSettingIP6ConfigPrivacy nm_l3_config_data_get_ip6_privacy(const NML3ConfigData gboolean nm_l3_config_data_set_ip6_privacy(NML3ConfigData *self, NMSettingIP6ConfigPrivacy ip6_privacy); +gboolean nm_l3_config_data_get_dhcp_enabled(const NML3ConfigData *self, int addr_family); + NMProxyConfigMethod nm_l3_config_data_get_proxy_method(const NML3ConfigData *self); gboolean nm_l3_config_data_set_proxy_method(NML3ConfigData *self, NMProxyConfigMethod value); diff --git a/src/core/nm-l3-ipv4ll.c b/src/core/nm-l3-ipv4ll.c index ec871bef..551a90fe 100644 --- a/src/core/nm-l3-ipv4ll.c +++ b/src/core/nm-l3-ipv4ll.c @@ -390,23 +390,23 @@ _ipv4ll_addrgen(NML3IPv4LL *self, gboolean generate_new_addr) _ASSERT(self); /* MAC_HASH_KEY is the same as used by systemd. */ -#define MAC_HASH_KEY \ - ((const guint8[16]){0xdf, \ - 0x04, \ - 0x22, \ - 0x98, \ - 0x3f, \ - 0xad, \ - 0x14, \ - 0x52, \ - 0xf9, \ - 0x87, \ - 0x2e, \ - 0xd1, \ - 0x9c, \ - 0x70, \ - 0xe2, \ - 0xf2}) +#define MAC_HASH_KEY \ + NM_HASH_SEED_16(0xdf, \ + 0x04, \ + 0x22, \ + 0x98, \ + 0x3f, \ + 0xad, \ + 0x14, \ + 0x52, \ + 0xf9, \ + 0x87, \ + 0x2e, \ + 0xd1, \ + 0x9c, \ + 0x70, \ + 0xe2, \ + 0xf2) if (self->mac_set && (!self->seed_set || !nm_ether_addr_equal(&self->mac, &self->seed_mac))) { /* systemd's ipv4ll library by default only hashes the MAC address (as we do here). @@ -465,23 +465,23 @@ _ipv4ll_addrgen(NML3IPv4LL *self, gboolean generate_new_addr) gen_addr: -#define PICK_HASH_KEY \ - ((const guint8[16]){0x15, \ - 0xac, \ - 0x82, \ - 0xa6, \ - 0xd6, \ - 0x3f, \ - 0x49, \ - 0x78, \ - 0x98, \ - 0x77, \ - 0x5d, \ - 0x0c, \ - 0x69, \ - 0x02, \ - 0x94, \ - 0x0b}) +#define PICK_HASH_KEY \ + NM_HASH_SEED_16(0x15, \ + 0xac, \ + 0x82, \ + 0xa6, \ + 0xd6, \ + 0x3f, \ + 0x49, \ + 0x78, \ + 0x98, \ + 0x77, \ + 0x5d, \ + 0x0c, \ + 0x69, \ + 0x02, \ + 0x94, \ + 0x0b) h = c_siphash_hash(PICK_HASH_KEY, (const guint8 *) &self->seed, sizeof(self->seed)); diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index ce9d5849..f428d04c 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -165,7 +165,18 @@ typedef struct { /* This flag is only used temporarily to do a bulk update and * clear all the ones that are no longer in used. */ - bool os_dirty : 1; + bool os_non_dynamic_dirty : 1; + + /* Indicates that we have a object in combined_l3cd_commited that keeps the + * object state alive. */ + bool os_non_dynamic : 1; + + /* Indicates that there is a dynamic route from _commit_collect_routes(), that keeps the + * object state alive. */ + bool os_dynamic : 1; + + /* Indicates that this dynamic obj-state is marked as dirty. */ + bool os_dynamic_dirty : 1; } ObjStateData; G_STATIC_ASSERT(G_STRUCT_OFFSET(ObjStateData, obj) == 0); @@ -334,6 +345,7 @@ typedef struct _NML3CfgPrivate { bool nacd_acd_not_supported : 1; bool acd_ipv4_addresses_on_link_has : 1; + bool acd_data_pruning_needed : 1; bool changed_configs_configs : 1; bool changed_configs_acd_state : 1; @@ -394,7 +406,8 @@ static void _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is static void _nm_l3cfg_emit_signal_notify_acd_event_all(NML3Cfg *self); -static gboolean _acd_has_valid_link(const NMPObject *obj, +static gboolean _acd_has_valid_link(NML3Cfg *self, + const NMPObject *obj, const guint8 **out_addr_bin, gboolean *out_acd_not_supported); @@ -674,9 +687,9 @@ _nm_l3cfg_emit_signal_notify_l3cd_changed(NML3Cfg *self, /*****************************************************************************/ static void -_l3_changed_configs_set_dirty(NML3Cfg *self) +_l3_changed_configs_set_dirty(NML3Cfg *self, const char *reason) { - _LOGT("IP configuration changed (mark dirty)"); + _LOGT("IP configuration changed (mark dirty): %s", reason); self->priv.p->changed_configs_configs = TRUE; self->priv.p->changed_configs_acd_state = TRUE; } @@ -770,51 +783,70 @@ _nm_n_acd_data_probe_new(NML3Cfg *self, in_addr_t addr, guint32 timeout_msec, gp /*****************************************************************************/ -#define nm_assert_obj_state(self, obj_state) \ - G_STMT_START \ - { \ - if (NM_MORE_ASSERTS > 0) { \ - const NML3Cfg *_self = (self); \ - const ObjStateData *_obj_state = (obj_state); \ - \ - nm_assert(_obj_state); \ - nm_assert(NM_IN_SET(NMP_OBJECT_GET_TYPE(_obj_state->obj), \ - NMP_OBJECT_TYPE_IP4_ADDRESS, \ - NMP_OBJECT_TYPE_IP6_ADDRESS, \ - NMP_OBJECT_TYPE_IP4_ROUTE, \ - NMP_OBJECT_TYPE_IP6_ROUTE)); \ - nm_assert(!_obj_state->os_plobj || _obj_state->os_was_in_platform); \ - nm_assert(_obj_state->os_failedobj_expiry_msec != 0 \ - || _obj_state->os_failedobj_prioq_idx == NM_PRIOQ_IDX_NULL); \ - nm_assert(_obj_state->os_failedobj_expiry_msec == 0 || !_obj_state->os_plobj); \ - nm_assert(_obj_state->os_failedobj_expiry_msec == 0 \ - || c_list_is_empty(&_obj_state->os_zombie_lst)); \ - nm_assert(_obj_state->os_failedobj_expiry_msec == 0 || _obj_state->obj); \ - if (_self) { \ - if (c_list_is_empty(&_obj_state->os_zombie_lst)) { \ - nm_assert(_self->priv.p->combined_l3cd_commited); \ - \ - if (NM_MORE_ASSERTS > 5) { \ - nm_assert(c_list_contains(&_self->priv.p->obj_state_lst_head, \ - &_obj_state->os_lst)); \ - nm_assert(_obj_state->os_plobj \ - == nm_platform_lookup_obj(_self->priv.platform, \ - NMP_CACHE_ID_TYPE_OBJECT_TYPE, \ - _obj_state->obj)); \ - nm_assert( \ - c_list_is_empty(&obj_state->os_zombie_lst) \ - ? (_obj_state->obj \ - == nm_dedup_multi_entry_get_obj(nm_l3_config_data_lookup_obj( \ - _self->priv.p->combined_l3cd_commited, \ - _obj_state->obj))) \ - : (!nm_l3_config_data_lookup_obj( \ - _self->priv.p->combined_l3cd_commited, \ - _obj_state->obj))); \ - } \ - } \ - } \ - } \ - } \ +#define nm_assert_obj_state(self, obj_state) \ + G_STMT_START \ + { \ + if (NM_MORE_ASSERTS > 0) { \ + const NML3Cfg *_self = (self); \ + const ObjStateData *_obj_state = (obj_state); \ + \ + nm_assert(_obj_state); \ + nm_assert(NM_IN_SET(NMP_OBJECT_GET_TYPE(_obj_state->obj), \ + NMP_OBJECT_TYPE_IP4_ADDRESS, \ + NMP_OBJECT_TYPE_IP6_ADDRESS, \ + NMP_OBJECT_TYPE_IP4_ROUTE, \ + NMP_OBJECT_TYPE_IP6_ROUTE)); \ + nm_assert(!_obj_state->os_plobj || _obj_state->os_was_in_platform); \ + nm_assert(_obj_state->os_failedobj_expiry_msec != 0 \ + || _obj_state->os_failedobj_prioq_idx == NM_PRIOQ_IDX_NULL); \ + nm_assert(_obj_state->os_failedobj_expiry_msec == 0 || !_obj_state->os_plobj); \ + nm_assert(_obj_state->os_failedobj_expiry_msec == 0 \ + || c_list_is_empty(&_obj_state->os_zombie_lst)); \ + nm_assert(_obj_state->os_failedobj_expiry_msec == 0 || _obj_state->obj); \ + nm_assert(!_obj_state->os_plobj \ + || NMP_OBJECT_GET_TYPE(_obj_state->obj) \ + == NMP_OBJECT_GET_TYPE(_obj_state->os_plobj)); \ + if (_self) { \ + if (c_list_is_empty(&_obj_state->os_zombie_lst)) { \ + nm_assert(_self->priv.p->combined_l3cd_commited); \ + \ + if (NM_MORE_ASSERTS > 5) { \ + /* metric-any must be resolved before adding the object. Otherwise, + * their real metric is not known, and they cannot be compared to objects + * from NMPlatform cache. */ \ + nm_assert(!NM_IN_SET(NMP_OBJECT_GET_TYPE(_obj_state->obj), \ + NMP_OBJECT_TYPE_IP4_ROUTE, \ + NMP_OBJECT_TYPE_IP6_ROUTE) \ + || !NMP_OBJECT_CAST_IP_ROUTE(_obj_state->obj)->metric_any); \ + \ + nm_assert(c_list_contains(&_self->priv.p->obj_state_lst_head, \ + &_obj_state->os_lst)); \ + nm_assert(_obj_state->os_plobj \ + == nm_platform_lookup_obj(_self->priv.platform, \ + NMP_CACHE_ID_TYPE_OBJECT_TYPE, \ + _obj_state->obj)); \ + if (!c_list_is_empty(&obj_state->os_zombie_lst)) { \ + nm_assert(!obj_state->os_non_dynamic); \ + nm_assert(!obj_state->os_non_dynamic_dirty); \ + nm_assert(!obj_state->os_dynamic); \ + nm_assert(!obj_state->os_dynamic_dirty); \ + } \ + if (obj_state->os_non_dynamic) { \ + nm_assert( \ + _obj_state->obj \ + == nm_dedup_multi_entry_get_obj(nm_l3_config_data_lookup_obj( \ + _self->priv.p->combined_l3cd_commited, \ + _obj_state->obj))); \ + } else { \ + nm_assert(!nm_l3_config_data_lookup_obj( \ + _self->priv.p->combined_l3cd_commited, \ + _obj_state->obj)); \ + } \ + } \ + } \ + } \ + } \ + } \ G_STMT_END static ObjStateData * @@ -828,7 +860,10 @@ _obj_state_data_new(const NMPObject *obj, const NMPObject *plobj) .os_plobj = nmp_object_ref(plobj), .os_was_in_platform = !!plobj, .os_nm_configured = FALSE, - .os_dirty = FALSE, + .os_non_dynamic_dirty = FALSE, + .os_non_dynamic = FALSE, + .os_dynamic = FALSE, + .os_dynamic_dirty = FALSE, .os_failedobj_expiry_msec = 0, .os_failedobj_prioq_idx = NM_PRIOQ_IDX_NULL, .os_zombie_lst = C_LIST_INIT(obj_state->os_zombie_lst), @@ -897,34 +932,6 @@ _obj_state_data_to_string(const ObjStateData *obj_state, char *buf, gsize buf_si return buf0; } -static gboolean -_obj_state_data_update(ObjStateData *obj_state, const NMPObject *obj) -{ - gboolean changed = FALSE; - - nm_assert_obj_state(NULL, obj_state); - nm_assert(obj); - nm_assert(nmp_object_id_equal(obj_state->obj, obj)); - - obj_state->os_dirty = FALSE; - - if (obj_state->obj != obj) { - nm_auto_nmpobj const NMPObject *obj_old = NULL; - - if (!nmp_object_equal(obj_state->obj, obj)) - changed = TRUE; - obj_old = g_steal_pointer(&obj_state->obj); - obj_state->obj = nmp_object_ref(obj); - } - - if (!c_list_is_empty(&obj_state->os_zombie_lst)) { - c_list_unlink(&obj_state->os_zombie_lst); - changed = TRUE; - } - - return changed; -} - /*****************************************************************************/ static void @@ -999,6 +1006,151 @@ out: } static void +_obj_states_track_new(NML3Cfg *self, const NMPObject *obj, gboolean dynamic) +{ + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + ObjStateData *obj_state; + + obj_state = _obj_state_data_new( + obj, + nm_platform_lookup_obj(self->priv.platform, NMP_CACHE_ID_TYPE_OBJECT_TYPE, obj)); + obj_state->os_dynamic = dynamic; + obj_state->os_non_dynamic = !dynamic; + c_list_link_tail(&self->priv.p->obj_state_lst_head, &obj_state->os_lst); + g_hash_table_add(self->priv.p->obj_state_hash, obj_state); + _LOGD("obj-state: track%s: %s", + dynamic ? " (dynamic)" : "", + _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); + nm_assert_obj_state(self, obj_state); +} + +static gboolean +_obj_states_track_update(NML3Cfg *self, + ObjStateData *obj_state, + const NMPObject *obj, + gboolean dynamic) +{ + gboolean changed = FALSE; + + nm_assert_obj_state(NULL, obj_state); + nm_assert(obj); + nm_assert(nmp_object_id_equal(obj_state->obj, obj)); + + if (dynamic) { + if (!obj_state->os_dynamic) + changed = TRUE; + obj_state->os_dynamic_dirty = FALSE; + obj_state->os_dynamic = TRUE; + } else { + if (!obj_state->os_non_dynamic) + changed = TRUE; + obj_state->os_non_dynamic_dirty = FALSE; + obj_state->os_non_dynamic = TRUE; + } + + if (obj_state->obj != obj && (!dynamic || !obj_state->os_non_dynamic)) { + nm_auto_nmpobj const NMPObject *obj_old = NULL; + + if (!nmp_object_equal(obj_state->obj, obj)) + changed = TRUE; + obj_old = g_steal_pointer(&obj_state->obj); + obj_state->obj = nmp_object_ref(obj); + } + + if (!c_list_is_empty(&obj_state->os_zombie_lst)) { + c_list_unlink(&obj_state->os_zombie_lst); + changed = TRUE; + } + + if (changed) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + + _LOGD("obj-state: update: %s (static: %d, dynamic: %d)", + _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf)), + !!obj_state->os_non_dynamic, + !!obj_state->os_dynamic); + } + + nm_assert_obj_state(self, obj_state); + return changed; +} + +static gboolean +_obj_states_track_mark_dirty(NML3Cfg *self, gboolean dynamic) +{ + ObjStateData *obj_state; + gboolean any_dirty = FALSE; + + c_list_for_each_entry (obj_state, &self->priv.p->obj_state_lst_head, os_lst) { + if (!c_list_is_empty(&obj_state->os_zombie_lst)) { + /* we can ignore zombies. */ + continue; + } + if (dynamic) { + if (!obj_state->os_dynamic) + continue; + obj_state->os_dynamic_dirty = TRUE; + } else { + if (!obj_state->os_non_dynamic) + continue; + obj_state->os_non_dynamic_dirty = TRUE; + } + any_dirty = TRUE; + } + + return any_dirty; +} + +static void +_obj_states_track_prune_dirty(NML3Cfg *self, gboolean also_dynamic) +{ + GHashTableIter h_iter; + ObjStateData *obj_state; + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + + g_hash_table_iter_init(&h_iter, self->priv.p->obj_state_hash); + while (g_hash_table_iter_next(&h_iter, (gpointer *) &obj_state, NULL)) { + if (!c_list_is_empty(&obj_state->os_zombie_lst)) { + /* The object is half-dead already and only kept for cleanup. But + * it does not need to be untracked. */ + continue; + } + + /* Resolve the "dirty" flags. */ + if (obj_state->os_non_dynamic_dirty) { + obj_state->os_non_dynamic = FALSE; + obj_state->os_non_dynamic_dirty = FALSE; + } + if (also_dynamic) { + if (obj_state->os_dynamic_dirty) { + obj_state->os_dynamic = FALSE; + obj_state->os_dynamic_dirty = FALSE; + } + } + + if (obj_state->os_non_dynamic || obj_state->os_dynamic) { + /* This obj-state is still alive. Keep it. */ + continue; + } + + if (obj_state->os_plobj && obj_state->os_nm_configured) { + nm_assert(obj_state->os_failedobj_prioq_idx == NM_PRIOQ_IDX_NULL); + c_list_link_tail(&self->priv.p->obj_state_zombie_lst_head, &obj_state->os_zombie_lst); + obj_state->os_zombie_count = ZOMBIE_COUNT_START; + _LOGD("obj-state: now zombie: %s", + _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); + continue; + } + + _LOGD("obj-state: untrack: %s", _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); + nm_prioq_remove(&self->priv.p->failedobj_prioq, + obj_state, + &obj_state->os_failedobj_prioq_idx); + g_hash_table_iter_remove(&h_iter); + } +} + +static void _obj_states_update_all(NML3Cfg *self) { static const NMPObjectType obj_types[] = { @@ -1007,21 +1159,13 @@ _obj_states_update_all(NML3Cfg *self) NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE, }; - char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; ObjStateData *obj_state; int i; gboolean any_dirty = FALSE; nm_assert(NM_IS_L3CFG(self)); - c_list_for_each_entry (obj_state, &self->priv.p->obj_state_lst_head, os_lst) { - if (!c_list_is_empty(&obj_state->os_zombie_lst)) { - /* we can ignore zombies. */ - continue; - } - any_dirty = TRUE; - obj_state->os_dirty = TRUE; - } + any_dirty = _obj_states_track_mark_dirty(self, FALSE); for (i = 0; i < (int) G_N_ELEMENTS(obj_types); i++) { const NMPObjectType obj_type = obj_types[i]; @@ -1039,59 +1183,24 @@ _obj_states_update_all(NML3Cfg *self) /* this is a nodev route. We don't track an obj-state for this. */ continue; } - + if (obj_type == NMP_OBJECT_TYPE_IP4_ROUTE + && NMP_OBJECT_CAST_IP4_ROUTE(obj)->weight > 0) { + /* this route weight is bigger than 0, that means we don't know + * which kind of route this will be. It can only be determined during commit. */ + continue; + } obj_state = g_hash_table_lookup(self->priv.p->obj_state_hash, &obj); if (!obj_state) { - obj_state = - _obj_state_data_new(obj, - nm_platform_lookup_obj(self->priv.platform, - NMP_CACHE_ID_TYPE_OBJECT_TYPE, - obj)); - c_list_link_tail(&self->priv.p->obj_state_lst_head, &obj_state->os_lst); - g_hash_table_add(self->priv.p->obj_state_hash, obj_state); - _LOGD("obj-state: track: %s", - _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); - nm_assert_obj_state(self, obj_state); + _obj_states_track_new(self, obj, FALSE); continue; } - if (_obj_state_data_update(obj_state, obj)) { - _LOGD("obj-state: update: %s", - _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); - } - - nm_assert_obj_state(self, obj_state); + _obj_states_track_update(self, obj_state, obj, FALSE); } } - if (any_dirty) { - GHashTableIter h_iter; - - g_hash_table_iter_init(&h_iter, self->priv.p->obj_state_hash); - while (g_hash_table_iter_next(&h_iter, (gpointer *) &obj_state, NULL)) { - if (!c_list_is_empty(&obj_state->os_zombie_lst)) - continue; - if (!obj_state->os_dirty) - continue; - - if (obj_state->os_plobj && obj_state->os_nm_configured) { - nm_assert(obj_state->os_failedobj_prioq_idx == NM_PRIOQ_IDX_NULL); - c_list_link_tail(&self->priv.p->obj_state_zombie_lst_head, - &obj_state->os_zombie_lst); - obj_state->os_zombie_count = ZOMBIE_COUNT_START; - _LOGD("obj-state: now zombie: %s", - _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); - continue; - } - - _LOGD("obj-state: untrack: %s", - _obj_state_data_to_string(obj_state, sbuf, sizeof(sbuf))); - nm_prioq_remove(&self->priv.p->failedobj_prioq, - obj_state, - &obj_state->os_failedobj_prioq_idx); - g_hash_table_iter_remove(&h_iter); - } - } + if (any_dirty) + _obj_states_track_prune_dirty(self, FALSE); } typedef struct { @@ -1192,6 +1301,7 @@ _commit_collect_routes(NML3Cfg *self, const int IS_IPv4 = NM_IS_IPv4(addr_family); const NMDedupMultiHeadEntry *head_entry; const NMDedupMultiEntry *entry; + gboolean is_dhcp_enabled; nm_assert(routes && !*routes); nm_assert(routes_nodev && !*routes_nodev); @@ -1211,17 +1321,21 @@ _commit_collect_routes(NML3Cfg *self, else { nm_assert(NMP_OBJECT_CAST_IP_ROUTE(obj)->ifindex == self->priv.ifindex); - if (!any_addrs) { + is_dhcp_enabled = + nm_l3_config_data_get_dhcp_enabled(self->priv.p->combined_l3cd_commited, + addr_family); + if (!any_addrs && is_dhcp_enabled) { /* This is a unicast route (or a similar route, which has an * ifindex). * * However, during this commit we don't plan to configure any - * IP addresses. With `ipvx.method=manual` that should not be - * possible. More likely, this is because the profile has - * `ipvx.method=auto` and static routes. + * IP addresses when the profile has `ipvx.method=auto` and + * static routes. * * Don't configure any such routes before we also have at least - * one IP address. + * one IP address except for `ipvx.method=manual` where static + * routes are allowed to configure even if the connection has + * no addresses * * This code applies to IPv4 and IPv6, however for IPv6 we * early on configure a link local address, so in practice the @@ -1263,6 +1377,13 @@ loop_done: if (singlehop_routes) { for (i = 0; i < singlehop_routes->len; i++) { const NMPObject *obj = singlehop_routes->pdata[i]; + ObjStateData *obj_state; + + obj_state = g_hash_table_lookup(self->priv.p->obj_state_hash, &obj); + if (!obj_state) + _obj_states_track_new(self, obj, TRUE); + else + _obj_states_track_update(self, obj_state, obj, TRUE); if (!_obj_states_sync_filter(self, obj, commit_type)) continue; @@ -1403,8 +1524,8 @@ _load_link(NML3Cfg *self, gboolean initial) nacd_link_now_up = FALSE; nacd_changed = FALSE; - nacd_old_valid = _acd_has_valid_link(obj_old, &nacd_old_addr, NULL); - nacd_new_valid = _acd_has_valid_link(obj, &nacd_new_addr, NULL); + nacd_old_valid = _acd_has_valid_link(self, obj_old, &nacd_old_addr, NULL); + nacd_new_valid = _acd_has_valid_link(self, obj, &nacd_new_addr, NULL); if (self->priv.p->nacd_instance_ensure_retry) { if (nacd_new_valid && (!nacd_old_valid @@ -1614,7 +1735,8 @@ _acd_data_find_track(const AcdData *acd_data, /*****************************************************************************/ static gboolean -_acd_has_valid_link(const NMPObject *obj, +_acd_has_valid_link(NML3Cfg *self, + const NMPObject *obj, const guint8 **out_addr_bin, gboolean *out_acd_not_supported) { @@ -1635,6 +1757,11 @@ _acd_has_valid_link(const NMPObject *obj, return FALSE; } + if (nm_platform_link_get_ifi_flags(self->priv.platform, self->priv.ifindex, IFF_NOARP)) { + NM_SET_OUT(out_acd_not_supported, TRUE); + return FALSE; + } + NM_SET_OUT(out_acd_not_supported, FALSE); NM_SET_OUT(out_addr_bin, addr_bin); return TRUE; @@ -1787,7 +1914,7 @@ _l3_acd_nacd_instance_ensure_retry_cb(gpointer user_data) nm_clear_g_source_inst(&self->priv.p->nacd_instance_ensure_retry); - _l3_changed_configs_set_dirty(self); + _l3_changed_configs_set_dirty(self, "nacd retry"); nm_l3cfg_commit(self, NM_L3_CFG_COMMIT_TYPE_AUTO); return G_SOURCE_REMOVE; } @@ -1810,7 +1937,7 @@ _l3_acd_nacd_instance_reset(NML3Cfg *self, NMTernary start_timer, gboolean acd_d switch (start_timer) { case NM_TERNARY_FALSE: - _l3_changed_configs_set_dirty(self); + _l3_changed_configs_set_dirty(self, "nacd reset"); nm_l3cfg_commit_on_idle_schedule(self, NM_L3_CFG_COMMIT_TYPE_AUTO); break; case NM_TERNARY_TRUE: @@ -1864,7 +1991,7 @@ again: return NULL; } - valid = _acd_has_valid_link(self->priv.plobj, &addr_bin, &acd_not_supported); + valid = _acd_has_valid_link(self, self->priv.plobj, &addr_bin, &acd_not_supported); if (!valid) goto failed_create_acd; @@ -2325,7 +2452,7 @@ _nm_printf(5, 6) static void _l3_acd_data_state_set_full(NML3Cfg *self, if (changed && allow_commit) { /* The availability of an address just changed (and we are instructed to * trigger a new commit). Do it. */ - _l3_changed_configs_set_dirty(self); + _l3_changed_configs_set_dirty(self, "acd state changed"); nm_l3cfg_commit_on_idle_schedule(self, NM_L3_CFG_COMMIT_TYPE_AUTO); } } @@ -2972,8 +3099,7 @@ handle_start_defending: NM_L3_ACD_ADDR_STATE_READY, !NM_IN_SET(state_change_mode, ACD_STATE_CHANGE_MODE_INIT, - ACD_STATE_CHANGE_MODE_INIT_REAPPLY, - ACD_STATE_CHANGE_MODE_POST_COMMIT), + ACD_STATE_CHANGE_MODE_INIT_REAPPLY), "probe is ready, waiting for address to be configured"); } return; @@ -3053,7 +3179,10 @@ _l3_acd_data_process_changes(NML3Cfg *self) AcdData *acd_data; gint64 now_msec = 0; - _l3_acd_data_prune(self, FALSE); + if (self->priv.p->acd_data_pruning_needed) + _l3_acd_data_prune(self, FALSE); + + self->priv.p->acd_data_pruning_needed = FALSE; c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) { _l3_acd_data_state_change(self, @@ -3271,7 +3400,7 @@ nm_l3cfg_commit_on_idle_schedule(NML3Cfg *self, NML3CfgCommitType commit_type) if (self->priv.p->commit_on_idle_source) { if (self->priv.p->commit_on_idle_type < commit_type) { /* For multiple calls, we collect the maximum "commit-type". */ - _LOGT("commit on idle (scheduled) (update to %s)", + _LOGT("schedule commit on idle (upgrade type to %s)", _l3_cfg_commit_type_to_string(commit_type, sbuf_commit_type, sizeof(sbuf_commit_type))); @@ -3280,7 +3409,7 @@ nm_l3cfg_commit_on_idle_schedule(NML3Cfg *self, NML3CfgCommitType commit_type) return FALSE; } - _LOGT("commit on idle (scheduled) (%s)", + _LOGT("schedule commit on idle (%s)", _l3_cfg_commit_type_to_string(commit_type, sbuf_commit_type, sizeof(sbuf_commit_type))); self->priv.p->commit_on_idle_source = nm_g_idle_add_source(_l3_commit_on_idle_cb, self); self->priv.p->commit_on_idle_type = commit_type; @@ -3553,7 +3682,7 @@ nm_l3cfg_add_config(NML3Cfg *self, nm_assert(l3_config_data->acd_defend_type_confdata == acd_defend_type); if (changed) { - _l3_changed_configs_set_dirty(self); + _l3_changed_configs_set_dirty(self, "configuration added"); nm_l3cfg_commit_on_idle_schedule(self, NM_L3_CFG_COMMIT_TYPE_AUTO); } @@ -3590,7 +3719,7 @@ _l3cfg_remove_config(NML3Cfg *self, continue; } - _l3_changed_configs_set_dirty(self); + _l3_changed_configs_set_dirty(self, "configuration removed"); _l3_config_datas_remove_index_fast(self->priv.p->l3_config_datas, idx); changed = TRUE; if (l3cd) { @@ -3783,6 +3912,9 @@ _l3cfg_update_combined_config(NML3Cfg *self, NM_SET_OUT(out_changed_combined_l3cd, FALSE); + if (to_commit) + self->priv.p->acd_data_pruning_needed = FALSE; + if (!self->priv.p->changed_configs_configs) { if (!self->priv.p->changed_configs_acd_state) goto out; @@ -3830,6 +3962,7 @@ _l3cfg_update_combined_config(NML3Cfg *self, self->priv.p->changed_configs_acd_state = TRUE; } else { _l3_acd_data_add_all(self, l3_config_datas_arr, l3_config_datas_len, reapply); + self->priv.p->acd_data_pruning_needed = TRUE; self->priv.p->changed_configs_acd_state = FALSE; } @@ -4827,6 +4960,7 @@ _l3_commit_one(NML3Cfg *self, NMIPRouteTableSyncMode route_table_sync; char sbuf_commit_type[50]; guint i; + gboolean any_dirty = FALSE; nm_assert(NM_IS_L3CFG(self)); nm_assert(NM_IN_SET(commit_type, @@ -4839,6 +4973,9 @@ _l3_commit_one(NML3Cfg *self, nm_utils_addr_family_to_char(addr_family), _l3_cfg_commit_type_to_string(commit_type, sbuf_commit_type, sizeof(sbuf_commit_type))); + if (IS_IPv4) + any_dirty = _obj_states_track_mark_dirty(self, TRUE); + addresses = _commit_collect_addresses(self, addr_family, commit_type); _commit_collect_routes(self, @@ -4863,6 +5000,9 @@ _l3_commit_one(NML3Cfg *self, if (route_table_sync == NM_IP_ROUTE_TABLE_SYNC_MODE_NONE) route_table_sync = NM_IP_ROUTE_TABLE_SYNC_MODE_MAIN; + if (any_dirty) + _obj_states_track_prune_dirty(self, TRUE); + if (commit_type == NM_L3_CFG_COMMIT_TYPE_REAPPLY) { gs_unref_array GArray *ipv6_temp_addrs_keep = NULL; diff --git a/src/core/nm-l3cfg.h b/src/core/nm-l3cfg.h index 9b8ec67f..241fde02 100644 --- a/src/core/nm-l3cfg.h +++ b/src/core/nm-l3cfg.h @@ -34,8 +34,8 @@ typedef enum _nm_packed { /** * NML3CfgConfigFlags: * @NM_L3CFG_CONFIG_FLAGS_NONE: no flags, the default. - * @NM_L3_CONFIG_MERGE_FLAGS_ONLY_FOR_ACD: if this merge flag is set, - * the the NML3ConfigData doesn't get merged and it's information won't be + * @NM_L3CFG_CONFIG_FLAGS_ONLY_FOR_ACD: if this flag is set, + * the NML3ConfigData doesn't get merged and the information won't be * synced. The only purpose is to run ACD on its IPv4 addresses, but * regardless whether ACD succeeds/fails, the IP addresses won't be configured. * The point is to run ACD first (without configuring it), and only diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c index 937acbba..9c58a47d 100644 --- a/src/core/nm-manager.c +++ b/src/core/nm-manager.c @@ -66,7 +66,6 @@ typedef struct { bool user_enabled : 1; bool sw_enabled : 1; bool hw_enabled : 1; - bool os_owner : 1; } RfkillRadioState; #define AUTOCONNECT_RESET_RETRIES_TIMER_SEC 300 @@ -800,7 +799,7 @@ initited: * a lot of stale entries. We must from time to time clean them up. * * Do do this cleanup, whenever we have more entries then 2 times the number of links. */ - if (G_UNLIKELY(g_hash_table_size(priv->device_route_metrics) > NM_MAX(20, n_links * 2))) { + if (G_UNLIKELY(g_hash_table_size(priv->device_route_metrics) > NM_MAX(20u, n_links * 2u))) { /* from time to time, we need to do some house-keeping and prune stale entries. * Otherwise, on a system where interfaces frequently come and go (docker), we * keep growing this cache for ifindexes that no longer exist. */ @@ -2893,9 +2892,6 @@ _rfkill_radio_state_get_enabled(const RfkillRadioState *rstate, gboolean check_c { gboolean enabled; - /* If the device is not owned by the os, hw_enabled will be FALSE, hence - * we don't need to consider os_owner here. - */ enabled = rstate->user_enabled && rstate->hw_enabled; if (check_changeable) enabled &= rstate->sw_enabled; @@ -2912,7 +2908,6 @@ _rfkill_radio_state_set_from_manager(NMManager *self, NMRfkillType rtype, Rfkill case NM_RFKILL_STATE_UNAVAILABLE: rstate->sw_enabled = TRUE; rstate->hw_enabled = TRUE; - rstate->os_owner = TRUE; /* A rfkill-type is available when there is a compatible * killswitch or a compatible device. */ @@ -2928,26 +2923,16 @@ _rfkill_radio_state_set_from_manager(NMManager *self, NMRfkillType rtype, Rfkill rstate->available = TRUE; rstate->sw_enabled = TRUE; rstate->hw_enabled = TRUE; - rstate->os_owner = TRUE; return; case NM_RFKILL_STATE_SOFT_BLOCKED: rstate->available = TRUE; rstate->sw_enabled = FALSE; rstate->hw_enabled = TRUE; - rstate->os_owner = TRUE; return; case NM_RFKILL_STATE_HARD_BLOCKED: rstate->available = TRUE; rstate->sw_enabled = FALSE; rstate->hw_enabled = FALSE; - /* In case the OS doesn't own the NIC, we would be in NM_RFKILL_STATE_HARD_BLOCKED */ - rstate->os_owner = TRUE; - return; - case NM_RFKILL_STATE_HARD_BLOCKED_OS_NOT_OWNER: - rstate->available = TRUE; - rstate->sw_enabled = FALSE; - rstate->hw_enabled = FALSE; - rstate->os_owner = FALSE; return; } nm_assert_not_reached(); @@ -3011,12 +2996,11 @@ _rfkill_update_one_type(NMManager *self, NMRfkillType rtype) /* Print out all states affecting device enablement */ _LOGD(LOGD_RFKILL, - "rfkill: %s available %d hw-enabled %d sw-enabled %d os-owner %d", + "rfkill: %s available %d hw-enabled %d sw-enabled %d", nm_rfkill_type_to_string(rtype), rstate->available, rstate->hw_enabled, - rstate->sw_enabled, - rstate->os_owner); + rstate->sw_enabled); /* Log new killswitch state */ new_rfkilled = rstate->hw_enabled && rstate->sw_enabled; @@ -4440,11 +4424,7 @@ platform_query_devices(NMManager *self) gs_free char *order = NULL; guess_assume = nm_config_get_first_start(nm_config_get()); - order = nm_config_data_get_value(NM_CONFIG_GET_DATA, - NM_CONFIG_KEYFILE_GROUP_MAIN, - NM_CONFIG_KEYFILE_KEY_MAIN_SLAVES_ORDER, - NM_CONFIG_GET_VALUE_STRIP); - links = nm_platform_link_get_all(priv->platform, !nm_streq0(order, "index")); + links = nm_platform_link_get_all(priv->platform); if (!links) return; for (i = 0; i < links->len; i++) { @@ -4867,7 +4847,7 @@ is_compatible_with_slave(NMConnection *master, NMConnection *slave) s_con = nm_connection_get_setting_connection(slave); g_assert(s_con); - return nm_connection_is_type(master, nm_setting_connection_get_slave_type(s_con)); + return nm_connection_is_type(master, nm_setting_connection_get_port_type(s_con)); } /** @@ -5380,7 +5360,7 @@ out: } static int -compare_slaves(gconstpointer a, gconstpointer b, gpointer sort_by_name) +compare_slaves(gconstpointer a, gconstpointer b) { const SlaveConnectionInfo *a_info = a; const SlaveConnectionInfo *b_info = b; @@ -5391,11 +5371,7 @@ compare_slaves(gconstpointer a, gconstpointer b, gpointer sort_by_name) if (!b_info->device) return -1; - if (GPOINTER_TO_INT(sort_by_name)) { - return nm_strcmp0(nm_device_get_iface(a_info->device), nm_device_get_iface(b_info->device)); - } - - return nm_device_get_ifindex(a_info->device) - nm_device_get_ifindex(b_info->device); + return nm_strcmp0(nm_device_get_iface(a_info->device), nm_device_get_iface(b_info->device)); } static void @@ -5415,17 +5391,7 @@ autoconnect_slaves(NMManager *self, slaves = find_slaves(self, master_connection, master_device, &n_slaves, for_user_request); if (n_slaves > 1) { - gs_free char *value = NULL; - - value = nm_config_data_get_value(NM_CONFIG_GET_DATA, - NM_CONFIG_KEYFILE_GROUP_MAIN, - NM_CONFIG_KEYFILE_KEY_MAIN_SLAVES_ORDER, - NM_CONFIG_GET_VALUE_STRIP); - g_qsort_with_data(slaves, - n_slaves, - sizeof(slaves[0]), - compare_slaves, - GINT_TO_POINTER(!nm_streq0(value, "index"))); + qsort(slaves, n_slaves, sizeof(slaves[0]), compare_slaves); } bind_lifetime_to_profile_visibility = @@ -7354,14 +7320,12 @@ do_sleep_wake(NMManager *self, gboolean sleeping_changed) gboolean enabled = _rfkill_radio_state_get_enabled(rstate, TRUE); _LOGD(LOGD_RFKILL, - "rfkill: %s %s devices (hw_enabled %d, sw_enabled %d, user_enabled %d, " - "os_owner %d)", + "rfkill: %s %s devices (hw_enabled %d, sw_enabled %d, user_enabled %d)", enabled ? "enabling" : "disabling", nm_rfkill_type_to_string(rtype), rstate->hw_enabled, rstate->sw_enabled, - rstate->user_enabled, - rstate->os_owner); + rstate->user_enabled); if (nm_device_get_rfkill_type(device) == rtype) nm_device_set_enabled(device, enabled); } @@ -8846,13 +8810,11 @@ nm_manager_init(NMManager *self) .user_enabled = TRUE, .sw_enabled = FALSE, .hw_enabled = TRUE, - .os_owner = TRUE, }; priv->radio_states[NM_RFKILL_TYPE_WWAN] = (RfkillRadioState){ .user_enabled = TRUE, .sw_enabled = FALSE, .hw_enabled = TRUE, - .os_owner = TRUE, }; priv->sleeping = FALSE; @@ -9402,10 +9364,13 @@ static const NMDBusInterfaceInfoExtended interface_info_manager = { "b", NM_MANAGER_WIMAX_ENABLED, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX, - NM_AUDIT_OP_RADIO_CONTROL), - NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("WimaxHardwareEnabled", - "b", - NM_MANAGER_WIMAX_HARDWARE_ENABLED), + NM_AUDIT_OP_RADIO_CONTROL, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), + NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE( + "WimaxHardwareEnabled", + "b", + NM_MANAGER_WIMAX_HARDWARE_ENABLED, + .annotations = NM_GDBUS_ANNOTATION_INFO_LIST_DEPRECATED(), ), NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("RadioFlags", "u", NM_MANAGER_RADIO_FLAGS), diff --git a/src/core/nm-netns.c b/src/core/nm-netns.c index ad156f99..ed33d336 100644 --- a/src/core/nm-netns.c +++ b/src/core/nm-netns.c @@ -905,11 +905,19 @@ nm_netns_ip_route_ecmp_commit(NMNetns *self, if (obj_del) { if (NMP_OBJECT_CAST_IP4_ROUTE(obj_del)->n_nexthops > 1) nm_platform_object_delete(priv->platform, obj_del); - else if (track_obj->l3cfg != l3cfg) - nm_l3cfg_commit_on_idle_schedule(track_obj->l3cfg, NM_L3_CFG_COMMIT_TYPE_AUTO); + else if (NMP_OBJECT_CAST_IP4_ROUTE(obj_del)->ifindex != nm_l3cfg_get_ifindex(l3cfg)) { + /* A single-hop route from a different interface was merged + * into a ECMP route. Now, it is time to notify the l3cfg that + * is managing that single-hop route to remove it. */ + nm_l3cfg_commit_on_idle_schedule( + nm_netns_l3cfg_get(self, NMP_OBJECT_CAST_IP4_ROUTE(obj_del)->ifindex), + NM_L3_CFG_COMMIT_TYPE_UPDATE); + } } if (route->n_nexthops <= 1) { + NMPObject *route_clone; + /* This is a single hop route. Return it to the caller. */ if (!*out_singlehop_routes) { /* Note that the returned array does not own a reference. This @@ -918,7 +926,28 @@ nm_netns_ip_route_ecmp_commit(NMNetns *self, *out_singlehop_routes = g_ptr_array_new_with_free_func((GDestroyNotify) nmp_object_unref); } - g_ptr_array_add(*out_singlehop_routes, (gpointer) nmp_object_ref(route_obj)); + + /* We have here a IPv4 single-hop route. For internal tracking purposes, + * this route has a positive "weight" (which was used to mark it as a candidate + * for ECMP merging). Now we want to return this route to NML3Cfg and add it + * as regular single-hop routes. + * + * A single-hop route in kernel always has a "weight" of zero. This route + * cannot be added as-is. Well, if we would, then the result would be + * a different(!) route (with a zero "weight"). + * + * Anticipate that and normalize the route now to be a regular single-hop + * route (with weight zero). nm_platform_ip_route_normalize() does that. + * We really want to return a regular route here, not the route with a positive + * weight that exists for internal tracking purposes. + */ + nm_assert(NMP_OBJECT_GET_TYPE(route_obj) == NMP_OBJECT_TYPE_IP4_ROUTE); + nm_assert(route_obj->ip4_route.weight > 0u); + + route_clone = nmp_object_clone(route_obj, FALSE); + nm_platform_ip_route_normalize(AF_INET, NMP_OBJECT_CAST_IP_ROUTE(route_clone)); + g_ptr_array_add(*out_singlehop_routes, route_clone); + if (changed) { _LOGT("ecmp-route: single-hop %s", nmp_object_to_string(route_obj, diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c index efdb0636..feea97b1 100644 --- a/src/core/nm-policy.c +++ b/src/core/nm-policy.c @@ -1766,7 +1766,7 @@ _connection_autoconnect_retries_set(NMPolicy *self, nm_assert(retry_time != 0); priv->reset_connections_retries_idle_source = nm_g_timeout_add_seconds_source( - MAX(0, retry_time - nm_utils_get_monotonic_timestamp_sec()), + NM_MAX(0, retry_time - nm_utils_get_monotonic_timestamp_sec()), reset_connections_retries, self); } @@ -2635,11 +2635,15 @@ dns_config_changed(NMDnsManager *dns_manager, gpointer user_data) if (priv->updating_dns) return; - nm_manager_for_each_device (priv->manager, device, tmp_lst) { - nm_device_clear_dns_lookup_data(device, "DNS configuration changed"); + if (!nm_dns_manager_is_unmanaged(dns_manager)) { + nm_manager_for_each_device (priv->manager, device, tmp_lst) { + nm_device_clear_dns_lookup_data(device, "DNS configuration changed"); + } + + update_system_hostname(self, "DNS configuration changed"); } - update_system_hostname(self, "DNS configuration changed"); + nm_dispatcher_call_dns_change(); } static void diff --git a/src/core/nm-rfkill-manager.c b/src/core/nm-rfkill-manager.c index 03333899..aea5df11 100644 --- a/src/core/nm-rfkill-manager.c +++ b/src/core/nm-rfkill-manager.c @@ -106,8 +106,6 @@ nm_rfkill_state_to_string(NMRfkillState state) return "soft-blocked"; case NM_RFKILL_STATE_HARD_BLOCKED: return "hard-blocked"; - case NM_RFKILL_STATE_HARD_BLOCKED_OS_NOT_OWNER: - return "hard-blocked-os-not-owner"; } return nm_assert_unreachable_val("unknown"); } @@ -171,7 +169,7 @@ killswitch_destroy(Killswitch *ks) } static NMRfkillState -sysfs_state_to_nm_state(int sysfs_state, int sysfs_reason) +sysfs_state_to_nm_state(int sysfs_state) { switch (sysfs_state) { case 0: @@ -179,11 +177,6 @@ sysfs_state_to_nm_state(int sysfs_state, int sysfs_reason) case 1: return NM_RFKILL_STATE_UNBLOCKED; case 2: - /* sysfs reason is a bitmap, in case we have both reasons (SIGNAL and NOT_OWNER), we want - * to consider the device as not owned. - */ - if (sysfs_reason & 2) - return NM_RFKILL_STATE_HARD_BLOCKED_OS_NOT_OWNER; return NM_RFKILL_STATE_HARD_BLOCKED; default: nm_log_warn(LOGD_RFKILL, "unhandled rfkill state %d", sysfs_state); @@ -214,7 +207,6 @@ recheck_killswitches(NMRfkillManager *self) struct udev_device *device; NMRfkillState dev_state; int sysfs_state; - int sysfs_reason; device = udev_device_new_from_subsystem_sysname(nm_udev_client_get_udev(priv->udev_client), "rfkill", @@ -227,24 +219,15 @@ recheck_killswitches(NMRfkillManager *self) G_MININT, G_MAXINT, -1); - - sysfs_reason = _nm_utils_ascii_str_to_int64( - udev_device_get_property_value(device, "RFKILL_HW_BLOCK_REASON"), - 16, - G_MININT, - G_MAXINT, - 1); /* defaults to SIGNAL in case the kernel does not support this */ - - dev_state = sysfs_state_to_nm_state(sysfs_state, sysfs_reason); + dev_state = sysfs_state_to_nm_state(sysfs_state); nm_log_dbg(LOGD_RFKILL, - "%s rfkill%s switch %s state now %d/%s reason: 0x%x", + "%s rfkill%s switch %s state now %d/%s", nm_rfkill_type_to_string(ks->rtype), ks->platform ? " platform" : "", ks->name, sysfs_state, - nm_rfkill_state_to_string(dev_state), - sysfs_reason); + nm_rfkill_state_to_string(dev_state)); if (ks->platform == FALSE) { if (dev_state > poll_states[ks->rtype]) diff --git a/src/core/nm-rfkill-manager.h b/src/core/nm-rfkill-manager.h index 818ab4b2..7e90c9ac 100644 --- a/src/core/nm-rfkill-manager.h +++ b/src/core/nm-rfkill-manager.h @@ -12,13 +12,6 @@ typedef enum { NM_RFKILL_STATE_UNBLOCKED = 1, NM_RFKILL_STATE_SOFT_BLOCKED = 2, NM_RFKILL_STATE_HARD_BLOCKED = 3, - /* NM_RFKILL_STATE_HARD_BLOCKED_OS_NOT_OWNER means that the CSME firmware - * is currently controlling the device. This feature is implmented on Intel - * wifi devices only. - * The NetworkManager can get ownership on the device, but it requires to - * first ask ownership through the iwlmei kernel module. - */ - NM_RFKILL_STATE_HARD_BLOCKED_OS_NOT_OWNER = 4, } NMRfkillState; typedef enum { diff --git a/src/core/nm-types.h b/src/core/nm-types.h index 18f44ca9..104a2f4b 100644 --- a/src/core/nm-types.h +++ b/src/core/nm-types.h @@ -6,7 +6,7 @@ #ifndef __NETWORKMANAGER_TYPES_H__ #define __NETWORKMANAGER_TYPES_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON) #error Cannot use this header. #endif diff --git a/src/core/platform/nm-fake-platform.c b/src/core/platform/nm-fake-platform.c index f6f377d4..74bbe4fb 100644 --- a/src/core/platform/nm-fake-platform.c +++ b/src/core/platform/nm-fake-platform.c @@ -720,6 +720,14 @@ link_change(NMPlatform *platform, obj_tmp->link.port_data.bond.prio = port_data->bond.prio; link_set_obj(platform, device, obj_tmp); return TRUE; + case NM_PORT_KIND_BRIDGE: + obj_tmp = nmp_object_clone(device->obj, FALSE); + obj_tmp->link.port_kind = NM_PORT_KIND_BRIDGE; + obj_tmp->link.port_data.bridge.path_cost = port_data->bridge.path_cost; + obj_tmp->link.port_data.bridge.priority = port_data->bridge.priority; + obj_tmp->link.port_data.bridge.hairpin = port_data->bridge.hairpin; + link_set_obj(platform, device, obj_tmp); + return TRUE; case NM_PORT_KIND_NONE: return TRUE; } diff --git a/src/core/platform/tests/test-common.h b/src/core/platform/tests/test-common.h index 2802d8fd..12d6e7ce 100644 --- a/src/core/platform/tests/test-common.h +++ b/src/core/platform/tests/test-common.h @@ -32,7 +32,7 @@ * Normalize the requested_value to the kernel_value, if it look as if a rounding * error happens. If the difference is larger than +/- 1, no normalization happens! */ \ \ - ((_requested_value >= (NM_MAX(_kernel_value, 1) - 1)) \ + ((_requested_value >= (NM_MAX(_kernel_value, (typeof(_kernel_value)) 1) - 1)) \ && (_requested_value <= (NM_MIN(_kernel_value, ~((typeof(_kernel_value)) 0) - 1) + 1))) \ ? _kernel_value \ : _requested_value; \ diff --git a/src/core/platform/tests/test-link.c b/src/core/platform/tests/test-link.c index 8a54ac48..c931605b 100644 --- a/src/core/platform/tests/test-link.c +++ b/src/core/platform/tests/test-link.c @@ -230,7 +230,6 @@ test_port(int controller, int port_type, SignalData *controller_changed) link_callback, SLAVE_NAME); SignalData *link_changed, *link_removed; - char *value; NMLinkType controller_type = nm_platform_link_get_type(NM_PLATFORM_GET, controller); gboolean test_link_changed_signal_arg1; gboolean test_link_changed_signal_arg2; @@ -296,7 +295,7 @@ test_port(int controller, int port_type, SignalData *controller_changed) .prio = prio_has ? 6 : 0, }; - g_assert(nm_platform_link_change(NM_PLATFORM_GET, ifindex_port, NULL, &bond_port, 0)); + g_assert(nm_platform_link_change(NM_PLATFORM_GET, ifindex_port, NULL, &bond_port, NULL, 0)); accept_signals(link_changed, 1, 3); link = nmtstp_link_get(NM_PLATFORM_GET, ifindex_port, SLAVE_NAME); @@ -306,13 +305,35 @@ test_port(int controller, int port_type, SignalData *controller_changed) } else if (controller_type == NM_LINK_TYPE_BRIDGE) { /* Skip this part for nm-fake-platform */ if (nmtstp_is_root_test() && nmtstp_is_sysfs_writable()) { - g_assert(nm_platform_sysctl_slave_set_option(NM_PLATFORM_GET, - ifindex_port, - "priority", - "614")); - value = nm_platform_sysctl_slave_get_option(NM_PLATFORM_GET, ifindex_port, "priority"); - g_assert_cmpstr(value, ==, "614"); - g_free(value); + NMPlatformLinkBridgePort bridge_port; + const NMPlatformLink *link; + const NMPlatformLnkBridge *lnk; + + link = nmtstp_link_get_typed(NM_PLATFORM_GET, 0, SLAVE_NAME, NM_LINK_TYPE_DUMMY); + g_assert(link); + + lnk = nm_platform_link_get_lnk_bridge(NM_PLATFORM_GET, controller, NULL); + g_assert(lnk); + + bridge_port = (NMPlatformLinkBridgePort){ + .path_cost = 100, + .priority = 614, + .hairpin = 0, + }; + + g_assert(nm_platform_link_change(NM_PLATFORM_GET, + ifindex_port, + NULL, + NULL, + &bridge_port, + 0)); + accept_signals(link_changed, 1, 3); + + link = nmtstp_link_get(NM_PLATFORM_GET, ifindex_port, SLAVE_NAME); + g_assert(link); + g_assert_cmpint(link->port_data.bridge.path_cost, ==, 100); + g_assert_cmpint(link->port_data.bridge.priority, ==, 614); + g_assert_cmpint(link->port_data.bridge.hairpin, ==, 0); } } @@ -2692,7 +2713,7 @@ test_link_set_properties(void) | NM_PLATFORM_LINK_CHANGE_GSO_MAX_SEGMENTS; ifindex = nmtstp_link_dummy_add(NM_PLATFORM_GET, FALSE, "dummy1")->ifindex; - g_assert(nm_platform_link_change(NM_PLATFORM_GET, ifindex, &props, NULL, flags)); + g_assert(nm_platform_link_change(NM_PLATFORM_GET, ifindex, &props, NULL, NULL, flags)); link = nmtstp_link_get(NM_PLATFORM_GET, ifindex, "dummy1"); g_assert(link); diff --git a/src/core/platform/tests/test-platform-general.c b/src/core/platform/tests/test-platform-general.c index cebd44f6..fd6aae82 100644 --- a/src/core/platform/tests/test-platform-general.c +++ b/src/core/platform/tests/test-platform-general.c @@ -44,7 +44,7 @@ test_link_get_all(void) platform = nm_linux_platform_new(NULL, TRUE, NM_PLATFORM_NETNS_SUPPORT_DEFAULT, TRUE); - links = nm_platform_link_get_all(platform, TRUE); + links = nm_platform_link_get_all(platform); } /*****************************************************************************/ diff --git a/src/core/settings/nm-settings.c b/src/core/settings/nm-settings.c index 8796de36..7fc20298 100644 --- a/src/core/settings/nm-settings.c +++ b/src/core/settings/nm-settings.c @@ -3530,7 +3530,7 @@ load_plugins(NMSettings *self, const char *const *plugins, GError **error) continue; } - if (nm_strv_find_first(plugins, iter - plugins, pname) >= 0) { + if (nm_strv_contains(plugins, iter - plugins, pname)) { /* the plugin is already mentioned in the list previously. * Don't load a duplicate. */ continue; 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 84a9479d..04e79725 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 @@ -306,7 +306,7 @@ check_if_bond_slave(shvarFile *ifcfg, NMSettingConnection *s_con) } g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, v, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME, @@ -340,7 +340,7 @@ check_if_team_slave(shvarFile *ifcfg, NMSettingConnection *s_con) } g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, v, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, @@ -512,7 +512,7 @@ make_connection_setting(const char *file, old_value, v); } else { - g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, v, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, v, NULL); g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME, @@ -535,7 +535,7 @@ make_connection_setting(const char *file, old_value, v); } else { - g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, v, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, v, NULL); g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, @@ -555,7 +555,7 @@ make_connection_setting(const char *file, old_value, v); } else { - g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, v, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, v, NULL); g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_VRF_SETTING_NAME, 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 08deaf5a..e703bb73 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 @@ -1346,6 +1346,7 @@ write_ethtool_setting(NMConnection *connection, shvarFile *ifcfg, GError **error guint32 u32; gboolean b; gboolean any_option = FALSE; + char prop_name[300]; s_con = nm_connection_get_setting_connection(connection); if (s_con) { @@ -1426,6 +1427,30 @@ write_ethtool_setting(NMConnection *connection, shvarFile *ifcfg, GError **error any_option = TRUE; } + is_first = TRUE; + for (ethtool_id = _NM_ETHTOOL_ID_CHANNELS_FIRST; ethtool_id <= _NM_ETHTOOL_ID_CHANNELS_LAST; + ethtool_id++) { + if (nm_setting_option_get_uint32(NM_SETTING(s_ethtool), + nm_ethtool_data[ethtool_id]->optname, + &u32)) { + nm_sprintf_buf(prop_name, "ethtool.%s", nm_ethtool_data[ethtool_id]->optname); + set_error_unsupported(error, connection, prop_name, FALSE); + return FALSE; + } + } + + is_first = TRUE; + for (ethtool_id = _NM_ETHTOOL_ID_EEE_FIRST; ethtool_id <= _NM_ETHTOOL_ID_EEE_LAST; + ethtool_id++) { + if (nm_setting_option_get_boolean(NM_SETTING(s_ethtool), + nm_ethtool_data[ethtool_id]->optname, + &b)) { + nm_sprintf_buf(prop_name, "ethtool.%s", nm_ethtool_data[ethtool_id]->optname); + set_error_unsupported(error, connection, prop_name, FALSE); + return FALSE; + } + } + if (!any_option) { /* Write an empty dummy "-A" option without arguments. This is to * ensure that the reader will create an (all default) NMSettingEthtool. @@ -2235,34 +2260,38 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg, const cha master = NULL; } - if (nm_setting_connection_is_slave_type(s_con, NM_SETTING_BOND_SETTING_NAME)) { + if (nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_BOND_SETTING_NAME)) { svSetValueStr(ifcfg, "MASTER_UUID", master); svSetValueStr(ifcfg, "MASTER", master_iface); svSetValueStr(ifcfg, "SLAVE", "yes"); - } else if (nm_setting_connection_is_slave_type(s_con, NM_SETTING_BRIDGE_SETTING_NAME)) { + } else if (nm_streq0(nm_setting_connection_get_port_type(s_con), + NM_SETTING_BRIDGE_SETTING_NAME)) { svSetValueStr(ifcfg, "BRIDGE_UUID", master); svSetValueStr(ifcfg, "BRIDGE", master_iface); - } else if (nm_setting_connection_is_slave_type(s_con, NM_SETTING_TEAM_SETTING_NAME)) { + } else if (nm_streq0(nm_setting_connection_get_port_type(s_con), + NM_SETTING_TEAM_SETTING_NAME)) { svSetValueStr(ifcfg, "TEAM_MASTER_UUID", master); svSetValueStr(ifcfg, "TEAM_MASTER", master_iface); if (NM_IN_STRSET(type, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_VLAN_SETTING_NAME)) svUnsetValue(ifcfg, "TYPE"); - } else if (nm_setting_connection_is_slave_type(s_con, NM_SETTING_OVS_PORT_SETTING_NAME)) { + } else if (nm_streq0(nm_setting_connection_get_port_type(s_con), + NM_SETTING_OVS_PORT_SETTING_NAME)) { svSetValueStr(ifcfg, "OVS_PORT_UUID", master); svSetValueStr(ifcfg, "OVS_PORT", master_iface); - } else if (nm_setting_connection_is_slave_type(s_con, NM_SETTING_VRF_SETTING_NAME)) { + } else if (nm_streq0(nm_setting_connection_get_port_type(s_con), + NM_SETTING_VRF_SETTING_NAME)) { svSetValueStr(ifcfg, "VRF_UUID", master); svSetValueStr(ifcfg, "VRF", master_iface); } else { _LOGW("don't know how to set master for a %s slave", - nm_setting_connection_get_slave_type(s_con)); + nm_setting_connection_get_port_type(s_con)); } } if (nm_streq0(type, NM_SETTING_TEAM_SETTING_NAME)) svSetValueStr(ifcfg, "DEVICETYPE", TYPE_TEAM); else if (master_iface - && nm_setting_connection_is_slave_type(s_con, NM_SETTING_TEAM_SETTING_NAME)) + && nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_TEAM_SETTING_NAME)) svSetValueStr(ifcfg, "DEVICETYPE", TYPE_TEAM_PORT); /* secondary connection UUIDs */ diff --git a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 8c1e9d94..1e6b6c25 100644 --- a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -2231,7 +2231,7 @@ test_clear_master(void) s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "br0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, "bridge"); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, "bridge"); /* 2. write the connection to a new file */ _writer_new_connec_exp(connection, @@ -2248,7 +2248,7 @@ test_clear_master(void) NULL); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, NULL); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NULL); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NULL); nmtst_assert_connection_verifies_after_normalization(connection, 0, 0); @@ -3623,6 +3623,11 @@ test_roundtrip_ethtool(void) optname = nm_ethtool_data[ethtool_id]->optname; vtype = nm_ethtool_id_get_variant_type(ethtool_id); + if (nm_ethtool_optname_is_channels(optname) || nm_ethtool_optname_is_eee(optname)) { + /* Not supported */ + continue; + } + if (NM_IN_SET(ethtool_id, NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX, NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX)) { @@ -7664,9 +7669,7 @@ test_read_bridge_component(void) s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "br0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), - ==, - NM_SETTING_BRIDGE_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); s_port = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BRIDGE_PORT); g_assert(nm_setting_bridge_port_get_hairpin_mode(s_port)); @@ -8259,7 +8262,7 @@ test_read_bond_slave(void) g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "bond0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); } static void @@ -8315,7 +8318,7 @@ test_read_bond_port(void) s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "bond99"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); s_port = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BOND_PORT); g_assert_cmpuint(nm_setting_bond_port_get_queue_id(s_port), ==, 1); @@ -8554,7 +8557,7 @@ test_read_bond_slave_ib(void) s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "bond0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); } static void diff --git a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c index 866b1ffd..b26bad69 100644 --- a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c +++ b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c @@ -2004,7 +2004,7 @@ test_read_bridge_component(void) g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id); g_assert_cmpstr(nm_setting_connection_get_uuid(s_con), ==, expected_uuid); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "br0"); - g_assert(nm_setting_connection_is_slave_type(s_con, NM_SETTING_BRIDGE_SETTING_NAME)); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); s_wired = nm_connection_get_setting_wired(connection); g_assert(s_wired); @@ -2046,9 +2046,9 @@ test_write_bridge_component(void) TRUE, NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "br0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_BRIDGE_SETTING_NAME, NULL); @@ -2357,9 +2357,9 @@ test_read_minimal_slave(void) NM_SETTING_WIRED_SETTING_NAME, &s_con); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "br0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, "bridge", NULL); nmtst_connection_normalize(con_archetype); diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c index 18525724..eb7a40a5 100644 --- a/src/core/supplicant/nm-supplicant-interface.c +++ b/src/core/supplicant/nm-supplicant-interface.c @@ -689,7 +689,7 @@ _bss_info_properties_changed(NMSupplicantInterface *self, v_v = nm_g_variant_lookup_value(properties, "SSID", G_VARIANT_TYPE_BYTESTRING); if (v_v) { arr_data = g_variant_get_fixed_array(v_v, &arr_len, 1); - arr_len = MIN(32, arr_len); + arr_len = NM_MIN(32u, arr_len); /* Stupid ieee80211 layer uses <hidden> */ if (arr_data && arr_len @@ -765,9 +765,15 @@ _bss_info_properties_changed(NMSupplicantInterface *self, gboolean p_owe_transition_mode; gboolean p_metered; guint32 rate; + guint32 bandwidth; arr_data = g_variant_get_fixed_array(v_v, &arr_len, 1); - nm_wifi_utils_parse_ies(arr_data, arr_len, &rate, &p_metered, &p_owe_transition_mode); + nm_wifi_utils_parse_ies(arr_data, + arr_len, + &rate, + &bandwidth, + &p_metered, + &p_owe_transition_mode); p_max_rate = NM_MAX(p_max_rate, rate); p_max_rate_has = TRUE; g_variant_unref(v_v); @@ -777,7 +783,8 @@ _bss_info_properties_changed(NMSupplicantInterface *self, else bss_info->rsn_flags &= ~NM_802_11_AP_SEC_KEY_MGMT_OWE_TM; - bss_info->metered = p_metered; + bss_info->metered = p_metered; + bss_info->bandwidth = bandwidth; } if (p_max_rate_has) @@ -1373,7 +1380,7 @@ _get_capability(NMSupplicantInterfacePrivate *priv, NMSupplCapType type) case NM_SUPPL_CAP_TYPE_AP: iface_value = NM_SUPPL_CAP_MASK_GET(priv->iface_capabilities, type); value = NM_SUPPL_CAP_MASK_GET(priv->global_capabilities, type); - value = MAX(iface_value, value); + value = NM_MAX(iface_value, value); break; case NM_SUPPL_CAP_TYPE_FT: value = NM_SUPPL_CAP_MASK_GET(priv->global_capabilities, type); diff --git a/src/core/supplicant/nm-supplicant-settings-verify.c b/src/core/supplicant/nm-supplicant-settings-verify.c index fc40bade..8f2561a6 100644 --- a/src/core/supplicant/nm-supplicant-settings-verify.c +++ b/src/core/supplicant/nm-supplicant-settings-verify.c @@ -228,7 +228,7 @@ validate_type_keyword(const struct Opt *opt, const char *value, const guint32 le s++; } - if (nm_strv_find_first(opt->str_allowed, -1, value) < 0) + if (!nm_strv_contains(opt->str_allowed, -1, value)) return FALSE; if (!s) diff --git a/src/core/supplicant/nm-supplicant-types.h b/src/core/supplicant/nm-supplicant-types.h index 1ae67e13..870a53c3 100644 --- a/src/core/supplicant/nm-supplicant-types.h +++ b/src/core/supplicant/nm-supplicant-types.h @@ -55,9 +55,9 @@ typedef enum { _NM_SUPPL_CAP_TYPE_NUM, } NMSupplCapType; -#define NM_SUPPL_CAP_MASK_NO(type) ((NMSupplCapMask) (1llu << ((type) *2u))) -#define NM_SUPPL_CAP_MASK_YES(type) ((NMSupplCapMask) (2llu << ((type) *2u))) -#define NM_SUPPL_CAP_MASK_MASK(type) ((NMSupplCapMask) (3llu << ((type) *2u))) +#define NM_SUPPL_CAP_MASK_NO(type) ((NMSupplCapMask) (1llu << ((type) * 2u))) +#define NM_SUPPL_CAP_MASK_YES(type) ((NMSupplCapMask) (2llu << ((type) * 2u))) +#define NM_SUPPL_CAP_MASK_MASK(type) ((NMSupplCapMask) (3llu << ((type) * 2u))) typedef enum { NM_SUPPL_CAP_MASK_NONE = 0, @@ -179,6 +179,8 @@ typedef struct _NMSupplicantBssInfo { guint32 max_rate; + guint32 bandwidth; + guint8 signal_percent; NMEtherAddr bssid; diff --git a/src/core/tests/test-core-with-expect.c b/src/core/tests/test-core-with-expect.c index 01510126..680843fc 100644 --- a/src/core/tests/test-core-with-expect.c +++ b/src/core/tests/test-core-with-expect.c @@ -617,7 +617,7 @@ test_nmp_utils_new_vlan_name(void) g_assert(ifname && ifname[0]); g_assert_cmpint(strlen(ifname), ==, - MIN(15, strlen(parent_names[i]) + strlen(vlan_id_s))); + NM_MIN(15u, strlen(parent_names[i]) + strlen(vlan_id_s))); g_assert(g_str_has_suffix(ifname, vlan_id_s)); g_assert(ifname[strlen(ifname) - strlen(vlan_id_s)] == '.'); g_assert(strncmp(ifname, parent_names[i], strlen(ifname) - strlen(vlan_id_s)) == 0); diff --git a/src/core/tests/test-core.c b/src/core/tests/test-core.c index 8296d745..e90cf6e9 100644 --- a/src/core/tests/test-core.c +++ b/src/core/tests/test-core.c @@ -302,7 +302,7 @@ test_nm_utils_log_connection_diff(void) g_object_set(nm_connection_get_setting_connection(connection2), NM_SETTING_CONNECTION_ID, "id2", - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master2", NULL); nm_utils_log_connection_diff(connection, @@ -2104,8 +2104,19 @@ do_test_stable_id_parse(const char *stable_id, NMUtilsStableType expected_stable_type, const char *expected_generated) { - gs_free char *generated = NULL; - NMUtilsStableType stable_type; + gs_free char *generated = NULL; + NMUtilsStableType stable_type; + char ssid_bin[] = "SSID(\202)"; + gs_unref_bytes GBytes *ssid = g_bytes_new_static(ssid_bin, sizeof(ssid_bin) - 1); + + while (TRUE) { + if (NM_STR_HAS_PREFIX(stable_id, "NO_SSID:")) { + stable_id += NM_STRLEN("NO_SSID:"); + nm_clear_pointer(&ssid, g_bytes_unref); + continue; + } + break; + } if (expected_stable_type == NM_UTILS_STABLE_TYPE_GENERATED) g_assert(expected_generated); @@ -2117,8 +2128,13 @@ do_test_stable_id_parse(const char *stable_id, else g_assert(stable_id); - stable_type = - nm_utils_stable_id_parse(stable_id, "_DEVICE", "_MAC", "_BOOT", "_CONNECTION", &generated); + stable_type = nm_utils_stable_id_parse(stable_id, + "_DEVICE", + "_MAC", + "_BOOT", + "_CONNECTION", + ssid, + &generated); g_assert_cmpint(expected_stable_type, ==, stable_type); @@ -2160,6 +2176,12 @@ test_stable_id_parse(void) _parse_generated("${${CONNECTION}", "${${CONNECTION}=11{_CONNECTION}"); _parse_generated("${CONNECTION}x", "${CONNECTION}=11{_CONNECTION}x"); _parse_generated("x${CONNECTION}", "x${CONNECTION}=11{_CONNECTION}"); + _parse_generated("x${CONNECTION}${NETWORK_SSID}", + "x${CONNECTION}=11{_CONNECTION}${NETWORK_SSID}=12{s:SSID(\\202)}"); + _parse_generated("NO_SSID:x${CONNECTION}${NETWORK_SSID}", + "x${CONNECTION}=11{_CONNECTION}${NETWORK_SSID}=13{c:_CONNECTION}"); + _parse_generated("${NETWORK_SSID}", "${NETWORK_SSID}=12{s:SSID(\\202)}"); + _parse_generated("NO_SSID:${NETWORK_SSID}", "${NETWORK_SSID}=13{c:_CONNECTION}"); _parse_generated("${BOOT}x", "${BOOT}=5{_BOOT}x"); _parse_generated("x${BOOT}", "x${BOOT}=5{_BOOT}"); _parse_generated("x${BOOT}${CONNECTION}", "x${BOOT}=5{_BOOT}${CONNECTION}=11{_CONNECTION}"); @@ -2169,6 +2191,30 @@ test_stable_id_parse(void) _parse_random("${RANDOM}"); _parse_random(" ${RANDOM}"); _parse_random("${BOOT}${RANDOM}"); + + { + gs_free char *str = NULL; + char ssid_bin[] = "foo\n"; + gs_unref_bytes GBytes *ssid = g_bytes_new_static(ssid_bin, sizeof(ssid_bin) - 1); + NMUtilsStableType stable_type; + + stable_type = nm_utils_stable_id_parse_network_ssid(ssid, "uuid", FALSE, &str); + + g_assert_cmpint(stable_type, ==, NM_UTILS_STABLE_TYPE_GENERATED); + g_assert_cmpstr(str, ==, "${NETWORK_SSID}=9{s:foo\\012}"); + + nm_clear_g_free(&str); + + stable_type = nm_utils_stable_id_parse_network_ssid(ssid, "uuid", TRUE, &str); + + g_assert_cmpint(stable_type, ==, NM_UTILS_STABLE_TYPE_GENERATED); + g_assert_cmpstr(str, ==, "wqLBg0FtOnCi7yYQKGDUj6CDixc"); + + nm_clear_g_free(&str); + + str = nm_utils_stable_id_generated_complete("${NETWORK_SSID}=9{s:foo\\012}"); + g_assert_cmpstr(str, ==, "wqLBg0FtOnCi7yYQKGDUj6CDixc"); + } } /*****************************************************************************/ diff --git a/src/core/tests/test-l3cfg.c b/src/core/tests/test-l3cfg.c index 962b2eec..6b82fe43 100644 --- a/src/core/tests/test-l3cfg.c +++ b/src/core/tests/test-l3cfg.c @@ -760,7 +760,7 @@ test_l3_ipv4ll(gconstpointer test_data) if (next_timeout_msec <= 0) break; - next_timeout_msec = NM_MIN(next_timeout_msec, nmtst_get_rand_uint32() % 1000u); + next_timeout_msec = NM_MIN(next_timeout_msec, (gint64) (nmtst_get_rand_uint32() % 1000u)); nmtst_main_context_iterate_until(NULL, next_timeout_msec, FALSE); _LOGT("poll 1 intermezzo"); diff --git a/src/core/vpn/nm-vpn-connection.c b/src/core/vpn/nm-vpn-connection.c index d7102a12..3dba9ff6 100644 --- a/src/core/vpn/nm-vpn-connection.c +++ b/src/core/vpn/nm-vpn-connection.c @@ -1143,7 +1143,8 @@ static void device_state_changed(NMActiveConnection *active, NMDevice *device, NMDeviceState new_state, - NMDeviceState old_state) + NMDeviceState old_state, + NMDeviceStateReason reason) { if (_service_and_connection_can_persist(NM_VPN_CONNECTION(active))) { if (new_state <= NM_DEVICE_STATE_DISCONNECTED || new_state == NM_DEVICE_STATE_FAILED) { diff --git a/src/libnm-base/nm-base.h b/src/libnm-base/nm-base.h index 65fc9299..34944408 100644 --- a/src/libnm-base/nm-base.h +++ b/src/libnm-base/nm-base.h @@ -117,21 +117,34 @@ typedef enum { NM_ETHTOOL_ID_PAUSE_TX, _NM_ETHTOOL_ID_PAUSE_LAST = NM_ETHTOOL_ID_PAUSE_TX, - _NM_ETHTOOL_ID_RING_FIRST = _NM_ETHTOOL_ID_PAUSE_LAST + 1, + _NM_ETHTOOL_ID_EEE_FIRST = _NM_ETHTOOL_ID_PAUSE_LAST + 1, + NM_ETHTOOL_ID_EEE_ENABLED = _NM_ETHTOOL_ID_EEE_FIRST, + _NM_ETHTOOL_ID_EEE_LAST = NM_ETHTOOL_ID_EEE_ENABLED, + + _NM_ETHTOOL_ID_RING_FIRST = _NM_ETHTOOL_ID_EEE_LAST + 1, NM_ETHTOOL_ID_RING_RX = _NM_ETHTOOL_ID_RING_FIRST, NM_ETHTOOL_ID_RING_RX_JUMBO, NM_ETHTOOL_ID_RING_RX_MINI, NM_ETHTOOL_ID_RING_TX, _NM_ETHTOOL_ID_RING_LAST = NM_ETHTOOL_ID_RING_TX, - _NM_ETHTOOL_ID_LAST = _NM_ETHTOOL_ID_RING_LAST, + _NM_ETHTOOL_ID_CHANNELS_FIRST = _NM_ETHTOOL_ID_RING_LAST + 1, + NM_ETHTOOL_ID_CHANNELS_RX = _NM_ETHTOOL_ID_CHANNELS_FIRST, + NM_ETHTOOL_ID_CHANNELS_TX, + NM_ETHTOOL_ID_CHANNELS_OTHER, + NM_ETHTOOL_ID_CHANNELS_COMBINED, + _NM_ETHTOOL_ID_CHANNELS_LAST = NM_ETHTOOL_ID_CHANNELS_COMBINED, + + _NM_ETHTOOL_ID_LAST = _NM_ETHTOOL_ID_CHANNELS_LAST, _NM_ETHTOOL_ID_COALESCE_NUM = (_NM_ETHTOOL_ID_COALESCE_LAST - _NM_ETHTOOL_ID_COALESCE_FIRST + 1), _NM_ETHTOOL_ID_FEATURE_NUM = (_NM_ETHTOOL_ID_FEATURE_LAST - _NM_ETHTOOL_ID_FEATURE_FIRST + 1), _NM_ETHTOOL_ID_RING_NUM = (_NM_ETHTOOL_ID_RING_LAST - _NM_ETHTOOL_ID_RING_FIRST + 1), _NM_ETHTOOL_ID_PAUSE_NUM = (_NM_ETHTOOL_ID_PAUSE_LAST - _NM_ETHTOOL_ID_PAUSE_FIRST + 1), - _NM_ETHTOOL_ID_NUM = (_NM_ETHTOOL_ID_LAST - _NM_ETHTOOL_ID_FIRST + 1), + _NM_ETHTOOL_ID_CHANNELS_NUM = + (_NM_ETHTOOL_ID_CHANNELS_LAST - _NM_ETHTOOL_ID_CHANNELS_FIRST + 1), + _NM_ETHTOOL_ID_NUM = (_NM_ETHTOOL_ID_LAST - _NM_ETHTOOL_ID_FIRST + 1), } NMEthtoolID; #define _NM_ETHTOOL_ID_FEATURE_AS_IDX(ethtool_id) ((ethtool_id) -_NM_ETHTOOL_ID_FEATURE_FIRST) @@ -143,6 +156,8 @@ typedef enum { NM_ETHTOOL_TYPE_FEATURE, NM_ETHTOOL_TYPE_RING, NM_ETHTOOL_TYPE_PAUSE, + NM_ETHTOOL_TYPE_CHANNELS, + NM_ETHTOOL_TYPE_EEE, } NMEthtoolType; /****************************************************************************/ @@ -171,6 +186,18 @@ nm_ethtool_id_is_pause(NMEthtoolID id) return id >= _NM_ETHTOOL_ID_PAUSE_FIRST && id <= _NM_ETHTOOL_ID_PAUSE_LAST; } +static inline gboolean +nm_ethtool_id_is_channels(NMEthtoolID id) +{ + return id >= _NM_ETHTOOL_ID_CHANNELS_FIRST && id <= _NM_ETHTOOL_ID_CHANNELS_LAST; +} + +static inline gboolean +nm_ethtool_id_is_eee(NMEthtoolID id) +{ + return id >= _NM_ETHTOOL_ID_EEE_FIRST && id <= _NM_ETHTOOL_ID_EEE_LAST; +} + /*****************************************************************************/ typedef enum { @@ -225,6 +252,7 @@ typedef enum { _NM_WIFI_DEVICE_CAP_FREQ_VALID = 0x00000100, _NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200, _NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400, + _NM_WIFI_DEVICE_CAP_FREQ_6GHZ = 0x00000800, _NM_WIFI_DEVICE_CAP_MESH = 0x00001000, _NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000, } _NMDeviceWifiCapabilities; diff --git a/src/libnm-base/nm-config-base.h b/src/libnm-base/nm-config-base.h index c90efc1b..6d050ae1 100644 --- a/src/libnm-base/nm-config-base.h +++ b/src/libnm-base/nm-config-base.h @@ -35,7 +35,6 @@ #define NM_CONFIG_KEYFILE_KEY_MAIN_NO_AUTO_DEFAULT "no-auto-default" #define NM_CONFIG_KEYFILE_KEY_MAIN_PLUGINS "plugins" #define NM_CONFIG_KEYFILE_KEY_MAIN_RC_MANAGER "rc-manager" -#define NM_CONFIG_KEYFILE_KEY_MAIN_SLAVES_ORDER "slaves-order" #define NM_CONFIG_KEYFILE_KEY_MAIN_SYSTEMD_RESOLVED "systemd-resolved" #define NM_CONFIG_KEYFILE_KEY_LOGGING_AUDIT "audit" diff --git a/src/libnm-base/nm-ethtool-base.c b/src/libnm-base/nm-ethtool-base.c index c31cff6f..a02b9018 100644 --- a/src/libnm-base/nm-ethtool-base.c +++ b/src/libnm-base/nm-ethtool-base.c @@ -41,6 +41,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = { ETHT_DATA(COALESCE_TX_USECS_HIGH), ETHT_DATA(COALESCE_TX_USECS_IRQ), ETHT_DATA(COALESCE_TX_USECS_LOW), + ETHT_DATA(EEE_ENABLED), ETHT_DATA(FEATURE_ESP_HW_OFFLOAD), ETHT_DATA(FEATURE_ESP_TX_CSUM_HW_OFFLOAD), ETHT_DATA(FEATURE_FCOE_MTU), @@ -106,11 +107,19 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = { ETHT_DATA(RING_RX_JUMBO), ETHT_DATA(RING_RX_MINI), ETHT_DATA(RING_TX), + ETHT_DATA(CHANNELS_RX), + ETHT_DATA(CHANNELS_TX), + ETHT_DATA(CHANNELS_OTHER), + ETHT_DATA(CHANNELS_COMBINED), [_NM_ETHTOOL_ID_NUM] = NULL, }; static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = { /* sorted by optname. */ + NM_ETHTOOL_ID_CHANNELS_COMBINED, + NM_ETHTOOL_ID_CHANNELS_OTHER, + NM_ETHTOOL_ID_CHANNELS_RX, + NM_ETHTOOL_ID_CHANNELS_TX, NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX, NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX, NM_ETHTOOL_ID_COALESCE_PKT_RATE_HIGH, @@ -133,6 +142,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = { NM_ETHTOOL_ID_COALESCE_TX_USECS_HIGH, NM_ETHTOOL_ID_COALESCE_TX_USECS_IRQ, NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW, + NM_ETHTOOL_ID_EEE_ENABLED, NM_ETHTOOL_ID_FEATURE_ESP_HW_OFFLOAD, NM_ETHTOOL_ID_FEATURE_ESP_TX_CSUM_HW_OFFLOAD, NM_ETHTOOL_ID_FEATURE_FCOE_MTU, @@ -291,6 +301,10 @@ nm_ethtool_id_to_type(NMEthtoolID id) return NM_ETHTOOL_TYPE_RING; if (nm_ethtool_id_is_pause(id)) return NM_ETHTOOL_TYPE_PAUSE; + if (nm_ethtool_id_is_channels(id)) + return NM_ETHTOOL_TYPE_CHANNELS; + if (nm_ethtool_id_is_eee(id)) + return NM_ETHTOOL_TYPE_EEE; return NM_ETHTOOL_TYPE_UNKNOWN; } @@ -298,11 +312,18 @@ nm_ethtool_id_to_type(NMEthtoolID id) const GVariantType * nm_ethtool_id_get_variant_type(NMEthtoolID ethtool_id) { - if (nm_ethtool_id_is_feature(ethtool_id) || nm_ethtool_id_is_pause(ethtool_id)) + switch (nm_ethtool_id_to_type(ethtool_id)) { + case NM_ETHTOOL_TYPE_FEATURE: + case NM_ETHTOOL_TYPE_PAUSE: + case NM_ETHTOOL_TYPE_EEE: return G_VARIANT_TYPE_BOOLEAN; - - if (nm_ethtool_id_is_coalesce(ethtool_id) || nm_ethtool_id_is_ring(ethtool_id)) + case NM_ETHTOOL_TYPE_CHANNELS: + case NM_ETHTOOL_TYPE_COALESCE: + case NM_ETHTOOL_TYPE_RING: return G_VARIANT_TYPE_UINT32; - - return NULL; + case NM_ETHTOOL_TYPE_UNKNOWN: + nm_assert(ethtool_id == NM_ETHTOOL_ID_UNKNOWN); + return NULL; + } + return nm_assert_unreachable_val(NULL); } diff --git a/src/libnm-base/nm-ethtool-utils-base.h b/src/libnm-base/nm-ethtool-utils-base.h index fa9c3071..75fb63c5 100644 --- a/src/libnm-base/nm-ethtool-utils-base.h +++ b/src/libnm-base/nm-ethtool-utils-base.h @@ -104,6 +104,13 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_PAUSE_RX "pause-rx" #define NM_ETHTOOL_OPTNAME_PAUSE_TX "pause-tx" +#define NM_ETHTOOL_OPTNAME_CHANNELS_RX "channels-rx" +#define NM_ETHTOOL_OPTNAME_CHANNELS_TX "channels-tx" +#define NM_ETHTOOL_OPTNAME_CHANNELS_OTHER "channels-other" +#define NM_ETHTOOL_OPTNAME_CHANNELS_COMBINED "channels-combined" + +#define NM_ETHTOOL_OPTNAME_EEE_ENABLED "eee-enabled" + /*****************************************************************************/ G_END_DECLS diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver index 919ffc74..3b603b81 100644 --- a/src/libnm-client-impl/libnm.ver +++ b/src/libnm-client-impl/libnm.ver @@ -1943,3 +1943,25 @@ global: nm_setting_link_get_type; nm_setting_link_new; } libnm_1_42_0; + +libnm_1_46_0 { +global: + nm_access_point_get_bandwidth; + nm_device_hsr_get_multicast_spec; + nm_device_hsr_get_port1; + nm_device_hsr_get_port2; + nm_device_hsr_get_prp; + nm_device_hsr_get_supervision_address; + nm_device_hsr_get_type; + nm_device_ip_tunnel_get_fwmark; + nm_ethtool_optname_is_channels; + nm_ethtool_optname_is_eee; + nm_setting_connection_get_controller; + nm_setting_connection_get_port_type; + nm_setting_hsr_get_multicast_spec; + nm_setting_hsr_get_port1; + nm_setting_hsr_get_port2; + nm_setting_hsr_get_prp; + nm_setting_hsr_get_type; + nm_setting_hsr_new; +} libnm_1_44_0; diff --git a/src/libnm-client-impl/meson.build b/src/libnm-client-impl/meson.build index fb879dca..79ac9559 100644 --- a/src/libnm-client-impl/meson.build +++ b/src/libnm-client-impl/meson.build @@ -1,5 +1,7 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +libnm_client_impl_inc = include_directories('.') + libnm_client_impl_sources = files( 'nm-access-point.c', 'nm-active-connection.c', @@ -15,6 +17,7 @@ libnm_client_impl_sources = files( 'nm-device-dummy.c', 'nm-device-ethernet.c', 'nm-device-generic.c', + 'nm-device-hsr.c', 'nm-device-infiniband.c', 'nm-device-ip-tunnel.c', 'nm-device-loopback.c', @@ -163,38 +166,76 @@ if enable_introspection install: true, ) - infos = [ 'dbus', 'nmcli', 'keyfile' ] + gi_typelib_path = run_command('printenv', 'GI_TYPELIB_PATH').stdout() + if gi_typelib_path != '' + gi_typelib_path = ':' + gi_typelib_path + endif + gi_typelib_path = meson.current_build_dir() + gi_typelib_path + + ld_library_path = run_command('printenv', 'LD_LIBRARY_PATH').stdout() + if ld_library_path != '' + ld_library_path = ':' + ld_library_path + endif + ld_library_path = meson.current_build_dir() + ld_library_path + + gen_infos_cmd = join_paths(meson.source_root(), 'tools', 'generate-docs-nm-property-infos.py') + gen_gir_cmd = join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-gir.py') + + names = [ 'dbus', 'nmcli', 'keyfile' ] if enable_ifcfg_rh - infos += [ 'ifcfg-rh' ] + names += [ 'ifcfg-rh' ] endif - foreach info: infos - t = custom_target( - 'nm-propery-infos-' + info + '.xml', - input: libnm_core_settings_sources, - output: 'nm-propery-infos-' + info + '.xml', + foreach name: names + t_infos = custom_target( + 'nm-property-infos-' + name + '.xml', + input: [gen_infos_cmd, libnm_gir[0]] + libnm_core_settings_sources, + output: 'nm-property-infos-' + name + '.xml', command: [ python.path(), - join_paths(meson.source_root(), 'tools', 'generate-docs-nm-property-infos.py'), - info, + gen_infos_cmd, + name, '@OUTPUT@', - '@INPUT@' + libnm_gir[0] + ] + libnm_core_settings_sources, + ) + + t_gir = custom_target( + 'nm-settings-docs-gir-' + name + '.xml', + input: [gen_gir_cmd, libnm_gir[0]], + output: 'nm-settings-docs-gir-' + name + '.xml', + command: [ + 'env', + 'GI_TYPELIB_PATH=' + gi_typelib_path, + 'LD_LIBRARY_PATH=' + ld_library_path, + python.path(), + gen_gir_cmd, + '--lib-path', meson.current_build_dir(), + '--gir', libnm_gir[0], + '--output', '@OUTPUT@', + '--target', name ], + depends: libnm_gir, ) # meson 0.47 doesn't support non-static keys for dicts # nor extending dicts incrementally. Workaround. - if info == 'dbus' - nm_property_infos_xml_dbus = t - elif info == 'keyfile' - nm_property_infos_xml_keyfile = t - elif info == 'ifcfg-rh' - nm_property_infos_xml_ifcfg_rh = t - elif info == 'nmcli' - nm_property_infos_xml_nmcli = t + if name == 'dbus' + nm_property_infos_xml_dbus = t_infos + nm_settings_docs_xml_gir_dbus = t_gir + elif name == 'keyfile' + nm_property_infos_xml_keyfile = t_infos + nm_settings_docs_xml_gir_keyfile = t_gir + elif name == 'ifcfg-rh' + nm_property_infos_xml_ifcfg_rh = t_infos + nm_settings_docs_xml_gir_ifcfg_rh = t_gir + elif name == 'nmcli' + nm_property_infos_xml_nmcli = t_infos + nm_settings_docs_xml_gir_nmcli = t_gir else assert(false) endif endforeach + if enable_ifcfg_rh nm_property_infos_xml = { 'dbus': nm_property_infos_xml_dbus, @@ -202,40 +243,22 @@ if enable_introspection 'nmcli': nm_property_infos_xml_nmcli, 'ifcfg-rh': nm_property_infos_xml_ifcfg_rh, } + nm_settings_docs_xml_gir = { + 'dbus': nm_settings_docs_xml_gir_dbus, + 'keyfile': nm_settings_docs_xml_gir_keyfile, + 'nmcli': nm_settings_docs_xml_gir_nmcli, + 'ifcfg-rh': nm_settings_docs_xml_gir_ifcfg_rh, + } else nm_property_infos_xml = { 'dbus': nm_property_infos_xml_dbus, 'keyfile': nm_property_infos_xml_keyfile, 'nmcli': nm_property_infos_xml_nmcli, } + nm_settings_docs_xml_gir = { + 'dbus': nm_settings_docs_xml_gir_dbus, + 'keyfile': nm_settings_docs_xml_gir_keyfile, + 'nmcli': nm_settings_docs_xml_gir_nmcli, + } endif - - gi_typelib_path = run_command('printenv', 'GI_TYPELIB_PATH').stdout() - if gi_typelib_path != '' - gi_typelib_path = ':' + gi_typelib_path - endif - gi_typelib_path = meson.current_build_dir() + gi_typelib_path - - ld_library_path = run_command('printenv', 'LD_LIBRARY_PATH').stdout() - if ld_library_path != '' - ld_library_path = ':' + ld_library_path - endif - ld_library_path = meson.current_build_dir() + ld_library_path - - nm_settings_docs_xml_gir = custom_target( - 'nm-settings-docs-gir.xml', - input: libnm_gir[0], - output: 'nm-settings-docs-gir.xml', - command: [ - 'env', - 'GI_TYPELIB_PATH=' + gi_typelib_path, - 'LD_LIBRARY_PATH=' + ld_library_path, - python.path(), - join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-gir.py'), - '--lib-path', meson.current_build_dir(), - '--gir', '@INPUT@', - '--output', '@OUTPUT@' - ], - depends: libnm_gir, - ) endif diff --git a/src/libnm-client-impl/nm-access-point.c b/src/libnm-client-impl/nm-access-point.c index 94b38f03..a06bee48 100644 --- a/src/libnm-client-impl/nm-access-point.c +++ b/src/libnm-client-impl/nm-access-point.c @@ -30,6 +30,7 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMAccessPoint, PROP_HW_ADDRESS, PROP_MODE, PROP_MAX_BITRATE, + PROP_BANDWIDTH, PROP_STRENGTH, PROP_BSSID, PROP_LAST_SEEN, ); @@ -43,6 +44,7 @@ typedef struct { guint32 frequency; guint32 mode; guint32 max_bitrate; + guint32 bandwidth; gint32 last_seen; guint8 strength; } NMAccessPointPrivate; @@ -199,6 +201,24 @@ nm_access_point_get_max_bitrate(NMAccessPoint *ap) } /** + * nm_access_point_get_bandwidth: + * @ap: a #NMAccessPoint + * + * Gets the bandwidth advertised by the access point in MHz. + * + * Returns: the advertised bandwidth (MHz) + * + * Since: 1.46 + **/ +guint32 +nm_access_point_get_bandwidth(NMAccessPoint *ap) +{ + g_return_val_if_fail(NM_IS_ACCESS_POINT(ap), 0); + + return NM_ACCESS_POINT_GET_PRIVATE(ap)->bandwidth; +} + +/** * nm_access_point_get_strength: * @ap: a #NMAccessPoint * @@ -463,6 +483,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) case PROP_MAX_BITRATE: g_value_set_uint(value, nm_access_point_get_max_bitrate(ap)); break; + case PROP_BANDWIDTH: + g_value_set_uint(value, nm_access_point_get_bandwidth(ap)); + break; case PROP_STRENGTH: g_value_set_uchar(value, nm_access_point_get_strength(ap)); break; @@ -480,6 +503,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_accesspoint = NML_DBUS_META_IFACE nm_access_point_get_type, NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( + NML_DBUS_META_PROPERTY_INIT_U("Bandwidth", PROP_BANDWIDTH, NMAccessPoint, _priv.bandwidth), NML_DBUS_META_PROPERTY_INIT_U("Flags", PROP_FLAGS, NMAccessPoint, _priv.flags), NML_DBUS_META_PROPERTY_INIT_U("Frequency", PROP_FREQUENCY, NMAccessPoint, _priv.frequency), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", @@ -621,6 +645,21 @@ nm_access_point_class_init(NMAccessPointClass *ap_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); /** + * NMAccessPoint:bandwidth: + * + * The channel bandwidth announced by the AP in MHz. + * + * Since: 1.46 + **/ + obj_properties[PROP_BANDWIDTH] = g_param_spec_uint(NM_ACCESS_POINT_BANDWIDTH, + "", + "", + 0, + G_MAXUINT32, + 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** * NMAccessPoint:strength: * * The current signal strength of the access point. diff --git a/src/libnm-client-impl/nm-client.c b/src/libnm-client-impl/nm-client.c index f3ab6d69..1598fb30 100644 --- a/src/libnm-client-impl/nm-client.c +++ b/src/libnm-client-impl/nm-client.c @@ -29,6 +29,7 @@ #include "nm-device-dummy.h" #include "nm-device-ethernet.h" #include "nm-device-generic.h" +#include "nm-device-hsr.h" #include "nm-device-infiniband.h" #include "nm-device-ip-tunnel.h" #include "nm-device-loopback.h" diff --git a/src/libnm-client-impl/nm-dbus-helpers.h b/src/libnm-client-impl/nm-dbus-helpers.h index 5a6b2d62..96c8ee75 100644 --- a/src/libnm-client-impl/nm-dbus-helpers.h +++ b/src/libnm-client-impl/nm-dbus-helpers.h @@ -6,7 +6,7 @@ #ifndef __NM_DBUS_HELPERS_PRIVATE_H__ #define __NM_DBUS_HELPERS_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-device-hsr.c b/src/libnm-client-impl/nm-device-hsr.c new file mode 100644 index 00000000..7160bf6d --- /dev/null +++ b/src/libnm-client-impl/nm-device-hsr.c @@ -0,0 +1,279 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Red Hat, Inc. + */ + +#include "libnm-client-impl/nm-default-libnm.h" + +#include "nm-device-hsr.h" + +#include "nm-setting-connection.h" +#include "nm-setting-hsr.h" +#include "nm-utils.h" +#include "nm-object-private.h" + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PORT1, + PROP_PORT2, + PROP_SUPERVISION_ADDRESS, + PROP_MULTICAST_SPEC, + PROP_PRP, ); + +typedef struct { + char *supervision_address; + NMLDBusPropertyO port1; + NMLDBusPropertyO port2; + guint8 multicast_spec; + bool prp; +} NMDeviceHsrPrivate; + +struct _NMDeviceHsr { + NMDevice parent; + NMDeviceHsrPrivate _priv; +}; + +struct _NMDeviceHsrClass { + NMDeviceClass parent; +}; + +G_DEFINE_TYPE(NMDeviceHsr, nm_device_hsr, NM_TYPE_DEVICE) + +#define NM_DEVICE_HSR_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMDeviceHsr, NM_IS_DEVICE_HSR, NMObject, NMDevice) + +/*****************************************************************************/ + +/** + * nm_device_hsr_get_port1: + * @device: a #NMDeviceHsr + * + * Returns: (transfer none): the device's port1 device + * + * Since: 1.46 + **/ +NMDevice * +nm_device_hsr_get_port1(NMDeviceHsr *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_HSR(device), NULL); + + return nml_dbus_property_o_get_obj(&NM_DEVICE_HSR_GET_PRIVATE(device)->port1); +} + +/** + * nm_device_hsr_get_port2: + * @device: a #NMDeviceHsr + * + * Returns: (transfer none): the device's port2 device + * + * Since: 1.46 + **/ +NMDevice * +nm_device_hsr_get_port2(NMDeviceHsr *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_HSR(device), NULL); + + return nml_dbus_property_o_get_obj(&NM_DEVICE_HSR_GET_PRIVATE(device)->port2); +} + +/** + * nm_device_hsr_get_supervision_address: + * @device: a #NMDeviceHsr + * + * Returns: the supervision MAC adddress + * + * Since: 1.46 + **/ +const char * +nm_device_hsr_get_supervision_address(NMDeviceHsr *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_HSR(device), NULL); + + return NM_DEVICE_HSR_GET_PRIVATE(device)->supervision_address; +} + +/** + * nm_device_hsr_get_multicast_spec: + * @device: a #NMDeviceHsr + * + * Returns: the last byte of the supervision address + * + * Since: 1.46 + **/ +guint8 +nm_device_hsr_get_multicast_spec(NMDeviceHsr *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_HSR(device), 0); + + return NM_DEVICE_HSR_GET_PRIVATE(device)->multicast_spec; +} + +/** + * nm_device_hsr_get_prp: + * @device: a #NMDeviceHsr + * + * Returns: whether PRP protocol is used or not + * + * Since: 1.46 + **/ +gboolean +nm_device_hsr_get_prp(NMDeviceHsr *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_HSR(device), FALSE); + + return NM_DEVICE_HSR_GET_PRIVATE(device)->prp; +} + +/*****************************************************************************/ + +static void +nm_device_hsr_init(NMDeviceHsr *device) +{} + +static void +finalize(GObject *object) +{ + NMDeviceHsrPrivate *priv = NM_DEVICE_HSR_GET_PRIVATE(object); + + g_free(priv->supervision_address); + + G_OBJECT_CLASS(nm_device_hsr_parent_class)->finalize(object); +} + +static void +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + NMDeviceHsr *device = NM_DEVICE_HSR(object); + + switch (prop_id) { + case PROP_PORT1: + g_value_set_object(value, nm_device_hsr_get_port1(device)); + break; + case PROP_PORT2: + g_value_set_object(value, nm_device_hsr_get_port2(device)); + break; + case PROP_SUPERVISION_ADDRESS: + g_value_set_string(value, nm_device_hsr_get_supervision_address(device)); + break; + case PROP_MULTICAST_SPEC: + g_value_set_uchar(value, nm_device_hsr_get_multicast_spec(device)); + break; + case PROP_PRP: + g_value_set_boolean(value, nm_device_hsr_get_prp(device)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_hsr = NML_DBUS_META_IFACE_INIT_PROP( + NM_DBUS_INTERFACE_DEVICE_HSR, + nm_device_hsr_get_type, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, + NML_DBUS_META_IFACE_DBUS_PROPERTIES( + NML_DBUS_META_PROPERTY_INIT_Y("MulticastSpec", + PROP_MULTICAST_SPEC, + NMDeviceHsr, + _priv.multicast_spec), + NML_DBUS_META_PROPERTY_INIT_O_PROP("Port1", + PROP_PORT1, + NMDeviceHsr, + _priv.port1, + nm_device_get_type), + NML_DBUS_META_PROPERTY_INIT_O_PROP("Port2", + PROP_PORT2, + NMDeviceHsr, + _priv.port2, + nm_device_get_type), + NML_DBUS_META_PROPERTY_INIT_B("Prp", PROP_PRP, NMDeviceHsr, _priv.prp), + NML_DBUS_META_PROPERTY_INIT_S("SupervisionAddress", + PROP_SUPERVISION_ADDRESS, + NMDeviceHsr, + _priv.supervision_address), ), ); + +static void +nm_device_hsr_class_init(NMDeviceHsrClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + NMObjectClass *nm_object_class = NM_OBJECT_CLASS(klass); + + object_class->get_property = get_property; + object_class->finalize = finalize; + + _NM_OBJECT_CLASS_INIT_PRIV_PTR_DIRECT(nm_object_class, NMDeviceHsr); + + _NM_OBJECT_CLASS_INIT_PROPERTY_O_FIELDS_1(nm_object_class, NMDeviceHsrPrivate, port1); + _NM_OBJECT_CLASS_INIT_PROPERTY_O_FIELDS_1(nm_object_class, NMDeviceHsrPrivate, port2); + + /** + * NMDeviceHsr:port1: + * + * The device's port1 device. + * + * Since: 1.46 + **/ + obj_properties[PROP_PORT1] = g_param_spec_object(NM_DEVICE_HSR_PORT1, + "", + "", + NM_TYPE_DEVICE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMDeviceHsr:port2: + * + * The device's port2 device. + * + * Since: 1.46 + **/ + obj_properties[PROP_PORT2] = g_param_spec_object(NM_DEVICE_HSR_PORT2, + "", + "", + NM_TYPE_DEVICE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMDeviceHsr:supervision-address: + * + * The device supervision MAC adddress. + * + * Since: 1.46 + **/ + obj_properties[PROP_SUPERVISION_ADDRESS] = + g_param_spec_string(NM_DEVICE_HSR_SUPERVISION_ADDRESS, + "", + "", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMDeviceHsr:multicast-spec: + * + * The device last byte of the supervision address. + * + * Since: 1.46 + **/ + obj_properties[PROP_MULTICAST_SPEC] = + g_param_spec_uchar(NM_DEVICE_HSR_MULTICAST_SPEC, + "", + "", + 0, + G_MAXUINT8, + 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** + * NMDeviceHsr:prp: + * + * Whether the PRP protocol is used or not. + * + * Since: 1.46 + **/ + obj_properties[PROP_PRP] = g_param_spec_boolean(NM_DEVICE_HSR_PRP, + "", + "", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + _nml_dbus_meta_class_init_with_properties(object_class, &_nml_dbus_meta_iface_nm_device_hsr); +} diff --git a/src/libnm-client-impl/nm-device-ip-tunnel.c b/src/libnm-client-impl/nm-device-ip-tunnel.c index c34ad84b..cba02c75 100644 --- a/src/libnm-client-impl/nm-device-ip-tunnel.c +++ b/src/libnm-client-impl/nm-device-ip-tunnel.c @@ -26,6 +26,7 @@ NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_MODE, PROP_OUTPUT_KEY, PROP_ENCAPSULATION_LIMIT, PROP_FLOW_LABEL, + PROP_FWMARK, PROP_FLAGS, ); typedef struct { @@ -37,6 +38,7 @@ typedef struct { guint32 mode; guint32 flow_label; guint32 flags; + guint32 fwmark; guint8 ttl; guint8 tos; guint8 encapsulation_limit; @@ -237,6 +239,23 @@ nm_device_ip_tunnel_get_flow_label(NMDeviceIPTunnel *device) } /** + * nm_device_ip_tunnel_get_fwmark: + * @device: a #NMDeviceIPTunnel + * + * Returns: the fwmark assigned to tunnel packets. This property applies only + * to VTI tunnels. + * + * Since: 1.46 + **/ +guint32 +nm_device_ip_tunnel_get_fwmark(NMDeviceIPTunnel *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_IP_TUNNEL(device), 0); + + return NM_DEVICE_IP_TUNNEL_GET_PRIVATE(device)->fwmark; +} + +/** * nm_device_ip_tunnel_get_flags: * @device: a #NMDeviceIPTunnel * @@ -334,6 +353,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) case PROP_FLOW_LABEL: g_value_set_uint(value, nm_device_ip_tunnel_get_flow_label(device)); break; + case PROP_FWMARK: + g_value_set_uint(value, nm_device_ip_tunnel_get_fwmark(device)); + break; case PROP_FLAGS: g_value_set_uint(value, nm_device_ip_tunnel_get_flags(device)); break; @@ -357,6 +379,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_iptunnel = NML_DBUS_META_I PROP_FLOW_LABEL, NMDeviceIPTunnel, _priv.flow_label), + NML_DBUS_META_PROPERTY_INIT_U("FwMark", PROP_FWMARK, NMDeviceIPTunnel, _priv.fwmark), NML_DBUS_META_PROPERTY_INIT_S("InputKey", PROP_INPUT_KEY, NMDeviceIPTunnel, @@ -559,6 +582,22 @@ nm_device_ip_tunnel_class_init(NMDeviceIPTunnelClass *klass) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); /** + * NMDeviceIPTunnel:fwmark: + * + * The fwmark value to assign to tunnel packets. This property applies only + * to VTI tunnels. + * + * Since: 1.46 + **/ + obj_properties[PROP_FWMARK] = g_param_spec_uint(NM_DEVICE_IP_TUNNEL_FWMARK, + "", + "", + 0, + G_MAXUINT32, + 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** * NMDeviceIPTunnel:flags: * * Tunnel flags. diff --git a/src/libnm-client-impl/nm-device.c b/src/libnm-client-impl/nm-device.c index e3e6ca6e..2d3be64c 100644 --- a/src/libnm-client-impl/nm-device.c +++ b/src/libnm-client-impl/nm-device.c @@ -313,6 +313,7 @@ coerce_type(NMDeviceType type) case NM_DEVICE_TYPE_WIFI_P2P: case NM_DEVICE_TYPE_VRF: case NM_DEVICE_TYPE_LOOPBACK: + case NM_DEVICE_TYPE_HSR: return type; } return NM_DEVICE_TYPE_UNKNOWN; @@ -1814,6 +1815,8 @@ get_type_name(NMDevice *device) return _("VRF"); case NM_DEVICE_TYPE_LOOPBACK: return _("Loopback"); + case NM_DEVICE_TYPE_HSR: + return _("HSR"); case NM_DEVICE_TYPE_GENERIC: case NM_DEVICE_TYPE_UNUSED1: case NM_DEVICE_TYPE_UNUSED2: diff --git a/src/libnm-client-impl/nm-dhcp4-config.h b/src/libnm-client-impl/nm-dhcp4-config.h index ab400393..b3130f5d 100644 --- a/src/libnm-client-impl/nm-dhcp4-config.h +++ b/src/libnm-client-impl/nm-dhcp4-config.h @@ -6,7 +6,7 @@ #ifndef __NM_DHCP4_CONFIG_H__ #define __NM_DHCP4_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-dhcp6-config.h b/src/libnm-client-impl/nm-dhcp6-config.h index 49334275..e42e9826 100644 --- a/src/libnm-client-impl/nm-dhcp6-config.h +++ b/src/libnm-client-impl/nm-dhcp6-config.h @@ -6,7 +6,7 @@ #ifndef __NM_DHCP6_CONFIG_H__ #define __NM_DHCP6_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-dns-manager.h b/src/libnm-client-impl/nm-dns-manager.h index 20a5286e..cac922ad 100644 --- a/src/libnm-client-impl/nm-dns-manager.h +++ b/src/libnm-client-impl/nm-dns-manager.h @@ -6,7 +6,7 @@ #ifndef __NM_DNS_MANAGER_H__ #define __NM_DNS_MANAGER_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-ip-config.c b/src/libnm-client-impl/nm-ip-config.c index 9aa2e778..c054f2cc 100644 --- a/src/libnm-client-impl/nm-ip-config.c +++ b/src/libnm-client-impl/nm-ip-config.c @@ -190,7 +190,7 @@ next: if (arr && arr->len > 0) nameservers_new = nm_strv_dup((char **) arr->pdata, arr->len, FALSE); else - nameservers_new = g_new0(char *, 1); + nameservers_new = nm_strv_empty_new(); } nm_assert(nameservers_new); } diff --git a/src/libnm-client-impl/nm-ip4-config.h b/src/libnm-client-impl/nm-ip4-config.h index 3c4b128e..bfd21b64 100644 --- a/src/libnm-client-impl/nm-ip4-config.h +++ b/src/libnm-client-impl/nm-ip4-config.h @@ -7,7 +7,7 @@ #ifndef __NM_IP4_CONFIG_H__ #define __NM_IP4_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-ip6-config.h b/src/libnm-client-impl/nm-ip6-config.h index b44cd34b..7682004a 100644 --- a/src/libnm-client-impl/nm-ip6-config.h +++ b/src/libnm-client-impl/nm-ip6-config.h @@ -7,7 +7,7 @@ #ifndef __NM_IP6_CONFIG_H__ #define __NM_IP6_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-libnm-utils.c b/src/libnm-client-impl/nm-libnm-utils.c index 398c6ebc..9ebca216 100644 --- a/src/libnm-client-impl/nm-libnm-utils.c +++ b/src/libnm-client-impl/nm-libnm-utils.c @@ -30,8 +30,12 @@ _nml_dbus_log_level_init(void) const GDebugKey keys[] = { {"trace", _NML_DBUS_LOG_LEVEL_TRACE}, {"debug", _NML_DBUS_LOG_LEVEL_DEBUG}, + {"warn", _NML_DBUS_LOG_LEVEL_WARN}, {"warning", _NML_DBUS_LOG_LEVEL_WARN}, {"error", _NML_DBUS_LOG_LEVEL_ERROR}, + {"WARN", _NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_ASSERT}, + {"WARNING", _NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_ASSERT}, + {"ERROR", _NML_DBUS_LOG_LEVEL_ERROR | NML_DBUS_LOG_ASSERT}, {"stdout", NML_DBUS_LOG_STDOUT}, }; int l; @@ -147,6 +151,12 @@ _nml_dbus_log(NMLDBusLogLevel level, gboolean use_stdout, const char *fmt, ...) gint64 ts; pid_t pid; + nm_assert(NM_IN_SET(level, + NML_DBUS_LOG_LEVEL_TRACE, + NML_DBUS_LOG_LEVEL_DEBUG, + NML_DBUS_LOG_LEVEL_WARN, + NML_DBUS_LOG_LEVEL_ERROR)); + /* we only call _nml_dbus_log() after nml_dbus_log_enabled(), which already does * an atomic access to the variable. Since the value is only initialized once and * never changes, we can just access it without additional locking. */ @@ -167,21 +177,13 @@ _nml_dbus_log(NMLDBusLogLevel level, gboolean use_stdout, const char *fmt, ...) break; case NML_DBUS_LOG_LEVEL_WARN: prefix = "<warn > "; - if (NM_FLAGS_HAS(configured_log_level, _NML_DBUS_LOG_LEVEL_WARN)) { + if (NM_FLAGS_HAS(configured_log_level, NML_DBUS_LOG_ASSERT)) g_warning("libnm-dbus: %s%s", prefix, msg); - return; - } break; case NML_DBUS_LOG_LEVEL_ERROR: prefix = "<error> "; - if (NM_FLAGS_HAS(configured_log_level, _NML_DBUS_LOG_LEVEL_ERROR)) { + if (NM_FLAGS_HAS(configured_log_level, NML_DBUS_LOG_ASSERT)) g_critical("libnm-dbus: %s%s", prefix, msg); - return; - } - if (NM_FLAGS_HAS(configured_log_level, _NML_DBUS_LOG_LEVEL_WARN)) { - g_warning("libnm-dbus: %s%s", prefix, msg); - return; - } break; default: break; @@ -299,7 +301,7 @@ _fixup_string(const char *desc, if (eow) *eow = '\0'; - if (nm_strv_find_first(ignored_words, -1, p) >= 0) + if (nm_strv_contains(ignored_words, -1, p)) goto next; l = strlen(p); @@ -987,10 +989,26 @@ nm_utils_g_param_spec_is_default(const GParamSpec *pspec) * with these functions (it implements additional buffering). By * using nm_utils_print(), the same logging mechanisms can be used. * - * Also, libnm honors LIBNM_CLIENT_DEBUG_FILE environment. If this - * is set to a filename pattern (accepting "%p" for the process ID), - * then the debug log is written to that file instead. With @output_mode - * zero, the same location will be written. Since: 1.44. + * LIBNM_CLIENT_DEBUG is a list of keywords separated by commas. The keyword + * "trace" enables printing messages of the lowest up to the highest severity. + * Likewise, the severities "debug", "warn" ("warning") and "error" are honored + * in similar way. Setting the flags "ERROR" or "WARN" ("WARNING") implies that + * respective levels are enabled, but also are ERROR messages printed with + * g_critical() and WARN messages with g_warning(). Together with G_DEBUG="fatal-warnings" + * or G_DEBUG="fatal-critical" this can be used to abort the program on errors. + * Note that all <error> messages imply an unexpected data on the D-Bus API + * (due to a bug). <warn> also implies unexepected data, but that can happen + * when using different versions of libnm and daemon. For testing, it is + * good to turn these into assertions. + * + * By default, messages are printed to stderr, unless LIBNM_CLIENT_DEBUG + * contains "stdout" flag. Also, libnm honors LIBNM_CLIENT_DEBUG_FILE + * environment. If this is set to a filename pattern (accepting "%%p" for the + * process ID), then the debug log is written to that file instead of + * stderr/stdout. With @output_mode zero, the same location will be written. + * + * LIBNM_CLIENT_DEBUG_FILE is supported since 1.44. "ERROR", "WARN" and "WARNING" + * are supported since 1.46. * * Since: 1.30 */ diff --git a/src/libnm-client-impl/nm-libnm-utils.h b/src/libnm-client-impl/nm-libnm-utils.h index 5b9883ef..d56d0fc1 100644 --- a/src/libnm-client-impl/nm-libnm-utils.h +++ b/src/libnm-client-impl/nm-libnm-utils.h @@ -26,31 +26,35 @@ typedef enum { _NML_DBUS_LOG_LEVEL_INITIALIZED = 0x01, - _NML_DBUS_LOG_LEVEL_TRACE = 0x02, + NML_DBUS_LOG_LEVEL_TRACE = 0x02, - _NML_DBUS_LOG_LEVEL_DEBUG = 0x04, + NML_DBUS_LOG_LEVEL_DEBUG = 0x04, /* the difference between a warning and a critical is that it results in - * g_warning() vs. g_critical() messages. Note that we want to use "warnings" - * for unknown D-Bus API that could just result because we run against a - * newer NetworkManager version (such warnings are more graceful, because - * we want that libnm can be forward compatible against newer servers). - * Critical warnings should be emitted when NetworkManager exposes something - * on D-Bus that breaks the current expectations. Usually NetworkManager - * should not break API, hence such issues are more severe. */ - _NML_DBUS_LOG_LEVEL_WARN = 0x08, - _NML_DBUS_LOG_LEVEL_ERROR = 0x10, + * g_warning() vs. g_critical() messages (with NML_DBUS_LOG_ASSERT). Note + * that we want to use "warnings" for unknown D-Bus API that could just + * result because we run against a newer NetworkManager version (such + * warnings are more graceful, because we want that libnm can be forward + * compatible against newer servers). Critical warnings should be emitted + * when NetworkManager exposes something on D-Bus that breaks the current + * expectations. Usually NetworkManager should not break API, hence such + * issues are more severe. */ + NML_DBUS_LOG_LEVEL_WARN = 0x08, + NML_DBUS_LOG_LEVEL_ERROR = 0x10, /* ANY is only relevant for nml_dbus_log_enabled() to check whether any of the * options is on. */ NML_DBUS_LOG_LEVEL_ANY = _NML_DBUS_LOG_LEVEL_INITIALIZED, - NML_DBUS_LOG_LEVEL_TRACE = _NML_DBUS_LOG_LEVEL_TRACE, - NML_DBUS_LOG_LEVEL_DEBUG = _NML_DBUS_LOG_LEVEL_DEBUG | NML_DBUS_LOG_LEVEL_TRACE, - NML_DBUS_LOG_LEVEL_WARN = _NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_LEVEL_DEBUG, - NML_DBUS_LOG_LEVEL_ERROR = _NML_DBUS_LOG_LEVEL_ERROR | NML_DBUS_LOG_LEVEL_WARN, - NML_DBUS_LOG_STDOUT = 0x20, + + NML_DBUS_LOG_ASSERT = 0x40, + + _NML_DBUS_LOG_LEVEL_ERROR = NML_DBUS_LOG_LEVEL_ERROR, + _NML_DBUS_LOG_LEVEL_WARN = NML_DBUS_LOG_LEVEL_WARN | _NML_DBUS_LOG_LEVEL_ERROR, + _NML_DBUS_LOG_LEVEL_DEBUG = NML_DBUS_LOG_LEVEL_DEBUG | _NML_DBUS_LOG_LEVEL_WARN, + _NML_DBUS_LOG_LEVEL_TRACE = NML_DBUS_LOG_LEVEL_TRACE | _NML_DBUS_LOG_LEVEL_DEBUG, + } NMLDBusLogLevel; #undef _LOGL_TRACE @@ -61,7 +65,6 @@ typedef enum { #define _LOGL_TRACE NML_DBUS_LOG_LEVEL_TRACE #define _LOGL_DEBUG NML_DBUS_LOG_LEVEL_DEBUG -#define _LOGL_INFO NML_DBUS_LOG_LEVEL_INFO #define _LOGL_WARN NML_DBUS_LOG_LEVEL_WARN #define _LOGL_ERR NML_DBUS_LOG_LEVEL_ERR @@ -87,9 +90,14 @@ nml_dbus_log_enabled_full(NMLDBusLogLevel level, gboolean *out_use_stdout) l = _nml_dbus_log_level_init(); nm_assert(l & _NML_DBUS_LOG_LEVEL_INITIALIZED); + NM_SET_OUT(out_use_stdout, NM_FLAGS_HAS(l, NML_DBUS_LOG_STDOUT)); - if (level == NML_DBUS_LOG_LEVEL_ANY) - return l != _NML_DBUS_LOG_LEVEL_INITIALIZED; + + if (level == NML_DBUS_LOG_LEVEL_ANY) { + return NM_FLAGS_ANY(l, + NML_DBUS_LOG_LEVEL_TRACE | NML_DBUS_LOG_LEVEL_DEBUG + | NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_LEVEL_ERROR); + } return !!(((NMLDBusLogLevel) l) & level); } diff --git a/src/libnm-client-impl/nm-object-private.h b/src/libnm-client-impl/nm-object-private.h index 11afc639..34dad188 100644 --- a/src/libnm-client-impl/nm-object-private.h +++ b/src/libnm-client-impl/nm-object-private.h @@ -6,7 +6,7 @@ #ifndef __NM_OBJECT_PRIVATE_H__ #define __NM_OBJECT_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/nm-remote-connection-private.h b/src/libnm-client-impl/nm-remote-connection-private.h index f0869347..a0493bfc 100644 --- a/src/libnm-client-impl/nm-remote-connection-private.h +++ b/src/libnm-client-impl/nm-remote-connection-private.h @@ -6,7 +6,7 @@ #ifndef __NM_REMOTE_CONNECTION_PRIVATE_H__ #define __NM_REMOTE_CONNECTION_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-client-impl/tests/test-gir.py b/src/libnm-client-impl/tests/test-gir.py index 9b42431c..554080fa 100755 --- a/src/libnm-client-impl/tests/test-gir.py +++ b/src/libnm-client-impl/tests/test-gir.py @@ -118,7 +118,7 @@ ver_syms = syms_from_ver(args.ver) exit_code = 0 -for (gir_sym, gir_ver) in gir_syms.items(): +for gir_sym, gir_ver in gir_syms.items(): if gir_sym not in ver_syms: exit_code = 1 print( diff --git a/src/libnm-client-impl/tests/test-libnm.c b/src/libnm-client-impl/tests/test-libnm.c index 456f1855..59774f96 100644 --- a/src/libnm-client-impl/tests/test-libnm.c +++ b/src/libnm-client-impl/tests/test-libnm.c @@ -3188,6 +3188,10 @@ check_dbus_properties: && nm_streq(pspec->name, NM_DEVICE_WIREGUARD_FWMARK)) { g_assert_cmpstr(obj_property_name, ==, "fw-mark"); expected_property_name = NM_DEVICE_WIREGUARD_FWMARK; + } else if (mif == &_nml_dbus_meta_iface_nm_device_iptunnel + && nm_streq(pspec->name, NM_DEVICE_IP_TUNNEL_FWMARK)) { + g_assert_cmpstr(obj_property_name, ==, "fw-mark"); + expected_property_name = NM_DEVICE_IP_TUNNEL_FWMARK; } else if (NM_IN_SET(mif, &_nml_dbus_meta_iface_nm_ip4config, &_nml_dbus_meta_iface_nm_ip6config) diff --git a/src/libnm-client-public/NetworkManager.h b/src/libnm-client-public/NetworkManager.h index 61adee29..646431f6 100644 --- a/src/libnm-client-public/NetworkManager.h +++ b/src/libnm-client-public/NetworkManager.h @@ -39,6 +39,7 @@ #include "nm-setting-generic.h" #include "nm-setting-gsm.h" #include "nm-setting-hostname.h" +#include "nm-setting-hsr.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip4-config.h" #include "nm-setting-ip6-config.h" @@ -111,6 +112,7 @@ #include "nm-device-dummy.h" #include "nm-device-ethernet.h" #include "nm-device-generic.h" +#include "nm-device-hsr.h" #include "nm-device-infiniband.h" #include "nm-device-ip-tunnel.h" #include "nm-device-loopback.h" diff --git a/src/libnm-client-public/meson.build b/src/libnm-client-public/meson.build index bac7e457..dccbb11f 100644 --- a/src/libnm-client-public/meson.build +++ b/src/libnm-client-public/meson.build @@ -18,6 +18,7 @@ libnm_client_headers = files( 'nm-device-dummy.h', 'nm-device-ethernet.h', 'nm-device-generic.h', + 'nm-device-hsr.h', 'nm-device-infiniband.h', 'nm-device-ip-tunnel.h', 'nm-device-loopback.h', diff --git a/src/libnm-client-public/nm-access-point.h b/src/libnm-client-public/nm-access-point.h index 5a78e34f..f2cc1a4c 100644 --- a/src/libnm-client-public/nm-access-point.h +++ b/src/libnm-client-public/nm-access-point.h @@ -35,6 +35,7 @@ G_BEGIN_DECLS #define NM_ACCESS_POINT_MAX_BITRATE "max-bitrate" #define NM_ACCESS_POINT_STRENGTH "strength" #define NM_ACCESS_POINT_LAST_SEEN "last-seen" +#define NM_ACCESS_POINT_BANDWIDTH "bandwidth" /* DEPRECATED */ #define NM_ACCESS_POINT_HW_ADDRESS "hw-address" @@ -59,6 +60,9 @@ guint8 nm_access_point_get_strength(NMAccessPoint *ap); NM_AVAILABLE_IN_1_2 int nm_access_point_get_last_seen(NMAccessPoint *ap); +NM_AVAILABLE_IN_1_46 +guint32 nm_access_point_get_bandwidth(NMAccessPoint *ap); + GPtrArray *nm_access_point_filter_connections(NMAccessPoint *ap, const GPtrArray *connections); gboolean nm_access_point_connection_valid(NMAccessPoint *ap, NMConnection *connection); diff --git a/src/libnm-client-public/nm-autoptr.h b/src/libnm-client-public/nm-autoptr.h index fde6cccf..c38f270c 100644 --- a/src/libnm-client-public/nm-autoptr.h +++ b/src/libnm-client-public/nm-autoptr.h @@ -41,6 +41,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceBt, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceDummy, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceEthernet, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceGeneric, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceHsr, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceIPTunnel, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceInfiniband, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceLoopback, g_object_unref) @@ -80,6 +81,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingEthtool, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingGeneric, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingGsm, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingHostname, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingHsr, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingIP4Config, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingIP6Config, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingIPConfig, g_object_unref) diff --git a/src/libnm-client-public/nm-device-hsr.h b/src/libnm-client-public/nm-device-hsr.h new file mode 100644 index 00000000..102de95c --- /dev/null +++ b/src/libnm-client-public/nm-device-hsr.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Red Hat, Inc. + */ + +#ifndef __NM_DEVICE_HSR_H__ +#define __NM_DEVICE_HSR_H__ + +#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) +#error "Only <NetworkManager.h> can be included directly." +#endif + +#include "nm-device.h" + +G_BEGIN_DECLS + +#define NM_TYPE_DEVICE_HSR (nm_device_hsr_get_type()) +#define NM_DEVICE_HSR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_HSR, NMDeviceHsr)) +#define NM_DEVICE_HSR_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_DEVICE_HSR, NMDeviceHsClass)) +#define NM_IS_DEVICE_HSR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_DEVICE_HSR)) +#define NM_IS_DEVICE_HSR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_DEVICE_HSR)) +#define NM_DEVICE_HSR_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DEVICE_HSR, NMDeviceHsrClass)) + +#define NM_DEVICE_HSR_PORT1 "port1" +#define NM_DEVICE_HSR_PORT2 "port2" +#define NM_DEVICE_HSR_SUPERVISION_ADDRESS "supervision-address" +#define NM_DEVICE_HSR_MULTICAST_SPEC "multicast-spec" +#define NM_DEVICE_HSR_PRP "prp" + +/** + * NMDeviceHsr: + * + * Since: 1.46 + */ +typedef struct _NMDeviceHsr NMDeviceHsr; +typedef struct _NMDeviceHsrClass NMDeviceHsrClass; + +NM_AVAILABLE_IN_1_46 +GType nm_device_hsr_get_type(void); + +NM_AVAILABLE_IN_1_46 +NMDevice *nm_device_hsr_get_port1(NMDeviceHsr *device); +NM_AVAILABLE_IN_1_46 +NMDevice *nm_device_hsr_get_port2(NMDeviceHsr *device); +NM_AVAILABLE_IN_1_46 +const char *nm_device_hsr_get_supervision_address(NMDeviceHsr *device); +NM_AVAILABLE_IN_1_46 +guint8 nm_device_hsr_get_multicast_spec(NMDeviceHsr *device); +NM_AVAILABLE_IN_1_46 +gboolean nm_device_hsr_get_prp(NMDeviceHsr *device); + +G_END_DECLS + +#endif /* __NM_DEVICE_HSR_H__ */ diff --git a/src/libnm-client-public/nm-device-ip-tunnel.h b/src/libnm-client-public/nm-device-ip-tunnel.h index 4b9b9f5b..c3c3d0f5 100644 --- a/src/libnm-client-public/nm-device-ip-tunnel.h +++ b/src/libnm-client-public/nm-device-ip-tunnel.h @@ -37,6 +37,7 @@ G_BEGIN_DECLS #define NM_DEVICE_IP_TUNNEL_OUTPUT_KEY "output-key" #define NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT "encapsulation-limit" #define NM_DEVICE_IP_TUNNEL_FLOW_LABEL "flow-label" +#define NM_DEVICE_IP_TUNNEL_FWMARK "fwmark" #define NM_DEVICE_IP_TUNNEL_FLAGS "flags" /** @@ -72,6 +73,8 @@ NM_AVAILABLE_IN_1_2 guint8 nm_device_ip_tunnel_get_encapsulation_limit(NMDeviceIPTunnel *device); NM_AVAILABLE_IN_1_2 guint nm_device_ip_tunnel_get_flow_label(NMDeviceIPTunnel *device); +NM_AVAILABLE_IN_1_46 +guint32 nm_device_ip_tunnel_get_fwmark(NMDeviceIPTunnel *device); NM_AVAILABLE_IN_1_12 NMIPTunnelFlags nm_device_ip_tunnel_get_flags(NMDeviceIPTunnel *device); diff --git a/src/libnm-client-public/nm-ethtool-utils.h b/src/libnm-client-public/nm-ethtool-utils.h index fa9c3071..75fb63c5 100644 --- a/src/libnm-client-public/nm-ethtool-utils.h +++ b/src/libnm-client-public/nm-ethtool-utils.h @@ -104,6 +104,13 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_PAUSE_RX "pause-rx" #define NM_ETHTOOL_OPTNAME_PAUSE_TX "pause-tx" +#define NM_ETHTOOL_OPTNAME_CHANNELS_RX "channels-rx" +#define NM_ETHTOOL_OPTNAME_CHANNELS_TX "channels-tx" +#define NM_ETHTOOL_OPTNAME_CHANNELS_OTHER "channels-other" +#define NM_ETHTOOL_OPTNAME_CHANNELS_COMBINED "channels-combined" + +#define NM_ETHTOOL_OPTNAME_EEE_ENABLED "eee-enabled" + /*****************************************************************************/ G_END_DECLS diff --git a/src/libnm-core-aux-extern/nm-dispatcher-api.h b/src/libnm-core-aux-extern/nm-dispatcher-api.h index 56da5fba..7cb370a9 100644 --- a/src/libnm-core-aux-extern/nm-dispatcher-api.h +++ b/src/libnm-core-aux-extern/nm-dispatcher-api.h @@ -34,6 +34,7 @@ #define NMD_ACTION_DHCP6_CHANGE "dhcp6-change" #define NMD_ACTION_CONNECTIVITY_CHANGE "connectivity-change" #define NMD_ACTION_REAPPLY "reapply" +#define NMD_ACTION_DNS_CHANGE "dns-change" typedef enum { DISPATCH_RESULT_UNKNOWN = 0, diff --git a/src/libnm-core-aux-intern/nm-auth-subject.c b/src/libnm-core-aux-intern/nm-auth-subject.c index db499b88..c381bdba 100644 --- a/src/libnm-core-aux-intern/nm-auth-subject.c +++ b/src/libnm-core-aux-intern/nm-auth-subject.c @@ -351,6 +351,8 @@ constructed(GObject *object) NMAuthSubject *self = NM_AUTH_SUBJECT(object); NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE(self); + G_OBJECT_CLASS(nm_auth_subject_parent_class)->constructed(object); + /* validate that the created instance. */ switch (priv->subject_type) { @@ -361,9 +363,9 @@ constructed(GObject *object) case NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS: /* Ensure pid and uid to be representable as int32. * DBUS treats them as uint32, polkit library as int. */ - if (priv->unix_process.pid > MIN(G_MAXINT, G_MAXINT32)) + if (priv->unix_process.pid > NM_MIN(G_MAXINT, G_MAXINT32)) break; - if (priv->unix_process.uid > MIN(G_MAXINT, G_MAXINT32)) { + if (priv->unix_process.uid > NM_MIN(G_MAXINT, G_MAXINT32)) { /* for uid==-1, libpolkit-gobject-1 detects the user based on the process id. * Don't bother and require the user id as parameter. */ break; diff --git a/src/libnm-core-aux-intern/nm-common-macros.h b/src/libnm-core-aux-intern/nm-common-macros.h index c452b7d3..3e6eabae 100644 --- a/src/libnm-core-aux-intern/nm-common-macros.h +++ b/src/libnm-core-aux-intern/nm-common-macros.h @@ -34,19 +34,28 @@ "org.freedesktop.NetworkManager.enable-disable-connectivity-check" #define NM_AUTH_PERMISSION_WIFI_SCAN "org.freedesktop.NetworkManager.wifi.scan" -#define NM_CLONED_MAC_PRESERVE "preserve" -#define NM_CLONED_MAC_PERMANENT "permanent" -#define NM_CLONED_MAC_RANDOM "random" -#define NM_CLONED_MAC_STABLE "stable" +#define NM_CLONED_MAC_PRESERVE "preserve" +#define NM_CLONED_MAC_PERMANENT "permanent" +#define NM_CLONED_MAC_RANDOM "random" +#define NM_CLONED_MAC_STABLE "stable" +#define NM_CLONED_MAC_STABLE_SSID "stable-ssid" static inline gboolean -NM_CLONED_MAC_IS_SPECIAL(const char *str) +NM_CLONED_MAC_IS_SPECIAL(const char *str, gboolean is_wifi) { - return NM_IN_STRSET(str, - NM_CLONED_MAC_PRESERVE, - NM_CLONED_MAC_PERMANENT, - NM_CLONED_MAC_RANDOM, - NM_CLONED_MAC_STABLE); + if (NM_IN_STRSET(str, + NM_CLONED_MAC_PRESERVE, + NM_CLONED_MAC_PERMANENT, + NM_CLONED_MAC_RANDOM, + NM_CLONED_MAC_STABLE)) + return TRUE; + + if (is_wifi) { + if (NM_IN_STRSET(str, NM_CLONED_MAC_STABLE_SSID)) + return TRUE; + } + + return FALSE; } #define NM_IAID_MAC "mac" diff --git a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in index 4e17a45b..e008b135 100644 --- a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in +++ b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in @@ -779,6 +779,10 @@ dbus-type="i" gprop-type="NMSettingConnectionAutoconnectSlaves" /> + <property name="controller" + dbus-type="s" + gprop-type="gchararray" + /> <property name="dns-over-tls" dbus-type="i" gprop-type="gint" @@ -804,6 +808,7 @@ gprop-type="gint" /> <property name="master" + is-deprecated="1" dbus-type="s" gprop-type="gchararray" /> @@ -831,6 +836,10 @@ dbus-type="as" gprop-type="GStrv" /> + <property name="port-type" + dbus-type="s" + gprop-type="gchararray" + /> <property name="read-only" is-deprecated="1" dbus-type="b" @@ -841,6 +850,7 @@ gprop-type="GStrv" /> <property name="slave-type" + is-deprecated="1" dbus-type="s" gprop-type="gchararray" /> @@ -1276,6 +1286,10 @@ dbus-type="b" is-setting-option="1" /> + <property name="eee-enabled" + dbus-type="b" + is-setting-option="1" + /> <property name="ring-rx" dbus-type="u" is-setting-option="1" @@ -1292,6 +1306,22 @@ dbus-type="u" is-setting-option="1" /> + <property name="channels-rx" + dbus-type="u" + is-setting-option="1" + /> + <property name="channels-tx" + dbus-type="u" + is-setting-option="1" + /> + <property name="channels-other" + dbus-type="u" + is-setting-option="1" + /> + <property name="channels-combined" + dbus-type="u" + is-setting-option="1" + /> </setting> <setting name="generic" gtype="NMSettingGeneric" @@ -1398,6 +1428,26 @@ gprop-type="gint" /> </setting> + <setting name="hsr" + gtype="NMSettingHsr" + > + <property name="multicast-spec" + dbus-type="u" + gprop-type="guint" + /> + <property name="port1" + dbus-type="s" + gprop-type="gchararray" + /> + <property name="port2" + dbus-type="s" + gprop-type="gchararray" + /> + <property name="prp" + dbus-type="b" + gprop-type="gboolean" + /> + </setting> <setting name="infiniband" gtype="NMSettingInfiniband" > diff --git a/src/libnm-core-impl/meson.build b/src/libnm-core-impl/meson.build index 635b417b..e1f11f32 100644 --- a/src/libnm-core-impl/meson.build +++ b/src/libnm-core-impl/meson.build @@ -19,6 +19,7 @@ libnm_core_settings_sources = files( 'nm-setting-generic.c', 'nm-setting-gsm.c', 'nm-setting-hostname.c', + 'nm-setting-hsr.c', 'nm-setting-infiniband.c', 'nm-setting-ip-config.c', 'nm-setting-ip-tunnel.c', @@ -67,7 +68,6 @@ libnm_core_impl_sources = files( 'nm-keyfile-utils.c', 'nm-keyfile.c', 'nm-meta-setting-base-impl.c', - 'nm-property-compare.c', 'nm-setting.c', 'nm-simple-connection.c', 'nm-team-utils.c', diff --git a/src/libnm-core-impl/nm-connection-private.h b/src/libnm-core-impl/nm-connection-private.h index 08abb9a4..3b2c36fd 100644 --- a/src/libnm-core-impl/nm-connection-private.h +++ b/src/libnm-core-impl/nm-connection-private.h @@ -6,7 +6,7 @@ #ifndef __NM_CONNECTION_PRIVATE_H__ #define __NM_CONNECTION_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c index 6ffc750a..a23dc113 100644 --- a/src/libnm-core-impl/nm-connection.c +++ b/src/libnm-core-impl/nm-connection.c @@ -908,7 +908,7 @@ _nm_setting_connection_verify_secondaries(GArray *secondaries, GError **error) * Now, when we find any invalid/non-normalized values, we reject/normalize * them. We also filter out duplicates. */ - strv = nm_strvarray_get_strv_non_empty(secondaries, NULL); + strv = nm_strvarray_get_strv_notempty(secondaries, NULL); for (i = 0; i < len; i++) { const char *uuid = strv[i]; @@ -977,7 +977,7 @@ _normalize_connection_secondaries(NMConnection *self) if (_nm_setting_connection_verify_secondaries(secondaries, NULL)) return FALSE; - strv = nm_strvarray_get_strv_non_empty_dup(secondaries, NULL); + strv = nm_strvarray_get_strv_notempty_dup(secondaries, NULL); for (i = 0, j = 0; strv[i]; i++) { gs_free char *s = g_steal_pointer(&strv[i]); char uuid_normalized[37]; @@ -986,7 +986,7 @@ _normalize_connection_secondaries(NMConnection *self) if (!nm_uuid_is_valid_nm(s, &uuid_is_normalized, uuid_normalized)) continue; - if (nm_strv_find_first(strv, j, uuid_is_normalized ? uuid_normalized : s) >= 0) + if (nm_strv_contains(strv, j, uuid_is_normalized ? uuid_normalized : s)) continue; strv[j++] = uuid_is_normalized ? g_strdup(uuid_normalized) : g_steal_pointer(&s); @@ -1096,7 +1096,7 @@ _normalize_connection_slave_type(NMConnection *self) if (!nm_setting_connection_get_master(s_con)) return FALSE; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type) { if (_nm_setting_slave_type_is_valid(slave_type, &port_type) && port_type) { NMSetting *s_port; @@ -1112,7 +1112,7 @@ _normalize_connection_slave_type(NMConnection *self) } } else { if ((slave_type = _nm_connection_detect_slave_type(self, NULL))) { - g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_PORT_TYPE, slave_type, NULL); return TRUE; } } @@ -1172,7 +1172,7 @@ _supports_addr_family(NMConnection *self, int family) if (strcmp(connection_type, NM_SETTING_6LOWPAN_SETTING_NAME) == 0) return family == AF_INET6 || family == AF_UNSPEC; if ((s_con = nm_connection_get_setting_connection(self)) - && (nm_streq0(nm_setting_connection_get_slave_type(s_con), NM_SETTING_VRF_SETTING_NAME))) + && (nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_VRF_SETTING_NAME))) return TRUE; return !nm_setting_connection_get_master(nm_connection_get_setting_connection(self)); @@ -1430,52 +1430,42 @@ again: } static gboolean -_normalize_wireless_mac_address_randomization(NMConnection *self) +_normalize_wireless_mac_address_randomization(NMSettingWireless *s_wifi) { - NMSettingWireless *s_wifi = nm_connection_get_setting_wireless(self); + const char *desired_cloned_mac_address; const char *cloned_mac_address; + NMSettingMacRandomization desired_mac_address_randomization; NMSettingMacRandomization mac_address_randomization; + gboolean changed = FALSE; - if (!s_wifi) - return FALSE; + _nm_setting_wireless_normalize_mac_address_randomization(s_wifi, + &desired_cloned_mac_address, + &desired_mac_address_randomization); mac_address_randomization = nm_setting_wireless_get_mac_address_randomization(s_wifi); - if (!NM_IN_SET(mac_address_randomization, - NM_SETTING_MAC_RANDOMIZATION_DEFAULT, - NM_SETTING_MAC_RANDOMIZATION_NEVER, - NM_SETTING_MAC_RANDOMIZATION_ALWAYS)) - return FALSE; + cloned_mac_address = nm_setting_wireless_get_cloned_mac_address(s_wifi); - cloned_mac_address = nm_setting_wireless_get_cloned_mac_address(s_wifi); - if (cloned_mac_address) { - if (nm_streq(cloned_mac_address, "random")) { - if (mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS) - return FALSE; - mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_ALWAYS; - } else if (nm_streq(cloned_mac_address, "permanent")) { - if (mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_NEVER) - return FALSE; - mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_NEVER; - } else { - if (mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_DEFAULT) - return FALSE; - mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_DEFAULT; - } + /* Note that "mac_address_randomization" is possibly the string owned by + * "s_wifi". We must be careful that modifying "s_wifi" might invalidate + * the string. */ + + if (!nm_streq0(cloned_mac_address, desired_cloned_mac_address)) { g_object_set(s_wifi, - NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, - mac_address_randomization, + NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, + desired_cloned_mac_address, NULL); - return TRUE; + changed = TRUE; } - if (mac_address_randomization != NM_SETTING_MAC_RANDOMIZATION_DEFAULT) { + + if (mac_address_randomization != desired_mac_address_randomization) { g_object_set(s_wifi, - NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, - mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS ? "random" - : "permanent", + NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, + (guint) desired_mac_address_randomization, NULL); - return TRUE; + changed = TRUE; } - return FALSE; + + return changed; } static gboolean @@ -1497,6 +1487,9 @@ _normalize_wireless(NMConnection *self) changed = TRUE; } + if (_normalize_wireless_mac_address_randomization(s_wifi)) + changed = TRUE; + return changed; } @@ -1775,7 +1768,7 @@ _normalize_invalid_slave_port_settings(NMConnection *self) const char *slave_type; gboolean changed = FALSE; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (!nm_streq0(slave_type, NM_SETTING_BRIDGE_SETTING_NAME) && _nm_connection_remove_setting(self, NM_TYPE_SETTING_BRIDGE_PORT)) @@ -2043,7 +2036,6 @@ _connection_normalize(NMConnection *connection, was_modified |= _normalize_infiniband(connection); was_modified |= _normalize_bond_mode(connection); was_modified |= _normalize_bond_options(connection); - was_modified |= _normalize_wireless_mac_address_randomization(connection); was_modified |= _normalize_wireless(connection); was_modified |= _normalize_macsec(connection); was_modified |= _normalize_team_config(connection); @@ -3182,6 +3174,7 @@ nm_connection_is_virtual(NMConnection *connection) NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_DUMMY_SETTING_NAME, + NM_SETTING_HSR_SETTING_NAME, NM_SETTING_IP_TUNNEL_SETTING_NAME, NM_SETTING_MACSEC_SETTING_NAME, NM_SETTING_MACVLAN_SETTING_NAME, diff --git a/src/libnm-core-impl/nm-keyfile.c b/src/libnm-core-impl/nm-keyfile.c index 82581d9f..078ea5d7 100644 --- a/src/libnm-core-impl/nm-keyfile.c +++ b/src/libnm-core-impl/nm-keyfile.c @@ -1219,9 +1219,14 @@ mac_address_parser(KeyfileReaderInfo *info, tmp_string = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); - if (cloned_mac_addr && NM_CLONED_MAC_IS_SPECIAL(tmp_string)) { - mac_str = tmp_string; - goto out; + if (cloned_mac_addr) { + gboolean is_wifi; + + is_wifi = NM_IS_SETTING_WIRELESS(setting); + if (NM_CLONED_MAC_IS_SPECIAL(tmp_string, is_wifi)) { + mac_str = tmp_string; + goto out; + } } if (tmp_string && nm_utils_hwaddr_aton(tmp_string, addr_bin, addr_len)) diff --git a/src/libnm-core-impl/nm-meta-setting-base-impl.c b/src/libnm-core-impl/nm-meta-setting-base-impl.c index b531ae85..34a7d22e 100644 --- a/src/libnm-core-impl/nm-meta-setting-base-impl.c +++ b/src/libnm-core-impl/nm-meta-setting-base-impl.c @@ -29,6 +29,7 @@ #include "nm-setting-generic.h" #include "nm-setting-gsm.h" #include "nm-setting-hostname.h" +#include "nm-setting-hsr.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip-config.h" #include "nm-setting-ip-tunnel.h" @@ -335,6 +336,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { .setting_name = NM_SETTING_HOSTNAME_SETTING_NAME, .get_setting_gtype = nm_setting_hostname_get_type, }, + [NM_META_SETTING_TYPE_HSR] = + { + .meta_type = NM_META_SETTING_TYPE_HSR, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_HSR_SETTING_NAME, + .get_setting_gtype = nm_setting_hsr_get_type, + }, [NM_META_SETTING_TYPE_INFINIBAND] = { .meta_type = NM_META_SETTING_TYPE_INFINIBAND, @@ -632,6 +640,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = { NM_META_SETTING_TYPE_DUMMY, NM_META_SETTING_TYPE_GENERIC, NM_META_SETTING_TYPE_GSM, + NM_META_SETTING_TYPE_HSR, NM_META_SETTING_TYPE_INFINIBAND, NM_META_SETTING_TYPE_IP_TUNNEL, NM_META_SETTING_TYPE_LOOPBACK, diff --git a/src/libnm-core-impl/nm-property-compare.c b/src/libnm-core-impl/nm-property-compare.c deleted file mode 100644 index 6273e90b..00000000 --- a/src/libnm-core-impl/nm-property-compare.c +++ /dev/null @@ -1,136 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2007 - 2014 Red Hat, Inc. - * Copyright (C) 2007 - 2008 Novell, Inc. - */ - -#include "libnm-core-impl/nm-default-libnm-core.h" - -#include "nm-property-compare.h" - -#include <netinet/in.h> - -static int -_nm_property_compare_collection(GVariant *value1, GVariant *value2) -{ - GVariant *child1, *child2; - int i, len1, len2; - int ret; - - len1 = g_variant_n_children(value1); - len2 = g_variant_n_children(value2); - - if (len1 != len2) - return len1 < len2 ? -1 : len1 > len2; - - for (i = 0; i < len1; i++) { - child1 = g_variant_get_child_value(value1, i); - child2 = g_variant_get_child_value(value2, i); - - ret = nm_property_compare(child1, child2); - g_variant_unref(child1); - g_variant_unref(child2); - - if (ret) - return ret; - } - - return 0; -} - -static int -_nm_property_compare_vardict(GVariant *value1, GVariant *value2) -{ - GVariantIter iter; - int len1, len2; - const char *key; - GVariant *val1, *val2; - - len1 = g_variant_n_children(value1); - len2 = g_variant_n_children(value2); - - if (len1 != len2) - return len1 < len2 ? -1 : 1; - - g_variant_iter_init(&iter, value1); - while (g_variant_iter_next(&iter, "{&sv}", &key, &val1)) { - if (!g_variant_lookup(value2, key, "v", &val2)) { - g_variant_unref(val1); - return -1; - } - if (!g_variant_equal(val1, val2)) { - g_variant_unref(val1); - g_variant_unref(val2); - return -1; - } - g_variant_unref(val1); - g_variant_unref(val2); - } - - return 0; -} - -static int -_nm_property_compare_strdict(GVariant *value1, GVariant *value2) -{ - GVariantIter iter; - int len1, len2; - const char *key, *val1, *val2; - int ret; - - len1 = g_variant_n_children(value1); - len2 = g_variant_n_children(value2); - - if (len1 != len2) - return len1 < len2 ? -1 : len1 > len2; - - g_variant_iter_init(&iter, value1); - while (g_variant_iter_next(&iter, "{&s&s}", &key, &val1)) { - if (!g_variant_lookup(value2, key, "&s", &val2)) - return -1; - - ret = strcmp(val1, val2); - if (ret) - return ret; - } - - return 0; -} - -int -nm_property_compare(GVariant *value1, GVariant *value2) -{ - const GVariantType *type1; - const GVariantType *type2; - int ret; - - if (value1 == value2) - return 0; - if (!value1) - return 1; - if (!value2) - return -1; - - type1 = g_variant_get_type(value1); - type2 = g_variant_get_type(value2); - - if (!g_variant_type_equal(type1, type2)) - return type1 < type2 ? -1 : type1 > type2; - - if (g_variant_type_is_basic(type1)) - ret = g_variant_compare(value1, value2); - else if (g_variant_is_of_type(value1, G_VARIANT_TYPE("a{ss}"))) - ret = _nm_property_compare_strdict(value1, value2); - else if (g_variant_is_of_type(value1, G_VARIANT_TYPE("a{sv}"))) - ret = _nm_property_compare_vardict(value1, value2); - else if (g_variant_type_is_array(type1)) - ret = _nm_property_compare_collection(value1, value2); - else if (g_variant_type_is_tuple(type1)) - ret = _nm_property_compare_collection(value1, value2); - else { - g_warning("Don't know how to compare variant type '%s'", (const char *) type1); - ret = value1 == value2; - } - - return ret; -} diff --git a/src/libnm-core-impl/nm-property-compare.h b/src/libnm-core-impl/nm-property-compare.h deleted file mode 100644 index 2400bc42..00000000 --- a/src/libnm-core-impl/nm-property-compare.h +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2007 - 2014 Red Hat, Inc. - * Copyright (C) 2007 - 2008 Novell, Inc. - */ - -#ifndef __NM_PROPERTY_COMPARE_H__ -#define __NM_PROPERTY_COMPARE_H__ - -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) -#error Cannot use this header. -#endif - -int nm_property_compare(GVariant *value1, GVariant *value2); - -#endif /* __NM_PROPERTY_COMPARE_H__ */ diff --git a/src/libnm-core-impl/nm-setting-6lowpan.c b/src/libnm-core-impl/nm-setting-6lowpan.c index e0b5d650..7066c3e6 100644 --- a/src/libnm-core-impl/nm-setting-6lowpan.c +++ b/src/libnm-core-impl/nm-setting-6lowpan.c @@ -33,7 +33,8 @@ typedef struct { * Since: 1.14 */ struct _NMSetting6Lowpan { - NMSetting parent; + NMSetting parent; + NMSetting6LowpanPrivate _priv; }; struct _NMSetting6LowpanClass { @@ -43,7 +44,7 @@ struct _NMSetting6LowpanClass { G_DEFINE_TYPE(NMSetting6Lowpan, nm_setting_6lowpan, NM_TYPE_SETTING) #define NM_SETTING_6LOWPAN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_6LOWPAN, NMSetting6LowpanPrivate)) + _NM_GET_PRIVATE(o, NMSetting6Lowpan, NM_IS_SETTING_6LOWPAN, NMSetting) /*****************************************************************************/ @@ -92,7 +93,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) if (s_con) { const char *master = NULL, *slave_type = NULL; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (!g_strcmp0(slave_type, NM_SETTING_6LOWPAN_SETTING_NAME)) master = nm_setting_connection_get_master(s_con); @@ -102,7 +103,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) NM_CONNECTION_ERROR_INVALID_PROPERTY, _("'%s' value doesn't match '%s=%s'"), priv->parent, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, master); g_prefix_error(error, "%s.%s: ", @@ -156,8 +157,6 @@ nm_setting_6lowpan_class_init(NMSetting6LowpanClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSetting6LowpanPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -177,7 +176,8 @@ nm_setting_6lowpan_class_init(NMSetting6LowpanClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSetting6LowpanPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); @@ -185,5 +185,5 @@ nm_setting_6lowpan_class_init(NMSetting6LowpanClass *klass) NM_META_SETTING_TYPE_6LOWPAN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSetting6Lowpan, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-8021x.c b/src/libnm-core-impl/nm-setting-8021x.c index 626673e8..945fd6d3 100644 --- a/src/libnm-core-impl/nm-setting-8021x.c +++ b/src/libnm-core-impl/nm-setting-8021x.c @@ -189,20 +189,18 @@ typedef struct { * IEEE 802.1x Authentication Settings */ struct _NMSetting8021x { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSetting8021xPrivate _priv; }; struct _NMSetting8021xClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING) #define NM_SETTING_802_1X_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_802_1X, NMSetting8021xPrivate)) + _NM_GET_PRIVATE(o, NMSetting8021x, NM_IS_SETTING_802_1X, NMSetting) /*****************************************************************************/ @@ -3199,9 +3197,7 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); NMSettingClass *setting_class = NM_SETTING_CLASS(klass); - GArray *properties_override = _nm_sett_info_property_override_create_array(); - - g_type_class_add_private(klass, sizeof(NMSetting8021xPrivate)); + GArray *properties_override = _nm_sett_info_property_override_create_array_sized(55); object_class->get_property = get_property; object_class->set_property = set_property; @@ -3227,11 +3223,11 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) * example: IEEE_8021X_EAP_METHODS=PEAP * ---end--- */ - obj_properties[PROP_EAP] = g_param_spec_boxed(NM_SETTING_802_1X_EAP, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_802_1X_EAP, + PROP_EAP, + NM_SETTING_PARAM_NONE); /** * NMSetting8021x:identity: @@ -3252,7 +3248,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_IDENTITY, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - identity); + identity, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:anonymous-identity: @@ -3273,7 +3270,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_ANONYMOUS_IDENTITY, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - anonymous_identity); + anonymous_identity, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:pac-file: @@ -3293,7 +3291,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PAC_FILE, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - pac_file); + pac_file, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:ca-cert: @@ -3346,7 +3345,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_CA_CERT_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - ca_cert_password); + ca_cert_password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:ca-cert-password-flags: @@ -3384,7 +3384,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_CA_PATH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - ca_path); + ca_path, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:subject-match: @@ -3410,7 +3411,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, subject_match, - .is_deprecated = TRUE, ); + .is_deprecated = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:altsubject-matches: @@ -3426,12 +3428,11 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) * example: IEEE_8021X_ALTSUBJECT_MATCHES="s1.domain.cc" * ---end--- */ - obj_properties[PROP_ALTSUBJECT_MATCHES] = - g_param_spec_boxed(NM_SETTING_802_1X_ALTSUBJECT_MATCHES, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_802_1X_ALTSUBJECT_MATCHES, + PROP_ALTSUBJECT_MATCHES, + NM_SETTING_PARAM_NONE); /** * NMSetting8021x:domain-suffix-match: @@ -3458,7 +3459,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_DOMAIN_SUFFIX_MATCH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - domain_suffix_match); + domain_suffix_match, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:domain-match: @@ -3484,7 +3486,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_DOMAIN_MATCH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - domain_match); + domain_match, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:client-cert: @@ -3532,7 +3535,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_CLIENT_CERT_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - client_cert_password); + client_cert_password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:client-cert-password-flags: @@ -3571,7 +3575,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE1_PEAPVER, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase1_peapver); + phase1_peapver, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase1-peaplabel: @@ -3595,7 +3600,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE1_PEAPLABEL, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase1_peaplabel); + phase1_peaplabel, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase1-fast-provisioning: @@ -3621,7 +3627,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE1_FAST_PROVISIONING, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase1_fast_provisioning); + phase1_fast_provisioning, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase1-auth-flags: @@ -3685,7 +3692,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_AUTH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase2_auth); + phase2_auth, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-autheap: @@ -3712,7 +3720,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_AUTHEAP, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase2_autheap); + phase2_autheap, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-ca-cert: @@ -3759,7 +3768,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_CA_CERT_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - phase2_ca_cert_password); + phase2_ca_cert_password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-ca-cert-password-flags: @@ -3797,7 +3807,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_CA_PATH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase2_ca_path); + phase2_ca_path, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-subject-match: @@ -3824,7 +3835,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, phase2_subject_match, - .is_deprecated = TRUE, ); + .is_deprecated = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-altsubject-matches: @@ -3839,12 +3851,11 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) * variable: IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES(+) * ---end--- */ - obj_properties[PROP_PHASE2_ALTSUBJECT_MATCHES] = - g_param_spec_boxed(NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, + PROP_PHASE2_ALTSUBJECT_MATCHES, + NM_SETTING_PARAM_NONE); /** * NMSetting8021x:phase2-domain-suffix-match: @@ -3872,7 +3883,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_DOMAIN_SUFFIX_MATCH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase2_domain_suffix_match); + phase2_domain_suffix_match, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-domain-match: @@ -3899,7 +3911,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_DOMAIN_MATCH, NM_SETTING_PARAM_NONE, NMSetting8021xPrivate, - phase2_domain_match); + phase2_domain_match, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-client-cert: @@ -3950,7 +3963,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_CLIENT_CERT_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - phase2_client_cert_password); + phase2_client_cert_password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-client-cert-password-flags: @@ -3987,7 +4001,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - password); + password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:password-flags: @@ -4119,7 +4134,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PRIVATE_KEY_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - private_key_password); + private_key_password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:private-key-password-flags: @@ -4205,7 +4221,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PHASE2_PRIVATE_KEY_PASSWORD, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - phase2_private_key_password); + phase2_private_key_password, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:phase2-private-key-password-flags: @@ -4245,7 +4262,8 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) PROP_PIN, NM_SETTING_PARAM_SECRET, NMSetting8021xPrivate, - pin); + pin, + .direct_string_allow_empty = TRUE); /** * NMSetting8021x:pin-flags: @@ -4352,5 +4370,5 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) NM_META_SETTING_TYPE_802_1X, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSetting8021x, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-adsl.c b/src/libnm-core-impl/nm-setting-adsl.c index ca291389..f9aacb83 100644 --- a/src/libnm-core-impl/nm-setting-adsl.c +++ b/src/libnm-core-impl/nm-setting-adsl.c @@ -46,20 +46,18 @@ typedef struct { * ADSL Settings */ struct _NMSettingAdsl { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingAdslPrivate _priv; }; struct _NMSettingAdslClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingAdsl, nm_setting_adsl, NM_TYPE_SETTING) #define NM_SETTING_ADSL_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_ADSL, NMSettingAdslPrivate)) + _NM_GET_PRIVATE(o, NMSettingAdsl, NM_IS_SETTING_ADSL, NMSetting) /*****************************************************************************/ @@ -267,8 +265,6 @@ nm_setting_adsl_class_init(NMSettingAdslClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingAdslPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -287,7 +283,8 @@ nm_setting_adsl_class_init(NMSettingAdslClass *klass) PROP_USERNAME, NM_SETTING_PARAM_NONE, NMSettingAdslPrivate, - username); + username, + .direct_string_allow_empty = TRUE); /** * NMSettingAdsl:password: @@ -300,7 +297,8 @@ nm_setting_adsl_class_init(NMSettingAdslClass *klass) PROP_PASSWORD, NM_SETTING_PARAM_SECRET, NMSettingAdslPrivate, - password); + password, + .direct_string_allow_empty = TRUE); /** * NMSettingAdsl:password-flags: @@ -326,7 +324,8 @@ nm_setting_adsl_class_init(NMSettingAdslClass *klass) NM_SETTING_PARAM_NONE, NMSettingAdslPrivate, protocol, - .direct_set_string_ascii_strdown = TRUE); + .direct_set_string_ascii_strdown = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingAdsl:encapsulation: @@ -340,7 +339,8 @@ nm_setting_adsl_class_init(NMSettingAdslClass *klass) NM_SETTING_PARAM_NONE, NMSettingAdslPrivate, encapsulation, - .direct_set_string_ascii_strdown = TRUE); + .direct_set_string_ascii_strdown = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingAdsl:vpi: @@ -380,5 +380,5 @@ nm_setting_adsl_class_init(NMSettingAdslClass *klass) NM_META_SETTING_TYPE_ADSL, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingAdsl, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-bluetooth.c b/src/libnm-core-impl/nm-setting-bluetooth.c index f657ff13..3c2605a1 100644 --- a/src/libnm-core-impl/nm-setting-bluetooth.c +++ b/src/libnm-core-impl/nm-setting-bluetooth.c @@ -42,20 +42,18 @@ typedef struct { * Bluetooth Settings */ struct _NMSettingBluetooth { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingBluetoothPrivate _priv; }; struct _NMSettingBluetoothClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingBluetooth, nm_setting_bluetooth, NM_TYPE_SETTING) #define NM_SETTING_BLUETOOTH_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothPrivate)) + _NM_GET_PRIVATE(o, NMSettingBluetooth, NM_IS_SETTING_BLUETOOTH, NMSetting) /*****************************************************************************/ @@ -254,8 +252,6 @@ nm_setting_bluetooth_class_init(NMSettingBluetoothClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingBluetoothPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -287,7 +283,8 @@ nm_setting_bluetooth_class_init(NMSettingBluetoothClass *klass) PROP_TYPE, NM_SETTING_PARAM_INFERRABLE, NMSettingBluetoothPrivate, - type); + type, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); @@ -295,5 +292,5 @@ nm_setting_bluetooth_class_init(NMSettingBluetoothClass *klass) NM_META_SETTING_TYPE_BLUETOOTH, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingBluetooth, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-bond-port.c b/src/libnm-core-impl/nm-setting-bond-port.c index e8917902..342d6dd0 100644 --- a/src/libnm-core-impl/nm-setting-bond-port.c +++ b/src/libnm-core-impl/nm-setting-bond-port.c @@ -101,7 +101,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type && !nm_streq(slave_type, NM_SETTING_BOND_SETTING_NAME)) { g_set_error(error, NM_CONNECTION_ERROR, @@ -114,7 +114,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } diff --git a/src/libnm-core-impl/nm-setting-bond.c b/src/libnm-core-impl/nm-setting-bond.c index 81c67d51..60ae0294 100644 --- a/src/libnm-core-impl/nm-setting-bond.c +++ b/src/libnm-core-impl/nm-setting-bond.c @@ -44,20 +44,18 @@ typedef struct { * Bonding Settings */ struct _NMSettingBond { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingBondPrivate _priv; }; struct _NMSettingBondClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingBond, nm_setting_bond, NM_TYPE_SETTING) #define NM_SETTING_BOND_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_BOND, NMSettingBondPrivate)) + _NM_GET_PRIVATE(o, NMSettingBond, NM_IS_SETTING_BOND, NMSetting) /*****************************************************************************/ @@ -1322,8 +1320,6 @@ nm_setting_bond_class_init(NMSettingBondClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingBondPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -1380,5 +1376,5 @@ nm_setting_bond_class_init(NMSettingBondClass *klass) NM_META_SETTING_TYPE_BOND, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingBond, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-bridge-port.c b/src/libnm-core-impl/nm-setting-bridge-port.c index b94a348e..dcb17896 100644 --- a/src/libnm-core-impl/nm-setting-bridge-port.c +++ b/src/libnm-core-impl/nm-setting-bridge-port.c @@ -45,20 +45,18 @@ typedef struct { * Bridge Port Settings */ struct _NMSettingBridgePort { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingBridgePortPrivate _priv; }; struct _NMSettingBridgePortClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingBridgePort, nm_setting_bridge_port, NM_TYPE_SETTING) #define NM_SETTING_BRIDGE_PORT_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortPrivate)) + _NM_GET_PRIVATE(o, NMSettingBridgePort, NM_IS_SETTING_BRIDGE_PORT, NMSetting) /*****************************************************************************/ @@ -330,7 +328,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type && strcmp(slave_type, NM_SETTING_BRIDGE_SETTING_NAME)) { g_set_error(error, NM_CONNECTION_ERROR, @@ -343,7 +341,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } @@ -455,8 +453,6 @@ nm_setting_bridge_port_class_init(NMSettingBridgePortClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingBridgePortPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -579,5 +575,5 @@ nm_setting_bridge_port_class_init(NMSettingBridgePortClass *klass) NM_META_SETTING_TYPE_BRIDGE_PORT, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingBridgePort, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-bridge.c b/src/libnm-core-impl/nm-setting-bridge.c index c1a2621d..7e9a0964 100644 --- a/src/libnm-core-impl/nm-setting-bridge.c +++ b/src/libnm-core-impl/nm-setting-bridge.c @@ -1416,7 +1416,7 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); NMSettingClass *setting_class = NM_SETTING_CLASS(klass); - GArray *properties_override = _nm_sett_info_property_override_create_array(); + GArray *properties_override = _nm_sett_info_property_override_create_array_sized(35); object_class->get_property = get_property; object_class->set_property = set_property; @@ -1811,7 +1811,8 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass) PROP_VLAN_PROTOCOL, NM_SETTING_PARAM_INFERRABLE, NMSettingBridge, - _priv.vlan_protocol); + _priv.vlan_protocol, + .direct_string_allow_empty = TRUE); /** * NMSettingBridge:vlan-stats-enabled: @@ -1862,7 +1863,8 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass) PROP_MULTICAST_ROUTER, NM_SETTING_PARAM_INFERRABLE, NMSettingBridge, - _priv.multicast_router); + _priv.multicast_router, + .direct_string_allow_empty = TRUE); /** * NMSettingBridge:multicast-query-use-ifaddr: diff --git a/src/libnm-core-impl/nm-setting-cdma.c b/src/libnm-core-impl/nm-setting-cdma.c index c32af6b7..b497cf14 100644 --- a/src/libnm-core-impl/nm-setting-cdma.c +++ b/src/libnm-core-impl/nm-setting-cdma.c @@ -42,20 +42,18 @@ typedef struct { * CDMA-based Mobile Broadband Settings */ struct _NMSettingCdma { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingCdmaPrivate _priv; }; struct _NMSettingCdmaClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingCdma, nm_setting_cdma, NM_TYPE_SETTING) #define NM_SETTING_CDMA_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_CDMA, NMSettingCdmaPrivate)) + _NM_GET_PRIVATE(o, NMSettingCdma, NM_IS_SETTING_CDMA, NMSetting) /*****************************************************************************/ @@ -218,8 +216,6 @@ nm_setting_cdma_class_init(NMSettingCdmaClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingCdmaPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -240,7 +236,8 @@ nm_setting_cdma_class_init(NMSettingCdmaClass *klass) PROP_NUMBER, NM_SETTING_PARAM_NONE, NMSettingCdmaPrivate, - number); + number, + .direct_string_allow_empty = TRUE); /** * NMSettingCdma:username: @@ -255,7 +252,8 @@ nm_setting_cdma_class_init(NMSettingCdmaClass *klass) PROP_USERNAME, NM_SETTING_PARAM_NONE, NMSettingCdmaPrivate, - username); + username, + .direct_string_allow_empty = TRUE); /** * NMSettingCdma:password: @@ -270,7 +268,8 @@ nm_setting_cdma_class_init(NMSettingCdmaClass *klass) PROP_PASSWORD, NM_SETTING_PARAM_SECRET, NMSettingCdmaPrivate, - password); + password, + .direct_string_allow_empty = TRUE); /** * NMSettingCdma:password-flags: @@ -309,5 +308,5 @@ nm_setting_cdma_class_init(NMSettingCdmaClass *klass) NM_META_SETTING_TYPE_CDMA, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingCdma, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index 3c26ab5d..892e7d31 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -56,7 +56,9 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingConnection, PROP_READ_ONLY, PROP_ZONE, PROP_MASTER, + PROP_CONTROLLER, PROP_SLAVE_TYPE, + PROP_PORT_TYPE, PROP_AUTOCONNECT_SLAVES, PROP_SECONDARIES, PROP_GATEWAY_PING_TIMEOUT, @@ -80,8 +82,8 @@ typedef struct { char *stable_id; char *interface_name; char *type; - char *master; - char *slave_type; + char *controller; + char *port_type; char *zone; char *mud_url; guint64 timestamp; @@ -109,20 +111,18 @@ typedef struct { * General Connection Profile Settings */ struct _NMSettingConnection { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingConnectionPrivate _priv; }; struct _NMSettingConnectionClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingConnection, nm_setting_connection, NM_TYPE_SETTING) #define NM_SETTING_CONNECTION_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionPrivate)) + _NM_GET_PRIVATE(o, NMSettingConnection, NM_IS_SETTING_CONNECTION, NMSetting) /*****************************************************************************/ @@ -357,24 +357,14 @@ invalid: return TRUE; } -/** - * nm_setting_connection_permissions_user_allowed: - * @setting: the #NMSettingConnection - * @uname: the user name to check permissions for - * - * Checks whether the given username is allowed to view/access this connection. - * - * Returns: %TRUE if the requested user is allowed to view this connection, - * %FALSE if the given user is not allowed to view this connection - */ -gboolean -nm_setting_connection_permissions_user_allowed(NMSettingConnection *setting, const char *uname) +static gboolean +_permissions_user_allowed(NMSettingConnection *setting, const char *uname, gulong uid) { + gs_free struct passwd *pw = NULL; NMSettingConnectionPrivate *priv; guint i; - g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), FALSE); - g_return_val_if_fail(uname != NULL, FALSE); + nm_assert(NM_IS_SETTING_CONNECTION(setting)); priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); @@ -386,7 +376,19 @@ nm_setting_connection_permissions_user_allowed(NMSettingConnection *setting, con for (i = 0; i < priv->permissions->len; i++) { const Permission *permission = &nm_g_array_index(priv->permissions, Permission, i); - if (permission->ptype == PERM_TYPE_USER && nm_streq(permission->item, uname)) + if (permission->ptype != PERM_TYPE_USER) + continue; + + if (!uname) { + if (uid != G_MAXULONG) { + pw = nm_getpwuid(uid); + uname = nm_passwd_name(pw); + } + if (!uname) + return FALSE; + } + + if (nm_streq(permission->item, uname)) return TRUE; } @@ -394,6 +396,33 @@ nm_setting_connection_permissions_user_allowed(NMSettingConnection *setting, con } /** + * nm_setting_connection_permissions_user_allowed: + * @setting: the #NMSettingConnection + * @uname: the user name to check permissions for + * + * Checks whether the given username is allowed to view/access this connection. + * + * Returns: %TRUE if the requested user is allowed to view this connection, + * %FALSE if the given user is not allowed to view this connection + */ +gboolean +nm_setting_connection_permissions_user_allowed(NMSettingConnection *setting, const char *uname) +{ + g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), FALSE); + g_return_val_if_fail(uname != NULL, FALSE); + + return _permissions_user_allowed(setting, uname, G_MAXULONG); +} + +gboolean +nm_setting_connection_permissions_user_allowed_by_uid(NMSettingConnection *setting, gulong uid) +{ + g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), FALSE); + + return _permissions_user_allowed(setting, NULL, uid); +} + +/** * nm_setting_connection_add_permission: * @setting: the #NMSettingConnection * @ptype: the permission type; at this time only "user" is supported @@ -682,13 +711,51 @@ nm_setting_connection_get_zone(NMSettingConnection *setting) * * Returns: interface name of the master device or UUID of the master * connection. + * + * Deprecated: 1.46. Use nm_setting_connection_get_controller() instead which + * is just an alias. */ const char * nm_setting_connection_get_master(NMSettingConnection *setting) { + return nm_setting_connection_get_controller(setting); +} + +/** + * nm_setting_connection_get_controller: + * @setting: the #NMSettingConnection + * + * Returns the #NMSettingConnection:controller property of the connection. + * + * Returns: interface name of the controller device or UUID of the controller + * connection. + * + * Since: 1.46 + */ +const char * +nm_setting_connection_get_controller(NMSettingConnection *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), NULL); + + return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->controller; +} + +/** + * nm_setting_connection_get_port_type: + * @setting: the #NMSettingConnection + * + * Returns the #NMSettingConnection:port-type property of the connection. + * + * Returns: the type of port this connection is, if any. + * + * Since: 1.46 + */ +const char * +nm_setting_connection_get_port_type(NMSettingConnection *setting) +{ g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), NULL); - return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->master; + return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->port_type; } /** @@ -698,13 +765,14 @@ nm_setting_connection_get_master(NMSettingConnection *setting) * Returns the #NMSettingConnection:slave-type property of the connection. * * Returns: the type of slave this connection is, if any + * + * Deprecated: 1.46. Use nm_setting_connection_get_port_type() instead which + * is just an alias. */ const char * nm_setting_connection_get_slave_type(NMSettingConnection *setting) { - g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), NULL); - - return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->slave_type; + return nm_setting_connection_get_port_type(setting); } /** @@ -714,13 +782,15 @@ nm_setting_connection_get_slave_type(NMSettingConnection *setting) * against @setting's slave type * * Returns: %TRUE if connection is of the given slave @type + * + * Deprecated: 1.46. */ gboolean nm_setting_connection_is_slave_type(NMSettingConnection *setting, const char *type) { g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), FALSE); - return !g_strcmp0(NM_SETTING_CONNECTION_GET_PRIVATE(setting)->slave_type, type); + return nm_streq0(NM_SETTING_CONNECTION_GET_PRIVATE(setting)->port_type, type); } /** @@ -810,21 +880,11 @@ nm_setting_connection_get_num_secondaries(NMSettingConnection *setting) const char * nm_setting_connection_get_secondary(NMSettingConnection *setting, guint32 idx) { - NMSettingConnectionPrivate *priv; - guint secondaries_len; - g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), NULL); - priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - - secondaries_len = nm_g_array_len(priv->secondaries.arr); - if (idx >= secondaries_len) { - /* access one past the length is OK. */ - g_return_val_if_fail(idx == secondaries_len, NULL); - return NULL; - } - - return nm_strvarray_get_idx(priv->secondaries.arr, idx); + return nm_strvarray_get_idxnull_or_greturn( + NM_SETTING_CONNECTION_GET_PRIVATE(setting)->secondaries.arr, + idx); } /** @@ -864,10 +924,9 @@ nm_setting_connection_add_secondary(NMSettingConnection *setting, const char *se priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - if (nm_strvarray_find_first(priv->secondaries.arr, sec_uuid) >= 0) + if (!nm_strvarray_ensure_and_add_unique(&priv->secondaries.arr, sec_uuid)) return FALSE; - nm_strvarray_add(nm_strvarray_ensure(&priv->secondaries.arr), sec_uuid); _notify(setting, PROP_SECONDARIES); return TRUE; } @@ -890,7 +949,7 @@ nm_setting_connection_remove_secondary(NMSettingConnection *setting, guint32 idx g_return_if_fail(idx < nm_g_array_len(priv->secondaries.arr)); - g_array_remove_index(priv->secondaries.arr, idx); + nm_strvarray_remove_index(priv->secondaries.arr, idx); _notify(setting, PROP_SECONDARIES); } @@ -913,11 +972,11 @@ nm_setting_connection_remove_secondary_by_value(NMSettingConnection *setting, co priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - if (nm_strvarray_remove_first(priv->secondaries.arr, sec_uuid)) { - _notify(setting, PROP_SECONDARIES); - return TRUE; - } - return FALSE; + if (!nm_strvarray_remove_first(priv->secondaries.arr, sec_uuid)) + return FALSE; + + _notify(setting, PROP_SECONDARIES); + return TRUE; } /** @@ -1065,7 +1124,7 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con, is_slave = FALSE; slave_setting_type = NULL; - slave_type = priv->slave_type; + slave_type = priv->port_type; if (slave_type) { is_slave = _nm_setting_slave_type_is_valid(slave_type, &slave_setting_type); if (!is_slave) { @@ -1077,22 +1136,22 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con, g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } if (is_slave) { - if (!priv->master) { + if (!priv->controller) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY, _("Slave connections need a valid '%s' property"), - NM_SETTING_CONNECTION_MASTER); + NM_SETTING_CONNECTION_CONTROLLER); g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER); + NM_SETTING_CONNECTION_CONTROLLER); return FALSE; } if (slave_setting_type && connection @@ -1100,7 +1159,7 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con, normerr_slave_setting_type = slave_setting_type; } else { nm_assert(!slave_type); - if (priv->master) { + if (priv->controller) { NMSetting *s_port; if (connection @@ -1112,12 +1171,12 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY, _("Cannot set '%s' without '%s'"), - NM_SETTING_CONNECTION_MASTER, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_CONTROLLER, + NM_SETTING_CONNECTION_PORT_TYPE); g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } @@ -1328,7 +1387,7 @@ after_interface_name: g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } @@ -1545,8 +1604,8 @@ after_interface_name: g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING, - _("slave-type '%s' requires a '%s' setting in the connection"), - priv->slave_type, + _("port-type '%s' requires a '%s' setting in the connection"), + priv->port_type, normerr_slave_setting_type); g_prefix_error(error, "%s: ", normerr_slave_setting_type); return NM_SETTING_VERIFY_NORMALIZABLE_ERROR; @@ -1558,39 +1617,39 @@ after_interface_name: NM_CONNECTION_ERROR_MISSING_PROPERTY, _("Detect a slave connection with '%s' set and a port type '%s'. '%s' should " "be set to '%s'"), - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, normerr_missing_slave_type_port, - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, normerr_missing_slave_type); g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return NM_SETTING_VERIFY_NORMALIZABLE_ERROR; } if (connection) { gboolean has_bridge_port = FALSE; - if ((!nm_streq0(priv->slave_type, NM_SETTING_BRIDGE_SETTING_NAME) + if ((!nm_streq0(priv->port_type, NM_SETTING_BRIDGE_SETTING_NAME) && (has_bridge_port = !!nm_connection_get_setting_by_name(connection, NM_SETTING_BRIDGE_PORT_SETTING_NAME))) - || (!nm_streq0(priv->slave_type, NM_SETTING_TEAM_SETTING_NAME) + || (!nm_streq0(priv->port_type, NM_SETTING_TEAM_SETTING_NAME) && nm_connection_get_setting_by_name(connection, NM_SETTING_TEAM_PORT_SETTING_NAME))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING, _("A slave connection with '%s' set to '%s' cannot have a '%s' setting"), - NM_SETTING_CONNECTION_SLAVE_TYPE, - priv->slave_type ?: "", + NM_SETTING_CONNECTION_PORT_TYPE, + priv->port_type ?: "", has_bridge_port ? NM_SETTING_BRIDGE_PORT_SETTING_NAME : NM_SETTING_TEAM_PORT_SETTING_NAME); g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return NM_SETTING_VERIFY_NORMALIZABLE_ERROR; } } @@ -1775,6 +1834,126 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps /*****************************************************************************/ +gboolean +_nm_setting_connection_master_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) +{ + const char *str; + + if (!_nm_setting_use_legacy_property(setting, + connection_dict, + NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER)) { + *out_is_modified = FALSE; + return TRUE; + } + str = g_variant_get_string(value, NULL); + + g_object_set(setting, NM_SETTING_CONNECTION_MASTER, str, NULL); + return TRUE; +} + +GVariant * +_nm_setting_connection_controller_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil) +{ + const char *controller; + + /* FIXME: `controller` is an alias of `master` property. Serializing the + * property to the clients would break them as they won't be able to drop + * it if they are not aware of the existance of `controller`. In order to + * give them time to adapt their code, NetworkManager is not serializing + * `controller` on DBus. + */ + if (_nm_utils_is_manager_process) { + return NULL; + } + + controller = nm_setting_connection_get_controller(NM_SETTING_CONNECTION(setting)); + if (!controller) + return NULL; + + return g_variant_new_string(controller); +} + +gboolean +_nm_setting_connection_controller_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) +{ + const char *str; + + /* Ignore 'controller' if we're going to process 'master' */ + if (_nm_setting_use_legacy_property(setting, + connection_dict, + NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER)) { + *out_is_modified = FALSE; + return TRUE; + } + str = g_variant_get_string(value, NULL); + + g_object_set(setting, NM_SETTING_CONNECTION_CONTROLLER, str, NULL); + return TRUE; +} + +gboolean +_nm_setting_connection_slave_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) +{ + const char *str; + + if (!_nm_setting_use_legacy_property(setting, + connection_dict, + NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE)) { + *out_is_modified = FALSE; + return TRUE; + } + str = g_variant_get_string(value, NULL); + + g_object_set(setting, NM_SETTING_CONNECTION_SLAVE_TYPE, str, NULL); + return TRUE; +} + +GVariant * +_nm_setting_connection_port_type_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil) +{ + const char *port_type; + + /* FIXME: `port-type` is an alias of `slave-type` property. Serializing the + * property to the clients would break them as they won't be able to drop + * it if they are not aware of the existance of `port-type`. In order to + * give them time to adapt their code, NetworkManager is not serializing + * `port-type` on DBus. + */ + if (_nm_utils_is_manager_process) { + return NULL; + } + + port_type = nm_setting_connection_get_port_type(NM_SETTING_CONNECTION(setting)); + if (!port_type) + return NULL; + + return g_variant_new_string(port_type); +} + +gboolean +_nm_setting_connection_port_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) +{ + const char *str; + + /* Ignore 'port-type' if we're going to process 'slave-type' */ + if (_nm_setting_use_legacy_property(setting, + connection_dict, + NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE)) { + *out_is_modified = FALSE; + return TRUE; + } + str = g_variant_get_string(value, NULL); + + g_object_set(setting, NM_SETTING_CONNECTION_PORT_TYPE, str, NULL); + return TRUE; +} + +/*****************************************************************************/ + static void nm_setting_connection_init(NMSettingConnection *setting) {} @@ -1798,7 +1977,6 @@ finalize(GObject *object) NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE(object); nm_clear_pointer(&priv->permissions, g_array_unref); - nm_clear_pointer(&priv->secondaries.arr, g_array_unref); G_OBJECT_CLASS(nm_setting_connection_parent_class)->finalize(object); } @@ -1808,9 +1986,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); NMSettingClass *setting_class = NM_SETTING_CLASS(klass); - GArray *properties_override = _nm_sett_info_property_override_create_array(); - - g_type_class_add_private(klass, sizeof(NMSettingConnectionPrivate)); + GArray *properties_override = _nm_sett_info_property_override_create_array_sized(35); + guint prop_idx; object_class->get_property = get_property; object_class->set_property = set_property; @@ -1915,13 +2092,15 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * * The '$' character is treated special to perform dynamic substitutions at * activation time. Currently, supported are "${CONNECTION}", "${DEVICE}", - * "${MAC}", "${BOOT}", "${RANDOM}". These effectively create unique IDs - * per-connection, per-device, per-boot, or every time. The "${CONNECTION}" - * uses the profile's connection.uuid, the "${DEVICE}" uses the interface - * name of the device and "${MAC}" the permanent MAC address of the device. - * Any unrecognized patterns following '$' are treated verbatim, however - * are reserved for future use. You are thus advised to avoid '$' or escape - * it as "$$". For example, set it to "${CONNECTION}-${BOOT}-${DEVICE}" to + * "${MAC}", "${NETWORK_SSID}", "${BOOT}", "${RANDOM}". These effectively + * create unique IDs per-connection, per-device, per-SSID, per-boot, or + * every time. The "${CONNECTION}" uses the profile's connection.uuid, the + * "${DEVICE}" uses the interface name of the device and "${MAC}" the + * permanent MAC address of the device. "${NETWORK_SSID}" uses the SSID for + * Wi-Fi networks and falls back to "${CONNECTION}" on other networks. Any + * unrecognized patterns following '$' are treated verbatim, however are + * reserved for future use. You are thus advised to avoid '$' or escape it + * as "$$". For example, set it to "${CONNECTION}-${BOOT}-${DEVICE}" to * create a unique id for this connection that changes with every reboot * and differs depending on the interface where the profile activates. * @@ -1943,7 +2122,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) PROP_STABLE_ID, NM_SETTING_PARAM_FUZZY_IGNORE, NMSettingConnectionPrivate, - stable_id); + stable_id, + .direct_string_allow_empty = TRUE); /** * NMSettingConnection:interface-name: @@ -1984,7 +2164,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) .from_dbus_is_full = TRUE, .from_dbus_direct_allow_transform = TRUE), NMSettingConnectionPrivate, - interface_name); + interface_name, + .direct_string_allow_empty = TRUE); /** * NMSettingConnection:type: @@ -2011,7 +2192,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) NM_SETTING_PARAM_INFERRABLE, NMSettingConnectionPrivate, type, - .direct_string_is_refstr = TRUE); + .direct_string_is_refstr = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingConnection:permissions: @@ -2038,12 +2220,11 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * example: USERS="joe bob" * ---end--- */ - obj_properties[PROP_PERMISSIONS] = - g_param_spec_boxed(NM_SETTING_CONNECTION_PERMISSIONS, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_CONNECTION_PERMISSIONS, + PROP_PERMISSIONS, + NM_SETTING_PARAM_NONE); /** * NMSettingConnection:autoconnect: @@ -2244,12 +2425,15 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_REAPPLY_IMMEDIATELY, NMSettingConnectionPrivate, - zone); + zone, + .direct_string_allow_empty = TRUE); /** * NMSettingConnection:master: * * Interface name of the master device or UUID of the master connection. + * + * Deprecated 1.46. Use #NMSettingConnection:controller instead, this is just an alias. **/ /* ---ifcfg-rh--- * property: master @@ -2260,14 +2444,46 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * for compatibility with legacy tooling. * ---end--- */ - _nm_setting_property_define_direct_string(properties_override, - obj_properties, - NM_SETTING_CONNECTION_MASTER, - PROP_MASTER, - NM_SETTING_PARAM_FUZZY_IGNORE - | NM_SETTING_PARAM_INFERRABLE, - NMSettingConnectionPrivate, - master); + prop_idx = _nm_setting_property_define_direct_string_full( + properties_override, + obj_properties, + NM_SETTING_CONNECTION_MASTER, + PROP_MASTER, + NM_SETTING_PARAM_INFERRABLE | NM_SETTING_PARAM_FUZZY_IGNORE, + NM_SETT_INFO_PROPERT_TYPE_DBUS(G_VARIANT_TYPE_STRING, + .direct_type = NM_VALUE_TYPE_STRING, + .compare_fcn = _nm_setting_property_compare_fcn_direct, + .to_dbus_fcn = _nm_setting_property_to_dbus_fcn_direct, + .from_dbus_fcn = _nm_setting_connection_master_from_dbus, ), + NMSettingConnectionPrivate, + controller, + .direct_string_allow_empty = TRUE, + .is_deprecated = TRUE); + + /** + * NMSettingConnection:controller: + * + * Interface name of the controller device or UUID of the controller connection. + **/ + _nm_setting_property_define_direct_string_full( + properties_override, + obj_properties, + NM_SETTING_CONNECTION_CONTROLLER, + PROP_CONTROLLER, + NM_SETTING_PARAM_INFERRABLE | NM_SETTING_PARAM_FUZZY_IGNORE, + NM_SETT_INFO_PROPERT_TYPE_DBUS(G_VARIANT_TYPE_STRING, + .direct_type = NM_VALUE_TYPE_STRING, + .compare_fcn = _nm_setting_property_compare_fcn_direct, + .to_dbus_fcn = _nm_setting_connection_controller_to_dbus, + .from_dbus_fcn = + _nm_setting_connection_controller_from_dbus), + NMSettingConnectionPrivate, + controller, + .direct_string_allow_empty = TRUE, + .direct_also_notify = obj_properties[PROP_MASTER]); + + nm_g_array_index(properties_override, NMSettInfoProperty, prop_idx).direct_also_notify = + obj_properties[PROP_CONTROLLER]; /** * NMSettingConnection:slave-type: @@ -2275,6 +2491,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * Setting name of the device type of this slave's master connection (eg, * %NM_SETTING_BOND_SETTING_NAME), or %NULL if this connection is not a * slave. + * + * Deprecated 1.46. Use #NMSettingConnection:port-type instead, this is just an alias. **/ /* ---ifcfg-rh--- * property: slave-type @@ -2286,14 +2504,51 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * and BRIDGE_UUID for bridging. * ---end--- */ - _nm_setting_property_define_direct_string(properties_override, - obj_properties, - NM_SETTING_CONNECTION_SLAVE_TYPE, - PROP_SLAVE_TYPE, - NM_SETTING_PARAM_FUZZY_IGNORE - | NM_SETTING_PARAM_INFERRABLE, - NMSettingConnectionPrivate, - slave_type); + prop_idx = _nm_setting_property_define_direct_string_full( + properties_override, + obj_properties, + NM_SETTING_CONNECTION_SLAVE_TYPE, + PROP_SLAVE_TYPE, + NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE, + NM_SETT_INFO_PROPERT_TYPE_DBUS(G_VARIANT_TYPE_STRING, + .direct_type = NM_VALUE_TYPE_STRING, + .compare_fcn = _nm_setting_property_compare_fcn_direct, + .to_dbus_fcn = _nm_setting_property_to_dbus_fcn_direct, + .from_dbus_fcn = + _nm_setting_connection_slave_type_from_dbus, ), + NMSettingConnectionPrivate, + port_type, + .is_deprecated = 1, + .direct_string_allow_empty = TRUE); + + /** + * NMSettingConnection:port-type: + * + * Setting name of the device type of this port's controller connection (eg, + * %NM_SETTING_BOND_SETTING_NAME), or %NULL if this connection is not a + * port. + * + * Since: 1.46 + **/ + _nm_setting_property_define_direct_string_full( + properties_override, + obj_properties, + NM_SETTING_CONNECTION_PORT_TYPE, + PROP_PORT_TYPE, + NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE, + NM_SETT_INFO_PROPERT_TYPE_DBUS(G_VARIANT_TYPE_STRING, + .direct_type = NM_VALUE_TYPE_STRING, + .compare_fcn = _nm_setting_property_compare_fcn_direct, + .to_dbus_fcn = _nm_setting_connection_port_type_to_dbus, + .from_dbus_fcn = + _nm_setting_connection_port_type_from_dbus, ), + NMSettingConnectionPrivate, + port_type, + .direct_string_allow_empty = TRUE, + .direct_also_notify = obj_properties[PROP_SLAVE_TYPE]); + + nm_g_array_index(properties_override, NMSettInfoProperty, prop_idx).direct_also_notify = + obj_properties[PROP_PORT_TYPE]; /** * NMSettingConnection:autoconnect-slaves: @@ -2740,7 +2995,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) PROP_MUD_URL, NM_SETTING_PARAM_NONE, NMSettingConnectionPrivate, - mud_url); + mud_url, + .direct_string_allow_empty = TRUE); /** * NMSettingConnection:wait-activation-delay: @@ -2779,5 +3035,5 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) NM_META_SETTING_TYPE_CONNECTION, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingConnection, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-dcb.c b/src/libnm-core-impl/nm-setting-dcb.c index d6890891..c59ee8b4 100644 --- a/src/libnm-core-impl/nm-setting-dcb.c +++ b/src/libnm-core-impl/nm-setting-dcb.c @@ -71,20 +71,17 @@ typedef struct { * Data Center Bridging Settings */ struct _NMSettingDcb { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingDcbPrivate _priv; }; struct _NMSettingDcbClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingDcb, nm_setting_dcb, NM_TYPE_SETTING) -#define NM_SETTING_DCB_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_DCB, NMSettingDcbPrivate)) +#define NM_SETTING_DCB_GET_PRIVATE(o) _NM_GET_PRIVATE(o, NMSettingDcb, NM_IS_SETTING_DCB, NMSetting) /*****************************************************************************/ @@ -845,8 +842,6 @@ nm_setting_dcb_class_init(NMSettingDcbClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingDcbPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; @@ -925,7 +920,8 @@ nm_setting_dcb_class_init(NMSettingDcbClass *klass) PROP_APP_FCOE_MODE, NM_SETTING_PARAM_NONE, NMSettingDcbPrivate, - app_fcoe_mode); + app_fcoe_mode, + .direct_string_allow_empty = TRUE); /** * NMSettingDcb:app-iscsi-flags: @@ -1230,5 +1226,5 @@ nm_setting_dcb_class_init(NMSettingDcbClass *klass) NM_META_SETTING_TYPE_DCB, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingDcb, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-dummy.c b/src/libnm-core-impl/nm-setting-dummy.c index bfc82aea..c37b8c08 100644 --- a/src/libnm-core-impl/nm-setting-dummy.c +++ b/src/libnm-core-impl/nm-setting-dummy.c @@ -28,13 +28,10 @@ */ struct _NMSettingDummy { NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ }; struct _NMSettingDummyClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingDummy, nm_setting_dummy, NM_TYPE_SETTING) diff --git a/src/libnm-core-impl/nm-setting-ethtool.c b/src/libnm-core-impl/nm-setting-ethtool.c index ab1ed0e2..06c9c12b 100644 --- a/src/libnm-core-impl/nm-setting-ethtool.c +++ b/src/libnm-core-impl/nm-setting-ethtool.c @@ -76,6 +76,37 @@ nm_ethtool_optname_is_ring(const char *optname) } /** + * nm_ethtool_optname_is_channels: + * @optname: (nullable): the option name to check + * + * Checks whether @optname is a valid option name for a channels setting. + * + * Returns: %TRUE, if @optname is valid + * + * Since: 1.46 + */ +gboolean +nm_ethtool_optname_is_channels(const char *optname) +{ + return optname && nm_ethtool_id_is_channels(nm_ethtool_id_get_by_name(optname)); +} + +/** + * nm_ethtool_optname_is_eee: + * @optname: (nullable): the option name to check + * + * Checks whether @optname is a valid option name for an eee setting. + * + * Returns: %TRUE, if @optname is valid + * + * Since: 1.46 + */ +gboolean +nm_ethtool_optname_is_eee(const char *optname) +{ + return optname && nm_ethtool_id_is_eee(nm_ethtool_id_get_by_name(optname)); +} +/** * nm_ethtool_optname_is_pause: * @optname: (nullable): the option name to check * diff --git a/src/libnm-core-impl/nm-setting-generic.c b/src/libnm-core-impl/nm-setting-generic.c index ce212554..6623e71f 100644 --- a/src/libnm-core-impl/nm-setting-generic.c +++ b/src/libnm-core-impl/nm-setting-generic.c @@ -23,10 +23,6 @@ /*****************************************************************************/ -typedef struct { - int dummy; -} NMSettingGenericPrivate; - /** * NMSettingGeneric: * @@ -34,20 +30,14 @@ typedef struct { */ struct _NMSettingGeneric { NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ }; struct _NMSettingGenericClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingGeneric, nm_setting_generic, NM_TYPE_SETTING) -#define NM_SETTING_GENERIC_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_GENERIC, NMSettingGenericPrivate)) - /*****************************************************************************/ static void @@ -72,7 +62,5 @@ nm_setting_generic_class_init(NMSettingGenericClass *klass) { NMSettingClass *setting_class = NM_SETTING_CLASS(klass); - g_type_class_add_private(klass, sizeof(NMSettingGenericPrivate)); - _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_GENERIC, NULL, NULL, 0); } diff --git a/src/libnm-core-impl/nm-setting-gsm.c b/src/libnm-core-impl/nm-setting-gsm.c index 4dde515a..632b0ccc 100644 --- a/src/libnm-core-impl/nm-setting-gsm.c +++ b/src/libnm-core-impl/nm-setting-gsm.c @@ -65,20 +65,17 @@ typedef struct { * GSM-based Mobile Broadband Settings */ struct _NMSettingGsm { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingGsmPrivate _priv; }; struct _NMSettingGsmClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingGsm, nm_setting_gsm, NM_TYPE_SETTING) -#define NM_SETTING_GSM_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_GSM, NMSettingGsmPrivate)) +#define NM_SETTING_GSM_GET_PRIVATE(o) _NM_GET_PRIVATE(o, NMSettingGsm, NM_IS_SETTING_GSM, NMSetting) /*****************************************************************************/ @@ -565,8 +562,6 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingGsmPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -607,7 +602,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, number, - .is_deprecated = TRUE, ); + .is_deprecated = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:username: @@ -622,7 +618,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_USERNAME, NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, - username); + username, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:password: @@ -637,7 +634,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_PASSWORD, NM_SETTING_PARAM_SECRET, NMSettingGsmPrivate, - password); + password, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:password-flags: @@ -660,6 +658,10 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) * is important to use the correct APN for the user's mobile broadband plan. * The APN may only be composed of the characters a-z, 0-9, ., and - per GSM * 03.60 Section 14.9. + * + * If the APN is unset (the default) then it may be detected based on + * "auto-config" setting. The property can be explicitly set to the + * empty string to prevent that and use no APN. **/ _nm_setting_property_define_direct_string(properties_override, obj_properties, @@ -668,7 +670,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, apn, - .direct_set_string_strip = TRUE); + .direct_set_string_strip = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:network-id: @@ -686,7 +689,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, network_id, - .direct_set_string_strip = TRUE); + .direct_set_string_strip = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:pin: @@ -701,7 +705,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_PIN, NM_SETTING_PARAM_SECRET, NMSettingGsmPrivate, - pin); + pin, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:pin-flags: @@ -745,7 +750,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_DEVICE_ID, NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, - device_id); + device_id, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:sim-id: @@ -763,7 +769,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_SIM_ID, NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, - sim_id); + sim_id, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:sim-operator-id: @@ -782,7 +789,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_SIM_OPERATOR_ID, NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, - sim_operator_id); + sim_operator_id, + .direct_string_allow_empty = TRUE); /** * NMSettingGsm:mtu: @@ -836,7 +844,8 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) PROP_INITIAL_EPS_APN, NM_SETTING_PARAM_NONE, NMSettingGsmPrivate, - initial_eps_apn); + initial_eps_apn, + .direct_string_allow_empty = TRUE); /* Ignore incoming deprecated properties */ _nm_properties_override_dbus(properties_override, @@ -854,5 +863,5 @@ nm_setting_gsm_class_init(NMSettingGsmClass *klass) NM_META_SETTING_TYPE_GSM, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingGsm, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-hsr.c b/src/libnm-core-impl/nm-setting-hsr.c new file mode 100644 index 00000000..d9a662b1 --- /dev/null +++ b/src/libnm-core-impl/nm-setting-hsr.c @@ -0,0 +1,266 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Red Hat, Inc. + */ + +#include "libnm-core-impl/nm-default-libnm-core.h" + +#include "nm-setting-hsr.h" + +#include <linux/if_ether.h> + +#include "nm-connection-private.h" +#include "nm-utils.h" +#include "nm-utils-private.h" + +/** + * SECTION:nm-setting-hsr + * @short_description: Describes connection properties for HSR/PRP interfaces + * + * The #NMSettingHsr object is a #NMSetting subclass that describes properties + * necessary for HSR/PRP connections. + **/ + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE(NMSettingHsr, PROP_PORT1, PROP_PORT2, PROP_MULTICAST_SPEC, PROP_PRP, ); + +typedef struct { + char *port1; + char *port2; + guint32 multicast_spec; + bool prp; +} NMSettingHsrPrivate; + +/** + * NMSettingHsr: + * + * HSR/PRP Settings + */ +struct _NMSettingHsr { + NMSetting parent; + NMSettingHsrPrivate _priv; +}; + +struct _NMSettingHsrClass { + NMSettingClass parent; +}; + +G_DEFINE_TYPE(NMSettingHsr, nm_setting_hsr, NM_TYPE_SETTING) + +#define NM_SETTING_HSR_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMSettingHsr, NM_IS_SETTING_HSR, NMSetting) + +/*****************************************************************************/ + +/** + * nm_setting_hsr_get_port1: + * @setting: the #NMSettingHsr + * + * Returns: the #NMSettingHsr:port1 property of the setting + * + * Since: 1.46 + **/ +const char * +nm_setting_hsr_get_port1(NMSettingHsr *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HSR(setting), NULL); + + return NM_SETTING_HSR_GET_PRIVATE(setting)->port1; +} + +/** + * nm_setting_hsr_get_port2: + * @setting: the #NMSettingHsr + * + * Returns: the #NMSettingHsr:port2 property of the setting + * + * Since: 1.46 + **/ +const char * +nm_setting_hsr_get_port2(NMSettingHsr *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HSR(setting), NULL); + + return NM_SETTING_HSR_GET_PRIVATE(setting)->port2; +} + +/** + * nm_setting_hsr_get_multicast_spec: + * @setting: the #NMSettingHsr + * + * Returns: the #NMSettingHsr:multicast_spec property of the setting + * + * Since: 1.46 + **/ +guint32 +nm_setting_hsr_get_multicast_spec(NMSettingHsr *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HSR(setting), 0); + + return NM_SETTING_HSR_GET_PRIVATE(setting)->multicast_spec; +} + +/** + * nm_setting_hsr_get_prp: + * @setting: the #NMSettingHsr + * + * Returns: the #NMSettingHsr:prp property of the setting + * + * Since: 1.46 + **/ +gboolean +nm_setting_hsr_get_prp(NMSettingHsr *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HSR(setting), FALSE); + + return NM_SETTING_HSR_GET_PRIVATE(setting)->prp; +} + +/*****************************************************************************/ + +static gboolean +verify(NMSetting *setting, NMConnection *connection, GError **error) +{ + NMSettingHsrPrivate *priv = NM_SETTING_HSR_GET_PRIVATE(setting); + + if (!priv->port1) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_PROPERTY, + _("property is not specified")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_HSR_SETTING_NAME, NM_SETTING_HSR_PORT1); + return FALSE; + } + if (!nm_utils_ifname_valid(priv->port1, NMU_IFACE_KERNEL, NULL)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid interface name"), + priv->port1); + g_prefix_error(error, "%s.%s: ", NM_SETTING_HSR_SETTING_NAME, NM_SETTING_HSR_PORT1); + return FALSE; + } + + if (!priv->port2) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_PROPERTY, + _("property is not specified")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_HSR_SETTING_NAME, NM_SETTING_HSR_PORT2); + return FALSE; + } + if (!nm_utils_ifname_valid(priv->port2, NMU_IFACE_KERNEL, NULL)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid interface name"), + priv->port2); + g_prefix_error(error, "%s.%s: ", NM_SETTING_HSR_SETTING_NAME, NM_SETTING_HSR_PORT2); + return FALSE; + } + + return TRUE; +} + +/*****************************************************************************/ + +static void +nm_setting_hsr_init(NMSettingHsr *setting) +{} + +/** + * nm_setting_hsr_new: + * + * Creates a new #NMSettingHsr object with default values. + * + * Returns: (transfer full): the new empty #NMSettingHsr object + * + * Since: 1.46 + **/ +NMSetting * +nm_setting_hsr_new(void) +{ + return g_object_new(NM_TYPE_SETTING_HSR, NULL); +} + +static void +nm_setting_hsr_class_init(NMSettingHsrClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + NMSettingClass *setting_class = NM_SETTING_CLASS(klass); + GArray *properties_override = _nm_sett_info_property_override_create_array(); + + object_class->get_property = _nm_setting_property_get_property_direct; + object_class->set_property = _nm_setting_property_set_property_direct; + + setting_class->verify = verify; + + /** + * NMSettingHsr:port1: + * + * The port1 interface name of the HSR. This property is mandatory. + * + * Since: 1.46 + **/ + _nm_setting_property_define_direct_string(properties_override, + obj_properties, + NM_SETTING_HSR_PORT1, + PROP_PORT1, + NM_SETTING_PARAM_INFERRABLE, + NMSettingHsr, + _priv.port1); + + /** + * NMSettingHsr:port2: + * + * The port2 interface name of the HSR. This property is mandatory. + * + * Since: 1.46 + **/ + _nm_setting_property_define_direct_string(properties_override, + obj_properties, + NM_SETTING_HSR_PORT2, + PROP_PORT2, + NM_SETTING_PARAM_INFERRABLE, + NMSettingHsr, + _priv.port2); + + /** + * NMSettingHsr:multicast-spec: + * + * The last byte of supervision address. + * + * Since: 1.46 + **/ + _nm_setting_property_define_direct_uint32(properties_override, + obj_properties, + NM_SETTING_HSR_MULTICAST_SPEC, + PROP_MULTICAST_SPEC, + 0, + G_MAXUINT8, + 0, + NM_SETTING_PARAM_INFERRABLE, + NMSettingHsr, + _priv.multicast_spec); + + /** + * NMSettingHsr:prp: + * + * The protocol used by the interface, whether it is PRP or HSR. + * + * Since: 1.46 + **/ + _nm_setting_property_define_direct_boolean(properties_override, + obj_properties, + NM_SETTING_HSR_PRP, + PROP_PRP, + FALSE, + NM_SETTING_PARAM_INFERRABLE, + NMSettingHsr, + _priv.prp); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); + + _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_HSR, NULL, properties_override, 0); +} diff --git a/src/libnm-core-impl/nm-setting-infiniband.c b/src/libnm-core-impl/nm-setting-infiniband.c index a0d5578c..203e4b2b 100644 --- a/src/libnm-core-impl/nm-setting-infiniband.c +++ b/src/libnm-core-impl/nm-setting-infiniband.c @@ -47,20 +47,18 @@ typedef struct { * Infiniband Settings */ struct _NMSettingInfiniband { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingInfinibandPrivate _priv; }; struct _NMSettingInfinibandClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingInfiniband, nm_setting_infiniband, NM_TYPE_SETTING) #define NM_SETTING_INFINIBAND_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandPrivate)) + _NM_GET_PRIVATE(o, NMSettingInfiniband, NM_IS_SETTING_INFINIBAND, NMSetting) /*****************************************************************************/ @@ -332,8 +330,6 @@ nm_setting_infiniband_class_init(NMSettingInfinibandClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingInfinibandPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -418,7 +414,8 @@ nm_setting_infiniband_class_init(NMSettingInfinibandClass *klass) PROP_TRANSPORT_MODE, NM_SETTING_PARAM_INFERRABLE, NMSettingInfinibandPrivate, - transport_mode); + transport_mode, + .direct_string_allow_empty = TRUE); /** * NMSettingInfiniband:p-key: @@ -484,7 +481,8 @@ nm_setting_infiniband_class_init(NMSettingInfinibandClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingInfinibandPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); @@ -492,5 +490,5 @@ nm_setting_infiniband_class_init(NMSettingInfinibandClass *klass) NM_META_SETTING_TYPE_INFINIBAND, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingInfiniband, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c index 727a4bae..bfebe7d1 100644 --- a/src/libnm-core-impl/nm-setting-ip-config.c +++ b/src/libnm-core-impl/nm-setting-ip-config.c @@ -52,6 +52,8 @@ const NMUtilsDNSOptionDesc _nm_utils_dns_option_descs[] = { {NM_SETTING_DNS_OPTION_NO_RELOAD, FALSE, FALSE}, {NM_SETTING_DNS_OPTION_TRUST_AD, FALSE, FALSE}, {NM_SETTING_DNS_OPTION_NO_AAAA, FALSE, FALSE}, + {NM_SETTING_DNS_OPTION_INTERNAL_NO_ADD_EDNS0, FALSE, FALSE}, + {NM_SETTING_DNS_OPTION_INTERNAL_NO_ADD_TRUST_AD, FALSE, FALSE}, {NULL, FALSE, FALSE}}; static char * @@ -4014,7 +4016,7 @@ _NM_SETTING_IP_CONFIG_GET_PRIVATE(NMSettingIPConfig *self) klass = NM_SETTING_IP_CONFIG_GET_CLASS(self); - nm_assert(klass->private_offset < 0); + nm_assert(klass->private_offset > 0); return (gpointer) (((char *) ((gpointer) self)) + klass->private_offset); } @@ -4229,7 +4231,7 @@ nm_setting_ip_config_get_num_dns_searches(NMSettingIPConfig *setting) { g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), 0); - return NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_search->len; + return nm_g_array_len(NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_search.arr); } /** @@ -4237,19 +4239,18 @@ nm_setting_ip_config_get_num_dns_searches(NMSettingIPConfig *setting) * @setting: the #NMSettingIPConfig * @idx: index number of the DNS search domain to return * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the DNS search domain at index @idx **/ const char * nm_setting_ip_config_get_dns_search(NMSettingIPConfig *setting, int idx) { - NMSettingIPConfigPrivate *priv; - g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), NULL); - priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - g_return_val_if_fail(idx >= 0 && idx < priv->dns_search->len, NULL); - - return priv->dns_search->pdata[idx]; + return nm_strvarray_get_idxnull_or_greturn( + NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_search.arr, + idx); } /** @@ -4266,19 +4267,16 @@ gboolean nm_setting_ip_config_add_dns_search(NMSettingIPConfig *setting, const char *dns_search) { NMSettingIPConfigPrivate *priv; - guint i; g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), FALSE); g_return_val_if_fail(dns_search != NULL, FALSE); g_return_val_if_fail(dns_search[0] != '\0', FALSE); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - for (i = 0; i < priv->dns_search->len; i++) { - if (!strcmp(dns_search, priv->dns_search->pdata[i])) - return FALSE; - } - g_ptr_array_add(priv->dns_search, g_strdup(dns_search)); + if (!nm_strvarray_ensure_and_add_unique(&priv->dns_search.arr, dns_search)) + return FALSE; + _notify(setting, PROP_DNS_SEARCH); return TRUE; } @@ -4298,9 +4296,10 @@ nm_setting_ip_config_remove_dns_search(NMSettingIPConfig *setting, int idx) g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - g_return_if_fail(idx >= 0 && idx < priv->dns_search->len); - g_ptr_array_remove_index(priv->dns_search, idx); + g_return_if_fail(idx >= 0 && idx < nm_g_array_len(priv->dns_search.arr)); + + nm_strvarray_remove_index(priv->dns_search.arr, idx); _notify(setting, PROP_DNS_SEARCH); } @@ -4317,21 +4316,18 @@ gboolean nm_setting_ip_config_remove_dns_search_by_value(NMSettingIPConfig *setting, const char *dns_search) { NMSettingIPConfigPrivate *priv; - guint i; g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), FALSE); g_return_val_if_fail(dns_search != NULL, FALSE); g_return_val_if_fail(dns_search[0] != '\0', FALSE); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - for (i = 0; i < priv->dns_search->len; i++) { - if (!strcmp(dns_search, priv->dns_search->pdata[i])) { - g_ptr_array_remove_index(priv->dns_search, i); - _notify(setting, PROP_DNS_SEARCH); - return TRUE; - } - } - return FALSE; + + if (!nm_strvarray_remove_first(priv->dns_search.arr, dns_search)) + return FALSE; + + _notify(setting, PROP_DNS_SEARCH); + return TRUE; } /** @@ -4343,16 +4339,16 @@ nm_setting_ip_config_remove_dns_search_by_value(NMSettingIPConfig *setting, cons void nm_setting_ip_config_clear_dns_searches(NMSettingIPConfig *setting) { - NMSettingIPConfigPrivate *priv; - g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); - priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - - if (priv->dns_search->len != 0) { - g_ptr_array_set_size(priv->dns_search, 0); + if (nm_strvarray_clear(&NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_search.arr)) _notify(setting, PROP_DNS_SEARCH); - } +} + +static gssize +_dns_option_find_idx_garray(const GArray *arr, const char *option) +{ + return _nm_utils_dns_option_find_idx(nm_g_array_data(arr), nm_g_array_len(arr), option); } /** @@ -4366,13 +4362,9 @@ nm_setting_ip_config_clear_dns_searches(NMSettingIPConfig *setting) guint nm_setting_ip_config_get_num_dns_options(NMSettingIPConfig *setting) { - NMSettingIPConfigPrivate *priv; - g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), 0); - priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - - return priv->dns_options ? priv->dns_options->len : 0; + return nm_g_array_len(NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_options.arr); } /** @@ -4394,7 +4386,7 @@ nm_setting_ip_config_has_dns_options(NMSettingIPConfig *setting) { g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), 0); - return !!NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_options; + return !!NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_options.arr; } /** @@ -4402,6 +4394,8 @@ nm_setting_ip_config_has_dns_options(NMSettingIPConfig *setting) * @setting: the #NMSettingIPConfig * @idx: index number of the DNS option * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the DNS option at index @idx * * Since: 1.2 @@ -4409,15 +4403,11 @@ nm_setting_ip_config_has_dns_options(NMSettingIPConfig *setting) const char * nm_setting_ip_config_get_dns_option(NMSettingIPConfig *setting, guint idx) { - NMSettingIPConfigPrivate *priv; - g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), NULL); - priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - g_return_val_if_fail(priv->dns_options, NULL); - g_return_val_if_fail(idx < priv->dns_options->len, NULL); - - return priv->dns_options->pdata[idx]; + return nm_strvarray_get_idxnull_or_greturn( + NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dns_options.arr, + idx); } /** @@ -4437,14 +4427,14 @@ nm_setting_ip_config_next_valid_dns_option(NMSettingIPConfig *setting, guint idx priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - if (!priv->dns_options) + if (!priv->dns_options.arr) return -1; - for (; idx < priv->dns_options->len; idx++) { - if (_nm_utils_dns_option_validate(priv->dns_options->pdata[idx], + for (; idx < priv->dns_options.arr->len; idx++) { + if (_nm_utils_dns_option_validate(nm_strvarray_get_idx(priv->dns_options.arr, idx), NULL, NULL, - NM_IS_SETTING_IP6_CONFIG(setting), + NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), _nm_utils_dns_option_descs)) return idx; } @@ -4472,18 +4462,15 @@ nm_setting_ip_config_add_dns_option(NMSettingIPConfig *setting, const char *dns_ g_return_val_if_fail(dns_option != NULL, FALSE); g_return_val_if_fail(dns_option[0] != '\0', FALSE); - if (!_nm_utils_dns_option_validate(dns_option, NULL, NULL, FALSE, NULL)) + if (!_nm_utils_dns_option_validate(dns_option, NULL, NULL, AF_UNSPEC, NULL)) return FALSE; priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - if (!priv->dns_options) - priv->dns_options = g_ptr_array_new_with_free_func(g_free); - else { - if (_nm_utils_dns_option_find_idx(priv->dns_options, dns_option) >= 0) - return FALSE; - } - g_ptr_array_add(priv->dns_options, g_strdup(dns_option)); + if (_dns_option_find_idx_garray(priv->dns_options.arr, dns_option) >= 0) + return FALSE; + + nm_strvarray_ensure_and_add(&priv->dns_options.arr, dns_option); _notify(setting, PROP_DNS_OPTIONS); return TRUE; } @@ -4505,10 +4492,10 @@ nm_setting_ip_config_remove_dns_option(NMSettingIPConfig *setting, int idx) g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - g_return_if_fail(priv->dns_options); - g_return_if_fail(idx >= 0 && idx < priv->dns_options->len); - g_ptr_array_remove_index(priv->dns_options, idx); + g_return_if_fail(idx >= 0 && idx < nm_g_array_len(priv->dns_options.arr)); + + nm_strvarray_remove_index(priv->dns_options.arr, idx); _notify(setting, PROP_DNS_OPTIONS); } @@ -4534,17 +4521,14 @@ nm_setting_ip_config_remove_dns_option_by_value(NMSettingIPConfig *setting, cons g_return_val_if_fail(dns_option[0] != '\0', FALSE); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - if (!priv->dns_options) - return FALSE; - i = _nm_utils_dns_option_find_idx(priv->dns_options, dns_option); - if (i >= 0) { - g_ptr_array_remove_index(priv->dns_options, i); - _notify(setting, PROP_DNS_OPTIONS); - return TRUE; - } + i = _dns_option_find_idx_garray(priv->dns_options.arr, dns_option); + if (i < 0) + return FALSE; - return FALSE; + nm_strvarray_remove_index(priv->dns_options.arr, i); + _notify(setting, PROP_DNS_OPTIONS); + return TRUE; } /** @@ -4565,18 +4549,17 @@ nm_setting_ip_config_clear_dns_options(NMSettingIPConfig *setting, gboolean is_s g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - if (!priv->dns_options) { + if (!priv->dns_options.arr) { if (!is_set) return; - priv->dns_options = g_ptr_array_new_with_free_func(g_free); + nm_strvarray_ensure(&priv->dns_options.arr); } else { - if (!is_set) { - g_ptr_array_unref(priv->dns_options); - priv->dns_options = NULL; - } else { - if (priv->dns_options->len == 0) + if (!is_set) + nm_strvarray_clear(&priv->dns_options.arr); + else { + if (priv->dns_options.arr->len == 0) return; - g_ptr_array_set_size(priv->dns_options, 0); + g_array_set_size(priv->dns_options.arr, 0); } } _notify(setting, PROP_DNS_OPTIONS); @@ -5361,8 +5344,10 @@ const char *const * nm_setting_ip_config_get_dhcp_reject_servers(NMSettingIPConfig *setting, guint *out_len) { g_return_val_if_fail(NM_IS_SETTING_IP_CONFIG(setting), NULL); - return nm_strvarray_get_strv(&NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dhcp_reject_servers, - out_len); + + return nm_strvarray_get_strv_notnull( + NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dhcp_reject_servers.arr, + out_len); } /** @@ -5377,13 +5362,11 @@ nm_setting_ip_config_get_dhcp_reject_servers(NMSettingIPConfig *setting, guint * void nm_setting_ip_config_add_dhcp_reject_server(NMSettingIPConfig *setting, const char *server) { - NMSettingIPConfigPrivate *priv; - g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); - g_return_if_fail(server != NULL); - priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); + g_return_if_fail(server); - nm_strvarray_add(nm_strvarray_ensure(&priv->dhcp_reject_servers), server); + nm_strvarray_ensure_and_add(&NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dhcp_reject_servers.arr, + server); _notify(setting, PROP_DHCP_REJECT_SERVERS); } @@ -5402,10 +5385,12 @@ nm_setting_ip_config_remove_dhcp_reject_server(NMSettingIPConfig *setting, guint NMSettingIPConfigPrivate *priv; g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); + priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - g_return_if_fail(priv->dhcp_reject_servers && idx < priv->dhcp_reject_servers->len); - g_array_remove_index(priv->dhcp_reject_servers, idx); + g_return_if_fail(idx < nm_g_array_len(priv->dhcp_reject_servers.arr)); + + nm_strvarray_remove_index(priv->dhcp_reject_servers.arr, idx); _notify(setting, PROP_DHCP_REJECT_SERVERS); } @@ -5420,15 +5405,10 @@ nm_setting_ip_config_remove_dhcp_reject_server(NMSettingIPConfig *setting, guint void nm_setting_ip_config_clear_dhcp_reject_servers(NMSettingIPConfig *setting) { - NMSettingIPConfigPrivate *priv; - g_return_if_fail(NM_IS_SETTING_IP_CONFIG(setting)); - priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - if (nm_g_array_len(priv->dhcp_reject_servers) != 0) { - nm_clear_pointer(&priv->dhcp_reject_servers, g_array_unref); + if (nm_strvarray_clear(&NM_SETTING_IP_CONFIG_GET_PRIVATE(setting)->dhcp_reject_servers.arr)) _notify(setting, PROP_DHCP_REJECT_SERVERS); - } } /** @@ -5718,7 +5698,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } /* Validate reject servers */ - if (priv->dhcp_reject_servers && priv->dhcp_reject_servers->len != 0) { + if (priv->dhcp_reject_servers.arr && priv->dhcp_reject_servers.arr->len > 0) { if (NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting) != AF_INET) { g_set_error_literal(error, NM_CONNECTION_ERROR, @@ -5731,17 +5711,17 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - for (i = 0; i < priv->dhcp_reject_servers->len; i++) { + for (i = 0; i < priv->dhcp_reject_servers.arr->len; i++) { if (!nm_inet_parse_with_prefix_str( NM_SETTING_IP_CONFIG_GET_ADDR_FAMILY(setting), - nm_g_array_index(priv->dhcp_reject_servers, const char *, i), + nm_g_array_index(priv->dhcp_reject_servers.arr, const char *, i), NULL, NULL)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("'%s' is not a valid IP or subnet"), - nm_g_array_index(priv->dhcp_reject_servers, const char *, i)); + nm_g_array_index(priv->dhcp_reject_servers.arr, const char *, i)); g_prefix_error(error, "%s.%s: ", nm_setting_get_name(setting), @@ -5963,7 +5943,7 @@ dns_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) GArray * _nm_sett_info_property_override_create_array_ip_config(int addr_family) { - GArray *properties_override = _nm_sett_info_property_override_create_array(); + GArray *properties_override = _nm_sett_info_property_override_create_array_sized(45); nm_assert_addr_family(addr_family); @@ -5971,7 +5951,8 @@ _nm_sett_info_property_override_create_array_ip_config(int addr_family) properties_override, obj_properties[PROP_METHOD], &nm_sett_info_propert_type_direct_string, - .direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, method)); + .direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, method), + .direct_string_allow_empty = TRUE); _nm_properties_override_gobj( properties_override, @@ -5984,20 +5965,23 @@ _nm_sett_info_property_override_create_array_ip_config(int addr_family) .from_dbus_fcn = _nm_setting_property_from_dbus_fcn_direct_ip_config_gateway), .direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, gateway), .direct_set_string_ip_address_addr_family = addr_family + 1, - .direct_set_string_ip_address_addr_family_map_zero_to_null = TRUE); + .direct_set_string_ip_address_addr_family_map_zero_to_null = TRUE, + .direct_string_allow_empty = TRUE); _nm_properties_override_gobj( properties_override, obj_properties[PROP_DHCP_HOSTNAME], &nm_sett_info_propert_type_direct_string, .direct_offset = - NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, dhcp_hostname)); + NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, dhcp_hostname), + .direct_string_allow_empty = TRUE); _nm_properties_override_gobj( properties_override, obj_properties[PROP_DHCP_IAID], &nm_sett_info_propert_type_direct_string, - .direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, dhcp_iaid)); + .direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(char *, NMSettingIPConfigPrivate, dhcp_iaid), + .direct_string_allow_empty = TRUE); /* ---dbus--- * property: routing-rules @@ -6130,6 +6114,29 @@ _nm_sett_info_property_override_create_array_ip_config(int addr_family) .direct_offset = NM_STRUCT_OFFSET_ENSURE_TYPE(int, NMSettingIPConfigPrivate, replace_local_rule)); + _nm_properties_override_gobj( + properties_override, + obj_properties[PROP_DNS_SEARCH], + &nm_sett_info_propert_type_direct_strv, + .direct_offset = + NM_STRUCT_OFFSET_ENSURE_TYPE(NMValueStrv, NMSettingIPConfigPrivate, dns_search)); + + _nm_properties_override_gobj( + properties_override, + obj_properties[PROP_DNS_OPTIONS], + &nm_sett_info_propert_type_direct_strv, + .direct_offset = + NM_STRUCT_OFFSET_ENSURE_TYPE(NMValueStrv, NMSettingIPConfigPrivate, dns_options), + .direct_strv_preserve_empty = TRUE, ); + + _nm_properties_override_gobj(properties_override, + obj_properties[PROP_DHCP_REJECT_SERVERS], + &nm_sett_info_propert_type_direct_strv, + .direct_offset = + NM_STRUCT_OFFSET_ENSURE_TYPE(NMValueStrv, + NMSettingIPConfigPrivate, + dhcp_reject_servers)); + return properties_override; } @@ -6143,15 +6150,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) switch (prop_id) { case PROP_DNS: - g_value_take_boxed(value, _nm_utils_ptrarray_to_strv(priv->dns)); - break; - case PROP_DNS_SEARCH: - g_value_take_boxed(value, _nm_utils_ptrarray_to_strv(priv->dns_search)); - break; - case PROP_DNS_OPTIONS: - g_value_take_boxed(value, - priv->dns_options ? _nm_utils_ptrarray_to_strv(priv->dns_options) - : NULL); + g_value_take_boxed(value, nm_strv_ptrarray_to_strv(priv->dns)); break; case PROP_ADDRESSES: g_value_take_boxed(value, @@ -6165,9 +6164,6 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) (NMUtilsCopyFunc) nm_ip_route_dup, (GDestroyNotify) nm_ip_route_unref)); break; - case PROP_DHCP_REJECT_SERVERS: - g_value_set_boxed(value, nm_strvarray_get_strv_non_empty(priv->dhcp_reject_servers, NULL)); - break; default: _nm_setting_property_get_property_direct(object, prop_id, value, pspec); break; @@ -6179,7 +6175,8 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps { NMSettingIPConfig *setting = NM_SETTING_IP_CONFIG(object); NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(setting); - char **strv; + gs_unref_array GArray *array = NULL; + const char *const *strv; guint i; switch (prop_id) { @@ -6195,28 +6192,22 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps } break; } - case PROP_DNS_SEARCH: - g_ptr_array_unref(priv->dns_search); - priv->dns_search = nm_strv_to_ptrarray(g_value_get_boxed(value)); - break; case PROP_DNS_OPTIONS: strv = g_value_get_boxed(value); - if (!strv) { - if (priv->dns_options) { - g_ptr_array_unref(priv->dns_options); - priv->dns_options = NULL; - } - } else { - if (priv->dns_options) - g_ptr_array_set_size(priv->dns_options, 0); - else - priv->dns_options = g_ptr_array_new_with_free_func(g_free); + if (strv) { + nm_strvarray_ensure(&array); for (i = 0; strv[i]; i++) { - if (_nm_utils_dns_option_validate(strv[i], NULL, NULL, FALSE, NULL) - && _nm_utils_dns_option_find_idx(priv->dns_options, strv[i]) < 0) - g_ptr_array_add(priv->dns_options, g_strdup(strv[i])); + const char *str = strv[i]; + + if (_nm_utils_dns_option_validate(str, NULL, NULL, AF_UNSPEC, NULL) + && _dns_option_find_idx_garray(array, str) < 0) + nm_strvarray_add(array, str); } } + if (!nm_strvarray_equal(priv->dns_options.arr, array)) { + NM_SWAP(&priv->dns_options.arr, &array); + _notify(setting, PROP_DNS_OPTIONS); + } break; case PROP_ADDRESSES: g_ptr_array_unref(priv->addresses); @@ -6230,9 +6221,6 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps (NMUtilsCopyFunc) nm_ip_route_dup, (GDestroyNotify) nm_ip_route_unref); break; - case PROP_DHCP_REJECT_SERVERS: - nm_strvarray_set_strv(&priv->dhcp_reject_servers, g_value_get_boxed(value)); - break; default: _nm_setting_property_set_property_direct(object, prop_id, value, pspec); break; @@ -6246,9 +6234,8 @@ _nm_setting_ip_config_private_init(gpointer self, NMSettingIPConfigPrivate *priv { nm_assert(NM_IS_SETTING_IP_CONFIG(self)); - priv->dns_search = g_ptr_array_new_with_free_func(g_free); - priv->addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); - priv->routes = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); + priv->addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); + priv->routes = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); } static void @@ -6264,12 +6251,9 @@ finalize(GObject *object) NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE(self); nm_g_ptr_array_unref(priv->dns); - g_ptr_array_unref(priv->dns_search); - nm_g_ptr_array_unref(priv->dns_options); g_ptr_array_unref(priv->addresses); g_ptr_array_unref(priv->routes); nm_g_ptr_array_unref(priv->routing_rules); - nm_g_array_unref(priv->dhcp_reject_servers); G_OBJECT_CLASS(nm_setting_ip_config_parent_class)->finalize(object); } @@ -6311,12 +6295,13 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) * shared method must be configured on the interface which shares the internet * to a subnet, not on the uplink which is shared. **/ - obj_properties[PROP_METHOD] = g_param_spec_string( - NM_SETTING_IP_CONFIG_METHOD, - "", - "", - NULL, - G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_METHOD] = + g_param_spec_string(NM_SETTING_IP_CONFIG_METHOD, + "", + "", + NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY + | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dns: @@ -6359,22 +6344,29 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dns-options: * - * Array of DNS options as described in man 5 resolv.conf. + * Array of DNS options to be added to resolv.conf. * * %NULL means that the options are unset and left at the default. * In this case NetworkManager will use default options. This is * distinct from an empty list of properties. * - * The currently supported options are "attempts", "debug", "edns0", + * The following options are directly added to resolv.conf: "attempts", + * "debug", "edns0", * "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-aaaa", * "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", * "rotate", "single-request", "single-request-reopen", "timeout", - * "trust-ad", "use-vc". + * "trust-ad", "use-vc". See the resolv.conf(5) man page for a + * detailed description of these options. + * + * In addition, NetworkManager supports the special options "_no-add-edns0" + * and "_no-add-trust-ad". They are not added to resolv.conf, and can be + * used to prevent the automatic addition of options "edns0" and "trust-ad" + * when using caching DNS plugins (see below). * * The "trust-ad" setting is only honored if the profile contributes * name servers to resolv.conf, and if all contributing profiles have @@ -6382,7 +6374,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) * * When using a caching DNS plugin (dnsmasq or systemd-resolved in * NetworkManager.conf) then "edns0" and "trust-ad" are automatically - * added. + * added, unless "_no-add-edns0" and "_no-add-trust-ad" are present. * * Since: 1.2 **/ @@ -6391,7 +6383,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dns-priority: @@ -6453,7 +6445,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) G_MININT32, G_MAXINT32, 0, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:addresses: (type GPtrArray(NMIPAddress)) @@ -6484,14 +6476,15 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) * for WireGuard interfaces, so usually it should not be set in that case. See * #NMSettingWireGuard:ip4-auto-default-route. **/ - obj_properties[PROP_GATEWAY] = g_param_spec_string( - NM_SETTING_IP_CONFIG_GATEWAY, - "", - "", - NULL, - /* On D-Bus, the legacy property "addresses" contains the gateway. - * This was replaced by "address-data" and "gateway". */ - G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_GATEWAY] = + g_param_spec_string(NM_SETTING_IP_CONFIG_GATEWAY, + "", + "", + NULL, + /* On D-Bus, the legacy property "addresses" contains the gateway. + * This was replaced by "address-data" and "gateway". */ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY + | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:routes: (type GPtrArray(NMIPRoute)) @@ -6528,7 +6521,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) -1, G_MAXUINT32, -1, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:route-table: @@ -6551,14 +6544,15 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) * * Since: 1.10 **/ - obj_properties[PROP_ROUTE_TABLE] = g_param_spec_uint( - NM_SETTING_IP_CONFIG_ROUTE_TABLE, - "", - "", - 0, - G_MAXUINT32, - 0, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_ROUTE_TABLE] = + g_param_spec_uint(NM_SETTING_IP_CONFIG_ROUTE_TABLE, + "", + "", + 0, + G_MAXUINT32, + 0, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY + | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:ignore-auto-routes: * @@ -6571,7 +6565,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:ignore-auto-dns: @@ -6587,7 +6581,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dhcp-hostname: @@ -6602,7 +6596,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dhcp-send-hostname: @@ -6618,7 +6612,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", TRUE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:never-default: @@ -6632,7 +6626,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:may-fail: @@ -6650,30 +6644,33 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", TRUE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dad-timeout: * - * Timeout in milliseconds used to check for the presence of duplicate IP - * addresses on the network. If an address conflict is detected, the - * activation will fail. A zero value means that no duplicate address - * detection is performed, -1 means the default value (either configuration - * ipvx.dad-timeout override or zero). A value greater than zero is a - * timeout in milliseconds. + * Maximum timeout in milliseconds used to check for the presence of duplicate + * IP addresses on the network. If an address conflict is detected, the + * activation will fail. The property is currently implemented only for IPv4. * - * The property is currently implemented only for IPv4. + * A zero value means that no duplicate address detection is performed, -1 means + * the default value (either the value configured globally in NetworkManger.conf + * or 200ms). A value greater than zero is a timeout in milliseconds. Note that + * the time intervals are subject to randomization as per RFC 5227 and so the + * actual duration can be between half and the full time specified in this + * property. * * Since: 1.2 **/ - obj_properties[PROP_DAD_TIMEOUT] = g_param_spec_int( - NM_SETTING_IP_CONFIG_DAD_TIMEOUT, - "", - "", - -1, - NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX, - -1, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_DAD_TIMEOUT] = + g_param_spec_int(NM_SETTING_IP_CONFIG_DAD_TIMEOUT, + "", + "", + -1, + NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX, + -1, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | NM_SETTING_PARAM_FUZZY_IGNORE + | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dhcp-timeout: @@ -6684,14 +6681,15 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) * * Set to 2147483647 (MAXINT32) for infinity. **/ - obj_properties[PROP_DHCP_TIMEOUT] = g_param_spec_int( - NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, - "", - "", - 0, - G_MAXINT32, - 0, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_DHCP_TIMEOUT] = + g_param_spec_int(NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, + "", + "", + 0, + G_MAXINT32, + 0, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | NM_SETTING_PARAM_FUZZY_IGNORE + | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:required-timeout: @@ -6716,14 +6714,15 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) * * Since: 1.34 **/ - obj_properties[PROP_REQUIRED_TIMEOUT] = g_param_spec_int( - NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, - "", - "", - -1, - G_MAXINT32, - -1, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_REQUIRED_TIMEOUT] = + g_param_spec_int(NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, + "", + "", + -1, + G_MAXINT32, + -1, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | NM_SETTING_PARAM_FUZZY_IGNORE + | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dhcp-iaid: @@ -6758,7 +6757,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dhcp-hostname-flags: @@ -6792,7 +6791,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) 0, G_MAXUINT32, NM_DHCP_HOSTNAME_FLAG_NONE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:dhcp-reject-servers: @@ -6812,7 +6811,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", "", G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:auto-route-ext-gw: @@ -6831,7 +6830,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", NM_TYPE_TERNARY, NM_TERNARY_DEFAULT, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** * NMSettingIPConfig:replace-local-rule: @@ -6847,7 +6846,7 @@ nm_setting_ip_config_class_init(NMSettingIPConfigClass *klass) "", NM_TYPE_TERNARY, NM_TERNARY_DEFAULT, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); } diff --git a/src/libnm-core-impl/nm-setting-ip-tunnel.c b/src/libnm-core-impl/nm-setting-ip-tunnel.c index 2deebf42..3512ff2e 100644 --- a/src/libnm-core-impl/nm-setting-ip-tunnel.c +++ b/src/libnm-core-impl/nm-setting-ip-tunnel.c @@ -55,20 +55,18 @@ typedef struct { * IP Tunneling Settings */ struct _NMSettingIPTunnel { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingIPTunnelPrivate _priv; }; struct _NMSettingIPTunnelClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingIPTunnel, nm_setting_ip_tunnel, NM_TYPE_SETTING) #define NM_SETTING_IP_TUNNEL_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_IP_TUNNEL, NMSettingIPTunnelPrivate)) + _NM_GET_PRIVATE(o, NMSettingIPTunnel, NM_IS_SETTING_IP_TUNNEL, NMSetting) /*****************************************************************************/ @@ -566,8 +564,6 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingIPTunnelPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -588,7 +584,8 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingIPTunnelPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); /** * NMSettingIPTunnel:mode: @@ -634,7 +631,8 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) PROP_LOCAL, NM_SETTING_PARAM_INFERRABLE, NMSettingIPTunnelPrivate, - local); + local, + .direct_string_allow_empty = TRUE); /** * NMSettingIPTunnel:remote: @@ -650,7 +648,8 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) PROP_REMOTE, NM_SETTING_PARAM_INFERRABLE, NMSettingIPTunnelPrivate, - remote); + remote, + .direct_string_allow_empty = TRUE); /** * NMSettingIPTunnel:ttl @@ -720,7 +719,8 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) PROP_INPUT_KEY, NM_SETTING_PARAM_INFERRABLE, NMSettingIPTunnelPrivate, - input_key); + input_key, + .direct_string_allow_empty = TRUE); /** * NMSettingIPTunnel:output-key: @@ -736,7 +736,8 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) PROP_OUTPUT_KEY, NM_SETTING_PARAM_INFERRABLE, NMSettingIPTunnelPrivate, - output_key); + output_key, + .direct_string_allow_empty = TRUE); /** * NMSettingIPTunnel:encapsulation-limit: @@ -861,5 +862,5 @@ nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass) NM_META_SETTING_TYPE_IP_TUNNEL, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingIPTunnel, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c index 9ed39507..c79d0fdf 100644 --- a/src/libnm-core-impl/nm-setting-ip4-config.c +++ b/src/libnm-core-impl/nm-setting-ip4-config.c @@ -56,20 +56,18 @@ typedef struct { * IPv4 Settings */ struct _NMSettingIP4Config { - NMSettingIPConfig parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSettingIPConfig parent; + NMSettingIP4ConfigPrivate _priv; }; struct _NMSettingIP4ConfigClass { NMSettingIPConfigClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingIP4Config, nm_setting_ip4_config, NM_TYPE_SETTING_IP_CONFIG) #define NM_SETTING_IP4_CONFIG_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigPrivate)) + _NM_GET_PRIVATE(o, NMSettingIP4Config, NM_IS_SETTING_IP4_CONFIG, NMSettingIPConfig, NMSetting) /*****************************************************************************/ @@ -165,17 +163,17 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_assert(method); if (!strcmp(method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { - if (nm_setting_ip_config_get_num_addresses(s_ip) == 0) { + if (nm_setting_ip_config_get_num_addresses(s_ip) == 0 + && nm_setting_ip_config_get_num_routes(s_ip) == 0) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("this property cannot be empty for '%s=%s'"), - NM_SETTING_IP_CONFIG_METHOD, + _("method '%s' requires at least an address or a route"), method); g_prefix_error(error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP_CONFIG_ADDRESSES); + NM_SETTING_IP_CONFIG_METHOD); return FALSE; } } else if (!strcmp(method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL) @@ -405,6 +403,8 @@ ip4_dns_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) } strv = nm_utils_ip4_dns_from_variant(value); + nm_assert(strv); + g_object_set(setting, NM_SETTING_IP_CONFIG_DNS, strv, NULL); return TRUE; } @@ -425,31 +425,24 @@ ip4_addresses_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { gs_unref_ptrarray GPtrArray *addrs = NULL; gs_unref_variant GVariant *s_ip4 = NULL; - gs_free const char **labels = NULL; + gs_unref_variant GVariant *labels = NULL; gs_free char *gateway = NULL; - guint i; - - /* FIXME: properly handle errors */ + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); if (!_nm_setting_use_legacy_property(setting, connection_dict, "addresses", "address-data")) { *out_is_modified = FALSE; return TRUE; } - addrs = nm_utils_ip4_addresses_from_variant(value, &gateway); - s_ip4 = g_variant_lookup_value(connection_dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING); - if (g_variant_lookup(s_ip4, "address-labels", "^a&s", &labels)) { - for (i = 0; i < addrs->len && labels[i]; i++) { - if (*labels[i]) { - nm_ip_address_set_attribute(addrs->pdata[i], - NM_IP_ADDRESS_ATTRIBUTE_LABEL, - g_variant_new_string(labels[i])); - } - } - } + + labels = g_variant_lookup_value(s_ip4, "address-labels", NULL); + + addrs = _nm_utils_ip4_addresses_from_variant(value, labels, &gateway, strict, error); + if (!addrs) + return FALSE; g_object_set(setting, NM_SETTING_IP_CONFIG_ADDRESSES, @@ -514,9 +507,8 @@ ip4_address_data_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil) static gboolean ip4_address_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { - gs_unref_ptrarray GPtrArray *addrs = NULL; - - /* FIXME: properly handle errors */ + gs_unref_ptrarray GPtrArray *addrs = NULL; + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); /* Ignore 'address-data' if we're going to process 'addresses' */ if (_nm_setting_use_legacy_property(setting, connection_dict, "addresses", "address-data")) { @@ -524,7 +516,10 @@ ip4_address_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) return TRUE; } - addrs = nm_utils_ip_addresses_from_variant(value, AF_INET); + addrs = _nm_utils_ip_addresses_from_variant(value, AF_INET, strict, error); + if (!addrs) + return FALSE; + g_object_set(setting, NM_SETTING_IP_CONFIG_ADDRESSES, addrs, NULL); return TRUE; } @@ -542,15 +537,17 @@ static gboolean ip4_routes_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { gs_unref_ptrarray GPtrArray *routes = NULL; - - /* FIXME: properly handle errors */ + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); if (!_nm_setting_use_legacy_property(setting, connection_dict, "routes", "route-data")) { *out_is_modified = FALSE; return TRUE; } - routes = nm_utils_ip4_routes_from_variant(value); + routes = _nm_utils_ip4_routes_from_variant(value, strict, error); + if (!routes) + return FALSE; + g_object_set(setting, property_info->name, routes, NULL); return TRUE; } @@ -571,8 +568,7 @@ static gboolean ip4_route_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { gs_unref_ptrarray GPtrArray *routes = NULL; - - /* FIXME: properly handle errors */ + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); /* Ignore 'route-data' if we're going to process 'routes' */ if (_nm_setting_use_legacy_property(setting, connection_dict, "routes", "route-data")) { @@ -580,7 +576,10 @@ ip4_route_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) return TRUE; } - routes = nm_utils_ip_routes_from_variant(value, AF_INET); + routes = _nm_utils_ip_routes_from_variant(value, AF_INET, strict, error); + if (!routes) + return FALSE; + g_object_set(setting, NM_SETTING_IP_CONFIG_ROUTES, routes, NULL); return TRUE; } @@ -616,14 +615,12 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) NMSettingIPConfigClass *setting_ip_config_class = NM_SETTING_IP_CONFIG_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array_ip_config(AF_INET); - g_type_class_add_private(klass, sizeof(NMSettingIP4ConfigPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; setting_class->verify = verify; - setting_ip_config_class->private_offset = g_type_class_get_instance_private_offset(klass); + setting_ip_config_class->private_offset = G_STRUCT_OFFSET(NMSettingIP4Config, _priv); setting_ip_config_class->is_ipv4 = TRUE; setting_ip_config_class->addr_family = AF_INET; @@ -703,6 +700,15 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) * route2=7.7.0.0/16 * ---end--- */ + /* ---keyfile--- + * property: routes (attributes) + * variable: route1_options, route2_options, ... + * format: key=val[,key=val...] + * description: Attributes defined for the routes, if any. The supported + * attributes are explained in ipv4.routes entry in `man nm-settings-nmcli`. + * example: route1_options=mtu=1000,onlink=true + * ---end--- + */ /* ---ifcfg-rh--- * property: routes * variable: ADDRESS1, NETMASK1, GATEWAY1, METRIC1, OPTIONS1, ... @@ -711,6 +717,16 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) * ---end--- */ + /* ---keyfile--- + * property: routing-rules + * variable: routing-rule1, routing-rule2, ... + * format: routing rule string + * description: Routing rules as defined with `ip rule add`, but with mandatory + * fixed priority. + * example: routing-rule1=priority 5 from 192.167.4.0/24 table 45 + * ---end--- + */ + /* ---ifcfg-rh--- * property: ignore-auto-routes * variable: PEERROUTES(+) @@ -875,9 +891,20 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) * stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a * per-device key. * - * If unset, a globally configured default is used. If still unset, the default - * depends on the DHCP plugin. + * The special value "none" prevents any client identifier from being sent. Note that + * this is normally not recommended. + * + * If unset, a globally configured default from NetworkManager.conf is + * used. If still unset, the default depends on the DHCP plugin. The + * internal dhcp client will default to "mac" and the dhclient plugin will + * try to use one from its config file if present, or won't sent any + * client-id otherwise. **/ + /* ---nmcli--- + * property: dhcp-client-id + * special-values: mac, perm-mac, duid, ipv6-duid, stable, none + * ---end--- + */ /* ---ifcfg-rh--- * property: dhcp-client-id * variable: DHCP_CLIENT_ID(+) @@ -892,7 +919,8 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) PROP_DHCP_CLIENT_ID, NM_SETTING_PARAM_NONE, NMSettingIP4ConfigPrivate, - dhcp_client_id); + dhcp_client_id, + .direct_string_allow_empty = TRUE); /* ---ifcfg-rh--- * property: dad-timeout @@ -945,7 +973,8 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) PROP_DHCP_FQDN, NM_SETTING_PARAM_NONE, NMSettingIP4ConfigPrivate, - dhcp_fqdn); + dhcp_fqdn, + .direct_string_allow_empty = TRUE); /** * NMSettingIP4Config:dhcp-vendor-class-identifier: @@ -972,7 +1001,8 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) PROP_DHCP_VENDOR_CLASS_IDENTIFIER, NM_SETTING_PARAM_NONE, NMSettingIP4ConfigPrivate, - dhcp_vendor_class_identifier); + dhcp_vendor_class_identifier, + .direct_string_allow_empty = TRUE); /** * NMSettingIP4Config:link-local: @@ -1288,5 +1318,5 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) NM_META_SETTING_TYPE_IP4_CONFIG, NULL, properties_override, - setting_ip_config_class->private_offset); + G_STRUCT_OFFSET(NMSettingIP4Config, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c index 661a451e..4ad09932 100644 --- a/src/libnm-core-impl/nm-setting-ip6-config.c +++ b/src/libnm-core-impl/nm-setting-ip6-config.c @@ -65,20 +65,18 @@ typedef struct { * IPv6 Settings */ struct _NMSettingIP6Config { - NMSettingIPConfig parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSettingIPConfig parent; + NMSettingIP6ConfigPrivate _priv; }; struct _NMSettingIP6ConfigClass { NMSettingIPConfigClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingIP6Config, nm_setting_ip6_config, NM_TYPE_SETTING_IP_CONFIG) #define NM_SETTING_IP6_CONFIG_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigPrivate)) + _NM_GET_PRIVATE(o, NMSettingIP6Config, NM_IS_SETTING_IP6_CONFIG, NMSettingIPConfig, NMSetting) /*****************************************************************************/ @@ -230,17 +228,17 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_assert(method); if (nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) { - if (nm_setting_ip_config_get_num_addresses(s_ip) == 0) { + if (nm_setting_ip_config_get_num_addresses(s_ip) == 0 + && nm_setting_ip_config_get_num_routes(s_ip) == 0) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("this property cannot be empty for '%s=%s'"), - NM_SETTING_IP_CONFIG_METHOD, + _("method '%s' requires at least an address or a route"), method); g_prefix_error(error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, - NM_SETTING_IP_CONFIG_ADDRESSES); + NM_SETTING_IP_CONFIG_METHOD); return FALSE; } } else if (NM_IN_STRSET(method, @@ -437,14 +435,18 @@ ip6_dns_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil) static gboolean ip6_dns_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { - gs_strfreev char **strv = NULL; + gs_strfreev char **strv = NULL; + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); if (!_nm_setting_use_legacy_property(setting, connection_dict, "dns", "dns-data")) { *out_is_modified = FALSE; return TRUE; } - strv = nm_utils_ip6_dns_from_variant(value); + strv = _nm_utils_ip6_dns_from_variant(value, strict, error); + if (!strv) + return FALSE; + g_object_set(setting, NM_SETTING_IP_CONFIG_DNS, strv, NULL); return TRUE; } @@ -465,13 +467,16 @@ ip6_addresses_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { gs_unref_ptrarray GPtrArray *addrs = NULL; gs_free char *gateway = NULL; + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); if (!_nm_setting_use_legacy_property(setting, connection_dict, "addresses", "address-data")) { *out_is_modified = FALSE; return TRUE; } - addrs = nm_utils_ip6_addresses_from_variant(value, &gateway); + addrs = _nm_utils_ip6_addresses_from_variant(value, &gateway, strict, error); + if (!addrs) + return FALSE; g_object_set(setting, NM_SETTING_IP_CONFIG_ADDRESSES, @@ -497,7 +502,8 @@ ip6_address_data_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil) static gboolean ip6_address_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { - gs_unref_ptrarray GPtrArray *addrs = NULL; + gs_unref_ptrarray GPtrArray *addrs = NULL; + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); /* Ignore 'address-data' if we're going to process 'addresses' */ if (_nm_setting_use_legacy_property(setting, connection_dict, "addresses", "address-data")) { @@ -505,7 +511,10 @@ ip6_address_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) return TRUE; } - addrs = nm_utils_ip_addresses_from_variant(value, AF_INET6); + addrs = _nm_utils_ip_addresses_from_variant(value, AF_INET6, strict, error); + if (!addrs) + return FALSE; + g_object_set(setting, NM_SETTING_IP_CONFIG_ADDRESSES, addrs, NULL); return TRUE; } @@ -523,13 +532,17 @@ static gboolean ip6_routes_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { gs_unref_ptrarray GPtrArray *routes = NULL; + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); if (!_nm_setting_use_legacy_property(setting, connection_dict, "routes", "route-data")) { *out_is_modified = FALSE; return TRUE; } - routes = nm_utils_ip6_routes_from_variant(value); + routes = _nm_utils_ip6_routes_from_variant(value, strict, error); + if (!routes) + return FALSE; + g_object_set(setting, property_info->name, routes, NULL); return TRUE; } @@ -550,6 +563,7 @@ static gboolean ip6_route_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) { gs_unref_ptrarray GPtrArray *routes = NULL; + bool strict = NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT); /* Ignore 'route-data' if we're going to process 'routes' */ if (_nm_setting_use_legacy_property(setting, connection_dict, "routes", "route-data")) { @@ -557,7 +571,10 @@ ip6_route_data_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil) return TRUE; } - routes = nm_utils_ip_routes_from_variant(value, AF_INET6); + routes = _nm_utils_ip_routes_from_variant(value, AF_INET6, strict, error); + if (!routes) + return FALSE; + g_object_set(setting, NM_SETTING_IP_CONFIG_ROUTES, routes, NULL); return TRUE; } @@ -628,14 +645,12 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) NMSettingIPConfigClass *setting_ip_config_class = NM_SETTING_IP_CONFIG_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array_ip_config(AF_INET6); - g_type_class_add_private(klass, sizeof(NMSettingIP6ConfigPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; setting_class->verify = verify; - setting_ip_config_class->private_offset = g_type_class_get_instance_private_offset(klass); + setting_ip_config_class->private_offset = G_STRUCT_OFFSET(NMSettingIP6Config, _priv); setting_ip_config_class->is_ipv4 = FALSE; setting_ip_config_class->addr_family = AF_INET6; @@ -714,6 +729,15 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) * example: route1=2001:4860:4860::/64,2620:52:0:2219:222:68ff:fe11:5403 * ---end--- */ + /* ---keyfile--- + * property: routes (attributes) + * variable: route1_options, route2_options, ... + * format: key=val[,key=val...] + * description: Attributes defined for the routes, if any. The supported + * attributes are explained in ipv6.routes entry in `man nm-settings-nmcli`. + * example: route1_options=mtu=1000,onlink=true + * ---end--- + */ /* ---ifcfg-rh--- * property: routes * variable: (none) @@ -722,6 +746,16 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) * ---end--- */ + /* ---keyfile--- + * property: routing-rules + * variable: routing-rule1, routing-rule2, ... + * format: routing rule string + * description: Routing rules as defined with `ip rule add`, but with mandatory + * fixed priority. + * example: routing-rule1=priority 5 from 2001:4860:4860::/64 table 45 + * ---end--- + */ + /* ---ifcfg-rh--- * property: ignore-auto-routes * variable: IPV6_PEERROUTES(+) @@ -1035,7 +1069,8 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) PROP_TOKEN, NM_SETTING_PARAM_INFERRABLE, NMSettingIP6ConfigPrivate, - token); + token, + .direct_string_allow_empty = TRUE); /** * NMSettingIP6Config:ra-timeout: @@ -1138,7 +1173,8 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) PROP_DHCP_DUID, NM_SETTING_PARAM_NONE, NMSettingIP6ConfigPrivate, - dhcp_duid); + dhcp_duid, + .direct_string_allow_empty = TRUE); /** * NMSettingIP6Config:dhcp-pd-hint: @@ -1166,8 +1202,9 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) NM_SETTING_PARAM_NONE, NMSettingIP6ConfigPrivate, dhcp_pd_hint, - .direct_hook.set_string_fcn = - _set_string_fcn_dhcp_pd_hint); + .direct_set_fcn.set_string = + _set_string_fcn_dhcp_pd_hint, + .direct_string_allow_empty = TRUE); /* IP6-specific property overrides */ @@ -1425,5 +1462,5 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) NM_META_SETTING_TYPE_IP6_CONFIG, NULL, properties_override, - setting_ip_config_class->private_offset); + G_STRUCT_OFFSET(NMSettingIP6Config, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-loopback.c b/src/libnm-core-impl/nm-setting-loopback.c index 1451b411..b329c74a 100644 --- a/src/libnm-core-impl/nm-setting-loopback.c +++ b/src/libnm-core-impl/nm-setting-loopback.c @@ -125,7 +125,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } if ((s_con = nm_connection_get_setting_connection(connection))) { - if (nm_setting_connection_get_slave_type(s_con) + if (nm_setting_connection_get_port_type(s_con) || nm_setting_connection_get_master(s_con)) { g_set_error(error, NM_CONNECTION_ERROR, @@ -134,9 +134,9 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - nm_setting_connection_get_slave_type(s_con) - ? NM_SETTING_CONNECTION_SLAVE_TYPE - : NM_SETTING_CONNECTION_MASTER); + nm_setting_connection_get_port_type(s_con) + ? NM_SETTING_CONNECTION_PORT_TYPE + : NM_SETTING_CONNECTION_CONTROLLER); return FALSE; } } diff --git a/src/libnm-core-impl/nm-setting-macsec.c b/src/libnm-core-impl/nm-setting-macsec.c index bf48f049..f66fc52a 100644 --- a/src/libnm-core-impl/nm-setting-macsec.c +++ b/src/libnm-core-impl/nm-setting-macsec.c @@ -55,20 +55,18 @@ typedef struct { * MACSec Settings */ struct _NMSettingMacsec { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingMacsecPrivate _priv; }; struct _NMSettingMacsecClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingMacsec, nm_setting_macsec, NM_TYPE_SETTING) #define NM_SETTING_MACSEC_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_MACSEC, NMSettingMacsecPrivate)) + _NM_GET_PRIVATE(o, NMSettingMacsec, NM_IS_SETTING_MACSEC, NMSetting) /*****************************************************************************/ @@ -306,7 +304,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) if (s_con) { const char *master = NULL, *slave_type = NULL; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (!g_strcmp0(slave_type, NM_SETTING_MACSEC_SETTING_NAME)) master = nm_setting_connection_get_master(s_con); @@ -316,7 +314,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) NM_CONNECTION_ERROR_INVALID_PROPERTY, _("'%s' value doesn't match '%s=%s'"), priv->parent, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, master); g_prefix_error(error, "%s.%s: ", @@ -436,8 +434,6 @@ nm_setting_macsec_class_init(NMSettingMacsecClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingMacsecPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -460,7 +456,8 @@ nm_setting_macsec_class_init(NMSettingMacsecClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingMacsecPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); /** * NMSettingMacsec:mode: @@ -511,7 +508,8 @@ nm_setting_macsec_class_init(NMSettingMacsecClass *klass) PROP_MKA_CAK, NM_SETTING_PARAM_SECRET, NMSettingMacsecPrivate, - mka_cak); + mka_cak, + .direct_string_allow_empty = TRUE); /** * NMSettingMacsec:mka-cak-flags: @@ -543,7 +541,8 @@ nm_setting_macsec_class_init(NMSettingMacsecClass *klass) PROP_MKA_CKN, NM_SETTING_PARAM_NONE, NMSettingMacsecPrivate, - mka_ckn); + mka_ckn, + .direct_string_allow_empty = TRUE); /** * NMSettingMacsec:port: @@ -604,5 +603,5 @@ nm_setting_macsec_class_init(NMSettingMacsecClass *klass) NM_META_SETTING_TYPE_MACSEC, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingMacsec, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-macvlan.c b/src/libnm-core-impl/nm-setting-macvlan.c index d26a8086..2adecdfe 100644 --- a/src/libnm-core-impl/nm-setting-macvlan.c +++ b/src/libnm-core-impl/nm-setting-macvlan.c @@ -40,20 +40,18 @@ typedef struct { * MAC VLAN Settings */ struct _NMSettingMacvlan { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingMacvlanPrivate _priv; }; struct _NMSettingMacvlanClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingMacvlan, nm_setting_macvlan, NM_TYPE_SETTING) #define NM_SETTING_MACVLAN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_MACVLAN, NMSettingMacvlanPrivate)) + _NM_GET_PRIVATE(o, NMSettingMacvlan, NM_IS_SETTING_MACVLAN, NMSetting) /*****************************************************************************/ @@ -207,8 +205,6 @@ nm_setting_macvlan_class_init(NMSettingMacvlanClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingMacvlanPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -230,7 +226,8 @@ nm_setting_macvlan_class_init(NMSettingMacvlanClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingMacvlanPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); /** * NMSettingMacvlan:mode: @@ -289,5 +286,5 @@ nm_setting_macvlan_class_init(NMSettingMacvlanClass *klass) NM_META_SETTING_TYPE_MACVLAN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingMacvlan, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-match.c b/src/libnm-core-impl/nm-setting-match.c index 0ece65f1..7736b7c0 100644 --- a/src/libnm-core-impl/nm-setting-match.c +++ b/src/libnm-core-impl/nm-setting-match.c @@ -68,6 +68,8 @@ nm_setting_match_get_num_interface_names(NMSettingMatch *setting) * @setting: the #NMSettingMatch * @idx: index number of the DNS search domain to return * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the interface name at index @idx * * Since: 1.14 @@ -77,11 +79,7 @@ nm_setting_match_get_interface_name(NMSettingMatch *setting, int idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->interface_name.arr && idx >= 0 - && idx < setting->interface_name.arr->len, - NULL); - - return nm_strvarray_get_idx(setting->interface_name.arr, idx); + return nm_strvarray_get_idxnull_or_greturn(setting->interface_name.arr, idx); } /** @@ -99,7 +97,7 @@ nm_setting_match_add_interface_name(NMSettingMatch *setting, const char *interfa g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(interface_name); - nm_strvarray_add(nm_strvarray_ensure(&setting->interface_name.arr), interface_name); + nm_strvarray_ensure_and_add(&setting->interface_name.arr, interface_name); _notify(setting, PROP_INTERFACE_NAME); } @@ -120,7 +118,7 @@ nm_setting_match_remove_interface_name(NMSettingMatch *setting, int idx) g_return_if_fail(setting->interface_name.arr && idx >= 0 && idx < setting->interface_name.arr->len); - g_array_remove_index(setting->interface_name.arr, idx); + nm_strvarray_remove_index(setting->interface_name.arr, idx); _notify(setting, PROP_INTERFACE_NAME); } @@ -141,12 +139,11 @@ nm_setting_match_remove_interface_name_by_value(NMSettingMatch *setting, const c g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(interface_name, FALSE); - if (nm_strvarray_remove_first(setting->interface_name.arr, interface_name)) { - _notify(setting, PROP_INTERFACE_NAME); - return TRUE; - } + if (!nm_strvarray_remove_first(setting->interface_name.arr, interface_name)) + return FALSE; - return FALSE; + _notify(setting, PROP_INTERFACE_NAME); + return TRUE; } /** @@ -162,10 +159,8 @@ nm_setting_match_clear_interface_names(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->interface_name.arr) != 0) { - nm_clear_pointer(&setting->interface_name.arr, g_array_unref); + if (nm_strvarray_clear(&setting->interface_name.arr)) _notify(setting, PROP_INTERFACE_NAME); - } } /** @@ -187,7 +182,7 @@ nm_setting_match_get_interface_names(NMSettingMatch *setting, guint *length) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->interface_name.arr, length); + return nm_strvarray_get_strv_notnull(setting->interface_name.arr, length); } /*****************************************************************************/ @@ -213,6 +208,8 @@ nm_setting_match_get_num_kernel_command_lines(NMSettingMatch *setting) * @setting: the #NMSettingMatch * @idx: index number of the kernel command line argument to return * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the kernel command line argument at index @idx * * Since: 1.26 @@ -222,11 +219,7 @@ nm_setting_match_get_kernel_command_line(NMSettingMatch *setting, guint idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->kernel_command_line.arr - && idx < setting->kernel_command_line.arr->len, - NULL); - - return nm_strvarray_get_idx(setting->kernel_command_line.arr, idx); + return nm_strvarray_get_idxnull_or_greturn(setting->kernel_command_line.arr, idx); } /** @@ -244,7 +237,7 @@ nm_setting_match_add_kernel_command_line(NMSettingMatch *setting, const char *ke g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(kernel_command_line); - nm_strvarray_add(nm_strvarray_ensure(&setting->kernel_command_line.arr), kernel_command_line); + nm_strvarray_ensure_and_add(&setting->kernel_command_line.arr, kernel_command_line); _notify(setting, PROP_KERNEL_COMMAND_LINE); } @@ -265,7 +258,7 @@ nm_setting_match_remove_kernel_command_line(NMSettingMatch *setting, guint idx) g_return_if_fail(setting->kernel_command_line.arr && idx < setting->kernel_command_line.arr->len); - g_array_remove_index(setting->kernel_command_line.arr, idx); + nm_strvarray_remove_index(setting->kernel_command_line.arr, idx); _notify(setting, PROP_KERNEL_COMMAND_LINE); } @@ -287,12 +280,11 @@ nm_setting_match_remove_kernel_command_line_by_value(NMSettingMatch *setting, g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(kernel_command_line, FALSE); - if (nm_strvarray_remove_first(setting->kernel_command_line.arr, kernel_command_line)) { - _notify(setting, PROP_KERNEL_COMMAND_LINE); - return TRUE; - } + if (!nm_strvarray_remove_first(setting->kernel_command_line.arr, kernel_command_line)) + return FALSE; - return FALSE; + _notify(setting, PROP_KERNEL_COMMAND_LINE); + return TRUE; } /** @@ -308,10 +300,8 @@ nm_setting_match_clear_kernel_command_lines(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->kernel_command_line.arr) != 0) { - nm_clear_pointer(&setting->kernel_command_line.arr, g_array_unref); + if (nm_strvarray_clear(&setting->kernel_command_line.arr)) _notify(setting, PROP_KERNEL_COMMAND_LINE); - } } /** @@ -330,7 +320,7 @@ nm_setting_match_get_kernel_command_lines(NMSettingMatch *setting, guint *length { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->kernel_command_line.arr, length); + return nm_strvarray_get_strv_notnull(setting->kernel_command_line.arr, length); } /*****************************************************************************/ @@ -356,6 +346,8 @@ nm_setting_match_get_num_drivers(NMSettingMatch *setting) * @setting: the #NMSettingMatch * @idx: index number of the DNS search domain to return * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the driver at index @idx * * Since: 1.26 @@ -365,9 +357,7 @@ nm_setting_match_get_driver(NMSettingMatch *setting, guint idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->driver.arr && idx < setting->driver.arr->len, NULL); - - return nm_strvarray_get_idx(setting->driver.arr, idx); + return nm_strvarray_get_idxnull_or_greturn(setting->driver.arr, idx); } /** @@ -385,7 +375,7 @@ nm_setting_match_add_driver(NMSettingMatch *setting, const char *driver) g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(driver); - nm_strvarray_add(nm_strvarray_ensure(&setting->driver.arr), driver); + nm_strvarray_ensure_and_add(&setting->driver.arr, driver); _notify(setting, PROP_DRIVER); } @@ -405,7 +395,7 @@ nm_setting_match_remove_driver(NMSettingMatch *setting, guint idx) g_return_if_fail(setting->driver.arr && idx < setting->driver.arr->len); - g_array_remove_index(setting->driver.arr, idx); + nm_strvarray_remove_index(setting->driver.arr, idx); _notify(setting, PROP_DRIVER); } @@ -426,12 +416,11 @@ nm_setting_match_remove_driver_by_value(NMSettingMatch *setting, const char *dri g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(driver, FALSE); - if (nm_strvarray_remove_first(setting->driver.arr, driver)) { - _notify(setting, PROP_DRIVER); - return TRUE; - } + if (!nm_strvarray_remove_first(setting->driver.arr, driver)) + return FALSE; - return FALSE; + _notify(setting, PROP_DRIVER); + return TRUE; } /** @@ -447,10 +436,8 @@ nm_setting_match_clear_drivers(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->driver.arr) != 0) { - nm_clear_pointer(&setting->driver.arr, g_array_unref); + if (nm_strvarray_clear(&setting->driver.arr)) _notify(setting, PROP_DRIVER); - } } /** @@ -469,7 +456,7 @@ nm_setting_match_get_drivers(NMSettingMatch *setting, guint *length) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->driver.arr, length); + return nm_strvarray_get_strv_notnull(setting->driver.arr, length); } /*****************************************************************************/ @@ -495,6 +482,8 @@ nm_setting_match_get_num_paths(NMSettingMatch *setting) * @setting: the #NMSettingMatch * @idx: index number of the path to return * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the path at index @idx * * Since: 1.26 @@ -504,9 +493,7 @@ nm_setting_match_get_path(NMSettingMatch *setting, guint idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->path.arr && idx < setting->path.arr->len, NULL); - - return nm_strvarray_get_idx(setting->path.arr, idx); + return nm_strvarray_get_idxnull_or_greturn(setting->path.arr, idx); } /** @@ -524,7 +511,7 @@ nm_setting_match_add_path(NMSettingMatch *setting, const char *path) g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(path); - nm_strvarray_add(nm_strvarray_ensure(&setting->path.arr), path); + nm_strvarray_ensure_and_add(&setting->path.arr, path); _notify(setting, PROP_PATH); } @@ -544,7 +531,7 @@ nm_setting_match_remove_path(NMSettingMatch *setting, guint idx) g_return_if_fail(setting->path.arr && idx < setting->path.arr->len); - g_array_remove_index(setting->path.arr, idx); + nm_strvarray_remove_index(setting->path.arr, idx); _notify(setting, PROP_PATH); } @@ -565,12 +552,11 @@ nm_setting_match_remove_path_by_value(NMSettingMatch *setting, const char *path) g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(path, FALSE); - if (nm_strvarray_remove_first(setting->path.arr, path)) { - _notify(setting, PROP_PATH); - return TRUE; - } + if (!nm_strvarray_remove_first(setting->path.arr, path)) + return FALSE; - return FALSE; + _notify(setting, PROP_PATH); + return TRUE; } /** @@ -586,10 +572,8 @@ nm_setting_match_clear_paths(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->path.arr) != 0) { - nm_clear_pointer(&setting->path.arr, g_array_unref); + if (nm_strvarray_clear(&setting->path.arr)) _notify(setting, PROP_PATH); - } } /** @@ -608,7 +592,7 @@ nm_setting_match_get_paths(NMSettingMatch *setting, guint *length) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->path.arr, length); + return nm_strvarray_get_strv_notnull(setting->path.arr, length); } /*****************************************************************************/ @@ -719,19 +703,6 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } static void -finalize(GObject *object) -{ - NMSettingMatch *self = NM_SETTING_MATCH(object); - - nm_clear_pointer(&self->interface_name.arr, g_array_unref); - nm_clear_pointer(&self->kernel_command_line.arr, g_array_unref); - nm_clear_pointer(&self->driver.arr, g_array_unref); - nm_clear_pointer(&self->path.arr, g_array_unref); - - G_OBJECT_CLASS(nm_setting_match_parent_class)->finalize(object); -} - -static void nm_setting_match_class_init(NMSettingMatchClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); @@ -740,7 +711,6 @@ nm_setting_match_class_init(NMSettingMatchClass *klass) object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; - object_class->finalize = finalize; setting_class->verify = verify; diff --git a/src/libnm-core-impl/nm-setting-olpc-mesh.c b/src/libnm-core-impl/nm-setting-olpc-mesh.c index fe6d3842..1b13d99a 100644 --- a/src/libnm-core-impl/nm-setting-olpc-mesh.c +++ b/src/libnm-core-impl/nm-setting-olpc-mesh.c @@ -39,20 +39,18 @@ typedef struct { * OLPC Wireless Mesh Settings */ struct _NMSettingOlpcMesh { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingOlpcMeshPrivate _priv; }; struct _NMSettingOlpcMeshClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingOlpcMesh, nm_setting_olpc_mesh, NM_TYPE_SETTING) #define NM_SETTING_OLPC_MESH_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshPrivate)) + _NM_GET_PRIVATE(o, NMSettingOlpcMesh, NM_IS_SETTING_OLPC_MESH, NMSetting) /*****************************************************************************/ @@ -171,8 +169,6 @@ nm_setting_olpc_mesh_class_init(NMSettingOlpcMeshClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingOlpcMeshPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -231,5 +227,5 @@ nm_setting_olpc_mesh_class_init(NMSettingOlpcMeshClass *klass) NM_META_SETTING_TYPE_OLPC_MESH, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingOlpcMesh, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-ovs-bridge.c b/src/libnm-core-impl/nm-setting-ovs-bridge.c index 8e850157..bc5dd04a 100644 --- a/src/libnm-core-impl/nm-setting-ovs-bridge.c +++ b/src/libnm-core-impl/nm-setting-ovs-bridge.c @@ -162,7 +162,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER); + NM_SETTING_CONNECTION_CONTROLLER); return FALSE; } } @@ -242,7 +242,8 @@ nm_setting_ovs_bridge_class_init(NMSettingOvsBridgeClass *klass) PROP_FAIL_MODE, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsBridge, - fail_mode); + fail_mode, + .direct_string_allow_empty = TRUE); /** * NMSettingOvsBridge:mcast-snooping-enable: @@ -305,7 +306,8 @@ nm_setting_ovs_bridge_class_init(NMSettingOvsBridgeClass *klass) PROP_DATAPATH_TYPE, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsBridge, - datapath_type); + datapath_type, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); diff --git a/src/libnm-core-impl/nm-setting-ovs-dpdk.c b/src/libnm-core-impl/nm-setting-ovs-dpdk.c index 87e9a3e8..53931f46 100644 --- a/src/libnm-core-impl/nm-setting-ovs-dpdk.c +++ b/src/libnm-core-impl/nm-setting-ovs-dpdk.c @@ -190,7 +190,8 @@ nm_setting_ovs_dpdk_class_init(NMSettingOvsDpdkClass *klass) PROP_DEVARGS, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsDpdk, - devargs); + devargs, + .direct_string_allow_empty = TRUE); /** * NMSettingOvsDpdk:n-rxq: diff --git a/src/libnm-core-impl/nm-setting-ovs-interface.c b/src/libnm-core-impl/nm-setting-ovs-interface.c index 34e66480..88379087 100644 --- a/src/libnm-core-impl/nm-setting-ovs-interface.c +++ b/src/libnm-core-impl/nm-setting-ovs-interface.c @@ -312,16 +312,16 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("A connection with a '%s' setting must have a master."), + _("A connection with a '%s' setting must have a controller."), NM_SETTING_OVS_INTERFACE_SETTING_NAME); g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER); + NM_SETTING_CONNECTION_CONTROLLER); return FALSE; } - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type && !nm_streq(slave_type, NM_SETTING_OVS_PORT_SETTING_NAME)) { g_set_error(error, NM_CONNECTION_ERROR, @@ -334,7 +334,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } @@ -394,7 +394,8 @@ nm_setting_ovs_interface_class_init(NMSettingOvsInterfaceClass *klass) PROP_TYPE, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsInterface, - type); + type, + .direct_string_allow_empty = TRUE); /** * NMSettingOvsInterface:ofport-request: * diff --git a/src/libnm-core-impl/nm-setting-ovs-patch.c b/src/libnm-core-impl/nm-setting-ovs-patch.c index 2781d435..e44646a6 100644 --- a/src/libnm-core-impl/nm-setting-ovs-patch.c +++ b/src/libnm-core-impl/nm-setting-ovs-patch.c @@ -138,7 +138,8 @@ nm_setting_ovs_patch_class_init(NMSettingOvsPatchClass *klass) PROP_PEER, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsPatch, - peer); + peer, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); diff --git a/src/libnm-core-impl/nm-setting-ovs-port.c b/src/libnm-core-impl/nm-setting-ovs-port.c index 190f1e5d..f2071d43 100644 --- a/src/libnm-core-impl/nm-setting-ovs-port.c +++ b/src/libnm-core-impl/nm-setting-ovs-port.c @@ -349,7 +349,7 @@ verify_trunks(GPtrArray *ranges, GError **error) } for (vlan = range->start; vlan <= range->end; vlan++) { - if (!nm_g_hash_table_add(h, GUINT_TO_POINTER(vlan))) { + if (!g_hash_table_add(h, GUINT_TO_POINTER(vlan))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -422,16 +422,16 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER); + NM_SETTING_CONNECTION_CONTROLLER); return FALSE; } - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type && strcmp(slave_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("A connection with a '%s' setting must have the slave-type set to '%s'. " + _("A connection with a '%s' setting must have the port-type set to '%s'. " "Instead it is '%s'"), NM_SETTING_OVS_PORT_SETTING_NAME, NM_SETTING_OVS_BRIDGE_SETTING_NAME, @@ -439,7 +439,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } @@ -614,7 +614,8 @@ nm_setting_ovs_port_class_init(NMSettingOvsPortClass *klass) PROP_VLAN_MODE, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsPort, - vlan_mode); + vlan_mode, + .direct_string_allow_empty = TRUE); /** * NMSettingOvsPort:tag: @@ -672,7 +673,8 @@ nm_setting_ovs_port_class_init(NMSettingOvsPortClass *klass) PROP_LACP, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsPort, - lacp); + lacp, + .direct_string_allow_empty = TRUE); /** * NMSettingOvsPort:bond-mode: @@ -687,7 +689,8 @@ nm_setting_ovs_port_class_init(NMSettingOvsPortClass *klass) PROP_BOND_MODE, NM_SETTING_PARAM_INFERRABLE, NMSettingOvsPort, - bond_mode); + bond_mode, + .direct_string_allow_empty = TRUE); /** * NMSettingOvsPort:bond-updelay: diff --git a/src/libnm-core-impl/nm-setting-ppp.c b/src/libnm-core-impl/nm-setting-ppp.c index a9d2b9a2..2ac276b4 100644 --- a/src/libnm-core-impl/nm-setting-ppp.c +++ b/src/libnm-core-impl/nm-setting-ppp.c @@ -68,20 +68,17 @@ typedef struct { * Point-to-Point Protocol Settings */ struct _NMSettingPpp { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingPppPrivate _priv; }; struct _NMSettingPppClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingPpp, nm_setting_ppp, NM_TYPE_SETTING) -#define NM_SETTING_PPP_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_PPP, NMSettingPppPrivate)) +#define NM_SETTING_PPP_GET_PRIVATE(o) _NM_GET_PRIVATE(o, NMSettingPpp, NM_IS_SETTING_PPP, NMSetting) /*****************************************************************************/ @@ -402,8 +399,6 @@ nm_setting_ppp_class_init(NMSettingPppClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingPppPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -698,5 +693,5 @@ nm_setting_ppp_class_init(NMSettingPppClass *klass) NM_META_SETTING_TYPE_PPP, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingPpp, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-pppoe.c b/src/libnm-core-impl/nm-setting-pppoe.c index 5c4f3c28..48da78e7 100644 --- a/src/libnm-core-impl/nm-setting-pppoe.c +++ b/src/libnm-core-impl/nm-setting-pppoe.c @@ -43,20 +43,18 @@ typedef struct { * PPP-over-Ethernet Settings */ struct _NMSettingPppoe { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingPppoePrivate _priv; }; struct _NMSettingPppoeClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingPppoe, nm_setting_pppoe, NM_TYPE_SETTING) #define NM_SETTING_PPPOE_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_PPPOE, NMSettingPppoePrivate)) + _NM_GET_PRIVATE(o, NMSettingPppoe, NM_IS_SETTING_PPPOE, NMSetting) /*****************************************************************************/ @@ -220,8 +218,6 @@ nm_setting_pppoe_class_init(NMSettingPppoeClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingPppoePrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -244,7 +240,8 @@ nm_setting_pppoe_class_init(NMSettingPppoeClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingPppoePrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); /** * NMSettingPppoe:service: @@ -260,7 +257,8 @@ nm_setting_pppoe_class_init(NMSettingPppoeClass *klass) PROP_SERVICE, NM_SETTING_PARAM_NONE, NMSettingPppoePrivate, - service); + service, + .direct_string_allow_empty = TRUE); /** * NMSettingPppoe:username: @@ -273,7 +271,8 @@ nm_setting_pppoe_class_init(NMSettingPppoeClass *klass) PROP_USERNAME, NM_SETTING_PARAM_NONE, NMSettingPppoePrivate, - username); + username, + .direct_string_allow_empty = TRUE); /** * NMSettingPppoe:password: @@ -286,7 +285,8 @@ nm_setting_pppoe_class_init(NMSettingPppoeClass *klass) PROP_PASSWORD, NM_SETTING_PARAM_SECRET, NMSettingPppoePrivate, - password); + password, + .direct_string_allow_empty = TRUE); /** * NMSettingPppoe:password-flags: @@ -306,5 +306,5 @@ nm_setting_pppoe_class_init(NMSettingPppoeClass *klass) NM_META_SETTING_TYPE_PPPOE, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingPppoe, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h index fff6c1cc..9fe49de4 100644 --- a/src/libnm-core-impl/nm-setting-private.h +++ b/src/libnm-core-impl/nm-setting-private.h @@ -6,7 +6,7 @@ #ifndef __NM_SETTING_PRIVATE_H__ #define __NM_SETTING_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) #error Cannot use this header. #endif @@ -20,6 +20,14 @@ /*****************************************************************************/ +/* This holds a property of type NM_VALUE_TYPE_STRV. You probably want + * to use nm_strvarray_*() API with this. */ +typedef struct { + GArray *arr; +} NMValueStrv; + +/*****************************************************************************/ + struct _NMRefString; typedef struct { @@ -80,6 +88,8 @@ void _nm_connection_private_clear(NMConnectionPrivate *priv); /*****************************************************************************/ +struct _NMSettingPrivate; + /** * NMSetting: * @@ -87,15 +97,13 @@ void _nm_connection_private_clear(NMConnectionPrivate *priv); * It should only be accessed through the functions described below. */ struct _NMSetting { - GObject parent; - /* In the past, this struct was public API. Preserve ABI! */ + GObject parent; + struct _NMSettingPrivate *_priv; }; struct _NMSettingClass { GObjectClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - int (*verify)(NMSetting *setting, NMConnection *connection, GError **error); gboolean (*verify_secrets)(NMSetting *setting, NMConnection *connection, GError **error); @@ -120,8 +128,6 @@ struct _NMSettingClass { NMSettingClearSecretsWithFlagsFn func, gpointer user_data); - void (*padding_1)(void); - void (*duplicate_copy_properties)(const struct _NMSettInfoSetting *sett_info, NMSetting *src, NMSetting *dst); @@ -158,58 +164,41 @@ struct _NMSettingClass { */ struct _NMSettingIPConfig { NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ }; struct _NMSettingIPConfigClass { NMSettingClass parent; - - /* In the past, this struct was public API. Preserve ABI! */ - - union { - gpointer _dummy1; - int private_offset; - }; - - union { - gpointer _dummy2; - gint8 addr_family; - }; - - union { - gpointer _dummy3; - bool is_ipv4; - }; - - gpointer padding[5]; + int private_offset; + gint8 addr_family; + bool is_ipv4; }; typedef struct { - GPtrArray *dns; /* array of IP address strings */ - GPtrArray *dns_search; /* array of domain name strings */ - GPtrArray *dns_options; /* array of DNS options */ - GPtrArray *addresses; /* array of NMIPAddress */ - GPtrArray *routes; /* array of NMIPRoute */ - GPtrArray *routing_rules; - GArray *dhcp_reject_servers; - char *method; - char *gateway; - char *dhcp_hostname; - char *dhcp_iaid; - gint64 route_metric; - int auto_route_ext_gw; - int replace_local_rule; - gint32 required_timeout; - gint32 dad_timeout; - gint32 dhcp_timeout; - gint32 dns_priority; - guint32 route_table; - guint32 dhcp_hostname_flags; - bool ignore_auto_routes; - bool ignore_auto_dns; - bool dhcp_send_hostname; - bool never_default; - bool may_fail; + NMValueStrv dns_search; /* array of domain name strings */ + NMValueStrv dhcp_reject_servers; + NMValueStrv dns_options; /* array of DNS options */ + GPtrArray *dns; /* array of IP address strings */ + GPtrArray *addresses; /* array of NMIPAddress */ + GPtrArray *routes; /* array of NMIPRoute */ + GPtrArray *routing_rules; + char *method; + char *gateway; + char *dhcp_hostname; + char *dhcp_iaid; + gint64 route_metric; + int auto_route_ext_gw; + int replace_local_rule; + gint32 required_timeout; + gint32 dad_timeout; + gint32 dhcp_timeout; + gint32 dns_priority; + guint32 route_table; + guint32 dhcp_hostname_flags; + bool ignore_auto_routes; + bool ignore_auto_dns; + bool dhcp_send_hostname; + bool never_default; + bool may_fail; } NMSettingIPConfigPrivate; void _nm_setting_ip_config_private_init(gpointer self, NMSettingIPConfigPrivate *priv); @@ -296,14 +285,6 @@ gboolean _nm_setting_clear_secrets(NMSetting *setting, /*****************************************************************************/ -/* This holds a property of type NM_VALUE_TYPE_STRV. You probably want - * to use nm_strvarray_*() API with this. */ -typedef struct { - GArray *arr; -} NMValueStrv; - -/*****************************************************************************/ - struct _NMRange { int refcount; guint64 start; @@ -350,6 +331,7 @@ extern const NMSettInfoPropertType nm_sett_info_propert_type_setting_name; extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_interface_name; extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_ignore_i; extern const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_ignore_u; +extern const NMSettInfoPropertType nm_sett_info_propert_type_gprop_strv_oldstyle; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_boolean; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_int32; @@ -417,6 +399,18 @@ gboolean _nm_setting_property_from_dbus_fcn_direct(_NM_SETT_INFO_PROP_FROM_DBUS_ gboolean _nm_setting_property_from_dbus_fcn_gprop(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil); +gboolean _nm_setting_connection_controller_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil); + +GVariant *_nm_setting_connection_controller_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil); + +gboolean _nm_setting_connection_master_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil); + +gboolean _nm_setting_connection_port_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil); + +GVariant *_nm_setting_connection_port_type_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil); + +gboolean _nm_setting_connection_slave_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil); + GVariant *_nm_setting_to_dbus(NMSetting *setting, NMConnection *connection, NMConnectionSerializationFlags flags, @@ -438,11 +432,7 @@ const NMSettInfoProperty * _nm_sett_info_property_lookup_by_param_spec(const NMSettInfoSetting *sett_info, const GParamSpec *param_spec); -static inline GArray * -_nm_sett_info_property_override_create_array_sized(guint reserved_size) -{ - return g_array_sized_new(FALSE, FALSE, sizeof(NMSettInfoProperty), reserved_size); -} +GArray *_nm_sett_info_property_override_create_array_sized(guint reserved_size); static inline GArray * _nm_sett_info_property_override_create_array(void) @@ -497,23 +487,30 @@ void _nm_setting_class_commit(NMSettingClass *setting_class, gboolean _nm_properties_override_assert(const NMSettInfoProperty *prop_info); -static inline void +static inline guint _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *prop_info) { nm_assert(properties_override); nm_assert(_nm_properties_override_assert(prop_info)); g_array_append_vals(properties_override, prop_info, 1); + return properties_override->len - 1u; } -#define _nm_properties_override_gobj(properties_override, \ - p_param_spec, \ - p_property_type, \ - ... /* extra NMSettInfoProperty fields */) \ - _nm_properties_override((properties_override), \ - NM_SETT_INFO_PROPERTY(.name = NULL, \ - .param_spec = (p_param_spec), \ - .property_type = (p_property_type), \ - __VA_ARGS__)) +#define _nm_properties_override_gobj(properties_override, \ + p_param_spec, \ + p_property_type, \ + ... /* extra NMSettInfoProperty fields */) \ + ({ \ + GParamSpec *const _p_param_spec_2 = (p_param_spec); \ + \ + nm_assert(_p_param_spec_2); \ + \ + _nm_properties_override((properties_override), \ + NM_SETT_INFO_PROPERTY(.name = _p_param_spec_2->name, \ + .param_spec = _p_param_spec_2, \ + .property_type = (p_property_type), \ + __VA_ARGS__)); \ + }) #define _nm_properties_override_dbus(properties_override, \ p_name, \ @@ -557,12 +554,12 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p \ nm_assert(NM_IN_SET(_default_value, 0, 1)); \ \ - _param_spec = \ - g_param_spec_boolean("" prop_name "", \ - "", \ - "", \ - _default_value, \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_boolean("" prop_name "", \ + "", \ + "", \ + _default_value, \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -600,14 +597,14 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p G_STATIC_ASSERT((default_value) <= (guint64) (max_value)); \ G_STATIC_ASSERT((max_value) <= (guint64) G_MAXUINT32); \ \ - _param_spec = \ - g_param_spec_uint("" prop_name "", \ - "", \ - "", \ - (min_value), \ - (max_value), \ - (default_value), \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_uint("" prop_name "", \ + "", \ + "", \ + (min_value), \ + (max_value), \ + (default_value), \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -646,14 +643,14 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p G_STATIC_ASSERT((default_value) <= (gint64) (max_value)); \ G_STATIC_ASSERT((max_value) <= (gint64) G_MAXUINT32); \ \ - _param_spec = \ - g_param_spec_int("" prop_name "", \ - "", \ - "", \ - (min_value), \ - (max_value), \ - (default_value), \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_int("" prop_name "", \ + "", \ + "", \ + (min_value), \ + (max_value), \ + (default_value), \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -692,14 +689,14 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p G_STATIC_ASSERT((default_value) <= (max_value)); \ G_STATIC_ASSERT((max_value) <= G_MAXINT64); \ \ - _param_spec = \ - g_param_spec_int64("" prop_name "", \ - "", \ - "", \ - (min_value), \ - (max_value), \ - (default_value), \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_int64("" prop_name "", \ + "", \ + "", \ + (min_value), \ + (max_value), \ + (default_value), \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -737,14 +734,14 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p G_STATIC_ASSERT((default_value) == 0 || (default_value) -1u < (max_value)); \ G_STATIC_ASSERT((max_value) <= G_MAXUINT64); \ \ - _param_spec = \ - g_param_spec_uint64("" prop_name "", \ - "", \ - "", \ - (min_value), \ - (max_value), \ - (default_value), \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_uint64("" prop_name "", \ + "", \ + "", \ + (min_value), \ + (max_value), \ + (default_value), \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -769,8 +766,7 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p private_struct_type, \ private_struct_field, \ ... /* extra NMSettInfoProperty fields */) \ - G_STMT_START \ - { \ + ({ \ GParamSpec *_param_spec; \ const NMSettInfoPropertType *_property_type = (property_type); \ \ @@ -782,14 +778,17 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p nm_assert(_property_type); \ nm_assert(g_variant_type_equal(_property_type->dbus_type, "s")); \ nm_assert(_property_type->direct_type == NM_VALUE_TYPE_STRING); \ - nm_assert(_property_type->to_dbus_fcn == _nm_setting_property_to_dbus_fcn_direct); \ + nm_assert(NM_IN_SET(_property_type->to_dbus_fcn, \ + _nm_setting_property_to_dbus_fcn_direct, \ + _nm_setting_connection_controller_to_dbus, \ + _nm_setting_connection_port_type_to_dbus)); \ \ - _param_spec = \ - g_param_spec_string("" prop_name "", \ - "", \ - "", \ - NULL, \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_string("" prop_name "", \ + "", \ + "", \ + NULL, \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -800,8 +799,7 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p .direct_offset = \ NM_STRUCT_OFFSET_ENSURE_TYPE(char *, private_struct_type, private_struct_field), \ __VA_ARGS__); \ - } \ - G_STMT_END + }) #define _nm_setting_property_define_direct_string(properties_override, \ obj_properties, \ @@ -839,12 +837,12 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p ~(NM_SETTING_PARAM_SECRET | NM_SETTING_PARAM_INFERRABLE \ | NM_SETTING_PARAM_FUZZY_IGNORE))); \ \ - _param_spec = \ - g_param_spec_boxed("" prop_name "", \ - "", \ - "", \ - G_TYPE_BYTES, \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_boxed("" prop_name "", \ + "", \ + "", \ + G_TYPE_BYTES, \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -874,12 +872,12 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p \ G_STATIC_ASSERT(!NM_FLAGS_ANY((param_flags), ~(NM_SETTING_PARAM_FUZZY_IGNORE))); \ \ - _param_spec = \ - g_param_spec_boxed("" prop_name "", \ - "", \ - "", \ - G_TYPE_STRV, \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_boxed("" prop_name "", \ + "", \ + "", \ + G_TYPE_STRV, \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -915,13 +913,13 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p ~(NM_SETTING_PARAM_REAPPLY_IMMEDIATELY | NM_SETTING_PARAM_FUZZY_IGNORE \ | NM_SETTING_PARAM_INFERRABLE))); \ \ - _param_spec = \ - g_param_spec_enum("" prop_name "", \ - "", \ - "", \ - (gtype_enum), \ - (default_value), \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_enum("" prop_name "", \ + "", \ + "", \ + (gtype_enum), \ + (default_value), \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -976,13 +974,13 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p !NM_FLAGS_ANY((param_flags), \ ~(NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE))); \ \ - _param_spec = \ - g_param_spec_flags("" prop_name "", \ - "", \ - "", \ - (gtype_flags), \ - (default_value), \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_flags("" prop_name "", \ + "", \ + "", \ + (gtype_flags), \ + (default_value), \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -1035,12 +1033,12 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p | NM_SETTING_PARAM_INFERRABLE \ | NM_SETTING_PARAM_REAPPLY_IMMEDIATELY))); \ \ - _param_spec = \ - g_param_spec_string("" prop_name "", \ - "", \ - "", \ - NULL, \ - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + _param_spec = g_param_spec_string("" prop_name "", \ + "", \ + "", \ + NULL, \ + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY \ + | G_PARAM_STATIC_STRINGS | (param_flags)); \ \ (obj_properties)[(prop_id)] = _param_spec; \ \ @@ -1054,6 +1052,38 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p } \ G_STMT_END +/* This should not be used for new strv properties. Use _nm_setting_property_define_direct_strv(). + * + * FIXME: existing properties should migrate to _nm_setting_property_define_direct_strv(). */ +#define _nm_setting_property_define_gprop_strv_oldstyle(properties_override, \ + obj_properties, \ + prop_name, \ + prop_id, \ + param_flags) \ + G_STMT_START \ + { \ + GParamSpec *_param_spec; \ + \ + G_STATIC_ASSERT(!NM_FLAGS_ANY((param_flags), \ + ~(NM_SETTING_PARAM_SECRET | NM_SETTING_PARAM_FUZZY_IGNORE \ + | NM_SETTING_PARAM_INFERRABLE \ + | NM_SETTING_PARAM_REAPPLY_IMMEDIATELY))); \ + \ + _param_spec = \ + g_param_spec_boxed("" prop_name "", \ + "", \ + "", \ + G_TYPE_STRV, \ + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + \ + (obj_properties)[(prop_id)] = _param_spec; \ + \ + _nm_properties_override_gobj((properties_override), \ + _param_spec, \ + &nm_sett_info_propert_type_gprop_strv_oldstyle); \ + } \ + G_STMT_END + /*****************************************************************************/ gboolean _nm_setting_use_legacy_property(NMSetting *setting, @@ -1098,4 +1128,11 @@ _nm_sett_info_prop_from_dbus_fcn_cloned_mac_address(_NM_SETT_INFO_PROP_FROM_DBUS /*****************************************************************************/ +void _nm_setting_wireless_normalize_mac_address_randomization( + NMSettingWireless *s_wifi, + const char **out_cloned_mac_address, + NMSettingMacRandomization *out_mac_address_randomization); + +/*****************************************************************************/ + #endif /* NM_SETTING_PRIVATE_H */ diff --git a/src/libnm-core-impl/nm-setting-proxy.c b/src/libnm-core-impl/nm-setting-proxy.c index 8b91210b..e50721df 100644 --- a/src/libnm-core-impl/nm-setting-proxy.c +++ b/src/libnm-core-impl/nm-setting-proxy.c @@ -41,19 +41,18 @@ typedef struct { * WWW Proxy Settings */ struct _NMSettingProxy { - NMSetting parent; + NMSetting parent; + NMSettingProxyPrivate _priv; }; struct _NMSettingProxyClass { NMSettingClass parent; - - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingProxy, nm_setting_proxy, NM_TYPE_SETTING) #define NM_SETTING_PROXY_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_PROXY, NMSettingProxyPrivate)) + _NM_GET_PRIVATE(o, NMSettingProxy, NM_IS_SETTING_PROXY, NMSetting) /*****************************************************************************/ @@ -233,8 +232,6 @@ nm_setting_proxy_class_init(NMSettingProxyClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingProxyPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -310,7 +307,8 @@ nm_setting_proxy_class_init(NMSettingProxyClass *klass) PROP_PAC_URL, NM_SETTING_PARAM_NONE, NMSettingProxyPrivate, - pac_url); + pac_url, + .direct_string_allow_empty = TRUE); /** * NMSettingProxy:pac-script: @@ -342,7 +340,8 @@ nm_setting_proxy_class_init(NMSettingProxyClass *klass) PROP_PAC_SCRIPT, NM_SETTING_PARAM_NONE, NMSettingProxyPrivate, - pac_script); + pac_script, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); @@ -350,5 +349,5 @@ nm_setting_proxy_class_init(NMSettingProxyClass *klass) NM_META_SETTING_TYPE_PROXY, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingProxy, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-serial.c b/src/libnm-core-impl/nm-setting-serial.c index 6fe3e487..ab2a8319 100644 --- a/src/libnm-core-impl/nm-setting-serial.c +++ b/src/libnm-core-impl/nm-setting-serial.c @@ -42,20 +42,18 @@ typedef struct { * Serial Link Settings */ struct _NMSettingSerial { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingSerialPrivate _priv; }; struct _NMSettingSerialClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingSerial, nm_setting_serial, NM_TYPE_SETTING) #define NM_SETTING_SERIAL_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_SERIAL, NMSettingSerialPrivate)) + _NM_GET_PRIVATE(o, NMSettingSerial, NM_IS_SETTING_SERIAL, NMSetting) /*****************************************************************************/ @@ -226,8 +224,6 @@ nm_setting_serial_class_init(NMSettingSerialClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingSerialPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; @@ -341,5 +337,5 @@ nm_setting_serial_class_init(NMSettingSerialClass *klass) NM_META_SETTING_TYPE_SERIAL, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingSerial, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-team-port.c b/src/libnm-core-impl/nm-setting-team-port.c index 816d85d9..a881ec5f 100644 --- a/src/libnm-core-impl/nm-setting-team-port.c +++ b/src/libnm-core-impl/nm-setting-team-port.c @@ -41,20 +41,18 @@ typedef struct { * Team Port Settings */ struct _NMSettingTeamPort { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingTeamPortPrivate _priv; }; struct _NMSettingTeamPortClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING) #define NM_SETTING_TEAM_PORT_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortPrivate)) + _NM_GET_PRIVATE(o, NMSettingTeamPort, NM_IS_SETTING_TEAM_PORT, NMSetting) /*****************************************************************************/ @@ -325,7 +323,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (slave_type && strcmp(slave_type, NM_SETTING_TEAM_SETTING_NAME)) { g_set_error(error, NM_CONNECTION_ERROR, @@ -338,7 +336,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE); + NM_SETTING_CONNECTION_PORT_TYPE); return FALSE; } } @@ -532,8 +530,6 @@ nm_setting_team_port_class_init(NMSettingTeamPortClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingTeamPortPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -702,5 +698,5 @@ nm_setting_team_port_class_init(NMSettingTeamPortClass *klass) NM_META_SETTING_TYPE_TEAM_PORT, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingTeamPort, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-team.c b/src/libnm-core-impl/nm-setting-team.c index 83de8b6f..2195757f 100644 --- a/src/libnm-core-impl/nm-setting-team.c +++ b/src/libnm-core-impl/nm-setting-team.c @@ -745,20 +745,18 @@ typedef struct { * Teaming Settings */ struct _NMSettingTeam { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingTeamPrivate _priv; }; struct _NMSettingTeamClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingTeam, nm_setting_team, NM_TYPE_SETTING) #define NM_SETTING_TEAM_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_TEAM, NMSettingTeamPrivate)) + _NM_GET_PRIVATE(o, NMSettingTeam, NM_IS_SETTING_TEAM, NMSetting) /*****************************************************************************/ @@ -1386,8 +1384,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) break; case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH: v_ptrarr = priv->team_setting->d.master.runner_tx_hash; - g_value_take_boxed(value, - v_ptrarr ? _nm_utils_ptrarray_to_strv((GPtrArray *) v_ptrarr) : NULL); + g_value_take_boxed(value, nm_strv_ptrarray_to_strv_full(v_ptrarr, FALSE)); break; case NM_TEAM_ATTRIBUTE_LINK_WATCHERS: g_value_take_boxed(value, @@ -1498,8 +1495,6 @@ nm_setting_team_class_init(NMSettingTeamClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingTeamPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -1842,5 +1837,5 @@ nm_setting_team_class_init(NMSettingTeamClass *klass) NM_META_SETTING_TYPE_TEAM, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingTeam, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-tun.c b/src/libnm-core-impl/nm-setting-tun.c index ec095155..05460104 100644 --- a/src/libnm-core-impl/nm-setting-tun.c +++ b/src/libnm-core-impl/nm-setting-tun.c @@ -46,20 +46,17 @@ typedef struct { * Tunnel Settings */ struct _NMSettingTun { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingTunPrivate _priv; }; struct _NMSettingTunClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingTun, nm_setting_tun, NM_TYPE_SETTING) -#define NM_SETTING_TUN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_TUN, NMSettingTunPrivate)) +#define NM_SETTING_TUN_GET_PRIVATE(o) _NM_GET_PRIVATE(o, NMSettingTun, NM_IS_SETTING_TUN, NMSetting) /*****************************************************************************/ @@ -223,8 +220,6 @@ nm_setting_tun_class_init(NMSettingTunClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingTunPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -265,7 +260,8 @@ nm_setting_tun_class_init(NMSettingTunClass *klass) PROP_OWNER, NM_SETTING_PARAM_INFERRABLE, NMSettingTunPrivate, - owner); + owner, + .direct_string_allow_empty = TRUE); /** * NMSettingTun:group: @@ -281,7 +277,8 @@ nm_setting_tun_class_init(NMSettingTunClass *klass) PROP_GROUP, NM_SETTING_PARAM_INFERRABLE, NMSettingTunPrivate, - group); + group, + .direct_string_allow_empty = TRUE); /** * NMSettingTun:pi: @@ -342,5 +339,5 @@ nm_setting_tun_class_init(NMSettingTunClass *klass) NM_META_SETTING_TYPE_TUN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingTun, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-veth.c b/src/libnm-core-impl/nm-setting-veth.c index 40e3c961..6b84233d 100644 --- a/src/libnm-core-impl/nm-setting-veth.c +++ b/src/libnm-core-impl/nm-setting-veth.c @@ -146,7 +146,8 @@ nm_setting_veth_class_init(NMSettingVethClass *klass) PROP_PEER, NM_SETTING_PARAM_INFERRABLE, NMSettingVeth, - _priv.peer); + _priv.peer, + .direct_string_allow_empty = TRUE); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); diff --git a/src/libnm-core-impl/nm-setting-vlan.c b/src/libnm-core-impl/nm-setting-vlan.c index e5a99ce9..534ed713 100644 --- a/src/libnm-core-impl/nm-setting-vlan.c +++ b/src/libnm-core-impl/nm-setting-vlan.c @@ -49,20 +49,18 @@ typedef struct { * VLAN Settings */ struct _NMSettingVlan { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingVlanPrivate _priv; }; struct _NMSettingVlanClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingVlan, nm_setting_vlan, NM_TYPE_SETTING) #define NM_SETTING_VLAN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_VLAN, NMSettingVlanPrivate)) + _NM_GET_PRIVATE(o, NMSettingVlan, NM_IS_SETTING_VLAN, NMSetting) /*****************************************************************************/ @@ -616,7 +614,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) if (s_con) { const char *master = NULL, *slave_type = NULL; - slave_type = nm_setting_connection_get_slave_type(s_con); + slave_type = nm_setting_connection_get_port_type(s_con); if (!g_strcmp0(slave_type, NM_SETTING_VLAN_SETTING_NAME)) master = nm_setting_connection_get_master(s_con); @@ -626,7 +624,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) NM_CONNECTION_ERROR_INVALID_PROPERTY, _("'%s' value doesn't match '%s=%s'"), priv->parent, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, master); g_prefix_error(error, "%s.%s: ", @@ -848,8 +846,6 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingVlanPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -876,7 +872,8 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingVlanPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); /** * NMSettingVlan:id: @@ -967,7 +964,8 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass) NM_SETTING_PARAM_INFERRABLE, NMSettingVlanPrivate, protocol, - .direct_string_is_refstr = TRUE); + .direct_string_is_refstr = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingVlan:ingress-priority-map: @@ -983,12 +981,11 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass) * example: VLAN_INGRESS_PRIORITY_MAP=4:2,3:5 * ---end--- */ - obj_properties[PROP_INGRESS_PRIORITY_MAP] = g_param_spec_boxed( - NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, + PROP_INGRESS_PRIORITY_MAP, + NM_SETTING_PARAM_INFERRABLE); /** * NMSettingVlan:egress-priority-map: @@ -1004,12 +1001,11 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass) * example: VLAN_EGRESS_PRIORITY_MAP=5:4,4:1,3:7 * ---end--- */ - obj_properties[PROP_EGRESS_PRIORITY_MAP] = g_param_spec_boxed( - NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, + PROP_EGRESS_PRIORITY_MAP, + NM_SETTING_PARAM_INFERRABLE); /* ---ifcfg-rh--- * property: interface-name @@ -1039,5 +1035,5 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass) NM_META_SETTING_TYPE_VLAN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingVlan, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-vpn.c b/src/libnm-core-impl/nm-setting-vpn.c index 5984f773..b867d018 100644 --- a/src/libnm-core-impl/nm-setting-vpn.c +++ b/src/libnm-core-impl/nm-setting-vpn.c @@ -80,20 +80,17 @@ typedef struct { * VPN Settings */ struct _NMSettingVpn { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingVpnPrivate _priv; }; struct _NMSettingVpnClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingVpn, nm_setting_vpn, NM_TYPE_SETTING) -#define NM_SETTING_VPN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_VPN, NMSettingVpnPrivate)) +#define NM_SETTING_VPN_GET_PRIVATE(o) _NM_GET_PRIVATE(o, NMSettingVpn, NM_IS_SETTING_VPN, NMSetting) /*****************************************************************************/ @@ -1067,8 +1064,6 @@ nm_setting_vpn_class_init(NMSettingVpnClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingVpnPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -1095,7 +1090,8 @@ nm_setting_vpn_class_init(NMSettingVpnClass *klass) PROP_SERVICE_TYPE, NM_SETTING_PARAM_NONE, NMSettingVpnPrivate, - service_type); + service_type, + .direct_string_allow_empty = TRUE); /** * NMSettingVpn:user-name: @@ -1113,7 +1109,8 @@ nm_setting_vpn_class_init(NMSettingVpnClass *klass) PROP_USER_NAME, NM_SETTING_PARAM_NONE, NMSettingVpnPrivate, - user_name); + user_name, + .direct_string_allow_empty = TRUE); /** * NMSettingVpn:persistent: @@ -1211,5 +1208,5 @@ nm_setting_vpn_class_init(NMSettingVpnClass *klass) NM_META_SETTING_TYPE_VPN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingVpn, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-vxlan.c b/src/libnm-core-impl/nm-setting-vxlan.c index 3fb4c48d..50abd883 100644 --- a/src/libnm-core-impl/nm-setting-vxlan.c +++ b/src/libnm-core-impl/nm-setting-vxlan.c @@ -66,20 +66,18 @@ typedef struct { * VXLAN Settings */ struct _NMSettingVxlan { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingVxlanPrivate _priv; }; struct _NMSettingVxlanClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingVxlan, nm_setting_vxlan, NM_TYPE_SETTING) #define NM_SETTING_VXLAN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_VXLAN, NMSettingVxlanPrivate)) + _NM_GET_PRIVATE(o, NMSettingVxlan, NM_IS_SETTING_VXLAN, NMSetting) /*****************************************************************************/ @@ -428,8 +426,6 @@ nm_setting_vxlan_class_init(NMSettingVxlanClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingVxlanPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -448,7 +444,8 @@ nm_setting_vxlan_class_init(NMSettingVxlanClass *klass) PROP_PARENT, NM_SETTING_PARAM_INFERRABLE, NMSettingVxlanPrivate, - parent); + parent, + .direct_string_allow_empty = TRUE); /** * NMSettingVxlan:id: @@ -484,7 +481,8 @@ nm_setting_vxlan_class_init(NMSettingVxlanClass *klass) NMSettingVxlanPrivate, local, .direct_set_string_ip_address_addr_family = - AF_UNSPEC + 1); + AF_UNSPEC + 1, + .direct_string_allow_empty = TRUE); /** * NMSettingVxlan:remote: @@ -503,7 +501,8 @@ nm_setting_vxlan_class_init(NMSettingVxlanClass *klass) NMSettingVxlanPrivate, remote, .direct_set_string_ip_address_addr_family = - AF_UNSPEC + 1); + AF_UNSPEC + 1, + .direct_string_allow_empty = TRUE); /** * NMSettingVxlan:source-port-min: @@ -722,5 +721,5 @@ nm_setting_vxlan_class_init(NMSettingVxlanClass *klass) NM_META_SETTING_TYPE_VXLAN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingVxlan, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-wifi-p2p.c b/src/libnm-core-impl/nm-setting-wifi-p2p.c index e8ce4bdc..31dbea5c 100644 --- a/src/libnm-core-impl/nm-setting-wifi-p2p.c +++ b/src/libnm-core-impl/nm-setting-wifi-p2p.c @@ -201,7 +201,8 @@ nm_setting_wifi_p2p_class_init(NMSettingWifiP2PClass *setting_wifi_p2p_class) PROP_PEER, NM_SETTING_PARAM_NONE, NMSettingWifiP2P, - _priv.peer); + _priv.peer, + .direct_string_allow_empty = TRUE); /** * NMSettingWifiP2P:wps-method: diff --git a/src/libnm-core-impl/nm-setting-wimax.c b/src/libnm-core-impl/nm-setting-wimax.c index c33ad3ea..e68aeb3d 100644 --- a/src/libnm-core-impl/nm-setting-wimax.c +++ b/src/libnm-core-impl/nm-setting-wimax.c @@ -41,20 +41,18 @@ typedef struct { * WiMax Settings */ struct _NMSettingWimax { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingWimaxPrivate _priv; }; struct _NMSettingWimaxClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingWimax, nm_setting_wimax, NM_TYPE_SETTING) #define NM_SETTING_WIMAX_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_WIMAX, NMSettingWimaxPrivate)) + _NM_GET_PRIVATE(o, NMSettingWimax, NM_IS_SETTING_WIMAX, NMSetting) /*****************************************************************************/ @@ -157,8 +155,6 @@ nm_setting_wimax_class_init(NMSettingWimaxClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingWimaxPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -179,7 +175,8 @@ nm_setting_wimax_class_init(NMSettingWimaxClass *klass) NM_SETTING_PARAM_NONE, NMSettingWimaxPrivate, network_name, - .is_deprecated = TRUE, ); + .is_deprecated = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingWimax:mac-address: @@ -206,5 +203,5 @@ nm_setting_wimax_class_init(NMSettingWimaxClass *klass) NM_META_SETTING_TYPE_WIMAX, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingWimax, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-wired.c b/src/libnm-core-impl/nm-setting-wired.c index 1ee16df5..e09fd70d 100644 --- a/src/libnm-core-impl/nm-setting-wired.c +++ b/src/libnm-core-impl/nm-setting-wired.c @@ -75,20 +75,18 @@ typedef struct { * Wired Ethernet Settings */ struct _NMSettingWired { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingWiredPrivate _priv; }; struct _NMSettingWiredClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingWired, nm_setting_wired, NM_TYPE_SETTING) #define NM_SETTING_WIRED_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_WIRED, NMSettingWiredPrivate)) + _NM_GET_PRIVATE(o, NMSettingWired, NM_IS_SETTING_WIRED, NMSetting) /*****************************************************************************/ @@ -314,6 +312,8 @@ nm_setting_wired_get_num_mac_blacklist_items(NMSettingWired *setting) * @setting: the #NMSettingWired * @idx: the zero-based index of the MAC address entry * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the blacklisted MAC address string (hex-digits-and-colons notation) * at index @idx **/ @@ -325,7 +325,12 @@ nm_setting_wired_get_mac_blacklist_item(NMSettingWired *setting, guint32 idx) g_return_val_if_fail(NM_IS_SETTING_WIRED(setting), NULL); priv = NM_SETTING_WIRED_GET_PRIVATE(setting); - g_return_val_if_fail(idx <= priv->mac_address_blacklist->len, NULL); + + if (idx == priv->mac_address_blacklist->len) { + return NULL; + } + + g_return_val_if_fail(idx < priv->mac_address_blacklist->len, NULL); return nm_g_array_index(priv->mac_address_blacklist, const char *, idx); } @@ -886,7 +891,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } } - if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address) + if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address, FALSE) && !nm_utils_hwaddr_valid(priv->cloned_mac_address, ETH_ALEN)) { g_set_error(error, NM_CONNECTION_ERROR, @@ -1172,8 +1177,6 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(klass, sizeof(NMSettingWiredPrivate)); - object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; @@ -1200,7 +1203,8 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) PROP_PORT, NM_SETTING_PARAM_NONE, NMSettingWiredPrivate, - port); + port, + .direct_string_allow_empty = TRUE); /** * NMSettingWired:speed: @@ -1266,7 +1270,8 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) PROP_DUPLEX, NM_SETTING_PARAM_NONE, NMSettingWiredPrivate, - duplex); + duplex, + .direct_string_allow_empty = TRUE); /** * NMSettingWired:auto-negotiate: @@ -1455,7 +1460,8 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) PROP_GENERATE_MAC_ADDRESS_MASK, NM_SETTING_PARAM_FUZZY_IGNORE, NMSettingWiredPrivate, - generate_mac_address_mask); + generate_mac_address_mask, + .direct_string_allow_empty = TRUE); /** * NMSettingWired:mac-address-blacklist: @@ -1480,12 +1486,11 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) * example: HWADDR_BLACKLIST="00:22:68:11:69:08 00:11:22:11:44:55" * ---end--- */ - obj_properties[PROP_MAC_ADDRESS_BLACKLIST] = g_param_spec_boxed( - NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, + PROP_MAC_ADDRESS_BLACKLIST, + NM_SETTING_PARAM_FUZZY_IGNORE); /** * NMSettingWired:mtu: @@ -1528,12 +1533,11 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) * example: SUBCHANNELS=0.0.b00a,0.0.b00b,0.0.b00c * ---end--- */ - obj_properties[PROP_S390_SUBCHANNELS] = g_param_spec_boxed( - NM_SETTING_WIRED_S390_SUBCHANNELS, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_WIRED_S390_SUBCHANNELS, + PROP_S390_SUBCHANNELS, + NM_SETTING_PARAM_INFERRABLE); /** * NMSettingWired:s390-nettype: @@ -1555,7 +1559,8 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) PROP_S390_NETTYPE, NM_SETTING_PARAM_INFERRABLE, NMSettingWiredPrivate, - s390_nettype); + s390_nettype, + .direct_string_allow_empty = TRUE); /** * NMSettingWired:s390-options: (type GHashTable(utf8,utf8)) @@ -1643,7 +1648,8 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) PROP_WAKE_ON_LAN_PASSWORD, NM_SETTING_PARAM_NONE, NMSettingWiredPrivate, - wol_password); + wol_password, + .direct_string_allow_empty = TRUE); /** * NMSettingWired:accept-all-mac-addresses: @@ -1675,5 +1681,5 @@ nm_setting_wired_class_init(NMSettingWiredClass *klass) NM_META_SETTING_TYPE_WIRED, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingWired, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-wireguard.c b/src/libnm-core-impl/nm-setting-wireguard.c index b0e3f66c..1e7ed05b 100644 --- a/src/libnm-core-impl/nm-setting-wireguard.c +++ b/src/libnm-core-impl/nm-setting-wireguard.c @@ -1318,7 +1318,7 @@ _peers_set(NMSettingWireGuardPrivate *priv, }; g_ptr_array_add(priv->peers_arr, pd_same_key); - if (!nm_g_hash_table_add(priv->peers_hash, pd_same_key)) + if (!g_hash_table_add(priv->peers_hash, pd_same_key)) nm_assert_not_reached(); nm_assert(_peers_get(priv, pd_same_key->idx) == pd_same_key); @@ -2362,8 +2362,9 @@ nm_setting_wireguard_class_init(NMSettingWireGuardClass *klass) NM_SETTING_PARAM_SECRET, NMSettingWireGuard, _priv.private_key, - .direct_hook.set_string_fcn = - _set_string_fcn_public_key); + .direct_set_fcn.set_string = + _set_string_fcn_public_key, + .direct_string_allow_empty = TRUE); /** * NMSettingWireGuard:private-key-flags: diff --git a/src/libnm-core-impl/nm-setting-wireless-security.c b/src/libnm-core-impl/nm-setting-wireless-security.c index a7d12df4..e420b32b 100644 --- a/src/libnm-core-impl/nm-setting-wireless-security.c +++ b/src/libnm-core-impl/nm-setting-wireless-security.c @@ -90,22 +90,18 @@ typedef struct { * Wi-Fi Security Settings */ struct _NMSettingWirelessSecurity { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingWirelessSecurityPrivate _priv; }; struct _NMSettingWirelessSecurityClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingWirelessSecurity, nm_setting_wireless_security, NM_TYPE_SETTING) -#define NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), \ - NM_TYPE_SETTING_WIRELESS_SECURITY, \ - NMSettingWirelessSecurityPrivate)) +#define NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE(o) \ + _NM_GET_PRIVATE(o, NMSettingWirelessSecurity, NM_IS_SETTING_WIRELESS_SECURITY, NMSetting) /*****************************************************************************/ @@ -1387,9 +1383,7 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); NMSettingClass *setting_class = NM_SETTING_CLASS(klass); - GArray *properties_override = _nm_sett_info_property_override_create_array(); - - g_type_class_add_private(klass, sizeof(NMSettingWirelessSecurityPrivate)); + GArray *properties_override = _nm_sett_info_property_override_create_array_sized(25); object_class->get_property = get_property; object_class->set_property = set_property; @@ -1426,7 +1420,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) NM_SETTING_PARAM_REQUIRED, NMSettingWirelessSecurityPrivate, key_mgmt, - .direct_set_string_ascii_strdown = TRUE); + .direct_set_string_ascii_strdown = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:wep-tx-keyidx: @@ -1479,7 +1474,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) NM_SETTING_PARAM_NONE, NMSettingWirelessSecurityPrivate, auth_alg, - .direct_set_string_ascii_strdown = TRUE); + .direct_set_string_ascii_strdown = TRUE, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:proto: @@ -1496,11 +1492,11 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) * description: Allowed WPA protocols, WPA and WPA2 (RSN). * ---end--- */ - obj_properties[PROP_PROTO] = g_param_spec_boxed(NM_SETTING_WIRELESS_SECURITY_PROTO, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_WIRELESS_SECURITY_PROTO, + PROP_PROTO, + NM_SETTING_PARAM_NONE); /** * NMSettingWirelessSecurity:pairwise: @@ -1518,11 +1514,11 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) * separated list. * ---end--- */ - obj_properties[PROP_PAIRWISE] = g_param_spec_boxed(NM_SETTING_WIRELESS_SECURITY_PAIRWISE, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_WIRELESS_SECURITY_PAIRWISE, + PROP_PAIRWISE, + NM_SETTING_PARAM_NONE); /** * NMSettingWirelessSecurity:group: @@ -1540,11 +1536,11 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) * separated list. * ---end--- */ - obj_properties[PROP_GROUP] = g_param_spec_boxed(NM_SETTING_WIRELESS_SECURITY_GROUP, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_WIRELESS_SECURITY_GROUP, + PROP_GROUP, + NM_SETTING_PARAM_NONE); /** * NMSettingWirelessSecurity:pmf: @@ -1597,7 +1593,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_LEAP_USERNAME, NM_SETTING_PARAM_NONE, NMSettingWirelessSecurityPrivate, - leap_username); + leap_username, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:wep-key0: @@ -1617,7 +1614,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_WEP_KEY0, NM_SETTING_PARAM_SECRET, NMSettingWirelessSecurityPrivate, - wep_key0); + wep_key0, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:wep-key1: @@ -1637,7 +1635,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_WEP_KEY1, NM_SETTING_PARAM_SECRET, NMSettingWirelessSecurityPrivate, - wep_key1); + wep_key1, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:wep-key2: @@ -1657,7 +1656,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_WEP_KEY2, NM_SETTING_PARAM_SECRET, NMSettingWirelessSecurityPrivate, - wep_key2); + wep_key2, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:wep-key3: @@ -1677,7 +1677,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_WEP_KEY3, NM_SETTING_PARAM_SECRET, NMSettingWirelessSecurityPrivate, - wep_key3); + wep_key3, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:wep-key-flags: @@ -1721,7 +1722,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_PSK, NM_SETTING_PARAM_SECRET, NMSettingWirelessSecurityPrivate, - psk); + psk, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:psk-flags: @@ -1763,7 +1765,8 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) PROP_LEAP_PASSWORD, NM_SETTING_PARAM_SECRET, NMSettingWirelessSecurityPrivate, - leap_password); + leap_password, + .direct_string_allow_empty = TRUE); /** * NMSettingWirelessSecurity:leap-password-flags: @@ -1894,5 +1897,5 @@ nm_setting_wireless_security_class_init(NMSettingWirelessSecurityClass *klass) NM_META_SETTING_TYPE_WIRELESS_SECURITY, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingWirelessSecurity, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-wireless.c b/src/libnm-core-impl/nm-setting-wireless.c index e2cd1f49..152bbde3 100644 --- a/src/libnm-core-impl/nm-setting-wireless.c +++ b/src/libnm-core-impl/nm-setting-wireless.c @@ -72,20 +72,18 @@ typedef struct { * Wi-Fi Settings */ struct _NMSettingWireless { - NMSetting parent; - /* In the past, this struct was public API. Preserve ABI! */ + NMSetting parent; + NMSettingWirelessPrivate _priv; }; struct _NMSettingWirelessClass { NMSettingClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; G_DEFINE_TYPE(NMSettingWireless, nm_setting_wireless, NM_TYPE_SETTING) #define NM_SETTING_WIRELESS_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessPrivate)) + _NM_GET_PRIVATE(o, NMSettingWireless, NM_IS_SETTING_WIRELESS, NMSetting) /*****************************************************************************/ @@ -499,6 +497,8 @@ nm_setting_wireless_get_num_mac_blacklist_items(NMSettingWireless *setting) * @setting: the #NMSettingWireless * @idx: the zero-based index of the MAC address entry * + * Since 1.46, access at index "len" is allowed and returns NULL. + * * Returns: the blacklisted MAC address string (hex-digits-and-colons notation) * at index @idx **/ @@ -510,7 +510,12 @@ nm_setting_wireless_get_mac_blacklist_item(NMSettingWireless *setting, guint32 i g_return_val_if_fail(NM_IS_SETTING_WIRELESS(setting), NULL); priv = NM_SETTING_WIRELESS_GET_PRIVATE(setting); - g_return_val_if_fail(idx <= priv->mac_address_blacklist->len, NULL); + + if (idx == priv->mac_address_blacklist->len) { + return NULL; + } + + g_return_val_if_fail(idx < priv->mac_address_blacklist->len, NULL); return nm_g_array_index(priv->mac_address_blacklist, const char *, idx); } @@ -824,6 +829,49 @@ nm_setting_wireless_get_ap_isolation(NMSettingWireless *setting) /*****************************************************************************/ +void +_nm_setting_wireless_normalize_mac_address_randomization( + NMSettingWireless *s_wifi, + const char **out_cloned_mac_address, + NMSettingMacRandomization *out_mac_address_randomization) +{ + NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE(s_wifi); + guint32 mac_address_randomization; + const char *cloned_mac_address; + + mac_address_randomization = priv->mac_address_randomization; + cloned_mac_address = priv->cloned_mac_address; + + if (cloned_mac_address) { + /* If cloned_mac_address is set, it takes precedence and determines + * mac_address_randomization. */ + if (nm_streq(cloned_mac_address, "random")) + mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_ALWAYS; + else if (nm_streq(cloned_mac_address, "permanent")) + mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_NEVER; + else + mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_DEFAULT; + } else if (!NM_IN_SET(mac_address_randomization, + NM_SETTING_MAC_RANDOMIZATION_DEFAULT, + NM_SETTING_MAC_RANDOMIZATION_NEVER, + NM_SETTING_MAC_RANDOMIZATION_ALWAYS)) { + /* cloned_mac_address is NULL and mac_address_randomization is invalid. Normalize + * mac_address_randomization to the default. */ + mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_DEFAULT; + } else if (mac_address_randomization != NM_SETTING_MAC_RANDOMIZATION_DEFAULT) { + /* mac_address_randomization is not (guint32)set to the default. cloned_mac_address gets + * overwritten. */ + cloned_mac_address = mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS + ? "random" + : "permanent"; + } + + *out_cloned_mac_address = cloned_mac_address; + *out_mac_address_randomization = mac_address_randomization; +} + +/*****************************************************************************/ + static gboolean verify(NMSetting *setting, NMConnection *connection, GError **error) { @@ -837,6 +885,8 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) guint i; gsize length; GError *local = NULL; + const char *desired_cloned_mac_address; + NMSettingMacRandomization desired_mac_address_randomization; if (!priv->ssid) { g_set_error_literal(error, @@ -958,7 +1008,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } - if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address) + if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address, TRUE) && !nm_utils_hwaddr_valid(priv->cloned_mac_address, ETH_ALEN)) { g_set_error_literal(error, NM_CONNECTION_ERROR, @@ -1082,27 +1132,21 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) /* from here on, check for NM_SETTING_VERIFY_NORMALIZABLE conditions. */ - if (priv->cloned_mac_address) { - if (priv->mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS - && nm_streq(priv->cloned_mac_address, "random")) - goto mac_addr_rand_ok; - if (priv->mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_NEVER - && nm_streq(priv->cloned_mac_address, "permanent")) - goto mac_addr_rand_ok; - if (priv->mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_DEFAULT) - goto mac_addr_rand_ok; - } else if (priv->mac_address_randomization == NM_SETTING_MAC_RANDOMIZATION_DEFAULT) - goto mac_addr_rand_ok; - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("conflicting value of mac-address-randomization and cloned-mac-address")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS); - return NM_SETTING_VERIFY_NORMALIZABLE; -mac_addr_rand_ok: + _nm_setting_wireless_normalize_mac_address_randomization(NM_SETTING_WIRELESS(setting), + &desired_cloned_mac_address, + &desired_mac_address_randomization); + if (desired_mac_address_randomization != priv->mac_address_randomization + || !nm_streq0(desired_cloned_mac_address, priv->cloned_mac_address)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("conflicting value of mac-address-randomization and cloned-mac-address")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_WIRELESS_SETTING_NAME, + NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS); + return NM_SETTING_VERIFY_NORMALIZABLE; + } if (priv->tx_power != 0 || priv->rate != 0) { g_set_error(error, @@ -1209,25 +1253,33 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE(object); + NMSettingWireless *self = NM_SETTING_WIRELESS(object); + NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE(self); const char *const *blacklist; const char *mac; gboolean bool_val; + _PropertyEnums prop1 = PROP_0; + _PropertyEnums prop2 = PROP_0; switch (prop_id) { case PROP_CLONED_MAC_ADDRESS: bool_val = !!priv->cloned_mac_address; - g_free(priv->cloned_mac_address); - priv->cloned_mac_address = - _nm_utils_hwaddr_canonical_or_invalid(g_value_get_string(value), ETH_ALEN); + + if (nm_strdup_reset_take( + &priv->cloned_mac_address, + _nm_utils_hwaddr_canonical_or_invalid(g_value_get_string(value), ETH_ALEN))) + prop1 = prop_id; + if (bool_val && !priv->cloned_mac_address) { /* cloned-mac-address was set before but was now explicitly cleared. * In this case, we also clear mac-address-randomization flag */ if (priv->mac_address_randomization != NM_SETTING_MAC_RANDOMIZATION_DEFAULT) { priv->mac_address_randomization = NM_SETTING_MAC_RANDOMIZATION_DEFAULT; - _notify(NM_SETTING_WIRELESS(object), PROP_MAC_ADDRESS_RANDOMIZATION); + prop2 = PROP_MAC_ADDRESS_RANDOMIZATION; } } + + nm_gobject_notify_together(self, prop1, prop2); break; case PROP_MAC_ADDRESS_BLACKLIST: blacklist = g_value_get_boxed(value); @@ -1307,9 +1359,7 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); NMSettingClass *setting_class = NM_SETTING_CLASS(klass); - GArray *properties_override = _nm_sett_info_property_override_create_array(); - - g_type_class_add_private(klass, sizeof(NMSettingWirelessPrivate)); + GArray *properties_override = _nm_sett_info_property_override_create_array_sized(25); object_class->set_property = set_property; object_class->get_property = get_property; @@ -1363,7 +1413,8 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) PROP_MODE, NM_SETTING_PARAM_NONE, NMSettingWirelessPrivate, - mode); + mode, + .direct_string_allow_empty = TRUE); /** * NMSettingWireless:band: @@ -1390,7 +1441,8 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) PROP_BAND, NM_SETTING_PARAM_NONE, NMSettingWirelessPrivate, - band); + band, + .direct_string_allow_empty = TRUE); /** * NMSettingWireless:channel: @@ -1539,12 +1591,14 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) * This is known as MAC cloning or spoofing. * * Beside explicitly specifying a MAC address, the special values "preserve", "permanent", - * "random" and "stable" are supported. + * "random", "stable" and "stable-ssid" are supported. * "preserve" means not to touch the MAC address on activation. * "permanent" means to use the permanent hardware address of the device. * "random" creates a random MAC address on each connect. * "stable" creates a hashed MAC address based on connection.stable-id and a * machine dependent key. + * "stable-ssid" creates a hashed MAC address based on the SSID, the same as setting the + * stable-id to "${NETWORK_SSID}". * * If unspecified, the value can be overwritten via global defaults, see manual * of NetworkManager.conf. If still unspecified, it defaults to "preserve" @@ -1576,12 +1630,13 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) * For libnm and nmcli, this field is called "cloned-mac-address". * ---end--- */ - obj_properties[PROP_CLONED_MAC_ADDRESS] = g_param_spec_string( - NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, - "", - "", - NULL, - G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_CLONED_MAC_ADDRESS] = + g_param_spec_string(NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, + "", + "", + NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY + | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); _nm_properties_override_gobj( properties_override, obj_properties[PROP_CLONED_MAC_ADDRESS], @@ -1654,7 +1709,8 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) PROP_GENERATE_MAC_ADDRESS_MASK, NM_SETTING_PARAM_FUZZY_IGNORE, NMSettingWirelessPrivate, - generate_mac_address_mask); + generate_mac_address_mask, + .direct_string_allow_empty = TRUE); /** * NMSettingWireless:mac-address-blacklist: @@ -1677,12 +1733,11 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) * is listed. * ---end--- */ - obj_properties[PROP_MAC_ADDRESS_BLACKLIST] = g_param_spec_boxed( - NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_gprop_strv_oldstyle(properties_override, + obj_properties, + NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, + PROP_MAC_ADDRESS_BLACKLIST, + NM_SETTING_PARAM_FUZZY_IGNORE); /** * NMSettingWireless:seen-bssids: @@ -1925,5 +1980,5 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) NM_META_SETTING_TYPE_WIRELESS, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingWireless, _priv)); } diff --git a/src/libnm-core-impl/nm-setting-wpan.c b/src/libnm-core-impl/nm-setting-wpan.c index bc84b01e..ba947a86 100644 --- a/src/libnm-core-impl/nm-setting-wpan.c +++ b/src/libnm-core-impl/nm-setting-wpan.c @@ -57,7 +57,8 @@ typedef struct { * Since: 1.14 */ struct _NMSettingWpan { - NMSetting parent; + NMSetting parent; + NMSettingWpanPrivate _priv; }; struct _NMSettingWpanClass { @@ -67,7 +68,7 @@ struct _NMSettingWpanClass { G_DEFINE_TYPE(NMSettingWpan, nm_setting_wpan, NM_TYPE_SETTING) #define NM_SETTING_WPAN_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_WPAN, NMSettingWpanPrivate)) + _NM_GET_PRIVATE(o, NMSettingWpan, NM_IS_SETTING_WPAN, NMSetting) /*****************************************************************************/ @@ -228,8 +229,6 @@ nm_setting_wpan_class_init(NMSettingWpanClass *klass) NMSettingClass *setting_class = NM_SETTING_CLASS(klass); GArray *properties_override = _nm_sett_info_property_override_create_array(); - g_type_class_add_private(setting_class, sizeof(NMSettingWpanPrivate)); - object_class->get_property = _nm_setting_property_get_property_direct; object_class->set_property = _nm_setting_property_set_property_direct; @@ -256,7 +255,8 @@ nm_setting_wpan_class_init(NMSettingWpanClass *klass) NMSettingWpanPrivate, mac_address, .direct_set_string_mac_address_len = - IEEE802154_ADDR_LEN); + IEEE802154_ADDR_LEN, + .direct_string_allow_empty = TRUE); /** * NMSettingWpan:pan-id: @@ -334,5 +334,5 @@ nm_setting_wpan_class_init(NMSettingWpanClass *klass) NM_META_SETTING_TYPE_WPAN, NULL, properties_override, - NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); + G_STRUCT_OFFSET(NMSettingWpan, _priv)); } diff --git a/src/libnm-core-impl/nm-setting.c b/src/libnm-core-impl/nm-setting.c index 276dfd34..758338e5 100644 --- a/src/libnm-core-impl/nm-setting.c +++ b/src/libnm-core-impl/nm-setting.c @@ -11,7 +11,6 @@ #include "libnm-core-intern/nm-core-internal.h" #include "libnm-glib-aux/nm-ref-string.h" #include "libnm-glib-aux/nm-secret-utils.h" -#include "nm-property-compare.h" #include "nm-setting-private.h" #include "nm-utils-private.h" #include "nm-utils.h" @@ -58,14 +57,13 @@ typedef struct { NM_GOBJECT_PROPERTIES_DEFINE(NMSetting, PROP_NAME, ); -typedef struct { +typedef struct _NMSettingPrivate { GenData *gendata; } NMSettingPrivate; G_DEFINE_ABSTRACT_TYPE(NMSetting, nm_setting, G_TYPE_OBJECT) -#define NM_SETTING_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING, NMSettingPrivate)) +#define NM_SETTING_GET_PRIVATE(o) _NM_GET_PRIVATE_PTR(o, NMSetting, NM_IS_SETTING) /*****************************************************************************/ @@ -165,7 +163,7 @@ _nm_setting_slave_type_is_valid(const char *slave_type, const char **out_port_ty /*****************************************************************************/ -static const NMSettInfoProperty * +_nm_unused static const NMSettInfoProperty * _nm_sett_info_property_find_in_array(const NMSettInfoProperty *properties, guint len, const char *name) @@ -184,9 +182,8 @@ _nm_properties_override_assert(const NMSettInfoProperty *prop_info) { #if NM_MORE_ASSERTS nm_assert(prop_info); - nm_assert((!!prop_info->name) != (!!prop_info->param_spec)); - nm_assert(!prop_info->param_spec || !prop_info->name - || nm_streq0(prop_info->name, prop_info->param_spec->name)); + nm_assert(prop_info->name); + nm_assert(!prop_info->param_spec || prop_info->name == prop_info->param_spec->name); if (prop_info->property_type) { const NMSettInfoPropertType *property_type = prop_info->property_type; @@ -209,6 +206,34 @@ _nm_properties_override_assert(const NMSettInfoProperty *prop_info) return TRUE; } +GArray * +_nm_sett_info_property_override_create_array_sized(guint reserved_size) +{ + GArray *properties_override; + GParamSpec *param_spec; + + /* pre-allocate a relatively large buffer to avoid frequent re-allocations. + * Note that the buffer is only short-lived and will be destroyed by + * _nm_setting_class_commit(). */ + properties_override = + g_array_sized_new(FALSE, FALSE, sizeof(NMSettInfoProperty), reserved_size); + + /* The "name" property is special because it's defined in the + * parent class NMSetting. We add the property info right here. + */ + param_spec = obj_properties[PROP_NAME]; + nm_assert(param_spec); + nm_assert(nm_streq0(param_spec->name, NM_SETTING_NAME)); + nm_assert(param_spec + == g_object_class_find_property(g_type_class_peek(NM_TYPE_SETTING), NM_SETTING_NAME)); + nm_assert(!NM_FLAGS_HAS(param_spec->flags, G_PARAM_WRITABLE)); + _nm_properties_override_gobj(properties_override, + param_spec, + &nm_sett_info_propert_type_setting_name); + + return properties_override; +} + static NMSettInfoSetting _sett_info_settings[_NM_META_SETTING_TYPE_NUM]; const NMSettInfoSetting * @@ -224,10 +249,8 @@ _property_infos_sort_cmp_setting_connection(gconstpointer p_a, { const NMSettInfoProperty *a = *((const NMSettInfoProperty *const *) p_a); const NMSettInfoProperty *b = *((const NMSettInfoProperty *const *) p_b); - int c_name; - c_name = strcmp(a->name, b->name); - nm_assert(c_name != 0); + nm_assert(a->name && b->name && !nm_streq(a->name, b->name)); #define CMP_AND_RETURN(n_a, n_b, name) \ G_STMT_START \ @@ -240,15 +263,14 @@ _property_infos_sort_cmp_setting_connection(gconstpointer p_a, G_STMT_END /* for [connection], report first id, uuid, type in that order. */ - if (c_name != 0) { - CMP_AND_RETURN(a->name, b->name, NM_SETTING_CONNECTION_ID); - CMP_AND_RETURN(a->name, b->name, NM_SETTING_CONNECTION_UUID); - CMP_AND_RETURN(a->name, b->name, NM_SETTING_CONNECTION_TYPE); - } + CMP_AND_RETURN(a->name, b->name, NM_SETTING_CONNECTION_ID); + CMP_AND_RETURN(a->name, b->name, NM_SETTING_CONNECTION_UUID); + CMP_AND_RETURN(a->name, b->name, NM_SETTING_CONNECTION_TYPE); #undef CMP_AND_RETURN - return c_name; + NM_CMP_FIELD_STR(a, b, name); + return nm_assert_unreachable_val(0); } static const NMSettInfoProperty *const * @@ -306,12 +328,14 @@ _nm_setting_class_commit(NMSettingClass *setting_class, GArray *properties_override, gint16 private_offset) { - NMSettInfoSetting *sett_info; - gs_free GParamSpec **property_specs = NULL; - guint n_property_specs; + NMSettInfoSetting *sett_info; +#if NM_MORE_ASSERTS > 10 + gs_free GParamSpec **property_specs = NULL; + guint n_property_specs; + guint i; +#endif NMSettInfoPropertLookupByParamSpec *lookup_by_iter; guint override_len; - guint i; guint16 j; nm_assert(NM_IS_SETTING_CLASS(setting_class)); @@ -325,37 +349,28 @@ _nm_setting_class_commit(NMSettingClass *setting_class, nm_assert(!sett_info->property_infos_len); nm_assert(!sett_info->property_infos); - property_specs = - g_object_class_list_properties(G_OBJECT_CLASS(setting_class), &n_property_specs); - - if (!properties_override) { - override_len = 0; - properties_override = _nm_sett_info_property_override_create_array_sized(n_property_specs); - } else { - override_len = properties_override->len; + if (!properties_override) + properties_override = _nm_sett_info_property_override_create_array_sized(1); - for (i = 0; i < override_len; i++) { - NMSettInfoProperty *p = &nm_g_array_index(properties_override, NMSettInfoProperty, i); + override_len = properties_override->len; - nm_assert((!!p->name) != (!!p->param_spec)); - - if (!p->name) { - nm_assert(p->param_spec); - p->name = p->param_spec->name; - } else - nm_assert(!p->param_spec); - } - } + nm_assert(override_len > 0); #if NM_MORE_ASSERTS > 10 + property_specs = + g_object_class_list_properties(G_OBJECT_CLASS(setting_class), &n_property_specs); + /* assert that properties_override is constructed consistently. */ for (i = 0; i < override_len; i++) { const NMSettInfoProperty *p = &nm_g_array_index(properties_override, NMSettInfoProperty, i); gboolean found = FALSE; guint k; + nm_assert(p->name); + nm_assert(!p->param_spec || p->name == p->param_spec->name); + nm_assert(!_nm_sett_info_property_find_in_array( - nm_g_array_index_p(properties_override, NMSettInfoProperty, 0), + nm_g_array_first_p(properties_override, NMSettInfoProperty), i, p->name)); for (k = 0; k < n_property_specs; k++) { @@ -367,79 +382,38 @@ _nm_setting_class_commit(NMSettingClass *setting_class, } nm_assert(found == (p->param_spec != NULL)); } -#endif for (i = 0; i < n_property_specs; i++) { - const char *name = property_specs[i]->name; - NMSettInfoProperty *p; - - if (_nm_sett_info_property_find_in_array( - nm_g_array_index_p(properties_override, NMSettInfoProperty, 0), - override_len, - name)) - continue; - - p = nm_g_array_append_new(properties_override, NMSettInfoProperty); - memset(p, 0, sizeof(*p)); - p->name = name; - p->param_spec = property_specs[i]; + const GParamSpec *param_spec = property_specs[i]; + const char *name = param_spec->name; + const NMSettInfoProperty *p; + + p = _nm_sett_info_property_find_in_array( + nm_g_array_first_p(properties_override, NMSettInfoProperty), + override_len, + name); + nm_assert(p); + nm_assert(p->param_spec); + nm_assert(p->param_spec == param_spec); } for (i = 0; i < properties_override->len; i++) { NMSettInfoProperty *p = &nm_g_array_index(properties_override, NMSettInfoProperty, i); - GType vtype; - - if (p->property_type) - goto has_property_type; - - nm_assert(p->param_spec); - - vtype = p->param_spec->value_type; - if (vtype == G_TYPE_STRING) { - /* The "name" property is a bit special because it's defined in the - * parent class NMSetting. We set the property_type here, because - * it's more convenient (albeit a bit ugly). - * - * FIXME: let _nm_sett_info_property_override_create_array() always add - * the handling of the name property.*/ - nm_assert(nm_streq(p->name, NM_SETTING_NAME)); - nm_assert(!NM_FLAGS_HAS(p->param_spec->flags, G_PARAM_WRITABLE)); - p->property_type = &nm_sett_info_propert_type_setting_name; - goto has_property_type; - } - - if (vtype == G_TYPE_STRV) - p->property_type = NM_SETT_INFO_PROPERT_TYPE_GPROP( - G_VARIANT_TYPE_STRING_ARRAY, - .compare_fcn = _nm_setting_property_compare_fcn_default, - .from_dbus_fcn = _nm_setting_property_from_dbus_fcn_gprop, - .from_dbus_is_full = TRUE); - else - nm_assert_not_reached(); - -has_property_type: nm_assert(p->property_type); nm_assert(p->property_type->dbus_type); nm_assert(g_variant_type_string_is_valid((const char *) p->property_type->dbus_type)); + nm_assert(p->name); + nm_assert(!p->param_spec || nm_streq0(p->name, p->param_spec->name)); } +#endif G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NMSettInfoProperty, name) == 0); g_array_sort(properties_override, nm_strcmp_p); setting_class->setting_info = &nm_meta_setting_infos[meta_type]; sett_info->setting_class = setting_class; - - if (private_offset == NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS) { - int o; - - o = g_type_class_get_instance_private_offset(setting_class); - nm_assert(o != NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS); - nm_assert(o > G_MININT16); - nm_assert(o < 0); - private_offset = o; - } - sett_info->private_offset = private_offset; + sett_info->private_offset = private_offset; if (detail) sett_info->detail = *detail; @@ -708,10 +682,10 @@ _property_direct_set_string(const NMSettInfoSetting *sett_info, + (!!property_info->direct_string_is_refstr) + (property_info->direct_set_string_mac_address_len > 0) + (property_info->direct_set_string_ip_address_addr_family != 0)) - <= (property_info->direct_hook.set_string_fcn ? 0 : 1)); + <= (property_info->direct_set_fcn.set_string ? 0 : 1)); - if (property_info->direct_hook.set_string_fcn) { - return property_info->direct_hook.set_string_fcn(sett_info, property_info, setting, src); + if (property_info->direct_set_fcn.set_string) { + return property_info->direct_set_fcn.set_string(sett_info, property_info, setting, src); } dst = _nm_setting_get_private_field(setting, sett_info, property_info); @@ -754,6 +728,24 @@ out_take: return nm_strdup_reset_take(dst, s); } +static gboolean +_property_direct_set_strv(const NMSettInfoSetting *sett_info, + const NMSettInfoProperty *property_info, + NMSetting *setting, + const char *const *strv) +{ + NMValueStrv *p_val = _nm_setting_get_private_field(setting, sett_info, property_info); + + if (!property_info->direct_strv_preserve_empty && strv && !strv[0]) + strv = NULL; + + if (nm_strvarray_equal_strv(p_val->arr, strv, -1)) + return FALSE; + + nm_strvarray_set_strv_full(&p_val->arr, strv, property_info->direct_strv_preserve_empty); + return TRUE; +} + void _nm_setting_property_get_property_direct(GObject *object, guint prop_id, @@ -842,14 +834,19 @@ _nm_setting_property_get_property_direct(GObject *object, { const NMValueStrv *p_val = _nm_setting_get_private_field(setting, sett_info, property_info); - g_value_take_boxed(value, nm_strvarray_get_strv_non_empty_dup(p_val->arr, NULL)); + g_value_take_boxed( + value, + nm_strvarray_get_strv_full_dup(p_val->arr, + NULL, + FALSE, + property_info->direct_strv_preserve_empty)); return; } default: goto out_fail; } - return; + nm_assert_not_reached(); out_fail: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -981,28 +978,22 @@ _nm_setting_property_set_property_direct(GObject *object, goto out_notify; } case NM_VALUE_TYPE_STRV: - { - NMValueStrv *p_val = _nm_setting_get_private_field(setting, sett_info, property_info); - const char *const *v; - - v = g_value_get_boxed(value); - if (nm_strvarray_equal_strv(p_val->arr, v, -1)) + if (!_property_direct_set_strv(sett_info, property_info, setting, g_value_get_boxed(value))) return; - - nm_strvarray_set_strv(&p_val->arr, v); goto out_notify; - } default: goto out_fail; } - return; + nm_assert_not_reached(); out_notify: - /* If explicit-notify would be set, we would need to emit g_object_notify_by_pspec(). - * - * Currently we never set that, also because we still support glib 2.40. */ - nm_assert(!NM_FLAGS_HAS(pspec->flags, 1 << 30 /* G_PARAM_EXPLICIT_NOTIFY */)); + nm_assert(NM_FLAGS_HAS(pspec->flags, G_PARAM_EXPLICIT_NOTIFY)); + + nm_gobject_notify_together_by_pspec(object, + property_info->param_spec, + property_info->direct_also_notify); + return; out_fail: @@ -1306,6 +1297,11 @@ _nm_setting_property_to_dbus_fcn_direct(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_ (const NMValueStrv *) _nm_setting_get_private_field(setting, sett_info, property_info); if (!val->arr) return NULL; + if (!property_info->direct_strv_preserve_empty && val->arr->len == 0) { + /* This property does not treat empty strv arrays special. No need + * to export the value on D-Bus. */ + return NULL; + } return g_variant_new_strv(nm_g_array_data(val->arr), val->arr->len); } default: @@ -1393,7 +1389,9 @@ _nm_setting_property_from_dbus_fcn_direct_mac_address(_NM_SETT_INFO_PROP_FROM_DB if (nm_strdup_reset_take(_nm_setting_get_private_field(setting, sett_info, property_info), length > 0 ? nm_utils_hwaddr_ntoa(array, length) : NULL)) { - g_object_notify_by_pspec(G_OBJECT(setting), property_info->param_spec); + nm_gobject_notify_together_by_pspec(setting, + property_info->param_spec, + property_info->direct_also_notify); } else *out_is_modified = FALSE; @@ -1670,7 +1668,6 @@ _nm_setting_property_from_dbus_fcn_direct(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS } case NM_VALUE_TYPE_STRV: { - NMValueStrv *p_val; gs_free const char **ss = NULL; gsize ss_len; @@ -1681,13 +1678,10 @@ _nm_setting_property_from_dbus_fcn_direct(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS ss = g_variant_get_strv(value, &ss_len); nm_assert(ss_len <= G_MAXUINT); + nm_assert(NM_PTRARRAY_LEN(ss) == ss_len); - p_val = _nm_setting_get_private_field(setting, sett_info, property_info); - - if (nm_strvarray_equal_strv(p_val->arr, ss, ss_len)) + if (!_property_direct_set_strv(sett_info, property_info, setting, ss)) goto out_unchanged; - - nm_strvarray_set_strv(&p_val->arr, ss); goto out_notify; } default: @@ -1701,7 +1695,9 @@ out_unchanged: out_notify: *out_is_modified = TRUE; - g_object_notify_by_pspec(G_OBJECT(setting), property_info->param_spec); + nm_gobject_notify_together_by_pspec(setting, + property_info->param_spec, + property_info->direct_also_notify); return TRUE; out_error_wrong_dbus_type: @@ -2409,17 +2405,87 @@ nm_setting_verify(NMSetting *setting, NMConnection *connection, GError **error) return result == NM_SETTING_VERIFY_SUCCESS || result == NM_SETTING_VERIFY_NORMALIZABLE; } +static gboolean +_verify_properties(NMSetting *setting, GError **error) +{ + NMSettingClass *klass = NM_SETTING_GET_CLASS(setting); + const NMSettInfoSetting *sett_info = _nm_setting_class_get_sett_info(klass); + guint16 i; + + if (!sett_info) + return TRUE; + + for (i = 0; i < sett_info->property_infos_len; i++) { + const NMSettInfoProperty *property_info = &sett_info->property_infos[i]; + + switch (property_info->property_type->direct_type) { + case NM_VALUE_TYPE_BOOL: + case NM_VALUE_TYPE_BYTES: + case NM_VALUE_TYPE_STRV: + case NM_VALUE_TYPE_ENUM: + case NM_VALUE_TYPE_FLAGS: + case NM_VALUE_TYPE_INT32: + case NM_VALUE_TYPE_INT64: + case NM_VALUE_TYPE_NONE: + case NM_VALUE_TYPE_UINT32: + case NM_VALUE_TYPE_UINT64: + break; + case NM_VALUE_TYPE_STRING: + { + const char *val; + + if (!property_info->direct_string_allow_empty + && (val = *((const char *const *) + _nm_setting_get_private_field(setting, sett_info, property_info))) + && val[0] == '\0') { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("cannot be empty")); + g_prefix_error(error, + "%s.%s: ", + klass->setting_info->setting_name, + property_info->name); + return FALSE; + } + break; + } + default: + nm_assert_not_reached(); + } + } + + return TRUE; +} + NMSettingVerifyResult _nm_setting_verify(NMSetting *setting, NMConnection *connection, GError **error) { + NMSettingClass *klass; + NMSettingVerifyResult r; + g_return_val_if_fail(NM_IS_SETTING(setting), NM_SETTING_VERIFY_ERROR); g_return_val_if_fail(!connection || NM_IS_CONNECTION(connection), NM_SETTING_VERIFY_ERROR); g_return_val_if_fail(!error || *error == NULL, NM_SETTING_VERIFY_ERROR); - if (NM_SETTING_GET_CLASS(setting)->verify) - return NM_SETTING_GET_CLASS(setting)->verify(setting, connection, error); + klass = NM_SETTING_GET_CLASS(setting); - return NM_SETTING_VERIFY_SUCCESS; + if (!klass->verify) + return NM_SETTING_VERIFY_SUCCESS; + + r = klass->verify(setting, connection, error); + + if (r != NM_SETTING_VERIFY_ERROR) { + gs_free_error GError *local = NULL; + + if (!_verify_properties(setting, &local)) { + g_clear_error(error); + g_propagate_error(error, g_steal_pointer(&local)); + r = NM_SETTING_VERIFY_ERROR; + } + } + + return r; } /** @@ -2570,7 +2636,9 @@ _nm_setting_property_compare_fcn_direct(_NM_SETT_INFO_PROP_COMPARE_FCN_ARGS _nm_ nm_assert(NM_IN_SET(property_info->property_type->to_dbus_fcn, _nm_setting_property_to_dbus_fcn_direct, - _nm_setting_property_to_dbus_fcn_direct_mac_address)); + _nm_setting_property_to_dbus_fcn_direct_mac_address, + _nm_setting_connection_controller_to_dbus, + _nm_setting_connection_port_type_to_dbus)); if (!property_info->param_spec) return nm_assert_unreachable_val(NM_TERNARY_DEFAULT); @@ -2604,8 +2672,21 @@ _nm_setting_property_compare_fcn_direct(_NM_SETT_INFO_PROP_COMPARE_FCN_ARGS _nm_ case NM_VALUE_TYPE_BYTES: return nm_g_bytes_equal0(*((const GBytes *const *) p_a), *((const GBytes *const *) p_b)); case NM_VALUE_TYPE_STRV: - return nm_strvarray_equal(((const NMValueStrv *) p_a)->arr, - ((const NMValueStrv *) p_b)->arr); + { + const NMValueStrv *v_a = p_a; + const NMValueStrv *v_b = p_b; + const GArray *a = v_a->arr; + const GArray *b = v_b->arr; + + if (!property_info->direct_strv_preserve_empty) { + /* NULL and empty are treated identical. Coerce to NULL. */ + if (a && a->len == 0) + a = NULL; + if (b && b->len == 0) + b = NULL; + } + return nm_strvarray_equal(a, b); + } default: return nm_assert_unreachable_val(TRUE); } @@ -2643,7 +2724,7 @@ _nm_setting_property_compare_fcn_default(_NM_SETT_INFO_PROP_COMPARE_FCN_ARGS _nm NM_CONNECTION_SERIALIZE_ALL, NULL, TRUE); - return nm_property_compare(value1, value2) == 0; + return nm_g_variant_equal(value1, value2); } } @@ -3617,6 +3698,15 @@ const NMSettInfoPropertType nm_sett_info_propert_type_deprecated_ignore_u = /* No functions set. This property type is to silently ignore the value on D-Bus. */ .compare_fcn = _nm_setting_property_compare_fcn_ignore); +/* This should not be used for new strv properties. Use nm_sett_info_propert_type_direct_strv. + * + * FIXME: existing properties should migrate to nm_sett_info_propert_type_direct_strv. */ +const NMSettInfoPropertType nm_sett_info_propert_type_gprop_strv_oldstyle = + NM_SETT_INFO_PROPERT_TYPE_GPROP_INIT(G_VARIANT_TYPE_STRING_ARRAY, + .compare_fcn = _nm_setting_property_compare_fcn_default, + .from_dbus_fcn = _nm_setting_property_from_dbus_fcn_gprop, + .from_dbus_is_full = TRUE); + const NMSettInfoPropertType nm_sett_info_propert_type_direct_boolean = NM_SETT_INFO_PROPERT_TYPE_DBUS_INIT(G_VARIANT_TYPE_BOOLEAN, .direct_type = NM_VALUE_TYPE_BOOL, @@ -4374,7 +4464,13 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) static void nm_setting_init(NMSetting *setting) -{} +{ + NMSettingPrivate *priv; + + priv = G_TYPE_INSTANCE_GET_PRIVATE(setting, NM_TYPE_SETTING, NMSettingPrivate); + + setting->_priv = priv; +} static void constructed(GObject *object) diff --git a/src/libnm-core-impl/nm-simple-connection.c b/src/libnm-core-impl/nm-simple-connection.c index a9c66dc7..7d4395ff 100644 --- a/src/libnm-core-impl/nm-simple-connection.c +++ b/src/libnm-core-impl/nm-simple-connection.c @@ -30,13 +30,10 @@ int _nm_simple_connection_private_offset; */ struct _NMSimpleConnection { GObject parent; - /* In the past, this struct was public API. Preserve ABI! */ }; struct _NMSimpleConnectionClass { GObjectClass parent; - /* In the past, this struct was public API. Preserve ABI! */ - gpointer padding[4]; }; static void nm_simple_connection_interface_init(NMConnectionInterface *iface); diff --git a/src/libnm-core-impl/nm-team-utils.c b/src/libnm-core-impl/nm-team-utils.c index 2f62f6c6..6f2f5dd2 100644 --- a/src/libnm-core-impl/nm-team-utils.c +++ b/src/libnm-core-impl/nm-team-utils.c @@ -2244,7 +2244,7 @@ _team_setting_verify_properties(const NMTeamSetting *self, GError **error) } else if (attr_data->value_type == NM_VALUE_TYPE_STRING) { const char *v = *((const char *const *) p_field); - if (nm_strv_find_first(attr_data->range.r_string.valid_names, -1, v) < 0) { + if (!nm_strv_contains(attr_data->range.r_string.valid_names, -1, v)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING, @@ -2263,7 +2263,7 @@ _team_setting_verify_properties(const NMTeamSetting *self, GError **error) for (i = 0; i < self->d.master.runner_tx_hash->len; i++) { const char *val = self->d.master.runner_tx_hash->pdata[i]; - if (!val || (nm_strv_find_first(_valid_names_runner_tx_hash, -1, val) < 0)) { + if (!val || !nm_strv_contains(_valid_names_runner_tx_hash, -1, val)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING, @@ -2289,7 +2289,7 @@ _team_setting_verify_properties(const NMTeamSetting *self, GError **error) if (!_team_setting_has_field(self, attr_data)) continue; if (self->d.master.runner - && (nm_strv_find_first(e->valid_runners, -1, self->d.master.runner) >= 0)) + && nm_strv_contains(e->valid_runners, -1, self->d.master.runner)) continue; if (e->valid_runners[1] == NULL) { g_set_error(error, @@ -2812,9 +2812,9 @@ nm_team_setting_new(gboolean is_port, const char *js_str) gsize l; G_STATIC_ASSERT_EXPR(sizeof(*self) == sizeof(self->_data_priv)); - G_STATIC_ASSERT_EXPR(sizeof(*self) - == NM_CONST_MAX(nm_offsetofend(NMTeamSetting, d.master), - nm_offsetofend(NMTeamSetting, d.port))); + G_STATIC_ASSERT_EXPR( + sizeof(*self) + == NM_MAX(nm_offsetofend(NMTeamSetting, d.master), nm_offsetofend(NMTeamSetting, d.port))); l = is_port ? nm_offsetofend(NMTeamSetting, d.port) : nm_offsetofend(NMTeamSetting, d.master); diff --git a/src/libnm-core-impl/nm-team-utils.h b/src/libnm-core-impl/nm-team-utils.h index 06fa6cc8..0210cb26 100644 --- a/src/libnm-core-impl/nm-team-utils.h +++ b/src/libnm-core-impl/nm-team-utils.h @@ -6,7 +6,7 @@ #ifndef __NM_TEAM_UITLS_H__ #define __NM_TEAM_UITLS_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) #error Cannot use this header. #endif @@ -48,7 +48,8 @@ typedef enum { NM_TEAM_ATTRIBUTE_PORT_LACP_KEY, _NM_TEAM_ATTRIBUTE_PORT_NUM, - _NM_TEAM_ATTRIBUTE_NUM = MAX(_NM_TEAM_ATTRIBUTE_MASTER_NUM, _NM_TEAM_ATTRIBUTE_PORT_NUM), + _NM_TEAM_ATTRIBUTE_NUM = + NM_MAX_CONST(_NM_TEAM_ATTRIBUTE_MASTER_NUM, _NM_TEAM_ATTRIBUTE_PORT_NUM), } NMTeamAttribute; diff --git a/src/libnm-core-impl/nm-utils-private.h b/src/libnm-core-impl/nm-utils-private.h index e2e1aff7..1521c0f9 100644 --- a/src/libnm-core-impl/nm-utils-private.h +++ b/src/libnm-core-impl/nm-utils-private.h @@ -6,7 +6,7 @@ #ifndef __NM_UTILS_PRIVATE_H__ #define __NM_UTILS_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE) #error Cannot use this header. #endif diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c index 2bd8936d..88df3291 100644 --- a/src/libnm-core-impl/nm-utils.c +++ b/src/libnm-core-impl/nm-utils.c @@ -36,6 +36,7 @@ #include "nm-setting-vlan.h" #include "nm-setting-wired.h" #include "nm-setting-wireless.h" +#include "nm-errors.h" /** * SECTION:nm-utils @@ -654,8 +655,13 @@ nm_utils_is_empty_ssid(const guint8 *ssid, gsize len) * representation of that character. Intended for debugging only, should not * be used for display of SSIDs. * + * Warning: this function uses a static buffer. It is not thread-safe. Don't + * use this function. + * * Returns: pointer to the escaped SSID, which uses an internal static buffer * and will be overwritten by subsequent calls to this function + * + * Deprecated: 1.46: use nm_utils_ssid_to_utf8() or nm_utils_bin2hexstr(). **/ const char * nm_utils_escape_ssid(const guint8 *ssid, gsize len) @@ -669,7 +675,7 @@ nm_utils_escape_ssid(const guint8 *ssid, gsize len) return escaped; } - len = MIN(len, (guint32) NM_IW_ESSID_MAX_SIZE); + len = NM_MIN(len, (guint32) NM_IW_ESSID_MAX_SIZE); while (len--) { if (*s == '\0') { *d++ = '\\'; @@ -897,42 +903,6 @@ _nm_utils_slist_to_strv(const GSList *slist, gboolean deep_copy) return strv; } -GPtrArray * -nm_strv_to_ptrarray(char **strv) -{ - GPtrArray *ptrarray; - gsize i, l; - - l = NM_PTRARRAY_LEN(strv); - - ptrarray = g_ptr_array_new_full(l, g_free); - - if (strv) { - for (i = 0; strv[i]; i++) - g_ptr_array_add(ptrarray, g_strdup(strv[i])); - } - - return ptrarray; -} - -char ** -_nm_utils_ptrarray_to_strv(const GPtrArray *ptrarray) -{ - char **strv; - guint i; - - if (!ptrarray) - return g_new0(char *, 1); - - strv = g_new(char *, ptrarray->len + 1); - - for (i = 0; i < ptrarray->len; i++) - strv[i] = g_strdup(ptrarray->pdata[i]); - strv[i] = NULL; - - return strv; -} - /*****************************************************************************/ static gboolean @@ -1356,17 +1326,49 @@ nm_utils_dns_to_variant(int addr_family, const char *const *dns, gssize len) * Utility function to convert a #GVariant of type 'au' representing a list of * IPv4 addresses into an array of IP address strings. * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) + * * Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address strings. **/ char ** nm_utils_ip4_dns_from_variant(GVariant *value) { + return _nm_utils_ip4_dns_from_variant(value, FALSE, NULL); +} + +/** + * _nm_utils_ip4_dns_from_variant: + * @value: a #GVariant of type 'au' + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip4_dns_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address + * strings. In strict mode, %NULL is returned on error. + */ +char ** +_nm_utils_ip4_dns_from_variant(GVariant *value, bool strict, GError **error) +{ const guint32 *array; gsize length; char **dns; gsize i; - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("au")), NULL); + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("au"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"au\"")); + return NULL; + } + dns = g_new(char *, 1); + dns[0] = NULL; + return dns; + } array = g_variant_get_fixed_array(value, &length, sizeof(guint32)); dns = g_new(char *, length + 1u); @@ -1437,7 +1439,11 @@ nm_utils_ip4_addresses_to_variant(GPtrArray *addresses, const char *gateway) * NetworkManager IPv4 addresses (which are tuples of address, prefix, and * gateway) into a #GPtrArray of #NMIPAddress objects. The "gateway" field of * the first address (if set) will be returned in @out_gateway; the "gateway" fields - * of the other addresses are ignored. + * of the other addresses are ignored. Note that invalid addresses are discarded + * but the valid addresses are still returned. + * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) * * Returns: (transfer full) (element-type NMIPAddress): a newly allocated * #GPtrArray of #NMIPAddress objects @@ -1445,46 +1451,132 @@ nm_utils_ip4_addresses_to_variant(GPtrArray *addresses, const char *gateway) GPtrArray * nm_utils_ip4_addresses_from_variant(GVariant *value, char **out_gateway) { - GPtrArray *addresses; - GVariantIter iter; - GVariant *addr_var; + return _nm_utils_ip4_addresses_from_variant(value, NULL, out_gateway, FALSE, NULL); +} - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("aau")), NULL); +/** + * _nm_utils_ip4_addresses_from_variant: + * @value: a #GVariant of type 'aau' + * @labels: (optional) (nullable): a #GVariant of the type 'as'. If not-NULL, + * each element must contain a string with the labels that corresponds to each + * IP address in @value. + * @out_gateway: (out) (optional) (nullable) (transfer full): on return, will + * contain the IP gateway + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip4_addresses_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. It also + * allows to parse the address-labels at the same time than the addresses. + * + * The labels need to be processed at the same time than the addresses, inside + * this function, because if there are invalid addresses they are filtered out, + * and the returned array of addresses contains less elements than the original + * array. If that happens, the caller don't know what label corresponds to what + * address, because they are matched by position in the array. If you are not + * interested in the labels, just set @labels to NULL. + * + * Returns: (transfer full) (element-type NMIPAddress): a newly allocated + * #GPtrArray of #NMIPAddress objects. In strict mode, %NULL is returned on error. + */ +GPtrArray * +_nm_utils_ip4_addresses_from_variant(GVariant *value, + GVariant *labels, + char **out_gateway, + bool strict, + GError **error) +{ + gs_unref_ptrarray GPtrArray *addresses = NULL; + GVariantIter iter; + GVariant *item; + const guint32 *addr_array; + gsize length; + NMIPAddress *addr; + const char *label; + gsize n_labels = 0; + guint i; + addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); if (out_gateway) *out_gateway = NULL; + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("aau"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"aau\"")); + return NULL; + } + return g_steal_pointer(&addresses); + } + + if (labels && !g_variant_is_of_type(labels, G_VARIANT_TYPE("as"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected \"address-labels\" of type \"as\"")); + return NULL; + } + /* We still can parse the addresses, without the labels */ + labels = NULL; + } + + if (labels) + n_labels = g_variant_n_children(labels); + g_variant_iter_init(&iter, value); - addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); - while (g_variant_iter_next(&iter, "@au", &addr_var)) { - const guint32 *addr_array; - gsize length; - NMIPAddress *addr; - GError *error = NULL; + for (i = 0; g_variant_iter_next(&iter, "@au", &item); i++) { + gs_unref_variant GVariant *addr_var = item; + gs_free_error GError *local_error = NULL; addr_array = g_variant_get_fixed_array(addr_var, &length, sizeof(guint32)); if (length < 3) { - g_warning("Ignoring invalid IP4 address"); - g_variant_unref(addr_var); + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Incomplete IPv4 address (idx=%u)"), + i); + return NULL; + } + continue; + } + + addr = nm_ip_address_new_binary(AF_INET, &addr_array[0], addr_array[1], &local_error); + if (!addr) { + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("%s (idx=%u)"), + local_error->message, + i); + return NULL; + } continue; } - addr = nm_ip_address_new_binary(AF_INET, &addr_array[0], addr_array[1], &error); - if (addr) { - g_ptr_array_add(addresses, addr); + /* We were accepting address-labels to be shorter than addresses, so + * let's continue doing so and not consider it as an error */ + if (labels && i < n_labels) { + g_variant_get_child(labels, i, "&s", &label); - if (addr_array[2] && out_gateway && !*out_gateway) - *out_gateway = nm_inet4_ntop_dup(addr_array[2]); - } else { - g_warning("Ignoring invalid IP4 address: %s", error->message); - g_clear_error(&error); + if (label && label[0]) { + nm_ip_address_set_attribute(addr, + NM_IP_ADDRESS_ATTRIBUTE_LABEL, + g_variant_new_string(label)); + } } - g_variant_unref(addr_var); + g_ptr_array_add(addresses, addr); + if (addr_array[2] && out_gateway && !*out_gateway) + *out_gateway = nm_inet4_ntop_dup(addr_array[2]); } - return addresses; + return g_steal_pointer(&addresses); } /** @@ -1518,7 +1610,7 @@ nm_utils_ip4_routes_to_variant(GPtrArray *routes) array[1] = nm_ip_route_get_prefix(route); nm_ip_route_get_next_hop_binary(route, &array[2]); /* The old routes format uses "0" for default, not "-1" */ - array[3] = MAX(0, nm_ip_route_get_metric(route)); + array[3] = NM_MAX(0, nm_ip_route_get_metric(route)); g_variant_builder_add(&builder, "@au", nm_g_variant_new_au(array, 4)); } @@ -1533,7 +1625,11 @@ nm_utils_ip4_routes_to_variant(GPtrArray *routes) * * Utility function to convert a #GVariant of type 'aau' representing an array * of NetworkManager IPv4 routes (which are tuples of route, prefix, next hop, - * and metric) into a #GPtrArray of #NMIPRoute objects. + * and metric) into a #GPtrArray of #NMIPRoute objects. Note that invalid routes + * are discarded but the valid routes are still returned. + * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) * * Returns: (transfer full) (element-type NMIPRoute): a newly allocated * #GPtrArray of #NMIPRoute objects @@ -1541,25 +1637,61 @@ nm_utils_ip4_routes_to_variant(GPtrArray *routes) GPtrArray * nm_utils_ip4_routes_from_variant(GVariant *value) { - GVariantIter iter; - GVariant *route_var; - GPtrArray *routes; + return _nm_utils_ip4_routes_from_variant(value, FALSE, NULL); +} - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("aau")), NULL); +/** + * _nm_utils_ip4_routes_from_variant: + * @value: #GVariant of type 'aau' + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip4_routes_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (element-type NMIPRoute): a newly allocated + * #GPtrArray of #NMIPRoute objects. In strict mode, NULL is returned on error. + */ +GPtrArray * +_nm_utils_ip4_routes_from_variant(GVariant *value, bool strict, GError **error) +{ + gs_unref_ptrarray GPtrArray *routes = NULL; + GVariantIter iter; + GVariant *item; + const guint32 *route_array; + gsize length; + NMIPRoute *route; + guint i; - g_variant_iter_init(&iter, value); routes = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); - while (g_variant_iter_next(&iter, "@au", &route_var)) { - const guint32 *route_array; - gsize length; - NMIPRoute *route; - GError *error = NULL; + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("aau"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"aau\"")); + return NULL; + } + return g_steal_pointer(&routes); + } + + g_variant_iter_init(&iter, value); + + for (i = 0; g_variant_iter_next(&iter, "@au", &item); i++) { + gs_unref_variant GVariant *route_var = item; + gs_free_error GError *local_error = NULL; route_array = g_variant_get_fixed_array(route_var, &length, sizeof(guint32)); if (length < 4) { - g_warning("Ignoring invalid IP4 route"); - g_variant_unref(route_var); + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Incomplete IPv4 route (idx=%u)"), + i); + return NULL; + } continue; } @@ -1569,17 +1701,24 @@ nm_utils_ip4_routes_from_variant(GVariant *value) &route_array[2], /* The old routes format uses "0" for default, not "-1" */ route_array[3] ? (gint64) route_array[3] : -1, - &error); - if (route) - g_ptr_array_add(routes, route); - else { - g_warning("Ignoring invalid IP4 route: %s", error->message); - g_clear_error(&error); + &local_error); + if (!route) { + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("%s (idx=%u)"), + local_error->message, + i); + return NULL; + } + continue; } - g_variant_unref(route_var); + + g_ptr_array_add(routes, route); } - return routes; + return g_steal_pointer(&routes); } /** @@ -1641,34 +1780,79 @@ nm_utils_ip4_get_default_prefix(guint32 ip) * a IPv6 address in binary form (16 bytes long). Invalid entries are silently * ignored. * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) + * * Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address strings. **/ char ** nm_utils_ip6_dns_from_variant(GVariant *value) { - GVariantIter iter; - GVariant *ip_var; - char **dns; - gsize i; + return _nm_utils_ip6_dns_from_variant(value, FALSE, NULL); +} - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("aay")), NULL); +/** + * _nm_utils_ip6_dns_from_variant: + * @value: a #GVariant of type 'aay' + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip6_dns_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address + * strings. In strict mode, %NULL is returned on error. + **/ +char ** +_nm_utils_ip6_dns_from_variant(GVariant *value, bool strict, GError **error) +{ + gs_strfreev char **dns = NULL; + GVariantIter iter; + GVariant *item; + guint i, j; + + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("aay"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"aay\"")); + return NULL; + } + dns = g_new(char *, 1); + dns[0] = NULL; + return g_steal_pointer(&dns); + } - dns = g_new(char *, g_variant_n_children(value) + 1); + dns = g_new(char *, g_variant_n_children(value) + 1); + dns[0] = NULL; g_variant_iter_init(&iter, value); - i = 0; - while (g_variant_iter_next(&iter, "@ay", &ip_var)) { - gsize length; - const struct in6_addr *ip = g_variant_get_fixed_array(ip_var, &length, 1); - if (length == sizeof(struct in6_addr)) - dns[i++] = nm_inet6_ntop_dup(ip); + for (i = 0, j = 0; g_variant_iter_next(&iter, "@ay", &item); i++) { + gs_unref_variant GVariant *ip_var = item; + const struct in6_addr *ip; + gsize length; - g_variant_unref(ip_var); + ip = g_variant_get_fixed_array(ip_var, &length, 1); + + if (length != sizeof(struct in6_addr)) { + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Invalid IPv6 DNS address length (idx=%u)"), + i); + return NULL; + } + continue; + } + + dns[j] = nm_inet6_ntop_dup(ip); + dns[++j] = NULL; } - dns[i] = NULL; - return dns; + return g_steal_pointer(&dns); } /** @@ -1733,7 +1917,11 @@ nm_utils_ip6_addresses_to_variant(GPtrArray *addresses, const char *gateway) * list of NetworkManager IPv6 addresses (which are tuples of address, prefix, * and gateway) into a #GPtrArray of #NMIPAddress objects. The "gateway" field * of the first address (if set) will be returned in @out_gateway; the "gateway" - * fields of the other addresses are ignored. + * fields of the other addresses are ignored. Note that invalid addresses are + * discarded but the valid addresses are still returned. + * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) * * Returns: (transfer full) (element-type NMIPAddress): a newly allocated * #GPtrArray of #NMIPAddress objects @@ -1741,63 +1929,123 @@ nm_utils_ip6_addresses_to_variant(GPtrArray *addresses, const char *gateway) GPtrArray * nm_utils_ip6_addresses_from_variant(GVariant *value, char **out_gateway) { - GVariantIter iter; - GVariant *addr_var, *gateway_var; - guint32 prefix; - GPtrArray *addresses; + return _nm_utils_ip6_addresses_from_variant(value, out_gateway, FALSE, NULL); +} - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("a(ayuay)")), NULL); +/** + * _nm_utils_ip6_addresses_from_variant: + * @value: a #GVariant of type 'a(ayuay)' + * @out_gateway: (out) (optional) (nullable) (transfer full): on return, will + * contain the IP gateway + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip6_addresses_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (element-type NMIPAddress): a newly allocated + * #GPtrArray of #NMIPAddress objects. In strict mode, %NULL is returned on error. + **/ +GPtrArray * +_nm_utils_ip6_addresses_from_variant(GVariant *value, + char **out_gateway, + bool strict, + GError **error) +{ + gs_unref_ptrarray GPtrArray *addresses = NULL; + GVariantIter iter; + GVariant *addr_item; + GVariant *gateway_item; + guint32 prefix; + guint i; + addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); if (out_gateway) *out_gateway = NULL; + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("a(ayuay)"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"a(ayuay)\"")); + return NULL; + } + return g_steal_pointer(&addresses); + } + g_variant_iter_init(&iter, value); - addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); - while (g_variant_iter_next(&iter, "(@ayu@ay)", &addr_var, &prefix, &gateway_var)) { - NMIPAddress *addr; - const struct in6_addr *addr_bytes, *gateway_bytes; - gsize addr_len, gateway_len; - GError *error = NULL; + for (i = 0; g_variant_iter_next(&iter, "(@ayu@ay)", &addr_item, &prefix, &gateway_item); i++) { + gs_unref_variant GVariant *addr_var = addr_item; + gs_unref_variant GVariant *gateway_var = gateway_item; + gs_free_error GError *local_error = NULL; + NMIPAddress *addr; + const struct in6_addr *addr_bytes, *gateway_bytes; + gsize addr_len, gateway_len; if (!g_variant_is_of_type(addr_var, G_VARIANT_TYPE_BYTESTRING) || !g_variant_is_of_type(gateway_var, G_VARIANT_TYPE_BYTESTRING)) { - g_warning("%s: ignoring invalid IP6 address structure", __func__); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"(ayuay)\" (idx=%u)"), + i); + return NULL; + } + continue; } addr_bytes = g_variant_get_fixed_array(addr_var, &addr_len, 1); if (addr_len != 16) { - g_warning("%s: ignoring invalid IP6 address of length %d", __func__, (int) addr_len); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("IPv6 address with invalid length (idx=%u)"), + i); + return NULL; + } + continue; + } + + addr = nm_ip_address_new_binary(AF_INET6, addr_bytes, prefix, &local_error); + if (!addr) { + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("%s (idx=%u)"), + local_error->message, + i); + return NULL; + } + continue; } - addr = nm_ip_address_new_binary(AF_INET6, addr_bytes, prefix, &error); - if (addr) { - g_ptr_array_add(addresses, addr); + g_ptr_array_add(addresses, addr); - if (out_gateway && !*out_gateway) { - gateway_bytes = g_variant_get_fixed_array(gateway_var, &gateway_len, 1); - if (gateway_len != 16) { - g_warning("%s: ignoring invalid IP6 address of length %d", - __func__, - (int) gateway_len); - goto next; + if (out_gateway && !*out_gateway) { + gateway_bytes = g_variant_get_fixed_array(gateway_var, &gateway_len, 1); + if (gateway_len != 16) { + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("IPv6 gateway with invalid length (idx=%u)"), + i); + return NULL; } - if (!IN6_IS_ADDR_UNSPECIFIED(gateway_bytes)) - *out_gateway = nm_inet6_ntop_dup(gateway_bytes); + continue; } - } else { - g_warning("Ignoring invalid IP6 address: %s", error->message); - g_clear_error(&error); - } -next: - g_variant_unref(addr_var); - g_variant_unref(gateway_var); + if (!IN6_IS_ADDR_UNSPECIFIED(gateway_bytes)) + NM_SET_OUT(out_gateway, nm_inet6_ntop_dup(gateway_bytes)); + } } - return addresses; + return g_steal_pointer(&addresses); } /** @@ -1853,7 +2101,11 @@ nm_utils_ip6_routes_to_variant(GPtrArray *routes) * * Utility function to convert a #GVariant of type 'a(ayuayu)' representing an * array of NetworkManager IPv6 routes (which are tuples of route, prefix, next - * hop, and metric) into a #GPtrArray of #NMIPRoute objects. + * hop, and metric) into a #GPtrArray of #NMIPRoute objects. Note that invalid + * routes are ignored but the valid ones are still returned. + * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) * * Returns: (transfer full) (element-type NMIPRoute): a newly allocated * #GPtrArray of #NMIPRoute objects @@ -1861,40 +2113,93 @@ nm_utils_ip6_routes_to_variant(GPtrArray *routes) GPtrArray * nm_utils_ip6_routes_from_variant(GVariant *value) { - GPtrArray *routes; - GVariantIter iter; - GVariant *dest_var, *next_hop_var; - const struct in6_addr *dest, *next_hop; - gsize dest_len, next_hop_len; - guint32 prefix, metric; + return _nm_utils_ip6_routes_from_variant(value, FALSE, NULL); +} - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("a(ayuayu)")), NULL); +/** + * _nm_utils_ip6_routes_from_variant: + * @value: #GVariant of type 'a(ayuayu)' + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip6_routes_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (element-type NMIPRoute): a newly allocated + * #GPtrArray of #NMIPRoute objects. In strict mode, %NULL is returned on error. + **/ +GPtrArray * +_nm_utils_ip6_routes_from_variant(GVariant *value, bool strict, GError **error) +{ + gs_unref_ptrarray GPtrArray *routes = NULL; + GVariantIter iter; + GVariant *dest_item; + GVariant *next_hop_item; + guint32 prefix, metric; + guint i; routes = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("a(ayuayu)"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"a(ayuayu)\"")); + return NULL; + } + return g_steal_pointer(&routes); + } + g_variant_iter_init(&iter, value); - while (g_variant_iter_next(&iter, "(@ayu@ayu)", &dest_var, &prefix, &next_hop_var, &metric)) { - NMIPRoute *route; - GError *error = NULL; + + for (i = 0; + g_variant_iter_next(&iter, "(@ayu@ayu)", &dest_item, &prefix, &next_hop_item, &metric); + i++) { + gs_unref_variant GVariant *dest_var = dest_item; + gs_unref_variant GVariant *next_hop_var = next_hop_item; + gs_free_error GError *local_error = NULL; + NMIPRoute *route; + const struct in6_addr *dest, *next_hop; + gsize dest_len, next_hop_len; if (!g_variant_is_of_type(dest_var, G_VARIANT_TYPE_BYTESTRING) || !g_variant_is_of_type(next_hop_var, G_VARIANT_TYPE_BYTESTRING)) { - g_warning("%s: ignoring invalid IP6 address structure", __func__); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"(ayuayu)\" (idx=%u)"), + i); + return NULL; + } + continue; } dest = g_variant_get_fixed_array(dest_var, &dest_len, 1); if (dest_len != 16) { - g_warning("%s: ignoring invalid IP6 address of length %d", __func__, (int) dest_len); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("IPv6 dest address with invalid length (idx=%u)"), + i); + return NULL; + } + continue; } next_hop = g_variant_get_fixed_array(next_hop_var, &next_hop_len, 1); if (next_hop_len != 16) { - g_warning("%s: ignoring invalid IP6 address of length %d", - __func__, - (int) next_hop_len); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("IPv6 next-hop address with invalid length (idx=%u)"), + i); + return NULL; + } + continue; } route = nm_ip_route_new_binary(AF_INET6, @@ -1902,20 +2207,24 @@ nm_utils_ip6_routes_from_variant(GVariant *value) prefix, next_hop, metric ? (gint64) metric : -1, - &error); - if (route) - g_ptr_array_add(routes, route); - else { - g_warning("Ignoring invalid IP6 route: %s", error->message); - g_clear_error(&error); + &local_error); + if (!route) { + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("%s (idx=%u)"), + local_error->message, + i); + return NULL; + } + continue; } -next: - g_variant_unref(dest_var); - g_variant_unref(next_hop_var); + g_ptr_array_add(routes, route); } - return routes; + return g_steal_pointer(&routes); } /** @@ -1980,7 +2289,11 @@ nm_utils_ip_addresses_to_variant(GPtrArray *addresses) * Utility function to convert a #GVariant representing a list of new-style * NetworkManager IPv4 or IPv6 addresses (as described in the documentation for * nm_utils_ip_addresses_to_variant()) into a #GPtrArray of #NMIPAddress - * objects. + * objects. Note that invalid addresses are discarded but the valid addresses + * are still returned. + * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) * * Returns: (transfer full) (element-type NMIPAddress): a newly allocated * #GPtrArray of #NMIPAddress objects @@ -1990,49 +2303,92 @@ nm_utils_ip_addresses_to_variant(GPtrArray *addresses) GPtrArray * nm_utils_ip_addresses_from_variant(GVariant *value, int family) { - GPtrArray *addresses; - GVariantIter iter, attrs_iter; - GVariant *addr_var; - const char *ip; - guint32 prefix; - const char *attr_name; - GVariant *attr_val; - NMIPAddress *addr; - GError *error = NULL; + return _nm_utils_ip_addresses_from_variant(value, family, FALSE, NULL); +} + +/** + * _nm_utils_ip_addresses_from_variant: + * @value: a #GVariant of type 'aa{sv}' + * @family: an IP address family + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip_addresses_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (element-type NMIPAddress): a newly allocated + * #GPtrArray of #NMIPAddress objects. In strict mode, %NULL is returned on error. + */ +GPtrArray * +_nm_utils_ip_addresses_from_variant(GVariant *value, int family, bool strict, GError **error) +{ + gs_unref_ptrarray GPtrArray *addresses = NULL; + GVariantIter iter, attrs_iter; + GVariant *item; + const char *ip; + guint32 prefix; + NMIPAddress *addr; + const char *attr_name; + guint i; - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("aa{sv}")), NULL); + addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); + + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("aa{sv}"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"aa{sv}\"")); + return NULL; + } + return g_steal_pointer(&addresses); + } g_variant_iter_init(&iter, value); - addresses = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); - while (g_variant_iter_next(&iter, "@a{sv}", &addr_var)) { + for (i = 0; g_variant_iter_next(&iter, "@a{sv}", &item); i++) { + gs_unref_variant GVariant *addr_var = item; + gs_free_error GError *local_error = NULL; + if (!g_variant_lookup(addr_var, "address", "&s", &ip) || !g_variant_lookup(addr_var, "prefix", "u", &prefix)) { - g_warning("Ignoring invalid address"); - g_variant_unref(addr_var); + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("IP address requires fields \"dest\" and \"prefix\" (idx=%u)"), + i); + return NULL; + } continue; } - addr = nm_ip_address_new(family, ip, prefix, &error); + addr = nm_ip_address_new(family, ip, prefix, &local_error); if (!addr) { - g_warning("Ignoring invalid address: %s", error->message); - g_clear_error(&error); - g_variant_unref(addr_var); + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("%s (idx=%u)"), + local_error->message, + i); + return NULL; + } continue; } g_variant_iter_init(&attrs_iter, addr_var); - while (g_variant_iter_next(&attrs_iter, "{&sv}", &attr_name, &attr_val)) { + while (g_variant_iter_next(&attrs_iter, "{&sv}", &attr_name, &item)) { + gs_unref_variant GVariant *attr_val = item; + if (!NM_IN_STRSET(attr_name, "address", "prefix")) nm_ip_address_set_attribute(addr, attr_name, attr_val); - g_variant_unref(attr_val); } - g_variant_unref(addr_var); g_ptr_array_add(addresses, addr); } - return addresses; + return g_steal_pointer(&addresses); } /** @@ -2041,8 +2397,11 @@ nm_utils_ip_addresses_from_variant(GVariant *value, int family) * * Utility function to convert a #GPtrArray of #NMIPRoute objects representing * IPv4 or IPv6 routes into a #GVariant of type 'aa{sv}' representing an array - * of new-style NetworkManager IP routes (which are tuples of destination, - * prefix, next hop, metric, and additional attributes). + * of new-style NetworkManager IP routes. All routes will include "dest" (an IP + * address string), "prefix" (an uint) and optionally "next-hop" (an IP address + * string) and "metric" (an uint). Some routes may include additional attributes. + * Note that invalid routes are discarded and only a warning is emitted, but the + * valid routes are still returned. * * Returns: (transfer none): a new floating #GVariant representing @routes. * @@ -2107,9 +2466,12 @@ nm_utils_ip_routes_to_variant(GPtrArray *routes) * @family: an IP address family * * Utility function to convert a #GVariant representing a list of new-style - * NetworkManager IPv4 or IPv6 addresses (which are tuples of destination, - * prefix, next hop, metric, and additional attributes) into a #GPtrArray of - * #NMIPRoute objects. + * NetworkManager IPv4 or IPv6 addresses (as described in the documentation for + * nm_utils_ip_routes_to_variant()) into a #GPtrArray of #NMIPRoute objects. + * Invalid routes are discarded but the valid routes are still returned. + * + * Since 1.46, an empty list is returned if the variant type is not valid + * (before it was checked as assertion) * * Returns: (transfer full) (element-type NMIPRoute): a newly allocated * #GPtrArray of #NMIPRoute objects @@ -2119,27 +2481,65 @@ nm_utils_ip_routes_to_variant(GPtrArray *routes) GPtrArray * nm_utils_ip_routes_from_variant(GVariant *value, int family) { - GPtrArray *routes; - GVariantIter iter, attrs_iter; - GVariant *route_var; - const char *dest, *next_hop; - guint32 prefix, metric32; - gint64 metric; - const char *attr_name; - GVariant *attr_val; - NMIPRoute *route; - GError *error = NULL; + return _nm_utils_ip_routes_from_variant(value, family, FALSE, NULL); +} - g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("aa{sv}")), NULL); +/** + * _nm_utils_ip_routes_from_variant: + * @value: a #GVariant of type 'aa{sv}' + * @family: an IP address family + * @strict: whether to parse in strict mode or best-effort mode + * @error: the error location + * + * Like #nm_utils_ip_routes_from_variant, but allows to parse in strict mode. In + * strict mode, parsing is aborted on first error and %NULL is returned. + * + * Returns: (transfer full) (element-type NMIPRoute): a newly allocated + * #GPtrArray of #NMIPRoute objects. In strict mode %NULL is returned on error. + */ +GPtrArray * +_nm_utils_ip_routes_from_variant(GVariant *value, int family, bool strict, GError **error) +{ + gs_unref_ptrarray GPtrArray *routes = NULL; + GVariantIter iter, attrs_iter; + GVariant *item; + const char *dest, *next_hop; + guint32 prefix, metric32; + gint64 metric; + const char *attr_name; + NMIPRoute *route; + guint i; - g_variant_iter_init(&iter, value); routes = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_route_unref); - while (g_variant_iter_next(&iter, "@a{sv}", &route_var)) { + if (!g_variant_is_of_type(value, G_VARIANT_TYPE("aa{sv}"))) { + if (strict) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Expected value of type \"aa{sv}\"")); + return NULL; + } + return g_steal_pointer(&routes); + } + + g_variant_iter_init(&iter, value); + + for (i = 0; g_variant_iter_next(&iter, "@a{sv}", &item); i++) { + gs_unref_variant GVariant *route_var = item; + gs_free_error GError *local_error = NULL; + if (!g_variant_lookup(route_var, "dest", "&s", &dest) || !g_variant_lookup(route_var, "prefix", "u", &prefix)) { - g_warning("Ignoring invalid address"); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("Route requires fields \"dest\" and \"prefix\" (idx=%u)"), + i); + return NULL; + } + continue; } if (!g_variant_lookup(route_var, "next-hop", "&s", &next_hop)) next_hop = NULL; @@ -2148,26 +2548,32 @@ nm_utils_ip_routes_from_variant(GVariant *value, int family) else metric = -1; - route = nm_ip_route_new(family, dest, prefix, next_hop, metric, &error); + route = nm_ip_route_new(family, dest, prefix, next_hop, metric, &local_error); if (!route) { - g_warning("Ignoring invalid route: %s", error->message); - g_clear_error(&error); - goto next; + if (strict) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("%s (idx=%u)"), + local_error->message, + i); + return NULL; + } + continue; } g_variant_iter_init(&attrs_iter, route_var); - while (g_variant_iter_next(&attrs_iter, "{&sv}", &attr_name, &attr_val)) { + while (g_variant_iter_next(&attrs_iter, "{&sv}", &attr_name, &item)) { + gs_unref_variant GVariant *attr_val = item; + if (!NM_IN_STRSET(attr_name, "dest", "prefix", "next-hop", "metric")) nm_ip_route_set_attribute(route, attr_name, attr_val); - g_variant_unref(attr_val); } g_ptr_array_add(routes, route); -next: - g_variant_unref(route_var); } - return routes; + return g_steal_pointer(&routes); } /*****************************************************************************/ @@ -4694,7 +5100,7 @@ _nm_utils_strstrdictkey_create(const char *v1, const char *v2) static gboolean validate_dns_option(const char *name, gboolean numeric, - gboolean ipv6, + int addr_family, const NMUtilsDNSOptionDesc *option_descs) { const NMUtilsDNSOptionDesc *desc; @@ -4703,8 +5109,15 @@ validate_dns_option(const char *name, return !!*name; for (desc = option_descs; desc->name; desc++) { - if (nm_streq(name, desc->name) && numeric == desc->numeric && (!desc->ipv6_only || ipv6)) - return TRUE; + if (!nm_streq(name, desc->name)) + continue; + if ((!!numeric) != (!!desc->numeric)) + continue; + if (addr_family != AF_UNSPEC) { + if (desc->ipv6_only && addr_family != AF_INET6) + continue; + } + return TRUE; } return FALSE; @@ -4715,7 +5128,9 @@ validate_dns_option(const char *name, * @option: option string * @out_name: (out) (optional) (nullable): the option name * @out_value: (out) (optional): the option value - * @ipv6: whether the option refers to a IPv6 configuration + * @addr_family: AF_INET/AF_INET6 to only allow options for the specified address + * family. AF_UNSPEC to allow either. This argument is ignored, if @option_descs + * is NULL. * @option_descs: (nullable): an array of NMUtilsDNSOptionDesc which describes the * valid options * @@ -4731,7 +5146,7 @@ gboolean _nm_utils_dns_option_validate(const char *option, char **out_name, long *out_value, - gboolean ipv6, + int addr_family, const NMUtilsDNSOptionDesc *option_descs) { gs_free char *option0_free = NULL; @@ -4742,6 +5157,8 @@ _nm_utils_dns_option_validate(const char *option, g_return_val_if_fail(option != NULL, FALSE); + nm_assert_addr_family_or_unspec(addr_family); + NM_SET_OUT(out_name, NULL); NM_SET_OUT(out_value, -1); @@ -4750,7 +5167,7 @@ _nm_utils_dns_option_validate(const char *option, delim = strchr(option, ':'); if (!delim) { - if (!validate_dns_option(option, FALSE, ipv6, option_descs)) + if (!validate_dns_option(option, FALSE, addr_family, option_descs)) return FALSE; NM_SET_OUT(out_name, g_strdup(option)); return TRUE; @@ -4765,7 +5182,7 @@ _nm_utils_dns_option_validate(const char *option, option0 = nm_strndup_a(300, option, delim - option, &option0_free); - if (!validate_dns_option(option0, TRUE, ipv6, option_descs)) + if (!validate_dns_option(option0, TRUE, addr_family, option_descs)) return FALSE; option1_num = _nm_utils_ascii_str_to_int64(option1, 10, 0, G_MAXINT32, -1); @@ -4779,7 +5196,8 @@ _nm_utils_dns_option_validate(const char *option, /** * _nm_utils_dns_option_find_idx: - * @array: an array of strings + * @strv: an array of strings of length @strv_len + * @strv_len: the length of @strv, or -1 for a NULL terminated strv array. * @option: a dns option string * * Searches for an option in an array of strings. The match is @@ -4789,18 +5207,28 @@ _nm_utils_dns_option_validate(const char *option, * found. */ gssize -_nm_utils_dns_option_find_idx(GPtrArray *array, const char *option) +_nm_utils_dns_option_find_idx(const char *const *strv, gssize strv_len, const char *option) { gs_free char *option_name = NULL; - guint i; + gsize l; + gsize i; - if (!_nm_utils_dns_option_validate(option, &option_name, NULL, FALSE, NULL)) + if (strv_len >= 0) + l = strv_len; + else + l = NM_PTRARRAY_LEN(strv); + + if (l == 0) return -1; - for (i = 0; i < array->len; i++) { + if (!_nm_utils_dns_option_validate(option, &option_name, NULL, AF_UNSPEC, NULL)) + return -1; + + for (i = 0; i < l; i++) { + const char *str = strv[i]; gs_free char *tmp_name = NULL; - if (_nm_utils_dns_option_validate(array->pdata[i], &tmp_name, NULL, FALSE, NULL)) { + if (_nm_utils_dns_option_validate(str, &tmp_name, NULL, AF_UNSPEC, NULL)) { if (nm_streq(tmp_name, option_name)) return i; } @@ -5548,7 +5976,7 @@ _nm_utils_bridge_vlan_verify_list(GPtrArray *vlans, nm_bridge_vlan_get_vid_range(vlan, &vid_start, &vid_end); for (v = vid_start; v <= vid_end; v++) { - if (!nm_g_hash_table_add(h, GUINT_TO_POINTER(v))) { + if (!g_hash_table_add(h, GUINT_TO_POINTER(v))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, diff --git a/src/libnm-core-impl/nm-vpn-editor-plugin.c b/src/libnm-core-impl/nm-vpn-editor-plugin.c index 6c9aff43..6181368a 100644 --- a/src/libnm-core-impl/nm-vpn-editor-plugin.c +++ b/src/libnm-core-impl/nm-vpn-editor-plugin.c @@ -209,7 +209,7 @@ nm_vpn_editor_plugin_get_vt(NMVpnEditorPlugin *plugin, NMVpnEditorPluginVT *vt, if (!p_vt) p_vt_size = 0; g_return_val_if_fail(p_vt_size, 0); - memcpy(vt, p_vt, MIN(vt_size, p_vt_size)); + memcpy(vt, p_vt, NM_MIN(vt_size, p_vt_size)); } return p_vt_size; diff --git a/src/libnm-core-impl/nm-vpn-plugin-info.c b/src/libnm-core-impl/nm-vpn-plugin-info.c index d2ce9ed8..223d8ab3 100644 --- a/src/libnm-core-impl/nm-vpn-plugin-info.c +++ b/src/libnm-core-impl/nm-vpn-plugin-info.c @@ -181,8 +181,8 @@ _sort_files(LoadDirInfo *a, LoadDirInfo *b) { time_t ta, tb; - ta = MAX(a->stat.st_mtime, a->stat.st_ctime); - tb = MAX(b->stat.st_mtime, b->stat.st_ctime); + ta = NM_MAX(a->stat.st_mtime, a->stat.st_ctime); + tb = NM_MAX(b->stat.st_mtime, b->stat.st_ctime); if (ta < tb) return 1; if (ta > tb) @@ -337,7 +337,7 @@ nm_vpn_plugin_info_list_load(void) uid = getuid(); for (i = 0; i < G_N_ELEMENTS(dir); i++) { - if (!dir[i] || nm_strv_find_first(dir, i, dir[i]) >= 0) + if (!dir[i] || nm_strv_contains(dir, i, dir[i])) continue; infos = _nm_vpn_plugin_info_list_load_dir(dir[i], TRUE, uid, NULL, NULL); @@ -552,7 +552,7 @@ _list_find_by_service(GSList *list, const char *name, const char *service) if (name && !nm_streq(name, priv->name)) continue; if (service && !nm_streq(priv->service, service) - && (nm_strv_find_first(priv->aliases, -1, service) < 0)) + && !nm_strv_contains(priv->aliases, -1, service)) continue; return list->data; @@ -639,7 +639,7 @@ nm_vpn_plugin_info_list_find_service_type(GSList *list, const char *name) /* check the hard-coded list of short-names. They all have the same * well-known prefix org.freedesktop.NetworkManager and the name. */ - if (nm_strv_find_first(known_names, G_N_ELEMENTS(known_names), name) >= 0) + if (nm_strv_contains(known_names, G_N_ELEMENTS(known_names), name)) return g_strdup_printf("%s.%s", NM_DBUS_INTERFACE, name); /* try, if there exists a plugin with @name under org.freedesktop.NetworkManager. @@ -728,7 +728,7 @@ nm_vpn_plugin_info_list_get_service_types(GSList *list, if (l->len <= 0) { g_ptr_array_free(l, TRUE); - return g_new0(char *, 1); + return nm_strv_empty_new(); } /* sort the result and remove duplicates. */ diff --git a/src/libnm-core-impl/tests/meson.build b/src/libnm-core-impl/tests/meson.build index 988c60db..80b58827 100644 --- a/src/libnm-core-impl/tests/meson.build +++ b/src/libnm-core-impl/tests/meson.build @@ -8,7 +8,6 @@ enum_sources = gnome.mkenums_simple( ) test_units = [ - 'test-compare', 'test-crypto', 'test-general', 'test-keyfile', diff --git a/src/libnm-core-impl/tests/test-compare.c b/src/libnm-core-impl/tests/test-compare.c deleted file mode 100644 index 77d2e17b..00000000 --- a/src/libnm-core-impl/tests/test-compare.c +++ /dev/null @@ -1,231 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2007 - 2014 Red Hat, Inc. - * Copyright (C) 2007 - 2008 Novell, Inc. - */ - -#include "libnm-core-impl/nm-default-libnm-core.h" - -#include <arpa/inet.h> -#include <netinet/in.h> - -#include "nm-property-compare.h" - -#include "libnm-glib-aux/nm-test-utils.h" - -static void -compare_ints(void) -{ - GVariant *value1, *value2; - - value1 = g_variant_new_int32(5); - value2 = g_variant_new_int32(5); - g_assert(nm_property_compare(value1, value2) == 0); - - g_variant_unref(value2); - value2 = g_variant_new_int32(10); - g_assert(nm_property_compare(value1, value2) < 0); - - g_variant_unref(value2); - value2 = g_variant_new_int32(-1); - g_assert(nm_property_compare(value1, value2) > 0); - - g_variant_unref(value1); - g_variant_unref(value2); -} - -static void -compare_strings(void) -{ - GVariant *value1, *value2; - const char *str1 = "hello"; - const char *str2 = "world"; - - value1 = g_variant_new_string(str1); - value2 = g_variant_new_string(str1); - g_assert(nm_property_compare(value1, value2) == 0); - - g_variant_unref(value2); - value2 = g_variant_new_string(str2); - g_assert(nm_property_compare(value1, value2) < 0); - - g_assert(nm_property_compare(value2, value1) > 0); - - g_variant_unref(value1); - g_variant_unref(value2); -} - -static void -compare_strv(void) -{ - GVariant *value1, *value2; - const char *const strv1[] = {"foo", "bar", "baz", NULL}; - const char *const strv2[] = {"foo", "bar", "bar", NULL}; - const char *const strv3[] = {"foo", "bar", NULL}; - const char *const strv4[] = {"foo", "bar", "baz", "bam", NULL}; - - value1 = g_variant_new_strv(strv1, -1); - value2 = g_variant_new_strv(strv1, -1); - g_assert(nm_property_compare(value1, value2) == 0); - - g_variant_unref(value2); - value2 = g_variant_new_strv(strv2, -1); - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value2); - value2 = g_variant_new_strv(strv3, -1); - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value2); - value2 = g_variant_new_strv(strv4, -1); - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value1); - g_variant_unref(value2); -} - -static void -compare_arrays(void) -{ - GVariant *value1, *value2; - guint32 array[] = {0, 1, 2, 3, 4}; - - value1 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - array, - G_N_ELEMENTS(array), - sizeof(guint32)); - value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - array, - G_N_ELEMENTS(array), - sizeof(guint32)); - - g_assert(nm_property_compare(value1, value2) == 0); - - g_variant_unref(value2); - value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - array + 1, - G_N_ELEMENTS(array) - 1, - sizeof(guint32)); - g_assert(nm_property_compare(value1, value2) != 0); - - array[0] = 7; - g_variant_unref(value2); - value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - array, - G_N_ELEMENTS(array), - sizeof(guint32)); - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value1); - g_variant_unref(value2); -} - -static void -compare_str_hash(void) -{ - GVariant *value1, *value2; - GVariantBuilder builder; - - g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); - g_variant_builder_add(&builder, "{ss}", "key1", "hello"); - g_variant_builder_add(&builder, "{ss}", "key2", "world"); - g_variant_builder_add(&builder, "{ss}", "key3", "!"); - value1 = g_variant_builder_end(&builder); - - g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); - g_variant_builder_add(&builder, "{ss}", "key3", "!"); - g_variant_builder_add(&builder, "{ss}", "key2", "world"); - g_variant_builder_add(&builder, "{ss}", "key1", "hello"); - value2 = g_variant_builder_end(&builder); - - g_assert(nm_property_compare(value1, value2) == 0); - - g_variant_unref(value2); - g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); - g_variant_builder_add(&builder, "{ss}", "key1", "hello"); - g_variant_builder_add(&builder, "{ss}", "key3", "!"); - value2 = g_variant_builder_end(&builder); - - g_assert(nm_property_compare(value1, value2) != 0); - g_assert(nm_property_compare(value2, value1) != 0); - - g_variant_unref(value2); - g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); - g_variant_builder_add(&builder, "{ss}", "key1", "hello"); - g_variant_builder_add(&builder, "{ss}", "key2", "moon"); - g_variant_builder_add(&builder, "{ss}", "key3", "!"); - value2 = g_variant_builder_end(&builder); - - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value1); - g_variant_unref(value2); -} - -static void -compare_ip6_addresses(void) -{ - GVariant *value1, *value2; - struct in6_addr addr1; - struct in6_addr addr2; - struct in6_addr addr3; - guint32 prefix1 = 64; - guint32 prefix2 = 64; - guint32 prefix3 = 0; - - inet_pton(AF_INET6, "1:2:3:4:5:6:7:8", &addr1); - inet_pton(AF_INET6, "ffff:2:3:4:5:6:7:8", &addr2); - inet_pton(AF_INET6, "::", &addr3); - - value1 = g_variant_new( - "(@ayu@ay)", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr1.s6_addr, 16, 1), - prefix1, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); - - value2 = g_variant_new( - "(@ayu@ay)", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr1.s6_addr, 16, 1), - prefix1, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); - - g_assert(nm_property_compare(value1, value2) == 0); - - g_variant_unref(value2); - value2 = g_variant_new( - "(@ayu@ay)", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr2.s6_addr, 16, 1), - prefix2, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); - - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value2); - value2 = g_variant_new( - "(@ayu@ay)", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1), - prefix3, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); - - g_assert(nm_property_compare(value1, value2) != 0); - - g_variant_unref(value1); - g_variant_unref(value2); -} - -NMTST_DEFINE(); - -int -main(int argc, char *argv[]) -{ - nmtst_init(&argc, &argv, TRUE); - - g_test_add_func("/libnm/compare/ints", compare_ints); - g_test_add_func("/libnm/compare/strings", compare_strings); - g_test_add_func("/libnm/compare/strv", compare_strv); - g_test_add_func("/libnm/compare/arrays", compare_arrays); - g_test_add_func("/libnm/compare/str_hash", compare_str_hash); - g_test_add_func("/libnm/compare/ip6_addresses", compare_ip6_addresses); - - return g_test_run(); -} diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c index 30b1ca5d..4acf33e0 100644 --- a/src/libnm-core-impl/tests/test-general.c +++ b/src/libnm-core-impl/tests/test-general.c @@ -292,6 +292,7 @@ test_device_wifi_capabilities(void) _E(NM_WIFI_DEVICE_CAP_FREQ_VALID); _E(NM_WIFI_DEVICE_CAP_FREQ_2GHZ); _E(NM_WIFI_DEVICE_CAP_FREQ_5GHZ); + _E(NM_WIFI_DEVICE_CAP_FREQ_6GHZ); _E(NM_WIFI_DEVICE_CAP_MESH); _E(NM_WIFI_DEVICE_CAP_IBSS_RSN); #undef _E @@ -556,6 +557,21 @@ test_nm_hash(void) #endif NM_STATIC_ASSERT_EXPR_VOID(NM_HASH_COMBINE_BOOLS(int, 1, 0, 1) == 5); + + g_assert_cmpmem(NM_HASH_SEED_16(55, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), + 16, + ((guint8[16]){55, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}), + 16); + + g_assert_cmpmem(NM_HASH_SEED_16_U64(1), 16, ((guint8[16]){0, 0, 0, 0, 0, 0, 0, 1, 0}), 16); + g_assert_cmpmem(NM_HASH_SEED_16_U64(0x1234567890ABCDEFu), + 16, + ((guint8[16]){0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0}), + 16); + + g_assert_cmpint(c_siphash_hash(NM_HASH_SEED_16_U64(0x780E21E45489CC6Fu), (guint8 *) "foo", 3), + ==, + 0XA5A41E5C1B4153BFu); } /*****************************************************************************/ @@ -2627,7 +2643,7 @@ test_setting_gsm_apn_bad_chars(void) /* Make sure a valid APN works */ g_object_set(s_gsm, NM_SETTING_GSM_APN, "foobar123.-baz", NULL); - g_assert(nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL)); + nmtst_assert_setting_verifies(s_gsm); /* Random invalid chars */ g_object_set(s_gsm, NM_SETTING_GSM_APN, "@#%$@#%@#%", NULL); @@ -2639,7 +2655,7 @@ test_setting_gsm_apn_bad_chars(void) /* 0 characters long */ g_object_set(s_gsm, NM_SETTING_GSM_APN, "", NULL); - g_assert(nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL)); + nmtst_assert_setting_verifies(s_gsm); /* 65-character long */ g_object_set(s_gsm, @@ -3946,7 +3962,7 @@ typedef struct { typedef struct { const char *name; - DiffKey keys[30]; + DiffKey keys[31]; } DiffSetting; #define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0])) @@ -4003,7 +4019,9 @@ test_connection_diff_a_only(void) {NM_SETTING_CONNECTION_PERMISSIONS, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_ZONE, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_MASTER, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_CONNECTION_CONTROLLER, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_SECONDARIES, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A}, @@ -5295,6 +5313,7 @@ test_setting_ip4_changed_signal(void) NMIPAddress *addr; NMIPRoute *route; GError *error = NULL; + gs_strfreev char **strv = NULL; connection = nm_simple_connection_new(); g_signal_connect(connection, @@ -5319,7 +5338,8 @@ test_setting_ip4_changed_signal(void) ASSERT_CHANGED(nm_setting_ip_config_add_dns_search(s_ip4, "foobar.com")); ASSERT_CHANGED(nm_setting_ip_config_remove_dns_search(s_ip4, 0)); - NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns_search->len)); + NMTST_EXPECT_LIBNM_CRITICAL( + NMTST_G_RETURN_MSG(idx >= 0 && idx < nm_g_array_len(priv->dns_search.arr))); ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns_search(s_ip4, 1)); g_test_assert_expected_messages(); @@ -5351,10 +5371,51 @@ test_setting_ip4_changed_signal(void) nm_setting_ip_config_add_route(s_ip4, route); ASSERT_CHANGED(nm_setting_ip_config_clear_routes(s_ip4)); + g_assert(!nm_setting_ip_config_has_dns_options(s_ip4)); + g_assert_cmpint(nm_setting_ip_config_get_num_dns_options(s_ip4), ==, 0); + + g_object_get(s_ip4, NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL); + g_assert_null(strv); + + g_assert_null(nm_setting_ip_config_get_dns_option(s_ip4, 0)); + NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(_idx <= _len)); + g_assert_null(nm_setting_ip_config_get_dns_option(s_ip4, 1)); + g_test_assert_expected_messages(); + ASSERT_CHANGED(nm_setting_ip_config_add_dns_option(s_ip4, "debug")); + + g_assert(nm_setting_ip_config_has_dns_options(s_ip4)); + g_assert_cmpint(nm_setting_ip_config_get_num_dns_options(s_ip4), ==, 1); + + g_object_get(s_ip4, NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL); + g_assert_nonnull(strv); + g_assert_cmpstr(strv[0], ==, "debug"); + g_assert_cmpstr(strv[1], ==, NULL); + nm_clear_pointer(&strv, g_strfreev); + + g_assert_cmpstr(nm_setting_ip_config_get_dns_option(s_ip4, 0), ==, "debug"); + g_assert_null(nm_setting_ip_config_get_dns_option(s_ip4, 1)); + NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(_idx <= _len)); + g_assert_null(nm_setting_ip_config_get_dns_option(s_ip4, 2)); + g_test_assert_expected_messages(); + ASSERT_CHANGED(nm_setting_ip_config_remove_dns_option(s_ip4, 0)); - NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns_options->len)); + g_assert(nm_setting_ip_config_has_dns_options(s_ip4)); + g_assert_cmpint(nm_setting_ip_config_get_num_dns_options(s_ip4), ==, 0); + + g_object_get(s_ip4, NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL); + g_assert_nonnull(strv); + g_assert_cmpstr(strv[0], ==, NULL); + nm_clear_pointer(&strv, g_strfreev); + + g_assert_null(nm_setting_ip_config_get_dns_option(s_ip4, 0)); + NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(_idx <= _len)); + g_assert_null(nm_setting_ip_config_get_dns_option(s_ip4, 1)); + g_test_assert_expected_messages(); + + NMTST_EXPECT_LIBNM_CRITICAL( + NMTST_G_RETURN_MSG(idx >= 0 && idx < nm_g_array_len(priv->dns_options.arr))); ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns_option(s_ip4, 1)); g_test_assert_expected_messages(); @@ -5366,6 +5427,7 @@ test_setting_ip4_changed_signal(void) static void test_setting_ip6_changed_signal(void) { + gs_strfreev char **strv = NULL; NMConnection *connection; gboolean changed = FALSE; NMSettingIPConfig *s_ip6; @@ -5393,10 +5455,35 @@ test_setting_ip6_changed_signal(void) nm_setting_ip_config_add_dns(s_ip6, "1:2:3::4:5:6"); ASSERT_CHANGED(nm_setting_ip_config_clear_dns(s_ip6)); + g_object_get(s_ip6, NM_SETTING_IP_CONFIG_DNS_SEARCH, &strv, NULL); + g_assert_null(strv); + ASSERT_CHANGED(nm_setting_ip_config_add_dns_search(s_ip6, "foobar.com")); + + g_object_get(s_ip6, NM_SETTING_IP_CONFIG_DNS_SEARCH, &strv, NULL); + g_assert_nonnull(strv); + g_assert_cmpstr(strv[0], ==, "foobar.com"); + g_assert_cmpstr(strv[1], ==, NULL); + nm_clear_pointer(&strv, g_strfreev); + + g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 0), ==, "foobar.com"); + g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 1), ==, NULL); + + NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(_idx <= _len)); + g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, -1), ==, NULL); + g_test_assert_expected_messages(); + + NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(_idx <= _len)); + g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 2), ==, NULL); + g_test_assert_expected_messages(); + ASSERT_CHANGED(nm_setting_ip_config_remove_dns_search(s_ip6, 0)); - NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns_search->len)); + g_object_get(s_ip6, NM_SETTING_IP_CONFIG_DNS_SEARCH, &strv, NULL); + g_assert_null(strv); + + NMTST_EXPECT_LIBNM_CRITICAL( + NMTST_G_RETURN_MSG(idx >= 0 && idx < nm_g_array_len(priv->dns_search.arr))); ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns_search(s_ip6, 1)); g_test_assert_expected_messages(); @@ -5591,9 +5678,13 @@ test_setting_wireless_security_changed_signal(void) "wep-key0", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL))); + ASSERT_UNCHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec), + "wep-key1", + NM_SETTING_SECRET_FLAG_AGENT_OWNED, + NULL))); ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec), "wep-key1", - NM_SETTING_SECRET_FLAG_AGENT_OWNED, + NM_SETTING_SECRET_FLAG_NOT_SAVED, NULL))); ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec), "wep-key2", @@ -5601,7 +5692,7 @@ test_setting_wireless_security_changed_signal(void) NULL))); ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec), "wep-key3", - NM_SETTING_SECRET_FLAG_AGENT_OWNED, + NM_SETTING_SECRET_FLAG_NOT_SAVED, NULL))); g_object_unref(connection); @@ -6146,9 +6237,9 @@ test_connection_normalize_slave_type_1(void) &s_con); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, "invalid-type", NULL); @@ -6157,7 +6248,7 @@ test_connection_normalize_slave_type_1(void) NM_CONNECTION_ERROR_INVALID_PROPERTY); g_assert(!nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME)); - g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, "bridge", NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_PORT_TYPE, "bridge", NULL); g_assert(!nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME)); nmtst_assert_connection_verifies_after_normalization(con, @@ -6165,9 +6256,7 @@ test_connection_normalize_slave_type_1(void) NM_CONNECTION_ERROR_MISSING_SETTING); nmtst_connection_normalize(con); g_assert(nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), - ==, - NM_SETTING_BRIDGE_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); } static void @@ -6182,9 +6271,9 @@ test_connection_normalize_slave_type_2(void) &s_con); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, "invalid-type", NULL); @@ -6193,19 +6282,17 @@ test_connection_normalize_slave_type_2(void) NM_CONNECTION_ERROR_INVALID_PROPERTY); g_assert(!nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME)); - g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NULL, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_PORT_TYPE, NULL, NULL); nm_connection_add_setting(con, nm_setting_bridge_port_new()); g_assert(nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NULL); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NULL); nmtst_assert_connection_verifies_after_normalization(con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY); nmtst_connection_normalize(con); g_assert(nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), - ==, - NM_SETTING_BRIDGE_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); } static void @@ -6483,9 +6570,9 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) switch (TEST_CASE) { case 1: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -6504,9 +6591,9 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) break; case 2: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -6527,9 +6614,9 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) break; case 3: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -6545,9 +6632,9 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) break; case 4: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -6561,7 +6648,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) NM_CONNECTION_ERROR_INVALID_PROPERTY); break; case 5: - g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, "master0", NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "master0", NULL); s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new()); nm_connection_add_setting(con, NM_SETTING(s_ovs_if)); @@ -6576,15 +6663,15 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_OVS_INTERFACE_SETTING_NAME); g_assert(s_con == nm_connection_get_setting_connection(con)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME); break; case 6: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_BRIDGE_SETTING_NAME, NULL); @@ -6598,9 +6685,9 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data) break; case 7: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_BRIDGE_SETTING_NAME, NULL); @@ -6646,7 +6733,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da NM_CONNECTION_ERROR_INVALID_PROPERTY); break; case 2: - g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, "master0", NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "master0", NULL); nmtst_assert_connection_verifies_after_normalization(con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY); @@ -6659,16 +6746,16 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da NM_SETTING_OVS_INTERFACE_SETTING_NAME); g_assert(s_con == nm_connection_get_setting_connection(con)); g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME); g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal"); break; case 3: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); nmtst_assert_connection_verifies_after_normalization(con, @@ -6683,13 +6770,13 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da NM_SETTING_OVS_INTERFACE_SETTING_NAME); g_assert(s_con == nm_connection_get_setting_connection(con)); g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME); g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal"); break; case 4: - g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, "master0", NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "master0", NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL); nmtst_assert_connection_verifies_after_normalization(con, NM_CONNECTION_ERROR, @@ -6703,16 +6790,16 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da NM_SETTING_OVS_INTERFACE_SETTING_NAME); g_assert(s_con == nm_connection_get_setting_connection(con)); g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME); g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal"); break; case 5: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL); @@ -6733,9 +6820,9 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da break; case 6: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL); @@ -6749,16 +6836,16 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da NM_SETTING_OVS_INTERFACE_SETTING_NAME); g_assert(s_con == nm_connection_get_setting_connection(con)); g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME); g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal"); break; case 7: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL); @@ -6768,9 +6855,9 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da break; case 8: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "bogus", NULL); @@ -6780,9 +6867,9 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da break; case 9: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL); @@ -6792,9 +6879,9 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da break; case 10: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL); @@ -6805,9 +6892,9 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da break; case 11: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME, "adsf", @@ -6820,9 +6907,9 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da break; case 12: g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME, "adsf", @@ -6842,7 +6929,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da NM_SETTING_OVS_PATCH_SETTING_NAME); g_assert(s_con == nm_connection_get_setting_connection(con)); g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con)); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME); g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "patch"); @@ -8713,23 +8800,35 @@ test_nm_ptrarray_len(void) static void test_nm_utils_dns_option_validate_do(char *option, - gboolean ipv6, + int addr_family, const NMUtilsDNSOptionDesc *descs, gboolean exp_result, char *exp_name, gboolean exp_value) { - char *name; - long value = 0; - gboolean result; + gs_free char *name = NULL; + long value = 0; + gboolean result; + + if (!descs) { + g_assert(addr_family == AF_UNSPEC); + addr_family = nmtst_rand_select(AF_UNSPEC, AF_INET, AF_INET6); + } - result = _nm_utils_dns_option_validate(option, &name, &value, ipv6, descs); + result = _nm_utils_dns_option_validate(option, &name, &value, addr_family, descs); g_assert(result == exp_result); g_assert_cmpstr(name, ==, exp_name); g_assert(value == exp_value); - g_free(name); + nm_clear_g_free(&name); + + if (result && descs) { + result = _nm_utils_dns_option_validate(option, &name, &value, AF_UNSPEC, descs); + g_assert(result == exp_result); + g_assert_cmpstr(name, ==, exp_name); + g_assert(value == exp_value); + } } static const NMUtilsDNSOptionDesc opt_descs[] = { @@ -8743,57 +8842,56 @@ static const NMUtilsDNSOptionDesc opt_descs[] = { static void test_nm_utils_dns_option_validate(void) { - /* opt ipv6 descs result name value */ - test_nm_utils_dns_option_validate_do("", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do(":", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do(":1", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do(":val", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt", FALSE, NULL, TRUE, "opt", -1); - test_nm_utils_dns_option_validate_do("opt:", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt:12", FALSE, NULL, TRUE, "opt", 12); - test_nm_utils_dns_option_validate_do("opt:12 ", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt:val", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt:2val", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt:2:3", FALSE, NULL, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt-6", FALSE, NULL, TRUE, "opt-6", -1); + /* (opt, addr_family, descs, result, name, value) */ + test_nm_utils_dns_option_validate_do("", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do(":", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do(":1", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do(":val", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt", AF_UNSPEC, NULL, TRUE, "opt", -1); + test_nm_utils_dns_option_validate_do("opt:", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt:12", AF_UNSPEC, NULL, TRUE, "opt", 12); + test_nm_utils_dns_option_validate_do("opt:12 ", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt:val", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt:2val", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt:2:3", AF_UNSPEC, NULL, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt-6", AF_UNSPEC, NULL, TRUE, "opt-6", -1); - test_nm_utils_dns_option_validate_do("opt1", FALSE, opt_descs, TRUE, "opt1", -1); - test_nm_utils_dns_option_validate_do("opt1", TRUE, opt_descs, TRUE, "opt1", -1); - test_nm_utils_dns_option_validate_do("opt1:3", FALSE, opt_descs, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt1", AF_INET, opt_descs, TRUE, "opt1", -1); + test_nm_utils_dns_option_validate_do("opt1", AF_INET6, opt_descs, TRUE, "opt1", -1); + test_nm_utils_dns_option_validate_do("opt1:3", AF_INET, opt_descs, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt2", FALSE, opt_descs, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt2:5", FALSE, opt_descs, TRUE, "opt2", 5); + test_nm_utils_dns_option_validate_do("opt2", AF_INET, opt_descs, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt2:5", AF_INET, opt_descs, TRUE, "opt2", 5); - test_nm_utils_dns_option_validate_do("opt3", FALSE, opt_descs, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt3", TRUE, opt_descs, TRUE, "opt3", -1); + test_nm_utils_dns_option_validate_do("opt3", AF_INET, opt_descs, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt3", AF_INET6, opt_descs, TRUE, "opt3", -1); - test_nm_utils_dns_option_validate_do("opt4", FALSE, opt_descs, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt4", TRUE, opt_descs, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt4:40", FALSE, opt_descs, FALSE, NULL, -1); - test_nm_utils_dns_option_validate_do("opt4:40", TRUE, opt_descs, TRUE, "opt4", 40); + test_nm_utils_dns_option_validate_do("opt4", AF_INET, opt_descs, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt4", AF_INET6, opt_descs, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt4:40", AF_INET, opt_descs, FALSE, NULL, -1); + test_nm_utils_dns_option_validate_do("opt4:40", AF_INET6, opt_descs, TRUE, "opt4", 40); } static void test_nm_utils_dns_option_find_idx(void) { - GPtrArray *options; - - options = g_ptr_array_new(); - - g_ptr_array_add(options, "debug"); - g_ptr_array_add(options, "timeout:5"); - g_ptr_array_add(options, "edns0"); + const char *const options[] = { + "debug", + "timeout:5", + "edns0", + }; - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "debug"), ==, 0); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "debug:1"), ==, 0); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "timeout"), ==, 1); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "timeout:5"), ==, 1); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "timeout:2"), ==, 1); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "edns0"), ==, 2); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "rotate"), ==, -1); - g_assert_cmpint(_nm_utils_dns_option_find_idx(options, ""), ==, -1); +#define _find_idx(options, option) \ + _nm_utils_dns_option_find_idx((options), G_N_ELEMENTS(options), ("" option "")) - g_ptr_array_free(options, TRUE); + g_assert_cmpint(_find_idx(options, "debug"), ==, 0); + g_assert_cmpint(_find_idx(options, "debug:1"), ==, 0); + g_assert_cmpint(_find_idx(options, "timeout"), ==, 1); + g_assert_cmpint(_find_idx(options, "timeout:5"), ==, 1); + g_assert_cmpint(_find_idx(options, "timeout:2"), ==, 1); + g_assert_cmpint(_find_idx(options, "edns0"), ==, 2); + g_assert_cmpint(_find_idx(options, "rotate"), ==, -1); + g_assert_cmpint(_find_idx(options, ""), ==, -1); } /*****************************************************************************/ @@ -10601,9 +10699,9 @@ test_connection_ovs_ifname(gconstpointer test_data) &s_con); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_BRIDGE_SETTING_NAME, NULL); @@ -10619,9 +10717,9 @@ test_connection_ovs_ifname(gconstpointer test_data) g_assert(s_ovs_iface); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -10646,9 +10744,9 @@ test_connection_ovs_ifname(gconstpointer test_data) g_assert(s_ovs_iface); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -10662,9 +10760,9 @@ test_connection_ovs_ifname(gconstpointer test_data) &s_con); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); @@ -10688,9 +10786,9 @@ test_connection_ovs_ifname(gconstpointer test_data) g_assert(s_ovs_iface); g_object_set(s_con, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, "master0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME, NULL); diff --git a/src/libnm-core-impl/tests/test-setting.c b/src/libnm-core-impl/tests/test-setting.c index b30758ff..4b1aa2c1 100644 --- a/src/libnm-core-impl/tests/test-setting.c +++ b/src/libnm-core-impl/tests/test-setting.c @@ -2303,6 +2303,79 @@ test_ethtool_pause(void) g_assert_true(out_value); } +static void +test_ethtool_eee(void) +{ + gs_unref_object NMConnection *con = NULL; + gs_unref_object NMConnection *con2 = NULL; + gs_unref_object NMConnection *con3 = NULL; + gs_unref_variant GVariant *variant = NULL; + gs_free_error GError *error = NULL; + nm_auto_unref_keyfile GKeyFile *keyfile = NULL; + NMSettingConnection *s_con; + NMSettingEthtool *s_ethtool; + NMSettingEthtool *s_ethtool2; + NMSettingEthtool *s_ethtool3; + gboolean out_value; + + con = + nmtst_create_minimal_connection("ethtool-eee", NULL, NM_SETTING_WIRED_SETTING_NAME, &s_con); + s_ethtool = NM_SETTING_ETHTOOL(nm_setting_ethtool_new()); + nm_connection_add_setting(con, NM_SETTING(s_ethtool)); + + nm_setting_option_set_boolean(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_EEE_ENABLED, FALSE); + + g_assert_true(nm_setting_option_get_boolean(NM_SETTING(s_ethtool), + NM_ETHTOOL_OPTNAME_EEE_ENABLED, + &out_value)); + g_assert_true(!out_value); + + nmtst_connection_normalize(con); + + variant = nm_connection_to_dbus(con, NM_CONNECTION_SERIALIZE_ALL); + + con2 = nm_simple_connection_new_from_dbus(variant, &error); + nmtst_assert_success(con2, error); + + s_ethtool2 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con2, NM_TYPE_SETTING_ETHTOOL)); + + g_assert_true(nm_setting_option_get_boolean(NM_SETTING(s_ethtool2), + NM_ETHTOOL_OPTNAME_EEE_ENABLED, + &out_value)); + g_assert_true(!out_value); + + nmtst_assert_connection_verifies_without_normalization(con2); + + nmtst_assert_connection_equals(con, FALSE, con2, FALSE); + + con2 = nm_simple_connection_new_from_dbus(variant, &error); + nmtst_assert_success(con2, error); + + keyfile = nm_keyfile_write(con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error); + nmtst_assert_success(keyfile, error); + + con3 = nm_keyfile_read(keyfile, + "/ignored/current/working/directory/for/loading/relative/paths", + NM_KEYFILE_HANDLER_FLAGS_NONE, + NULL, + NULL, + &error); + nmtst_assert_success(con3, error); + + nm_keyfile_read_ensure_id(con3, "unused-because-already-has-id"); + nm_keyfile_read_ensure_uuid(con3, "unused-because-already-has-uuid"); + + nmtst_connection_normalize(con3); + + nmtst_assert_connection_equals(con, FALSE, con3, FALSE); + + s_ethtool3 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con3, NM_TYPE_SETTING_ETHTOOL)); + + g_assert_true(nm_setting_option_get_boolean(NM_SETTING(s_ethtool3), + NM_ETHTOOL_OPTNAME_EEE_ENABLED, + &out_value)); + g_assert_true(!out_value); +} /*****************************************************************************/ static void @@ -4492,7 +4565,7 @@ test_setting_metadata(void) GArray *property_types_data; guint prop_idx_val; gboolean can_set_including_default = FALSE; - gboolean can_have_direct_hook = FALSE; + gboolean can_have_direct_set_fcn = FALSE; int n_special_options; g_assert(sip->name); @@ -4633,9 +4706,11 @@ test_setting_metadata(void) INFINIBAND_ALEN)); } else { g_assert(g_variant_type_equal(sip->property_type->dbus_type, "s")); - g_assert(sip->property_type->to_dbus_fcn - == _nm_setting_property_to_dbus_fcn_direct); - can_have_direct_hook = TRUE; + g_assert(NM_IN_SET(sip->property_type->to_dbus_fcn, + _nm_setting_property_to_dbus_fcn_direct, + _nm_setting_connection_controller_to_dbus, + _nm_setting_connection_port_type_to_dbus)); + can_have_direct_set_fcn = TRUE; } g_assert(sip->param_spec); g_assert(sip->param_spec->value_type == G_TYPE_STRING); @@ -4663,6 +4738,11 @@ test_setting_metadata(void) g_assert(sip->param_spec); g_assert(!NM_FLAGS_HAS(sip->param_spec->flags, NM_SETTING_PARAM_SECRET)); } + if (sip->direct_strv_preserve_empty) + g_assert(sip->property_type->direct_type == NM_VALUE_TYPE_STRV); + if (sip->direct_string_allow_empty) { + g_assert(sip->property_type->direct_type == NM_VALUE_TYPE_STRING); + } if (sip->direct_set_string_mac_address_len != 0) { g_assert(NM_IN_SET(sip->property_type, @@ -4671,8 +4751,26 @@ test_setting_metadata(void) g_assert(sip->property_type->direct_type == NM_VALUE_TYPE_STRING); } - if (!can_have_direct_hook) - g_assert(!sip->direct_hook.set_string_fcn); + if (!can_have_direct_set_fcn) + g_assert(!sip->direct_set_fcn.set_string); + + if (sip->property_type->direct_type == NM_VALUE_TYPE_NONE) + g_assert(!sip->direct_also_notify); + else { + if (sip->direct_also_notify) { + guint prop_idx2; + guint cnt = 0; + + for (prop_idx2 = 0; prop_idx2 < sis->property_infos_len; prop_idx2++) { + const NMSettInfoProperty *sip2 = &sis->property_infos[prop_idx2]; + + if (sip2->param_spec == sip->direct_also_notify) + cnt++; + } + g_assert_cmpint(cnt, ==, 1u); + g_assert(sip->param_spec != sip->direct_also_notify); + } + } n_special_options = (sip->direct_set_string_mac_address_len != 0) + (!!sip->direct_set_string_strip) @@ -4754,6 +4852,10 @@ check_done:; g_assert(NM_IN_SET(sip->property_type->from_dbus_fcn, _nm_setting_property_from_dbus_fcn_direct_ip_config_gateway, _nm_setting_property_from_dbus_fcn_direct_mac_address, + _nm_setting_connection_controller_from_dbus, + _nm_setting_connection_master_from_dbus, + _nm_setting_connection_slave_type_from_dbus, + _nm_setting_connection_port_type_from_dbus, _nm_setting_property_from_dbus_fcn_direct)); } } @@ -4775,7 +4877,9 @@ check_done:; g_assert(sip->property_type->direct_type != NM_VALUE_TYPE_NONE); g_assert(NM_IN_SET(sip->property_type->to_dbus_fcn, _nm_setting_property_to_dbus_fcn_direct, - _nm_setting_property_to_dbus_fcn_direct_mac_address)); + _nm_setting_property_to_dbus_fcn_direct_mac_address, + _nm_setting_connection_controller_to_dbus, + _nm_setting_connection_port_type_to_dbus)); } else if (sip->property_type->compare_fcn == _nm_setting_property_compare_fcn_ignore) { if (NM_IN_SET(sip->property_type, &nm_sett_info_propert_type_deprecated_ignore_i, @@ -4810,6 +4914,17 @@ check_done:; g_array_append_val(property_types_data, prop_idx_val); if (sip->param_spec) { + /* All "direct" properties use G_PARAM_EXPLICIT_NOTIFY. + * + * Warning: this is potentially dangerous, because implementations MUST remember + * to notify the property change in set_property(). Optimally, the property uses + * _nm_setting_property_set_property_direct(), which takes care of that. + */ + if (sip->property_type->direct_type != NM_VALUE_TYPE_NONE) + g_assert(NM_FLAGS_HAS(sip->param_spec->flags, G_PARAM_EXPLICIT_NOTIFY)); + } + + if (sip->param_spec) { nm_auto_unset_gvalue GValue val = G_VALUE_INIT; g_assert_cmpstr(sip->name, ==, sip->param_spec->name); @@ -4998,6 +5113,50 @@ check_done:; /*****************************************************************************/ static void +test_setting_connection_empty_address_and_route(void) +{ + NMSettingIPConfig *s_ip4; + NMIPRoute *route; + NMIPAddress *addr; + gs_unref_object NMConnection *con = NULL; + gs_free_error GError *error = NULL; + gboolean success; + + /* IP4 setting */ + con = nmtst_create_minimal_connection("wired", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL); + s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new(); + nm_connection_add_setting(con, NM_SETTING(s_ip4)); + g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL); + g_assert(s_ip4 != NULL); + g_assert(NM_IS_SETTING_IP4_CONFIG(s_ip4)); + success = nm_setting_verify((NMSetting *) s_ip4, con, &error); + nmtst_assert_no_success(success, error); + nm_clear_error(&error); + + route = nm_ip_route_new(AF_INET, "192.168.12.0", 24, NULL, 0, NULL); + nm_setting_ip_config_add_route(s_ip4, route); + success = nm_setting_verify((NMSetting *) s_ip4, con, &error); + nmtst_assert_success(success, error); + nm_clear_error(&error); + + nm_setting_ip_config_clear_routes(s_ip4); + addr = nm_ip_address_new(AF_INET, "1.1.1.3", 24, NULL); + nm_setting_ip_config_add_address(s_ip4, addr); + success = nm_setting_verify((NMSetting *) s_ip4, con, &error); + nmtst_assert_success(success, error); + nm_clear_error(&error); + + nm_setting_ip_config_add_route(s_ip4, route); + success = nm_setting_verify((NMSetting *) s_ip4, con, &error); + nmtst_assert_success(success, error); + nm_ip_address_unref(addr); + nm_ip_route_unref(route); + nm_clear_error(&error); +} + +/*****************************************************************************/ + +static void test_setting_connection_secondaries_verify(void) { gs_unref_object NMConnection *con = NULL; @@ -5035,44 +5194,42 @@ test_setting_connection_secondaries_verify(void) g_object_set(s_con, NM_SETTING_CONNECTION_SECONDARIES, arr->pdata, NULL); -#define _assert_secondaries(s_con, expected) \ - G_STMT_START \ - { \ - NMSettingConnection *const _s_con = (s_con); \ - const char *const *_expected = (expected); \ - GArray *_secondaries; \ - const guint _expected_len = NM_PTRARRAY_LEN(_expected); \ - gs_strfreev char **_sec_strv = NULL; \ - guint _i; \ - \ - g_assert(_expected); \ - \ - if (nmtst_get_rand_bool()) { \ - _secondaries = _nm_setting_connection_get_secondaries(_s_con); \ - g_assert_cmpint(_expected_len, ==, nm_g_array_len(_secondaries)); \ - g_assert((_expected_len == 0) == (!_secondaries)); \ - g_assert(nm_strv_equal(_expected, \ - _secondaries ? nm_strvarray_get_strv(&_secondaries, NULL) \ - : NM_PTRARRAY_EMPTY(const char *))); \ - } \ - \ - if (nmtst_get_rand_bool()) { \ - g_object_get(_s_con, NM_SETTING_CONNECTION_SECONDARIES, &_sec_strv, NULL); \ - g_assert_cmpint(_expected_len, ==, NM_PTRARRAY_LEN(_sec_strv)); \ - g_assert((_expected_len == 0) == (!_sec_strv)); \ - g_assert(nm_strv_equal(_expected, _sec_strv ?: NM_STRV_EMPTY())); \ - } \ - \ - g_assert_cmpint(nm_setting_connection_get_num_secondaries(_s_con), ==, _expected_len); \ - if (nmtst_get_rand_bool()) { \ - for (_i = 0; _i < _expected_len; _i++) { \ - g_assert_cmpstr(nm_setting_connection_get_secondary(_s_con, _i), \ - ==, \ - _expected[_i]); \ - } \ - g_assert_null(nm_setting_connection_get_secondary(_s_con, _expected_len)); \ - } \ - } \ +#define _assert_secondaries(s_con, expected) \ + G_STMT_START \ + { \ + NMSettingConnection *const _s_con = (s_con); \ + const char *const *_expected = (expected); \ + GArray *_secondaries; \ + const guint _expected_len = NM_PTRARRAY_LEN(_expected); \ + gs_strfreev char **_sec_strv = NULL; \ + guint _i; \ + \ + g_assert(_expected); \ + \ + if (nmtst_get_rand_bool()) { \ + _secondaries = _nm_setting_connection_get_secondaries(_s_con); \ + g_assert_cmpint(_expected_len, ==, nm_g_array_len(_secondaries)); \ + g_assert((_expected_len == 0) == (!_secondaries)); \ + g_assert(nm_strv_equal(_expected, nm_strvarray_get_strv_notnull(_secondaries, NULL))); \ + } \ + \ + if (nmtst_get_rand_bool()) { \ + g_object_get(_s_con, NM_SETTING_CONNECTION_SECONDARIES, &_sec_strv, NULL); \ + g_assert_cmpint(_expected_len, ==, NM_PTRARRAY_LEN(_sec_strv)); \ + g_assert((_expected_len == 0) == (!_sec_strv)); \ + g_assert(nm_strv_equal(_expected, _sec_strv ?: NM_STRV_EMPTY())); \ + } \ + \ + g_assert_cmpint(nm_setting_connection_get_num_secondaries(_s_con), ==, _expected_len); \ + if (nmtst_get_rand_bool()) { \ + for (_i = 0; _i < _expected_len; _i++) { \ + g_assert_cmpstr(nm_setting_connection_get_secondary(_s_con, _i), \ + ==, \ + _expected[_i]); \ + } \ + g_assert_null(nm_setting_connection_get_secondary(_s_con, _expected_len)); \ + } \ + } \ G_STMT_END _assert_secondaries(s_con, (const char *const *) arr->pdata); @@ -5307,6 +5464,8 @@ main(int argc, char **argv) test_8021x); g_test_add_data_func("/libnm/setting-8021x/pkcs12", "test-cert.p12, test", test_8021x); + g_test_add_func("/libnm/settings/test_setting_connection_empty_address_and_route", + test_setting_connection_empty_address_and_route); g_test_add_func("/libnm/settings/test_setting_connection_secondaries_verify", test_setting_connection_secondaries_verify); @@ -5326,6 +5485,7 @@ main(int argc, char **argv) g_test_add_func("/libnm/settings/ethtool/coalesce", test_ethtool_coalesce); g_test_add_func("/libnm/settings/ethtool/ring", test_ethtool_ring); g_test_add_func("/libnm/settings/ethtool/pause", test_ethtool_pause); + g_test_add_func("/libnm/settings/ethtool/eee", test_ethtool_eee); g_test_add_func("/libnm/settings/6lowpan/1", test_6lowpan_1); diff --git a/src/libnm-core-intern/nm-core-internal.h b/src/libnm-core-intern/nm-core-internal.h index dbb5a7fa..8e257337 100644 --- a/src/libnm-core-intern/nm-core-internal.h +++ b/src/libnm-core-intern/nm-core-internal.h @@ -16,7 +16,7 @@ * statically against libnm-core. This basically means libnm-core, libnm, NetworkManager * and some test programs. **/ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) #error Cannot use this header. #endif @@ -38,6 +38,7 @@ #include "nm-setting-dummy.h" #include "nm-setting-generic.h" #include "nm-setting-gsm.h" +#include "nm-setting-hsr.h" #include "nm-setting-hostname.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip-tunnel.h" @@ -191,6 +192,21 @@ NM_TERNARY_TO_OPTION_BOOL(NMTernary v) NMSetting **_nm_connection_get_settings_arr(NMConnection *connection); +/** + * NMSettingParseFlags: + * @NM_SETTING_PARSE_FLAGS_NONE: no special handling. + * @NM_SETTING_PARSE_FLAGS_STRICT: be strict about unexpected/invalid settings. + * Such issues cause the parsing method to fail. + * @NM_SETTING_PARSE_FLAGS_BEST_EFFORT: ignore most errors about invalid/unexpected + * settings. This is, in theory, an even less strict mode than NONE (in practice + * we already ignore most errors without BEST_EFFORT, so both are almost the + * same). Only if the property has from_dbus_is_full are errors taken into + * account with this flag set. + * @NM_SETTING_PARSE_FLAGS_NORMALIZE: normalize the connection after loading it. + * A failure to normalize is always an error, even with BEST_EFFORT. + * + * It is an error to set NM_SETTING_PARSE_FLAGS_STRICT | NM_SETTING_PARSE_FLAGS_BEST_EFFORT + */ typedef enum /*< skip >*/ { NM_SETTING_PARSE_FLAGS_NONE = 0, NM_SETTING_PARSE_FLAGS_STRICT = 1LL << 0, @@ -347,9 +363,6 @@ GPtrArray *_nm_utils_copy_object_array(const GPtrArray *array); GSList *nm_strv_to_gslist(char **strv, gboolean deep_copy); char **_nm_utils_slist_to_strv(const GSList *slist, gboolean deep_copy); -GPtrArray *nm_strv_to_ptrarray(char **strv); -char **_nm_utils_ptrarray_to_strv(const GPtrArray *ptrarray); - gboolean _nm_utils_check_file(const char *filename, gint64 check_owner, NMUtilsCheckFilePredicate check_file, @@ -411,9 +424,10 @@ extern const NMUtilsDNSOptionDesc _nm_utils_dns_option_descs[]; gboolean _nm_utils_dns_option_validate(const char *option, char **out_name, long *out_value, - gboolean ipv6, + int addr_family, const NMUtilsDNSOptionDesc *option_descs); -gssize _nm_utils_dns_option_find_idx(GPtrArray *array, const char *option); + +gssize _nm_utils_dns_option_find_idx(const char *const *strv, gssize strv_len, const char *option); int nm_setting_ip_config_next_valid_dns_option(NMSettingIPConfig *setting, guint idx); @@ -533,6 +547,9 @@ GPtrArray *_nm_setting_bridge_port_get_vlans(NMSettingBridgePort *setting); GArray *_nm_setting_connection_get_secondaries(NMSettingConnection *setting); +gboolean nm_setting_connection_permissions_user_allowed_by_uid(NMSettingConnection *setting, + gulong uid); + /*****************************************************************************/ NMSettingBluetooth *_nm_connection_get_setting_bluetooth_for_nap(NMConnection *connection); @@ -721,6 +738,9 @@ typedef struct { NMSetting *setting, GVariant *connection_dict, GVariant *value, \ NMSettingParseFlags parse_flags, NMTernary *out_is_modified, GError **error + /* If there might be errors, see #NMSettingParseFlags to understand the + * different parsing modes (strict/best effort). + */ gboolean (*from_dbus_fcn)(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil); #define _NM_SETT_INFO_PROP_MISSING_FROM_DBUS_FCN_ARGS \ @@ -776,11 +796,15 @@ struct _NMSettInfoProperty { union { /* Optional hook for direct string properties, this gets called when setting the string. * Return whether the value changed. */ - gboolean (*set_string_fcn)(const NMSettInfoSetting *sett_info, - const NMSettInfoProperty *property_info, - NMSetting *setting, - const char *src); - } direct_hook; + gboolean (*set_string)(const NMSettInfoSetting *sett_info, + const NMSettInfoProperty *property_info, + NMSetting *setting, + const char *src); + } direct_set_fcn; + + /* For direct properties, this is the param_spec that also should be + * notified on changes. */ + GParamSpec *direct_also_notify; /* This only has meaning for direct properties (property_type->direct_type != NM_VALUE_TYPE_UNSPEC). * In that case, this is the offset where _nm_setting_get_private() can find @@ -815,6 +839,31 @@ struct _NMSettInfoProperty { /* Whether the string property is implemented as a (downcast) NMRefString. */ bool direct_string_is_refstr : 1; + /* Usually, string properties cannot be empty (because it's unclear how + * that relates to NULL and how to distinguish that in nmcli). In some + * cases, it's allowed however (e.g. "gsm.apm"). + * + * The lack of this flag indicates to perform an additional check after + * verify(), that the string is not empty. + * + * In some cases, we can also normalize an empty value, in which case verify() + * also allows the string to be empty. + * + * FIXME: historically, many properties allowed to be empty. Hence, to + * preserve behavior this flag is also set for many properties where it + * maybe should not be set. We should review the use of this flag and clear + * it where possible. New properties generally should not allow empty + * strings (unless they have specific reasons). */ + bool direct_string_allow_empty : 1; + + /* Usually, for strv arrays (NM_VALUE_TYPE_STRV, NMValueStrv) there is little + * difference between NULL/unset and empty arrays. E.g. g_object_get() will + * return NULL and never an empty strv array. + * + * By setting this flag, this property treats a NULL array different from + * an empty array. */ + bool direct_strv_preserve_empty : 1; + /* Usually, properties that are set to the default value for the GParamSpec * are not serialized to GVariant (and NULL is returned by to_dbus_data(). * Set this flag to force always converting the property even if the value @@ -920,8 +969,6 @@ struct _NMSettInfoSetting { NMSettInfoSettDetail detail; }; -#define NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS ((gint16) G_MININT16) - static inline gpointer _nm_setting_get_private(NMSetting *self, const NMSettInfoSetting *sett_info, guint16 offset) { @@ -1069,6 +1116,31 @@ gboolean _nm_utils_iaid_verify(const char *str, gint64 *out_value); gboolean _nm_utils_validate_dhcp_hostname_flags(NMDhcpHostnameFlags flags, int addr_family, GError **error); +char **_nm_utils_ip4_dns_from_variant(GVariant *value, bool strict, GError **error); + +GPtrArray *_nm_utils_ip4_routes_from_variant(GVariant *value, bool strict, GError **error); + +GPtrArray *_nm_utils_ip4_addresses_from_variant(GVariant *value, + GVariant *labels, + char **out_gateway, + bool strict, + GError **error); + +char **_nm_utils_ip6_dns_from_variant(GVariant *value, bool strict, GError **error); + +GPtrArray *_nm_utils_ip6_addresses_from_variant(GVariant *value, + char **out_gateway, + bool strict, + GError **error); + +GPtrArray *_nm_utils_ip6_routes_from_variant(GVariant *value, bool strict, GError **error); + +GPtrArray * +_nm_utils_ip_addresses_from_variant(GVariant *value, int family, bool strict, GError **error); + +GPtrArray * +_nm_utils_ip_routes_from_variant(GVariant *value, int family, bool strict, GError **error); + /*****************************************************************************/ gboolean _nmtst_variant_attribute_spec_assert_sorted(const NMVariantAttributeSpec *const *array, diff --git a/src/libnm-core-intern/nm-keyfile-internal.h b/src/libnm-core-intern/nm-keyfile-internal.h index ecbcedb2..7419cc42 100644 --- a/src/libnm-core-intern/nm-keyfile-internal.h +++ b/src/libnm-core-intern/nm-keyfile-internal.h @@ -7,7 +7,7 @@ #ifndef __NM_KEYFILE_INTERNAL_H__ #define __NM_KEYFILE_INTERNAL_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) #error Cannot use this header. #endif diff --git a/src/libnm-core-intern/nm-keyfile-utils.h b/src/libnm-core-intern/nm-keyfile-utils.h index 08f169ac..b7758c05 100644 --- a/src/libnm-core-intern/nm-keyfile-utils.h +++ b/src/libnm-core-intern/nm-keyfile-utils.h @@ -6,7 +6,7 @@ #ifndef __NM_KEYFILE_UTILS_H__ #define __NM_KEYFILE_UTILS_H__ -#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) #error Cannot use this header. #endif diff --git a/src/libnm-core-intern/nm-meta-setting-base-impl.h b/src/libnm-core-intern/nm-meta-setting-base-impl.h index c6d1c2fc..9226183f 100644 --- a/src/libnm-core-intern/nm-meta-setting-base-impl.h +++ b/src/libnm-core-intern/nm-meta-setting-base-impl.h @@ -123,6 +123,7 @@ typedef enum _nm_packed { NM_META_SETTING_TYPE_GENERIC, NM_META_SETTING_TYPE_GSM, NM_META_SETTING_TYPE_HOSTNAME, + NM_META_SETTING_TYPE_HSR, NM_META_SETTING_TYPE_INFINIBAND, NM_META_SETTING_TYPE_IP_TUNNEL, NM_META_SETTING_TYPE_IP4_CONFIG, diff --git a/src/libnm-core-public/meson.build b/src/libnm-core-public/meson.build index d135dbff..b5ed71e8 100644 --- a/src/libnm-core-public/meson.build +++ b/src/libnm-core-public/meson.build @@ -23,6 +23,7 @@ libnm_core_headers = files( 'nm-setting-ethtool.h', 'nm-setting-generic.h', 'nm-setting-gsm.h', + 'nm-setting-hsr.h', 'nm-setting-hostname.h', 'nm-setting-infiniband.h', 'nm-setting-ip-config.h', @@ -128,5 +129,5 @@ foreach docbook: docbooks build_by_default: true, ) - content_files += xml.full_path() + content_files += xml endforeach diff --git a/src/libnm-core-public/nm-core-types.h b/src/libnm-core-public/nm-core-types.h index 758733a1..d9a8225e 100644 --- a/src/libnm-core-public/nm-core-types.h +++ b/src/libnm-core-public/nm-core-types.h @@ -30,6 +30,7 @@ typedef struct _NMSettingEthtool NMSettingEthtool; typedef struct _NMSettingGeneric NMSettingGeneric; typedef struct _NMSettingGsm NMSettingGsm; typedef struct _NMSettingHostname NMSettingHostname; +typedef struct _NMSettingHsr NMSettingHsr; typedef struct _NMSettingIP4Config NMSettingIP4Config; typedef struct _NMSettingIP6Config NMSettingIP6Config; typedef struct _NMSettingIPConfig NMSettingIPConfig; diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h index b490e3b1..5acbf467 100644 --- a/src/libnm-core-public/nm-dbus-interface.h +++ b/src/libnm-core-public/nm-dbus-interface.h @@ -37,6 +37,7 @@ #define NM_DBUS_INTERFACE_DEVICE_DUMMY NM_DBUS_INTERFACE_DEVICE ".Dummy" #define NM_DBUS_INTERFACE_DEVICE_GENERIC NM_DBUS_INTERFACE_DEVICE ".Generic" #define NM_DBUS_INTERFACE_DEVICE_GRE NM_DBUS_INTERFACE_DEVICE ".Gre" +#define NM_DBUS_INTERFACE_DEVICE_HSR NM_DBUS_INTERFACE_DEVICE ".Hsr" #define NM_DBUS_INTERFACE_DEVICE_INFINIBAND NM_DBUS_INTERFACE_DEVICE ".Infiniband" #define NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL NM_DBUS_INTERFACE_DEVICE ".IPTunnel" #define NM_DBUS_INTERFACE_DEVICE_LOOPBACK NM_DBUS_INTERFACE_DEVICE ".Loopback" @@ -234,6 +235,7 @@ typedef enum { * @NM_DEVICE_TYPE_WIFI_P2P: an 802.11 Wi-Fi P2P device. Since: 1.16. * @NM_DEVICE_TYPE_VRF: A VRF (Virtual Routing and Forwarding) interface. Since: 1.24. * @NM_DEVICE_TYPE_LOOPBACK: a loopback interface. Since: 1.42. + * @NM_DEVICE_TYPE_HSR: A HSR/PRP device. Since: 1.46. * * #NMDeviceType values indicate the type of hardware represented by a * device object. @@ -272,6 +274,7 @@ typedef enum { NM_DEVICE_TYPE_WIFI_P2P = 30, NM_DEVICE_TYPE_VRF = 31, NM_DEVICE_TYPE_LOOPBACK = 32, + NM_DEVICE_TYPE_HSR = 33, } NMDeviceType; /** @@ -306,6 +309,7 @@ typedef enum /*< flags >*/ { * @NM_WIFI_DEVICE_CAP_FREQ_VALID: device reports frequency capabilities * @NM_WIFI_DEVICE_CAP_FREQ_2GHZ: device supports 2.4GHz frequencies * @NM_WIFI_DEVICE_CAP_FREQ_5GHZ: device supports 5GHz frequencies + * @NM_WIFI_DEVICE_CAP_FREQ_6GHZ: device supports 6GHz frequencies. Since: 1.46. * @NM_WIFI_DEVICE_CAP_MESH: device supports acting as a mesh point. Since: 1.20. * @NM_WIFI_DEVICE_CAP_IBSS_RSN: device supports WPA2/RSN in an IBSS network. Since: 1.22. * @@ -324,6 +328,7 @@ typedef enum /*< flags >*/ { NM_WIFI_DEVICE_CAP_FREQ_VALID = 0x00000100, NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200, NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400, + NM_WIFI_DEVICE_CAP_FREQ_6GHZ = 0x00000800, NM_WIFI_DEVICE_CAP_MESH = 0x00001000, NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000, } NMDeviceWifiCapabilities; @@ -967,7 +972,7 @@ typedef enum { * @NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES: upon rollback, * disconnect any new device appeared after the checkpoint. Since: 1.6. * @NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING: by default, creating - * a checkpoint fails if there are already existing checkoints that + * a checkpoint fails if there are already existing checkpoints that * reference the same devices. With this flag, creation of such * checkpoints is allowed, however, if an older checkpoint * that references overlapping devices gets rolled back, it will diff --git a/src/libnm-core-public/nm-dbus-types.xml b/src/libnm-core-public/nm-dbus-types.xml index d5ac04b4..18417169 100644 --- a/src/libnm-core-public/nm-dbus-types.xml +++ b/src/libnm-core-public/nm-dbus-types.xml @@ -347,6 +347,11 @@ <entry role="enum_member_value"><para>= <literal>32</literal></para><para></para></entry> <entry role="enum_member_description"><para>a loopback interface. Since: 1.42.</para><para></para></entry> </row> + <row role="constant"> + <entry role="enum_member_name"><para>NM_DEVICE_TYPE_HSR</para><para></para></entry> + <entry role="enum_member_value"><para>= <literal>33</literal></para><para></para></entry> + <entry role="enum_member_description"><para>A HSR/PRP device. Since: 1.46.</para><para></para></entry> + </row> </tbody> </tgroup> </informaltable> @@ -473,6 +478,11 @@ <entry role="enum_member_description"><para>device supports 5GHz frequencies</para><para></para></entry> </row> <row role="constant"> + <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_FREQ_6GHZ</para><para></para></entry> + <entry role="enum_member_value"><para>= <literal>0x00000800</literal></para><para></para></entry> + <entry role="enum_member_description"><para>device supports 6GHz frequencies. Since: 1.46.</para><para></para></entry> + </row> + <row role="constant"> <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_MESH</para><para></para></entry> <entry role="enum_member_value"><para>= <literal>0x00001000</literal></para><para></para></entry> <entry role="enum_member_description"><para>device supports acting as a mesh point. Since: 1.20.</para><para></para></entry> @@ -1670,7 +1680,7 @@ <row role="constant"> <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING</para><para></para></entry> <entry role="enum_member_value"><para>= <literal>0x08</literal></para><para></para></entry> - <entry role="enum_member_description"><para>by default, creating a checkpoint fails if there are already existing checkoints that reference the same devices. With this flag, creation of such checkpoints is allowed, however, if an older checkpoint that references overlapping devices gets rolled back, it will automatically destroy this checkpoint during rollback. This allows to create several overlapping checkpoints in parallel, and rollback to them at will. With the special case that rolling back to an older checkpoint will invalidate all overlapping younger checkpoints. This opts-in that the checkpoint can be automatically destroyed by the rollback of an older checkpoint. Since: 1.12.</para><para></para></entry> + <entry role="enum_member_description"><para>by default, creating a checkpoint fails if there are already existing checkpoints that reference the same devices. With this flag, creation of such checkpoints is allowed, however, if an older checkpoint that references overlapping devices gets rolled back, it will automatically destroy this checkpoint during rollback. This allows to create several overlapping checkpoints in parallel, and rollback to them at will. With the special case that rolling back to an older checkpoint will invalidate all overlapping younger checkpoints. This opts-in that the checkpoint can be automatically destroyed by the rollback of an older checkpoint. Since: 1.12.</para><para></para></entry> </row> <row role="constant"> <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS</para><para></para></entry> diff --git a/src/libnm-core-public/nm-setting-connection.h b/src/libnm-core-public/nm-setting-connection.h index 42dff205..e21fd3e5 100644 --- a/src/libnm-core-public/nm-setting-connection.h +++ b/src/libnm-core-public/nm-setting-connection.h @@ -47,7 +47,9 @@ G_BEGIN_DECLS #define NM_SETTING_CONNECTION_PERMISSIONS "permissions" #define NM_SETTING_CONNECTION_ZONE "zone" #define NM_SETTING_CONNECTION_MASTER "master" +#define NM_SETTING_CONNECTION_CONTROLLER "controller" #define NM_SETTING_CONNECTION_SLAVE_TYPE "slave-type" +#define NM_SETTING_CONNECTION_PORT_TYPE "port-type" #define NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES "autoconnect-slaves" #define NM_SETTING_CONNECTION_SECONDARIES "secondaries" #define NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT "gateway-ping-timeout" @@ -193,9 +195,21 @@ gboolean nm_setting_connection_remove_permission_by_value(NMSettingConnection const char *pitem, const char *detail); +NM_DEPRECATED_IN_1_46 const char *nm_setting_connection_get_master(NMSettingConnection *setting); -gboolean nm_setting_connection_is_slave_type(NMSettingConnection *setting, const char *type); + +NM_AVAILABLE_IN_1_46 +const char *nm_setting_connection_get_controller(NMSettingConnection *setting); + +NM_DEPRECATED_IN_1_46 +gboolean nm_setting_connection_is_slave_type(NMSettingConnection *setting, const char *type); + +NM_DEPRECATED_IN_1_46 const char *nm_setting_connection_get_slave_type(NMSettingConnection *setting); + +NM_AVAILABLE_IN_1_46 +const char *nm_setting_connection_get_port_type(NMSettingConnection *setting); + NM_AVAILABLE_IN_1_2 NMSettingConnectionAutoconnectSlaves nm_setting_connection_get_autoconnect_slaves(NMSettingConnection *setting); diff --git a/src/libnm-core-public/nm-setting-ethtool.h b/src/libnm-core-public/nm-setting-ethtool.h index 698dcebe..fe1fbc0e 100644 --- a/src/libnm-core-public/nm-setting-ethtool.h +++ b/src/libnm-core-public/nm-setting-ethtool.h @@ -26,6 +26,12 @@ gboolean nm_ethtool_optname_is_ring(const char *optname); NM_AVAILABLE_IN_1_32 gboolean nm_ethtool_optname_is_pause(const char *optname); +NM_AVAILABLE_IN_1_46 +gboolean nm_ethtool_optname_is_channels(const char *optname); + +NM_AVAILABLE_IN_1_46 +gboolean nm_ethtool_optname_is_eee(const char *optname); + /*****************************************************************************/ #define NM_TYPE_SETTING_ETHTOOL (nm_setting_ethtool_get_type()) diff --git a/src/libnm-core-public/nm-setting-hsr.h b/src/libnm-core-public/nm-setting-hsr.h new file mode 100644 index 00000000..f7b0136f --- /dev/null +++ b/src/libnm-core-public/nm-setting-hsr.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023 Red Hat, Inc. + */ + +#ifndef __NM_SETTING_HSR_H__ +#define __NM_SETTING_HSR_H__ + +#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) +#error "Only <NetworkManager.h> can be included directly." +#endif + +#include "nm-setting.h" + +G_BEGIN_DECLS + +#define NM_TYPE_SETTING_HSR (nm_setting_hsr_get_type()) +#define NM_SETTING_HSR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_HSR, NMSettingHsr)) +#define NM_IS_SETTING_HSR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_HSR)) +#define NM_IS_SETTING_HSR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_HSR)) +#define NM_SETTING_HSR_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_HSR, NMSettingHsrClass)) + +#define NM_SETTING_HSR_SETTING_NAME "hsr" + +#define NM_SETTING_HSR_PORT1 "port1" +#define NM_SETTING_HSR_PORT2 "port2" +#define NM_SETTING_HSR_MULTICAST_SPEC "multicast-spec" +#define NM_SETTING_HSR_PRP "prp" + +typedef struct _NMSettingHsrClass NMSettingHsrClass; + +NM_AVAILABLE_IN_1_46 +GType nm_setting_hsr_get_type(void); +NM_AVAILABLE_IN_1_46 +NMSetting *nm_setting_hsr_new(void); + +NM_AVAILABLE_IN_1_46 +const char *nm_setting_hsr_get_port1(NMSettingHsr *setting); +NM_AVAILABLE_IN_1_46 +const char *nm_setting_hsr_get_port2(NMSettingHsr *setting); +NM_AVAILABLE_IN_1_46 +guint32 nm_setting_hsr_get_multicast_spec(NMSettingHsr *setting); +NM_AVAILABLE_IN_1_46 +gboolean nm_setting_hsr_get_prp(NMSettingHsr *setting); + +G_END_DECLS + +#endif /* __NM_SETTING_HSR_H__ */ diff --git a/src/libnm-core-public/nm-setting-ip-config.h b/src/libnm-core-public/nm-setting-ip-config.h index f7281965..aa0d6d71 100644 --- a/src/libnm-core-public/nm-setting-ip-config.h +++ b/src/libnm-core-public/nm-setting-ip-config.h @@ -363,6 +363,9 @@ char *nm_ip_routing_rule_to_string(const NMIPRoutingRule *self, #define NM_SETTING_DNS_OPTION_NO_RELOAD "no-reload" #define NM_SETTING_DNS_OPTION_TRUST_AD "trust-ad" #define NM_SETTING_DNS_OPTION_NO_AAAA "no-aaaa" +/* Internal options (not added to resolv.conf) */ +#define NM_SETTING_DNS_OPTION_INTERNAL_NO_ADD_EDNS0 "_no-add-edns0" +#define NM_SETTING_DNS_OPTION_INTERNAL_NO_ADD_TRUST_AD "_no-add-trust-ad" typedef struct _NMSettingIPConfigClass NMSettingIPConfigClass; diff --git a/src/libnm-core-public/nm-utils.h b/src/libnm-core-public/nm-utils.h index ca399c4c..35ef580d 100644 --- a/src/libnm-core-public/nm-utils.h +++ b/src/libnm-core-public/nm-utils.h @@ -24,14 +24,17 @@ G_BEGIN_DECLS typedef struct _NMVariantAttributeSpec NMVariantAttributeSpec; /* SSID helpers */ -gboolean nm_utils_is_empty_ssid(const guint8 *ssid, gsize len); +gboolean nm_utils_is_empty_ssid(const guint8 *ssid, gsize len); + +NM_DEPRECATED_IN_1_46 const char *nm_utils_escape_ssid(const guint8 *ssid, gsize len); -gboolean nm_utils_same_ssid(const guint8 *ssid1, - gsize len1, - const guint8 *ssid2, - gsize len2, - gboolean ignore_trailing_null); -char *nm_utils_ssid_to_utf8(const guint8 *ssid, gsize len); + +gboolean nm_utils_same_ssid(const guint8 *ssid1, + gsize len1, + const guint8 *ssid2, + gsize len2, + gboolean ignore_trailing_null); +char *nm_utils_ssid_to_utf8(const guint8 *ssid, gsize len); /** * NMUtilsSecurityType: diff --git a/src/libnm-core-public/nm-version-macros.h b/src/libnm-core-public/nm-version-macros.h index 14948f2b..f7880755 100644 --- a/src/libnm-core-public/nm-version-macros.h +++ b/src/libnm-core-public/nm-version-macros.h @@ -22,7 +22,7 @@ * Evaluates to the minor version number of NetworkManager which this source * is compiled against. */ -#define NM_MINOR_VERSION (44) +#define NM_MINOR_VERSION (45) /** * NM_MICRO_VERSION: @@ -30,7 +30,7 @@ * Evaluates to the micro version number of NetworkManager which this source * compiled against. */ -#define NM_MICRO_VERSION (2) +#define NM_MICRO_VERSION (90) /** * NM_CHECK_VERSION: @@ -73,6 +73,7 @@ #define NM_VERSION_1_40 (NM_ENCODE_VERSION(1, 40, 0)) #define NM_VERSION_1_42 (NM_ENCODE_VERSION(1, 42, 0)) #define NM_VERSION_1_44 (NM_ENCODE_VERSION(1, 44, 0)) +#define NM_VERSION_1_46 (NM_ENCODE_VERSION(1, 46, 0)) /* For releases, NM_API_VERSION is equal to NM_VERSION. * diff --git a/src/libnm-core-public/nm-version-macros.h.in b/src/libnm-core-public/nm-version-macros.h.in index f44199a0..072b8ca5 100644 --- a/src/libnm-core-public/nm-version-macros.h.in +++ b/src/libnm-core-public/nm-version-macros.h.in @@ -73,6 +73,7 @@ #define NM_VERSION_1_40 (NM_ENCODE_VERSION(1, 40, 0)) #define NM_VERSION_1_42 (NM_ENCODE_VERSION(1, 42, 0)) #define NM_VERSION_1_44 (NM_ENCODE_VERSION(1, 44, 0)) +#define NM_VERSION_1_46 (NM_ENCODE_VERSION(1, 46, 0)) /* For releases, NM_API_VERSION is equal to NM_VERSION. * diff --git a/src/libnm-core-public/nm-version.h b/src/libnm-core-public/nm-version.h index 271535d2..24471129 100644 --- a/src/libnm-core-public/nm-version.h +++ b/src/libnm-core-public/nm-version.h @@ -369,6 +369,20 @@ #define NM_AVAILABLE_IN_1_44 #endif +#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_46 +#define NM_DEPRECATED_IN_1_46 G_DEPRECATED +#define NM_DEPRECATED_IN_1_46_FOR(f) G_DEPRECATED_FOR(f) +#else +#define NM_DEPRECATED_IN_1_46 +#define NM_DEPRECATED_IN_1_46_FOR(f) +#endif + +#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_46 +#define NM_AVAILABLE_IN_1_46 G_UNAVAILABLE(1, 46) +#else +#define NM_AVAILABLE_IN_1_46 +#endif + /* * Synchronous API for calling D-Bus in libnm is deprecated. See * https://networkmanager.dev/docs/libnm/latest/usage.html#sync-api diff --git a/src/libnm-glib-aux/nm-dedup-multi.h b/src/libnm-glib-aux/nm-dedup-multi.h index 87a2b815..ebc5d0a1 100644 --- a/src/libnm-glib-aux/nm-dedup-multi.h +++ b/src/libnm-glib-aux/nm-dedup-multi.h @@ -37,7 +37,7 @@ typedef enum _NMDedupMultiIdxMode { /*****************************************************************************/ -#define _NMDedupMultiObj_Align (MAX(_nm_alignof(void *), _nm_alignof(gint64))) +#define _NMDedupMultiObj_Align (NM_MAX_CONST(_nm_alignof(void *), _nm_alignof(gint64))) struct _NMDedupMultiObj { union { diff --git a/src/libnm-glib-aux/nm-enum-utils.c b/src/libnm-glib-aux/nm-enum-utils.c index 2593a9cd..212c0021 100644 --- a/src/libnm-glib-aux/nm-enum-utils.c +++ b/src/libnm-glib-aux/nm-enum-utils.c @@ -320,53 +320,118 @@ _nm_utils_enum_from_str_full(GType type, const char ** _nm_utils_enum_get_values(GType type, int from, int to) { - GTypeClass *klass; - GPtrArray *array; - int i; + int i; + GArray *values_full = _nm_utils_enum_get_values_full(type, from, to, NULL); + GPtrArray *values = g_ptr_array_sized_new(values_full->len + 1); + + for (i = 0; i < values_full->len; i++) { + NMUtilsEnumValueInfoFull *v = &nm_g_array_index(values_full, NMUtilsEnumValueInfoFull, i); + g_ptr_array_add(values, (gpointer) v->nick); + } + + g_ptr_array_add(values, NULL); + g_array_unref(values_full); + return (const char **) g_ptr_array_free(values, FALSE); +} + +static void +_free_value_info_full(NMUtilsEnumValueInfoFull *value_info_full) +{ + g_free(value_info_full->aliases); +} + +static void +_init_value_info_full(NMUtilsEnumValueInfoFull *v, bool is_flag, const char *nick, int value) +{ char sbuf[64]; + const char *value_str = is_flag ? g_intern_string(nm_sprintf_buf(sbuf, "0x%x", value)) + : g_intern_string(nm_sprintf_buf(sbuf, "%d", value)); - klass = g_type_class_ref(type); - array = g_ptr_array_new(); + v->nick = _enum_is_valid_enum_nick(nick) ? nick : value_str; + v->aliases = NULL; + v->value_str = value_str; + v->value = value; +} + +/** + * _nm_utils_enum_get_values_full: + * @type: the enum or flags type + * @from: lowest value to return + * @to: highest value to return + * @value_infos: (nullable): additional value aliases + * + * Get the enum or flags values within the given range, putting together the + * value, name and aliases of each of them. + * + * If @value_infos is NULL, no memory will be allocated and deallocated for the + * aliases and #NMUtilsEnumValueInfoFull:aliases will be NULL in the returned + * data. + * + * The caller is responsible of releasing the container, but not the contained + * data. Only #NMUtilsEnumValueInfoFull:aliases can be stolen (and set to NULL), + * and then the caller becomes the responsible to release it. + * + * Return: (transfer container): an array of #NMUtilsEnumValueInfoFull. + */ +GArray * +_nm_utils_enum_get_values_full(GType type, + int from, + int to, + const NMUtilsEnumValueInfo *value_infos) +{ + NMUtilsEnumValueInfoFull v; + GArray *array; + int i; + + nm_auto_unref_gtypeclass GTypeClass *klass = g_type_class_ref(type); + g_return_val_if_fail(G_IS_ENUM_CLASS(klass) || G_IS_FLAGS_CLASS(klass), NULL); + + _ASSERT_enum_values_info(type, value_infos); + + array = g_array_new(FALSE, FALSE, sizeof(NMUtilsEnumValueInfoFull)); if (G_IS_ENUM_CLASS(klass)) { GEnumClass *enum_class = G_ENUM_CLASS(klass); - GEnumValue *enum_value; for (i = 0; i < enum_class->n_values; i++) { - enum_value = &enum_class->values[i]; - if (enum_value->value >= from && enum_value->value <= to) { - if (_enum_is_valid_enum_nick(enum_value->value_nick)) - g_ptr_array_add(array, (gpointer) enum_value->value_nick); - else - g_ptr_array_add( - array, - (gpointer) g_intern_string(nm_sprintf_buf(sbuf, "%d", enum_value->value))); + GEnumValue *enum_val = &enum_class->values[i]; + + if (enum_val->value >= from && enum_val->value <= to) { + _init_value_info_full(&v, FALSE, enum_val->value_nick, enum_val->value); + g_array_append_val(array, v); } } - } else if (G_IS_FLAGS_CLASS(klass)) { + } else { GFlagsClass *flags_class = G_FLAGS_CLASS(klass); - GFlagsValue *flags_value; for (i = 0; i < flags_class->n_values; i++) { - flags_value = &flags_class->values[i]; - if (flags_value->value >= (guint) from && flags_value->value <= (guint) to) { - if (_enum_is_valid_flags_nick(flags_value->value_nick)) - g_ptr_array_add(array, (gpointer) flags_value->value_nick); - else - g_ptr_array_add( - array, - (gpointer) g_intern_string( - nm_sprintf_buf(sbuf, "0x%x", (unsigned) flags_value->value))); + GFlagsValue *flags_val = &flags_class->values[i]; + + if (flags_val->value >= (guint) from && flags_val->value <= (guint) to) { + _init_value_info_full(&v, TRUE, flags_val->value_nick, flags_val->value); + g_array_append_val(array, v); } } - } else { - g_type_class_unref(klass); - g_ptr_array_free(array, TRUE); - g_return_val_if_reached(NULL); } - g_type_class_unref(klass); - g_ptr_array_add(array, NULL); + if (value_infos) { + g_array_set_clear_func(array, (GDestroyNotify) _free_value_info_full); + + for (i = 0; i < array->len; i++) { + NMUtilsEnumValueInfoFull *vi_full = + &nm_g_array_index(array, NMUtilsEnumValueInfoFull, i); + GPtrArray *aliases = g_ptr_array_new(); + + const NMUtilsEnumValueInfo *vi; + for (vi = value_infos; vi && vi->nick; vi++) { + if (vi->value == vi_full->value) + g_ptr_array_add(aliases, (gpointer) vi->nick); + } + + g_ptr_array_add(aliases, NULL); + vi_full->aliases = (const char **) g_ptr_array_free(aliases, FALSE); + } + } - return (const char **) g_ptr_array_free(array, FALSE); + return array; } diff --git a/src/libnm-glib-aux/nm-enum-utils.h b/src/libnm-glib-aux/nm-enum-utils.h index 6478cadf..a90e13fe 100644 --- a/src/libnm-glib-aux/nm-enum-utils.h +++ b/src/libnm-glib-aux/nm-enum-utils.h @@ -15,6 +15,13 @@ typedef struct _NMUtilsEnumValueInfo { int value; } NMUtilsEnumValueInfo; +typedef struct _NMUtilsEnumValueInfoFull { + const char *nick; + const char **aliases; + const char *value_str; + int value; +} NMUtilsEnumValueInfoFull; + char *_nm_utils_enum_to_str_full(GType type, int value, const char *sep, @@ -27,6 +34,11 @@ gboolean _nm_utils_enum_from_str_full(GType type, const char **_nm_utils_enum_get_values(GType type, int from, int to); +GArray *_nm_utils_enum_get_values_full(GType type, + int from, + int to, + const NMUtilsEnumValueInfo *value_infos); + /*****************************************************************************/ #endif /* __NM_ENUM_UTILS_H__ */ diff --git a/src/libnm-glib-aux/nm-errno.c b/src/libnm-glib-aux/nm-errno.c index b76386a6..682bfea2 100644 --- a/src/libnm-glib-aux/nm-errno.c +++ b/src/libnm-glib-aux/nm-errno.c @@ -6,6 +6,7 @@ #include "libnm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-errno.h" +#include "libnm-std-aux/nm-std-utils.h" /*****************************************************************************/ @@ -100,26 +101,10 @@ nm_strerror(int nmerr) const char * nm_strerror_native_r(int errsv, char *buf, gsize buf_size) { - char *buf2; + NM_AUTO_PROTECT_ERRNO(errsv2); + const char *buf2; - nm_assert(buf); - nm_assert(buf_size > 0); - -#if (!defined(__GLIBC__) && !defined(__UCLIBC__)) || ((_POSIX_C_SOURCE >= 200112L) && !_GNU_SOURCE) - /* XSI-compliant */ - { - int errno_saved = errno; - - if (strerror_r(errsv, buf, buf_size) != 0) { - g_snprintf(buf, buf_size, "Unspecified errno %d", errsv); - errno = errno_saved; - } - buf2 = buf; - } -#else - /* GNU-specific */ - buf2 = strerror_r(errsv, buf, buf_size); -#endif + buf2 = _nm_strerror_r(errsv, buf, buf_size); /* like g_strerror(), ensure that the error message is UTF-8. */ if (!g_get_charset(NULL) && !g_utf8_validate(buf2, -1, NULL)) { diff --git a/src/libnm-glib-aux/nm-glib.h b/src/libnm-glib-aux/nm-glib.h index 9c90d429..cf76cf13 100644 --- a/src/libnm-glib-aux/nm-glib.h +++ b/src/libnm-glib-aux/nm-glib.h @@ -29,22 +29,6 @@ /*****************************************************************************/ -static inline void -__g_type_ensure(GType type) -{ -#if !GLIB_CHECK_VERSION(2, 34, 0) - if (G_UNLIKELY(type == (GType) -1)) - g_error("can't happen"); -#else - G_GNUC_BEGIN_IGNORE_DEPRECATIONS; - g_type_ensure(type); - G_GNUC_END_IGNORE_DEPRECATIONS; -#endif -} -#define g_type_ensure __g_type_ensure - -/*****************************************************************************/ - /* glib 2.58+ defines an improved, type-safe variant of g_clear_pointer(). Reimplement * that. * @@ -81,71 +65,6 @@ __g_type_ensure(GType type) /*****************************************************************************/ -#if !GLIB_CHECK_VERSION(2, 34, 0) - -/* These are used to clean up the output of test programs; we can just let - * them no-op in older glib. - */ -#define g_test_expect_message(log_domain, log_level, pattern) -#define g_test_assert_expected_messages() - -#else - -/* We build with -DGLIB_MAX_ALLOWED_VERSION set to 2.32 to make sure we don't - * accidentally use new API that we shouldn't. But we don't want warnings for - * the APIs that we emulate above. - */ - -#define g_test_expect_message(domain, level, format...) \ - G_STMT_START \ - { \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - g_test_expect_message(domain, level, format); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - } \ - G_STMT_END - -#define g_test_assert_expected_messages_internal(domain, file, line, func) \ - G_STMT_START \ - { \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - g_test_assert_expected_messages_internal(domain, file, line, func); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - } \ - G_STMT_END - -#endif - -/*****************************************************************************/ - -#if GLIB_CHECK_VERSION(2, 35, 0) -/* For glib >= 2.36, g_type_init() is deprecated. - * But since 2.35.1 (7c42ab23b55c43ab96d0ac2124b550bf1f49c1ec) this function - * does nothing. Replace the call with empty statement. */ -#define nm_g_type_init() \ - G_STMT_START \ - { \ - (void) 0; \ - } \ - G_STMT_END -#else -#define nm_g_type_init() \ - G_STMT_START \ - { \ - g_type_init(); \ - } \ - G_STMT_END -#endif - -/*****************************************************************************/ - -/* g_test_initialized() is only available since glib 2.36. */ -#if !GLIB_CHECK_VERSION(2, 36, 0) -#define g_test_initialized() (g_test_config_vars->test_initialized) -#endif - -/*****************************************************************************/ - /* g_assert_cmpmem() is only available since glib 2.46. */ #if !GLIB_CHECK_VERSION(2, 45, 7) #define g_assert_cmpmem(m1, l1, m2, l2) \ @@ -189,136 +108,6 @@ nm_glib_check_version(guint major, guint minor, guint micro) /*****************************************************************************/ -/* g_test_skip() is only available since glib 2.38. Add a compatibility wrapper. */ -static inline void -__nmtst_g_test_skip(const char *msg) -{ -#if GLIB_CHECK_VERSION(2, 38, 0) - G_GNUC_BEGIN_IGNORE_DEPRECATIONS - g_test_skip(msg); - G_GNUC_END_IGNORE_DEPRECATIONS -#else - g_debug("%s", msg); -#endif -} -#define g_test_skip __nmtst_g_test_skip - -/*****************************************************************************/ - -/* g_test_add_data_func_full() is only available since glib 2.34. Add a compatibility wrapper. */ -static inline void -__g_test_add_data_func_full(const char *testpath, - gpointer test_data, - GTestDataFunc test_func, - GDestroyNotify data_free_func) -{ -#if GLIB_CHECK_VERSION(2, 34, 0) - G_GNUC_BEGIN_IGNORE_DEPRECATIONS - g_test_add_data_func_full(testpath, test_data, test_func, data_free_func); - G_GNUC_END_IGNORE_DEPRECATIONS -#else - g_return_if_fail(testpath != NULL); - g_return_if_fail(testpath[0] == '/'); - g_return_if_fail(test_func != NULL); - - g_test_add_vtable(testpath, - 0, - test_data, - NULL, - (GTestFixtureFunc) test_func, - (GTestFixtureFunc) data_free_func); -#endif -} -#define g_test_add_data_func_full __g_test_add_data_func_full - -/*****************************************************************************/ - -static inline gboolean -nm_g_hash_table_replace(GHashTable *hash, gpointer key, gpointer value) -{ - /* glib 2.40 added a return value indicating whether the key already existed - * (910191597a6c2e5d5d460e9ce9efb4f47d9cc63c). */ -#if GLIB_CHECK_VERSION(2, 40, 0) - return g_hash_table_replace(hash, key, value); -#else - gboolean contained = g_hash_table_contains(hash, key); - - g_hash_table_replace(hash, key, value); - return !contained; -#endif -} - -static inline gboolean -nm_g_hash_table_insert(GHashTable *hash, gpointer key, gpointer value) -{ - /* glib 2.40 added a return value indicating whether the key already existed - * (910191597a6c2e5d5d460e9ce9efb4f47d9cc63c). */ -#if GLIB_CHECK_VERSION(2, 40, 0) - return g_hash_table_insert(hash, key, value); -#else - gboolean contained = g_hash_table_contains(hash, key); - - g_hash_table_insert(hash, key, value); - return !contained; -#endif -} - -static inline gboolean -nm_g_hash_table_add(GHashTable *hash, gpointer key) -{ - /* glib 2.40 added a return value indicating whether the key already existed - * (910191597a6c2e5d5d460e9ce9efb4f47d9cc63c). */ -#if GLIB_CHECK_VERSION(2, 40, 0) - return g_hash_table_add(hash, key); -#else - gboolean contained = g_hash_table_contains(hash, key); - - g_hash_table_add(hash, key); - return !contained; -#endif -} - -/*****************************************************************************/ - -#if !GLIB_CHECK_VERSION(2, 40, 0) || defined(NM_GLIB_COMPAT_H_TEST) -static inline void -_nm_g_ptr_array_insert(GPtrArray *array, int index_, gpointer data) -{ - g_return_if_fail(array); - g_return_if_fail(index_ >= -1); - g_return_if_fail(index_ <= (int) array->len); - - g_ptr_array_add(array, data); - - if (index_ != -1 && index_ != (int) (array->len - 1)) { - memmove(&(array->pdata[index_ + 1]), - &(array->pdata[index_]), - (array->len - index_ - 1) * sizeof(gpointer)); - array->pdata[index_] = data; - } -} -#endif - -#if !GLIB_CHECK_VERSION(2, 40, 0) -#define g_ptr_array_insert(array, index, data) \ - G_STMT_START \ - { \ - _nm_g_ptr_array_insert(array, index, data); \ - } \ - G_STMT_END -#else -#define g_ptr_array_insert(array, index, data) \ - G_STMT_START \ - { \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - g_ptr_array_insert(array, index, data); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - } \ - G_STMT_END -#endif - -/*****************************************************************************/ - #if !GLIB_CHECK_VERSION(2, 54, 0) static inline gboolean g_ptr_array_find(GPtrArray *haystack, gconstpointer needle, guint *index_) @@ -346,106 +135,6 @@ g_ptr_array_find(GPtrArray *haystack, gconstpointer needle, guint *index_) /*****************************************************************************/ -#if !GLIB_CHECK_VERSION(2, 40, 0) -static inline gboolean -_g_key_file_save_to_file(GKeyFile *key_file, const char *filename, GError **error) -{ - char *contents; - gboolean success; - gsize length; - - g_return_val_if_fail(key_file != NULL, FALSE); - g_return_val_if_fail(filename != NULL, FALSE); - g_return_val_if_fail(error == NULL || *error == NULL, FALSE); - - contents = g_key_file_to_data(key_file, &length, NULL); - g_assert(contents != NULL); - - success = g_file_set_contents(filename, contents, length, error); - g_free(contents); - - return success; -} -#define g_key_file_save_to_file(key_file, filename, error) \ - _g_key_file_save_to_file(key_file, filename, error) -#else -#define g_key_file_save_to_file(key_file, filename, error) \ - ({ \ - gboolean _success; \ - \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - _success = g_key_file_save_to_file(key_file, filename, error); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - _success; \ - }) -#endif - -/*****************************************************************************/ - -#if GLIB_CHECK_VERSION(2, 36, 0) -#define g_credentials_get_unix_pid(creds, error) \ - ({ \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS(g_credentials_get_unix_pid)((creds), (error)); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - }) -#else -#define g_credentials_get_unix_pid(creds, error) \ - ({ \ - struct ucred *native_creds; \ - \ - native_creds = g_credentials_get_native((creds), G_CREDENTIALS_TYPE_LINUX_UCRED); \ - g_assert(native_creds); \ - native_creds->pid; \ - }) -#endif - -/*****************************************************************************/ - -#if !GLIB_CHECK_VERSION(2, 40, 0) || defined(NM_GLIB_COMPAT_H_TEST) -static inline gpointer * -_nm_g_hash_table_get_keys_as_array(GHashTable *hash_table, guint *length) -{ - GHashTableIter iter; - gpointer key, *ret; - guint i = 0; - - g_return_val_if_fail(hash_table, NULL); - - ret = g_new0(gpointer, g_hash_table_size(hash_table) + 1); - g_hash_table_iter_init(&iter, hash_table); - - while (g_hash_table_iter_next(&iter, &key, NULL)) - ret[i++] = key; - - ret[i] = NULL; - - if (length) - *length = i; - - return ret; -} -#endif -#if !GLIB_CHECK_VERSION(2, 40, 0) -#define g_hash_table_get_keys_as_array(hash_table, length) \ - ({ _nm_g_hash_table_get_keys_as_array(hash_table, length); }) -#else -#define g_hash_table_get_keys_as_array(hash_table, length) \ - ({ \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS(g_hash_table_get_keys_as_array) \ - ((hash_table), (length)); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - }) -#endif - -/*****************************************************************************/ - -#ifndef g_info -/* g_info was only added with 2.39.2 */ -#define g_info(...) g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, __VA_ARGS__) -#endif - -/*****************************************************************************/ - #ifdef g_steal_pointer #undef g_steal_pointer #endif @@ -486,69 +175,6 @@ _nm_g_strv_contains(const char *const *strv, const char *str) /*****************************************************************************/ -static inline GVariant * -_nm_g_variant_new_take_string(char *string) -{ -#if !GLIB_CHECK_VERSION(2, 36, 0) - GVariant *value; - - g_return_val_if_fail(string != NULL, NULL); - g_return_val_if_fail(g_utf8_validate(string, -1, NULL), NULL); - - value = g_variant_new_string(string); - g_free(string); - return value; -#elif !GLIB_CHECK_VERSION(2, 38, 0) - GVariant *value; - GBytes *bytes; - - g_return_val_if_fail(string != NULL, NULL); - g_return_val_if_fail(g_utf8_validate(string, -1, NULL), NULL); - - bytes = g_bytes_new_take(string, strlen(string) + 1); - value = g_variant_new_from_bytes(G_VARIANT_TYPE_STRING, bytes, TRUE); - g_bytes_unref(bytes); - - return value; -#else - G_GNUC_BEGIN_IGNORE_DEPRECATIONS - return g_variant_new_take_string(string); - G_GNUC_END_IGNORE_DEPRECATIONS -#endif -} -#define g_variant_new_take_string _nm_g_variant_new_take_string - -/*****************************************************************************/ - -#if !GLIB_CHECK_VERSION(2, 38, 0) -_nm_printf(1, 2) static inline GVariant *_nm_g_variant_new_printf(const char *format_string, ...) -{ - char *string; - va_list ap; - - g_return_val_if_fail(format_string, NULL); - - va_start(ap, format_string); - string = g_strdup_vprintf(format_string, ap); - va_end(ap); - - return g_variant_new_take_string(string); -} -#define g_variant_new_printf(...) _nm_g_variant_new_printf(__VA_ARGS__) -#else -#define g_variant_new_printf(...) \ - ({ \ - GVariant *_v; \ - \ - G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - _v = g_variant_new_printf(__VA_ARGS__); \ - G_GNUC_END_IGNORE_DEPRECATIONS \ - _v; \ - }) -#endif - -/*****************************************************************************/ - /* Recent glib also casts the results to typeof(Obj), but only if * * ( defined(g_has_typeof) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_56 ) @@ -766,4 +392,10 @@ _nm_deprecated("Don't use this API") void _nm_forbidden_glib_api_n(gconstpointer /*****************************************************************************/ +/* Use either NM_MIN()/NM_MAX() or (if that doesn't work) use NM_MIN_CONST()/NM_MAX_CONST(). */ +#undef MIN +#undef MAX + +/*****************************************************************************/ + #endif /* __NM_GLIB_H__ */ diff --git a/src/libnm-glib-aux/nm-hash-utils.h b/src/libnm-glib-aux/nm-hash-utils.h index c1306200..703c00a4 100644 --- a/src/libnm-glib-aux/nm-hash-utils.h +++ b/src/libnm-glib-aux/nm-hash-utils.h @@ -14,6 +14,30 @@ #define NM_HASH_SEED_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af) \ ((const guint8[16]){a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af}) +struct _nm_packed _nm_hash_seed_16_u64_data { + guint64 s1; + guint64 s2; +}; + +G_STATIC_ASSERT(sizeof(struct _nm_hash_seed_16_u64_data) == 16); +G_STATIC_ASSERT(sizeof(struct _nm_hash_seed_16_u64_data) == sizeof(guint64) * 2); + +/* c_siphash_init() has a seed of 16 bytes (NM_HASH_SEED_16()). That is + * cumbersome to use, because we usually just hardcode an arbitrarily chosen, + * fixed number. + * + * This macro takes a u64 (in host-endianness) and returns a 16 byte seed + * buffer. The number will be big endian encoded, to be architecture + * independent. */ +#define NM_HASH_SEED_16_U64(u64) \ + ((const guint8 *) ((gpointer) \ + & ((struct _nm_hash_seed_16_u64_data){ \ + .s1 = htobe64((u64)), \ + .s2 = 0, \ + }))) + +/*****************************************************************************/ + void nm_hash_siphash42_init(CSipHash *h, guint static_seed); /* Siphash24 of binary buffer @arr and @len, using the randomized seed from @@ -22,7 +46,7 @@ void nm_hash_siphash42_init(CSipHash *h, guint static_seed); * Note, that this is guaranteed to use siphash42 under the hood (contrary to * all other NMHash API, which leave this undefined). That matters at the point, * where the caller needs to be sure that a reasonably strong hashing algorithm - * is used. (Yes, NMHash is all about siphash24, but otherwise that is not promised + * is used. (Yes, NMHash is all about siphash42, but otherwise that is not promised * anywhere). * * Another difference is, that this returns guint64 (not guint like other NMHash functions). @@ -32,6 +56,9 @@ void nm_hash_siphash42_init(CSipHash *h, guint static_seed); * Then, why not use c_siphash_hash() directly? Because this also uses the randomized, * per-run hash-seed like nm_hash_init(). So, you get siphash24 with a random * seed (which is cached for the current run of the program). + * + * WARNING: the static_seed gets randomized like with nm_hash*(). If you want a reproducible + * siphash42, use instead `c_siphash_hash(NM_HASH_SEED_16_U64(number), ptr, len)`. */ static inline guint64 nm_hash_siphash42(guint static_seed, const void *ptr, gsize n) diff --git a/src/libnm-glib-aux/nm-macros-internal.h b/src/libnm-glib-aux/nm-macros-internal.h index 9972dc44..a9253ed4 100644 --- a/src/libnm-glib-aux/nm-macros-internal.h +++ b/src/libnm-glib-aux/nm-macros-internal.h @@ -571,10 +571,10 @@ nm_str_realloc(char *str) } #define NM_GOBJECT_PROPERTIES_DEFINE_NOTIFY(suffix, obj_type) \ - static inline void _nm_gobject_notify_together_impl##suffix( \ + static inline void _nm_gobject_notify_together_full_v##suffix( \ obj_type *obj, \ - guint n, \ - const _PropertyEnums##suffix *props) \ + const _PropertyEnums##suffix *props, \ + guint n) \ { \ GObject *const gobj = (GObject *) obj; \ GParamSpec *pspec_first = NULL; \ @@ -614,7 +614,7 @@ nm_str_realloc(char *str) \ _nm_unused static inline void _notify##suffix(obj_type *obj, _PropertyEnums##suffix prop) \ { \ - _nm_gobject_notify_together_impl##suffix(obj, 1, &prop); \ + _nm_gobject_notify_together_full_v##suffix(obj, &prop, 1); \ } \ _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON @@ -631,15 +631,15 @@ nm_str_realloc(char *str) /* invokes _notify() for all arguments (of type _PropertyEnums). Note, that if * there are more than one prop arguments, this will involve a freeze/thaw * of GObject property notifications. */ -#define nm_gobject_notify_together_full(suffix, obj, ...) \ - G_STMT_START \ - { \ - const _PropertyEnums##suffix _props[] = {__VA_ARGS__}; \ - \ - G_STATIC_ASSERT(G_N_ELEMENTS(_props) == NM_NARG(__VA_ARGS__)); \ - \ - _nm_gobject_notify_together_impl##suffix(obj, G_N_ELEMENTS(_props), _props); \ - } \ +#define nm_gobject_notify_together_full(suffix, obj, ...) \ + G_STMT_START \ + { \ + const _PropertyEnums##suffix _props[] = {__VA_ARGS__}; \ + \ + G_STATIC_ASSERT(G_N_ELEMENTS(_props) == NM_NARG(__VA_ARGS__)); \ + \ + _nm_gobject_notify_together_full_v##suffix(obj, _props, G_N_ELEMENTS(_props)); \ + } \ G_STMT_END #define nm_gobject_notify_together(obj, ...) nm_gobject_notify_together_full(, obj, __VA_ARGS__) diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 34a3af20..7d623bd9 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -623,6 +623,149 @@ nm_g_variant_maybe_singleton_i(gint32 value) /*****************************************************************************/ +static int +_variant_type_cmp(const GVariantType *type1, const GVariantType *type2) +{ + const char *string1; + const char *string2; + gsize size; + + NM_CMP_SELF(type1, type2); + + size = g_variant_type_get_string_length(type1); + + NM_CMP_DIRECT(size, g_variant_type_get_string_length(type2)); + + string1 = g_variant_type_peek_string(type1); + string2 = g_variant_type_peek_string(type2); + + NM_CMP_DIRECT_MEMCMP(string1, string2, size); + return 0; +} + +int +nm_g_variant_type_cmp(const GVariantType *type1, const GVariantType *type2) +{ + int r; + + r = _variant_type_cmp(type1, type2); + nm_assert((!!g_variant_type_equal(type1, type2)) == (r == 0)); + return r; +} + +/*****************************************************************************/ + +typedef enum { + VARIANT_CMP_TYPE_VARIANT, + VARIANT_CMP_TYPE_STRDICT, + VARIANT_CMP_TYPE_VARDICT, +} VariantCmpType; + +static int +_variant_cmp_array(GVariant *value1, GVariant *value2, VariantCmpType type) +{ + gsize len; + gsize i; + + len = g_variant_n_children(value1); + + NM_CMP_DIRECT(len, g_variant_n_children(value2)); + + for (i = 0; i < len; i++) { + gs_unref_variant GVariant *child1 = g_variant_get_child_value(value1, i); + gs_unref_variant GVariant *child2 = g_variant_get_child_value(value2, i); + const char *key1; + const char *key2; + const char *val1_str; + const char *val2_str; + + nm_assert(child1); + nm_assert(child2); + + switch (type) { + case VARIANT_CMP_TYPE_VARIANT: + NM_CMP_RETURN(nm_g_variant_cmp(child1, child2)); + break; + case VARIANT_CMP_TYPE_STRDICT: + g_variant_get(child1, "{&s&s}", &key1, &val1_str); + g_variant_get(child2, "{&s&s}", &key2, &val2_str); + NM_CMP_DIRECT_STRCMP(key1, key2); + NM_CMP_DIRECT_STRCMP(val1_str, val2_str); + break; + case VARIANT_CMP_TYPE_VARDICT: + { + gs_unref_variant GVariant *val1_var = NULL; + gs_unref_variant GVariant *val2_var = NULL; + + g_variant_get(child1, "{&sv}", &key1, &val1_var); + g_variant_get(child2, "{&sv}", &key2, &val2_var); + NM_CMP_DIRECT_STRCMP(key1, key2); + NM_CMP_RETURN(nm_g_variant_cmp(val1_var, val2_var)); + break; + } + } + } + + return 0; +} + +static int +_variant_cmp_generic(GVariant *value1, GVariant *value2) +{ + gs_free char *str1 = NULL; + gs_free char *str2 = NULL; + + /* This is like g_variant_equal(), which also resorts to pretty-printing + * the variants for comparison. + * + * Note that the variant types are already checked and equal. We thus don't + * need to include the type annotation. */ + str1 = g_variant_print(value1, FALSE); + str2 = g_variant_print(value2, FALSE); + + NM_CMP_DIRECT_STRCMP(str1, str2); + return 0; +} + +static int +_variant_cmp(GVariant *value1, GVariant *value2) +{ + const GVariantType *type; + + NM_CMP_SELF(value1, value2); + + type = g_variant_get_type(value1); + + NM_CMP_RETURN(nm_g_variant_type_cmp(type, g_variant_get_type(value2))); + + if (g_variant_type_is_basic(type)) + NM_CMP_RETURN(g_variant_compare(value1, value2)); + else if (g_variant_type_is_subtype_of(type, G_VARIANT_TYPE("a{ss}"))) + NM_CMP_RETURN(_variant_cmp_array(value1, value2, VARIANT_CMP_TYPE_STRDICT)); + else if (g_variant_type_is_subtype_of(type, G_VARIANT_TYPE("a{sv}"))) + NM_CMP_RETURN(_variant_cmp_array(value1, value2, VARIANT_CMP_TYPE_VARDICT)); + else if (g_variant_type_is_array(type) || g_variant_type_is_tuple(type)) + NM_CMP_RETURN(_variant_cmp_array(value1, value2, VARIANT_CMP_TYPE_VARIANT)); + else + NM_CMP_RETURN(_variant_cmp_generic(value1, value2)); + + return 0; +} + +int +nm_g_variant_cmp(GVariant *value1, GVariant *value2) +{ + int r; + + r = _variant_cmp(value1, value2); + + nm_assert((!!nm_g_variant_equal(value1, value2)) == (r == 0)); + + return r; +} + +/*****************************************************************************/ + GHashTable * nm_strdict_clone(GHashTable *src) { @@ -1937,7 +2080,7 @@ nm_utils_strsplit_quoted(const char *str) } if (!arr) - return g_new0(char *, 1); + return nm_strv_empty_new(); /* We want to return an optimally sized strv array, with no excess * memory allocated. Hence, clone once more. */ @@ -1964,8 +2107,6 @@ nm_utils_strsplit_quoted(const char *str) * Searches @list for @needle and returns the index of the first match (based * on strcmp()). * - * For convenience, @list has type 'char**' instead of 'const char **'. - * * Returns: index of first occurrence or -1 if @needle is not found in @list. */ gssize @@ -1984,7 +2125,7 @@ _nm_strv_find_first(const char *const *list, gssize len, const char *needle) } } else { for (i = 0; i < len; i++) { - if (list[i] && !strcmp(needle, list[i])) + if (list[i] && nm_streq(needle, list[i])) return i; } } @@ -1993,7 +2134,7 @@ _nm_strv_find_first(const char *const *list, gssize len, const char *needle) if (list) { for (i = 0; list[i]; i++) { - if (strcmp(needle, list[i]) == 0) + if (nm_streq(needle, list[i])) return i; } } @@ -2078,7 +2219,7 @@ nm_strv_is_same_unordered(const char *const *strv1, } const char ** -nm_strv_cleanup_const(const char **strv, gboolean skip_empty, gboolean skip_repeated) +nm_strv_cleanup_const(const char **strv, gboolean no_empty, gboolean no_duplicates) { gsize i; gsize j; @@ -2086,13 +2227,12 @@ nm_strv_cleanup_const(const char **strv, gboolean skip_empty, gboolean skip_repe if (!strv || !*strv) return strv; - if (!skip_empty && !skip_repeated) + if (!no_empty && !no_duplicates) return strv; j = 0; for (i = 0; strv[i]; i++) { - if ((skip_empty && !*strv[i]) - || (skip_repeated && nm_strv_find_first(strv, j, strv[i]) >= 0)) + if ((no_empty && !*strv[i]) || (no_duplicates && nm_strv_contains(strv, j, strv[i]))) continue; strv[j++] = strv[i]; } @@ -2101,7 +2241,7 @@ nm_strv_cleanup_const(const char **strv, gboolean skip_empty, gboolean skip_repe } char ** -nm_strv_cleanup(char **strv, gboolean strip_whitespace, gboolean skip_empty, gboolean skip_repeated) +nm_strv_cleanup(char **strv, gboolean strip_whitespace, gboolean no_empty, gboolean no_duplicates) { gsize i; gsize j; @@ -2115,12 +2255,11 @@ nm_strv_cleanup(char **strv, gboolean strip_whitespace, gboolean skip_empty, gbo for (i = 0; strv[i]; i++) g_strstrip(strv[i]); } - if (!skip_empty && !skip_repeated) + if (!no_empty && !no_duplicates) return strv; j = 0; for (i = 0; strv[i]; i++) { - if ((skip_empty && !*strv[i]) - || (skip_repeated && nm_strv_find_first(strv, j, strv[i]) >= 0)) + if ((no_empty && !*strv[i]) || (no_duplicates && nm_strv_contains(strv, j, strv[i]))) g_free(strv[i]); else strv[j++] = strv[i]; @@ -2221,6 +2360,44 @@ nm_utils_error_is_notfound(GError *error) /*****************************************************************************/ +void +nm_gobject_notify_together_by_pspec_v(gpointer obj, + const GParamSpec *const *param_specs, + gsize param_specs_len) +{ + GObject *const gobj = obj; + gboolean frozen = FALSE; + const GParamSpec *pspec_first = NULL; + + nm_assert(G_IS_OBJECT(gobj)); + nm_assert(param_specs_len > 0); + + while (param_specs_len-- > 0) { + const GParamSpec *pspec = (param_specs++)[0]; + + if (!pspec) + continue; + + if (!frozen) { + if (!pspec_first) { + pspec_first = pspec; + continue; + } + frozen = TRUE; + g_object_freeze_notify(gobj); + g_object_notify_by_pspec(gobj, (GParamSpec *) pspec_first); + } + g_object_notify_by_pspec(gobj, (GParamSpec *) pspec); + } + + if (frozen) + g_object_thaw_notify(gobj); + else if (pspec_first) + g_object_notify_by_pspec(gobj, (GParamSpec *) pspec_first); +} + +/*****************************************************************************/ + /** * nm_g_object_set_property: * @object: the target object @@ -3584,6 +3761,9 @@ nm_strv_make_deep_copied_n(const char **strv, gsize len) * the returned array must be freed with g_strfreev(). Otherwise, the * strings themself are not copied. You must take care of who owns the * strings yourself. + * @preserved_empty: affects how to handle if the strv array is empty (length 0). + * If TRUE, results in a non-NULL, empty, allocated strv array. If FALSE, + * returns NULL instead of an empty strv array. * * Like g_strdupv(), with two differences: * @@ -3602,7 +3782,10 @@ nm_strv_make_deep_copied_n(const char **strv, gsize len) * cloned or not. */ char ** -_nm_strv_dup(const char *const *strv, gssize len, gboolean deep_copied) +_nm_strv_dup_full(const char *const *strv, + gssize len, + gboolean deep_copied, + gboolean preserve_empty) { gsize i, l; char **v; @@ -3611,13 +3794,16 @@ _nm_strv_dup(const char *const *strv, gssize len, gboolean deep_copied) l = NM_PTRARRAY_LEN(strv); else l = len; - if (l == 0) { - /* this function never returns an empty strv array. If you - * need that, handle it yourself. */ + + if (l == 0 && !preserve_empty) { + /* An empty strv array is not returned (as requested by + * !preserved_empty). Instead, return NULL. */ return NULL; } - v = g_new(char *, l + 1); + nm_assert(l < G_MAXSIZE); + + v = g_new(char *, l + 1u); for (i = 0; i < l; i++) { if (G_UNLIKELY(!strv[i])) { /* NULL strings are not allowed. Clear the remainder of the array @@ -5775,40 +5961,81 @@ nm_utils_is_specific_hostname(const char *name) /*****************************************************************************/ -/* taken from systemd's uid_to_name(). */ -char * -nm_utils_uid_to_name(uid_t uid) +typedef struct { + struct passwd pw; + _nm_alignas(max_align_t) char buf[]; +} GetPwuidData; + +/** + * nm_getpwuid: + * uid: the user Id to look up + * + * Calls getpwuid_r() to lookup the passwd entry. See the manual. + * Allocates and returns a suitable buffer. + * + * The returned buffer is likely much large than required. You don't want to + * keep this buffer around for longer than necessary. + * + * Returns: (transfer full): the passwd entry, if found or NULL on error + * or if the entry was not found. + */ +struct passwd * +nm_getpwuid(uid_t uid) { - gs_free char *buf_heap = NULL; - char buf_stack[4096]; - gsize bufsize; - char *buf; + gs_free GetPwuidData *data = NULL; + gsize bufsize; + const gsize OFFSET = G_STRUCT_OFFSET(GetPwuidData, buf); + long int size_max; - bufsize = sizeof(buf_stack); - buf = buf_stack; + size_max = sysconf(_SC_GETPW_R_SIZE_MAX); + if (size_max > 0 && ((unsigned long int) size_max < G_MAXSIZE - OFFSET)) + bufsize = size_max; + else + bufsize = 4096; for (;;) { - struct passwd pwbuf; struct passwd *pw = NULL; int r; - r = getpwuid_r(uid, &pwbuf, buf, bufsize, &pw); - if (r == 0 && pw) - return nm_strdup_not_empty(pw->pw_name); + if (bufsize >= G_MAXSIZE - OFFSET) + return NULL; + + nm_clear_g_free(&data); + data = g_malloc(OFFSET + bufsize); + + r = getpwuid_r(uid, &data->pw, data->buf, bufsize, &pw); + if (r == 0) { + if (!pw) + return NULL; + nm_assert(pw == (gpointer) data); + return (gpointer) g_steal_pointer(&data); + } if (r != ERANGE) return NULL; if (bufsize > G_MAXSIZE / 2u) return NULL; - bufsize *= 2u; - g_free(buf_heap); - buf_heap = g_malloc(bufsize); - buf = buf_heap; } } +const char * +nm_passwd_name(const struct passwd *pw) +{ + /* Normalize "pw->pw_name" and return it. */ + return pw ? nm_str_not_empty(pw->pw_name) : NULL; +} + +char * +nm_utils_uid_to_name(uid_t uid) +{ + gs_free struct passwd *pw = NULL; + + pw = nm_getpwuid(uid); + return g_strdup(nm_passwd_name(pw)); +} + /* taken from systemd's nss_user_record_by_name() */ gboolean nm_utils_name_to_uid(const char *name, uid_t *out_uid) @@ -5886,6 +6113,9 @@ nm_utils_exp10(gint16 ex) gboolean _nm_utils_is_empty_ssid_arr(const guint8 *ssid, gsize len) { + if (len == 0) + return TRUE; + /* Single white space is for Linksys APs */ if (len == 1 && ssid[0] == ' ') return TRUE; @@ -6925,10 +7155,10 @@ _poll_done_cb(GObject *source, GAsyncResult *result, gpointer user_data) else wait_ms = 0; if (poll_task_data->sleep_timeout_ms > 0) - wait_ms = MAX(wait_ms, poll_task_data->sleep_timeout_ms); + wait_ms = NM_MAX(wait_ms, poll_task_data->sleep_timeout_ms); poll_task_data->source_next_poll = - nm_g_source_attach(nm_g_timeout_source_new(MAX(1, wait_ms), + nm_g_source_attach(nm_g_timeout_source_new(NM_MAX(1, wait_ms), G_PRIORITY_DEFAULT, _poll_start_cb, poll_task_data, diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index e37cf5e6..ea38e083 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -97,6 +97,7 @@ typedef enum _nm_packed { /* No type, empty value */ NM_PORT_KIND_NONE, NM_PORT_KIND_BOND, + NM_PORT_KIND_BRIDGE, } NMPortKind; /*****************************************************************************/ @@ -157,6 +158,7 @@ typedef enum { #define _NM_LINK_TYPE_SW_MASTER_FIRST NM_LINK_TYPE_BRIDGE NM_LINK_TYPE_BRIDGE, NM_LINK_TYPE_BOND, + NM_LINK_TYPE_HSR, NM_LINK_TYPE_TEAM, #define _NM_LINK_TYPE_SW_MASTER_LAST NM_LINK_TYPE_TEAM @@ -331,9 +333,10 @@ gboolean nm_utils_memeqzero(gconstpointer data, gsize length); extern const void *const _NM_PTRARRAY_EMPTY[1]; -#define NM_PTRARRAY_EMPTY(type) ((type const *) _NM_PTRARRAY_EMPTY) -#define NM_STRV_EMPTY() ((char **) _NM_PTRARRAY_EMPTY) -#define NM_STRV_EMPTY_CC() NM_PTRARRAY_EMPTY(const char *) +#define NM_PTRARRAY_EMPTY(type) ((type const *) _NM_PTRARRAY_EMPTY) +#define NM_STRV_EMPTY() ((char **) _NM_PTRARRAY_EMPTY) +#define NM_STRV_EMPTY_CC() NM_PTRARRAY_EMPTY(const char *) +#define NM_PTRARRAY_EMPTY_NEW(type) (g_new0(type, 1)) static inline void nm_strbuf_init(char *buf, gsize len, char **p_buf_ptr, gsize *p_buf_len) @@ -528,12 +531,10 @@ gssize _nm_strv_find_first(const char *const *list, gssize len, const char *need gboolean nm_strv_has_duplicate(const char *const *list, gssize len, gboolean is_sorted); -const char **nm_strv_cleanup_const(const char **strv, gboolean skip_empty, gboolean skip_repeated); +const char **nm_strv_cleanup_const(const char **strv, gboolean no_empty, gboolean no_duplicates); -char **nm_strv_cleanup(char **strv, - gboolean strip_whitespace, - gboolean skip_empty, - gboolean skip_repeated); +char ** +nm_strv_cleanup(char **strv, gboolean strip_whitespace, gboolean no_empty, gboolean no_duplicates); gboolean nm_strv_is_same_unordered(const char *const *strv1, gssize len1, @@ -1114,6 +1115,21 @@ nm_utils_error_set_literal(GError **error, int error_code, const char *literal) /*****************************************************************************/ +void nm_gobject_notify_together_by_pspec_v(gpointer obj, + const GParamSpec *const *param_specs, + gsize param_specs_len); + +#define nm_gobject_notify_together_by_pspec(obj, ...) \ + G_STMT_START \ + { \ + const GParamSpec *const _arr[] = {__VA_ARGS__}; \ + \ + G_STATIC_ASSERT(NM_NARG(__VA_ARGS__) == G_N_ELEMENTS(_arr)); \ + \ + nm_gobject_notify_together_by_pspec_v((obj), _arr, G_N_ELEMENTS(_arr)); \ + } \ + G_STMT_END + gboolean nm_g_object_set_property(GObject *object, const char *property_name, const GValue *value, @@ -1402,6 +1418,10 @@ nm_g_variant_builder_add_sv_str(GVariantBuilder *builder, const char *key, const nm_g_variant_builder_add_sv(builder, key, g_variant_new_string(str)); } +int nm_g_variant_type_cmp(const GVariantType *type1, const GVariantType *type2); + +int nm_g_variant_cmp(GVariant *value1, GVariant *value2); + static inline void nm_g_source_destroy_and_unref(GSource *source) { @@ -1851,6 +1871,8 @@ int nm_utils_hashtable_cmp(const GHashTable *a, GCompareDataFunc cmp_values, gpointer user_data); +#define nm_strv_empty_new() NM_PTRARRAY_EMPTY_NEW(char *) + char **nm_strv_make_deep_copied(const char **strv); char **nm_strv_make_deep_copied_n(const char **strv, gsize len); @@ -1858,13 +1880,18 @@ char **nm_strv_make_deep_copied_n(const char **strv, gsize len); static inline char ** nm_strv_make_deep_copied_nonnull(const char **strv) { - return nm_strv_make_deep_copied(strv) ?: g_new0(char *, 1); + return nm_strv_make_deep_copied(strv) ?: nm_strv_empty_new(); } -char **_nm_strv_dup(const char *const *strv, gssize len, gboolean deep_copied); +char **_nm_strv_dup_full(const char *const *strv, + gssize len, + gboolean deep_copied, + gboolean preserve_empty); -#define nm_strv_dup(strv, len, deep_copied) \ - _nm_strv_dup(NM_CAST_STRV_CC(strv), (len), (deep_copied)) +#define nm_strv_dup_full(strv, len, deep_copied, preserve_empty) \ + _nm_strv_dup_full(NM_CAST_STRV_CC(strv), (len), (deep_copied), (preserve_empty)) + +#define nm_strv_dup(strv, len, deep_copied) nm_strv_dup_full((strv), (len), (deep_copied), FALSE) const char **_nm_strv_dup_packed(const char *const *strv, gssize len); @@ -1942,7 +1969,27 @@ nm_g_array_unref(GArray *arr) * When accessing index zero, then this returns NULL if-and-only-if * "arr" is NULL or "arr->data" is NULL. In all other cases, this * returns the pointer &((Type*) arr->data)[idx]. Note that the pointer - * may not be followed, if "idx" is equal to "arr->len". */ + * may not be followed, if "idx" is equal to "arr->len". + * + * The reason to allow access one element past the length is the + * following usage: + * + * ptr = nm_g_array_index_p(arr, Type, 0); + * end = nm_g_array_index_p(arr, Type, length); + * for (; ptr < end; ptr++) { ... } + * + * Another usage is to get a buffer, if the length might be zero. If + * length is zero, you cannot dereference the pointer, but it can be convenient + * to not require special casing: + * + * // length might be zero. + * nm_memdup(nm_g_array_index_p(arr, Type, length), sizeof(Type) * length); + * + * Note that in C, it's valid point one past the end of an array. So getting + * a pointer at index "length" is valid, and what nm_g_array_index_p() allows. + * If you don't need that, nm_g_array_index() is usually preferable, + * because it asserts against access at index "length". + */ #define nm_g_array_index_p(arr, Type, idx) \ ({ \ const GArray *const _arr_55 = (arr); \ @@ -2509,6 +2556,21 @@ nm_strv_ptrarray_get_unsafe(GPtrArray *arr, guint *out_len) return (const char *const *) arr->pdata; } +static inline char ** +nm_strv_ptrarray_to_strv_full(const GPtrArray *a, gboolean not_null) +{ + if (!a) + return not_null ? nm_strv_empty_new() : NULL; + return nm_strv_dup_full((const char *const *) a->pdata, a->len, TRUE, TRUE); +} + +static inline char ** +nm_strv_ptrarray_to_strv(const GPtrArray *a) +{ + /* Returns never NULL ("not_null"!) */ + return nm_strv_ptrarray_to_strv_full(a, TRUE); +} + static inline GPtrArray * nm_strv_ptrarray_clone(const GPtrArray *src, gboolean null_if_empty) { @@ -2977,100 +3039,248 @@ nm_strvarray_ensure(GArray **p) *p = g_array_new(TRUE, FALSE, sizeof(char *)); g_array_set_clear_func(*p, nm_indirect_g_free); } else - nm_assert(g_array_get_element_size(*p) == sizeof(char *)); + nm_assert(sizeof(char *) == g_array_get_element_size(*p)); return *p; } static inline void -nm_strvarray_add(GArray *array, const char *str) +nm_strvarray_add_take(GArray *array, char *str) { - char *s; - nm_assert(array); - nm_assert(g_array_get_element_size(array) == sizeof(char *)); + nm_assert(sizeof(char *) == g_array_get_element_size(array)); - s = g_strdup(str); - g_array_append_val(array, s); + /* The array is used as a NULL terminated strv array. Adding NULL is most + * likely a bug. Assert against it. */ + nm_assert(str); + + g_array_append_val(array, str); +} + +static inline void +nm_strvarray_add(GArray *array, const char *str) +{ + nm_strvarray_add_take(array, g_strdup(str)); } static inline const char * -nm_strvarray_get_idx(GArray *array, guint idx) +nm_strvarray_get_idx(const GArray *array, guint idx) { return nm_g_array_index(array, const char *, idx); } +/* nm_strvarray_get_idxnull_or_greturn() permits access at `len`, + * returning NULL. If the access is out of bounds, the assertion + * will fail (and also return NULL). */ +#define nm_strvarray_get_idxnull_or_greturn(arr, idx) \ + ({ \ + GArray *_arr = (arr); \ + gsize _idx = (idx); \ + guint _len = nm_g_array_len(_arr); \ + \ + g_return_val_if_fail(_idx <= _len, NULL); \ + \ + _idx == _len ? NULL : nm_strvarray_get_idx(_arr, _idx); \ + }) + +/** + * nm_strvarray_get_strv_full: + * @arr: the strvarray. + * @length: (out) (nullable): optionally return the length of the result. + * @not_null: if true and @arr is NULL, return NM_STRV_EMPTY_CC() (otherwise NULL). + * @preserve_empty: if true and the array is empty, return an empty + * strv array. Otherwise, return NULL. + * + * If "arr" is NULL, this returns NULL, unless "not_null" is true (in which + * case the static NM_STRV_EMPTY_CC() is returned). + * If "arr" is empty, it depends on: + * - if "preserve_empty" or "not_null", then the resulting strv array is the empty "arr". + * - otherwise NULL is returned. + * Otherwise, returns the non-empty, non-deep-cloned strv array. + * + * Like nm_strvarray_get_strv_full_dup(), but the strings are not cloned. + * + * Returns: (transfer none): a strv list or NULL. + */ static inline const char *const * -nm_strvarray_get_strv_non_empty(GArray *arr, guint *length) +nm_strvarray_get_strv_full(const GArray *arr, + guint *length, + gboolean not_null, + gboolean preserve_empty) { - nm_assert(!arr || g_array_get_element_size(arr) == sizeof(char *)); - - if (!arr || arr->len == 0) { + if (!arr) { NM_SET_OUT(length, 0); - return NULL; + return not_null ? NM_STRV_EMPTY_CC() : NULL; } + nm_assert(sizeof(char *) == g_array_get_element_size((GArray *) arr)); + NM_SET_OUT(length, arr->len); + + if (arr->len == 0 && !(preserve_empty || not_null)) + return NULL; + return &g_array_index(arr, const char *, 0); } +/** + * nm_strvarray_get_strv_full_dup: + * @arr: the strvarray. + * @length: (out) (nullable): optionally return the length of the result. + * @not_null: if true, never return NULL but allocate an empty strv array. + * @preserve_empty: if true and the array is empty, return an empty + * strv array. Otherwise, return NULL. + * + * If "arr" is NULL, this returns NULL, unless "not_null" is true (in which case + * am empty strv array is allocated. + * If "arr" is empty, it depends on: + * - if "preserve_empty" || "not_null", then the resulting strv array is allocated (and empty). + * - otherwise, NULL is returned. + * Otherwise, return the non-empty, deep-cloned strv array. + * + * Like nm_strvarray_get_strv_full(), but the strings are cloned. + * + * Returns: (transfer full): a deep-cloned strv list or NULL. + */ static inline char ** -nm_strvarray_get_strv_non_empty_dup(GArray *arr, guint *length) +nm_strvarray_get_strv_full_dup(const GArray *arr, + guint *length, + gboolean not_null, + gboolean preserve_empty) { - const char *const *strv; + if (!arr) { + NM_SET_OUT(length, 0); + return not_null ? nm_strv_empty_new() : NULL; + } - nm_assert(!arr || g_array_get_element_size(arr) == sizeof(char *)); + nm_assert(sizeof(char *) == g_array_get_element_size((GArray *) arr)); - if (!arr || arr->len == 0) { - NM_SET_OUT(length, 0); + NM_SET_OUT(length, arr->len); + + if (arr->len == 0) { + if (preserve_empty || not_null) + return nm_strv_empty_new(); return NULL; } - NM_SET_OUT(length, arr->len); - strv = &g_array_index(arr, const char *, 0); - return nm_strv_dup(strv, arr->len, TRUE); + return nm_strv_dup(&g_array_index(arr, const char *, 0), arr->len, TRUE); } +/** + * nm_strvarray_get_strv_notnull: + * @arr: the strvarray. + * @length: (out) (nullable): optionally return the length of the result. + * + * This never returns NULL. If @arr is NULL, this returns NM_STRV_EMPTY_CC(). + * + * Like nm_strvarray_get_strv_notempty(), but never returns NULL. + * + * Returns: (transfer none): a pointer to the strv list in @arr or NM_STRV_EMPTY_CC(). + */ static inline const char *const * -nm_strvarray_get_strv(GArray **arr, guint *length) +nm_strvarray_get_strv_notnull(const GArray *arr, guint *length) { - if (!*arr) { - NM_SET_OUT(length, 0); - return (const char *const *) arr; - } + return nm_strvarray_get_strv_full(arr, length, TRUE, TRUE); +} - nm_assert(g_array_get_element_size(*arr) == sizeof(char *)); +/** + * nm_strvarray_get_strv_notempty: + * @arr: the strvarray. + * @length: (out) (nullable): optionally return the length of the result. + * + * This never returns an empty strv array. If @arr is NULL or empty, this + * returns NULL. + * + * Like nm_strvarray_get_strv_notempty_dup(), but does not clone strings. + * + * Returns: (transfer none): a pointer to the strv list in @arr or NULL. + */ +static inline const char *const * +nm_strvarray_get_strv_notempty(const GArray *arr, guint *length) +{ + return nm_strvarray_get_strv_full(arr, length, FALSE, FALSE); +} - NM_SET_OUT(length, (*arr)->len); - return &g_array_index(*arr, const char *, 0); +/** + * nm_strvarray_get_strv_notempty_dup: + * @arr: the strvarray. + * @length: (out) (nullable): optionally return the length of the result. + * + * This never returns an empty strv array. If @arr is NULL or empty, this + * returns NULL. + * + * Like nm_strvarray_get_strv_notempty(), but clones strings. + * + * Returns: (transfer full): a deep-cloned strv list or NULL. + */ +static inline char ** +nm_strvarray_get_strv_notempty_dup(const GArray *arr, guint *length) +{ + return nm_strvarray_get_strv_full_dup(arr, length, FALSE, FALSE); } +/** + * nm_strvarray_set_strv_full: + * @array: a pointer to the array to set. + * @strv: the strv array. May be NULL. + * @preserve_empty: how to treat if strv is empty (strv[0]==NULL). + * + * The old array will be freed (in a way so that the function is self-assignment + * safe). + * + * If "strv" is NULL, then the resulting GArray is NULL. + * If "strv" is empty, then it depends on "preserve_empty": + * - if "preserve_empty", then the resulting GArray is allocated (and empty). + * - if "!preserve_empty", then the resulting GArray is NULL. + * If "strv" is not empty, a GArray gets allocated and the strv array deep-cloned. + */ static inline void -nm_strvarray_set_strv(GArray **array, const char *const *strv) +nm_strvarray_set_strv_full(GArray **array, const char *const *strv, gboolean preserve_empty) { gs_unref_array GArray *array_old = NULL; array_old = g_steal_pointer(array); - nm_assert(!array_old || g_array_get_element_size(array_old) == sizeof(char *)); + nm_assert(!array_old || sizeof(char *) == g_array_get_element_size(array_old)); + + if (!strv) + return; - if (!strv || !strv[0]) + if (!strv[0] && !preserve_empty) { + /* An empty strv array is treated like NULL. Don't allocate a GArray. */ return; + } nm_strvarray_ensure(array); for (; strv[0]; strv++) nm_strvarray_add(*array, strv[0]); } +/** + * nm_strvarray_set_strv: + * @array: a pointer to the array to set. + * @strv: the strv array. May be NULL. + * + * The old array will be freed (in a way so that the function is self-assignment + * safe). + * + * Note that this will never initialize an empty GArray. If strv is NULL or + * empty, the @array pointer will be set to NULL. */ +static inline void +nm_strvarray_set_strv(GArray **array, const char *const *strv) +{ + nm_strvarray_set_strv_full(array, strv, FALSE); +} + static inline gssize -nm_strvarray_find_first(GArray *strv, const char *needle) +nm_strvarray_find_first(const GArray *strv, const char *needle) { guint i; nm_assert(needle); if (strv) { - nm_assert(g_array_get_element_size(strv) == sizeof(char *)); + nm_assert(sizeof(char *) == g_array_get_element_size((GArray *) strv)); for (i = 0; i < strv->len; i++) { if (nm_streq(needle, g_array_index(strv, const char *, i))) return i; @@ -3079,6 +3289,8 @@ nm_strvarray_find_first(GArray *strv, const char *needle) return -1; } +#define nm_strvarray_contains(strv, needle) (nm_strvarray_find_first((strv), (needle)) >= 0) + static inline gboolean nm_strvarray_remove_first(GArray *strv, const char *needle) { @@ -3093,11 +3305,42 @@ nm_strvarray_remove_first(GArray *strv, const char *needle) return TRUE; } +#define nm_strvarray_remove_index(strv, idx) \ + G_STMT_START \ + { \ + GArray *const _strv = (strv); \ + typeof(idx) _idx = (idx); \ + \ + nm_assert(_strv); \ + nm_assert((uintmax_t) _idx < _strv->len); \ + nm_assert(sizeof(char *) == g_array_get_element_size(_strv)); \ + \ + g_array_remove_index(_strv, (guint) _idx); \ + } \ + G_STMT_END + +static inline void +nm_strvarray_ensure_and_add(GArray **p, const char *str) +{ + nm_strvarray_add(nm_strvarray_ensure(p), str); +} + +static inline gboolean +nm_strvarray_ensure_and_add_unique(GArray **p, const char *str) +{ + nm_assert(p); + + if (nm_strvarray_contains(*p, str)) + return FALSE; + nm_strvarray_add(nm_strvarray_ensure(p), str); + return TRUE; +} + static inline int nm_strvarray_cmp(const GArray *a, const GArray *b) { - nm_assert(!a || sizeof(const char *const *) == g_array_get_element_size((GArray *) a)); - nm_assert(!b || sizeof(const char *const *) == g_array_get_element_size((GArray *) b)); + nm_assert(!a || sizeof(char *) == g_array_get_element_size((GArray *) a)); + nm_assert(!b || sizeof(char *) == g_array_get_element_size((GArray *) b)); NM_CMP_SELF(a, b); @@ -3109,7 +3352,7 @@ nm_strvarray_cmp(const GArray *a, const GArray *b) static inline int _nm_strvarray_cmp_strv(const GArray *strv, const char *const *ss, gsize ss_len) { - nm_assert(!strv || sizeof(const char *const *) == g_array_get_element_size((GArray *) strv)); + nm_assert(!strv || sizeof(char *) == g_array_get_element_size((GArray *) strv)); return nm_strv_cmp_n(nm_g_array_data(strv), strv ? ((gssize) strv->len) : -1, ss, ss_len); } @@ -3119,6 +3362,24 @@ _nm_strvarray_cmp_strv(const GArray *strv, const char *const *ss, gsize ss_len) #define nm_strvarray_equal_strv(strv, ss, ss_len) \ (nm_strvarray_cmp_strv((strv), (ss), (ss_len)) == 0) +static inline gboolean +nm_strvarray_clear(GArray **array) +{ + gboolean cleared = FALSE; + + nm_assert(array); + nm_assert(!*array || sizeof(char *) == g_array_get_element_size(*array)); + + if (*array) { + /* We always clear the GArray, but we return TRUE only if the + * array was non-empty before. */ + if ((*array)->len > 0) + cleared = TRUE; + nm_clear_pointer(array, g_array_unref); + } + return cleared; +} + /*****************************************************************************/ struct _NMVariantAttributeSpec { @@ -3163,6 +3424,12 @@ gboolean nm_utils_is_localhost(const char *name); gboolean nm_utils_is_specific_hostname(const char *name); +struct passwd; + +struct passwd *nm_getpwuid(uid_t uid); + +const char *nm_passwd_name(const struct passwd *pw); + char *nm_utils_uid_to_name(uid_t uid); gboolean nm_utils_name_to_uid(const char *name, uid_t *out_uid); diff --git a/src/libnm-glib-aux/nm-test-utils.h b/src/libnm-glib-aux/nm-test-utils.h index de6fd0f1..2a6a5d3a 100644 --- a/src/libnm-glib-aux/nm-test-utils.h +++ b/src/libnm-glib-aux/nm-test-utils.h @@ -134,7 +134,7 @@ ({ \ gboolean _not_expired = TRUE; \ const gint64 nmtst_wait_start_us = g_get_monotonic_time(); \ - const gint64 nmtst_wait_duration_us = (max_wait_ms) *1000L; \ + const gint64 nmtst_wait_duration_us = (max_wait_ms) * 1000L; \ const gint64 nmtst_wait_end_us = nmtst_wait_start_us + nmtst_wait_duration_us; \ gint64 _nmtst_wait_remaining_us = nmtst_wait_duration_us; \ int _nmtst_wait_iteration = 0; \ @@ -497,8 +497,6 @@ __nmtst_init(int *argc, __nmtst_internal.assert_logging = !!assert_logging; - nm_g_type_init(); - is_debug = g_test_verbose(); nmtst_debug = g_getenv("NMTST_DEBUG"); @@ -1228,7 +1226,7 @@ nmtst_rand_perm_strv(const char *const *strv) /* this returns a (scrambled) SHALLOW copy of the strv array! */ n = NM_PTRARRAY_LEN(strv); - res = (const char **) (nm_strv_dup(strv, n, FALSE) ?: g_new0(char *, 1)); + res = (const char **) (nm_strv_dup(strv, n, FALSE) ?: nm_strv_empty_new()); nmtst_rand_perm(NULL, res, res, sizeof(char *), n); return res; } @@ -1803,7 +1801,7 @@ nmtst_inet_from_string(int addr_family, const char *str) static inline const char * nmtst_inet_to_string(int addr_family, gconstpointer addr) { - static _nm_thread_local char buf[NM_CONST_MAX(INET6_ADDRSTRLEN, INET_ADDRSTRLEN)]; + static _nm_thread_local char buf[NM_MAX(INET6_ADDRSTRLEN, INET_ADDRSTRLEN)]; g_assert(NM_IN_SET(addr_family, AF_INET, AF_INET6)); g_assert(addr); @@ -2568,20 +2566,21 @@ nmtst_assert_connection_unnormalizable(NMConnection *con, g_clear_error(&error); } -static inline void -nmtst_assert_setting_verifies(NMSetting *setting) -{ - /* assert that the setting verifies without an error */ - - GError *error = NULL; - gboolean success; - - g_assert(NM_IS_SETTING(setting)); - - success = nm_setting_verify(setting, NULL, &error); - g_assert_no_error(error); - g_assert(success); -} +#define nmtst_assert_setting_verifies(setting) \ + G_STMT_START \ + { \ + NMSetting *_setting = NM_SETTING(setting); \ + GError *_error = NULL; \ + gboolean _success; \ + \ + /* assert that the setting verifies without an error */ \ + \ + g_assert(NM_IS_SETTING(_setting)); \ + \ + _success = nm_setting_verify(_setting, NULL, &_error); \ + nmtst_assert_success(_success, _error); \ + } \ + G_STMT_END #if defined(__NM_SIMPLE_CONNECTION_H__) && NM_CHECK_VERSION(1, 10, 0) \ && (!defined(NM_VERSION_MAX_ALLOWED) || NM_VERSION_MAX_ALLOWED >= NM_VERSION_1_10) @@ -2605,7 +2604,7 @@ _nmtst_assert_connection_has_settings(NMConnection *connection, va_start(ap, has_at_most); while ((name = va_arg(ap, const char *))) { - if (!nm_g_hash_table_add(names, (gpointer) name)) + if (!g_hash_table_add(names, (gpointer) name)) g_assert_not_reached(); g_ptr_array_add(names_arr, (gpointer) name); } diff --git a/src/libnm-glib-aux/tests/test-shared-general.c b/src/libnm-glib-aux/tests/test-shared-general.c index 84d87d48..b19ac1ce 100644 --- a/src/libnm-glib-aux/tests/test-shared-general.c +++ b/src/libnm-glib-aux/tests/test-shared-general.c @@ -5,6 +5,8 @@ #include "libnm-glib-aux/nm-default-glib-i18n-prog.h" +#include <pwd.h> + #include "libnm-std-aux/unaligned.h" #include "libnm-glib-aux/nm-random-utils.h" #include "libnm-glib-aux/nm-str-buf.h" @@ -32,6 +34,13 @@ G_STATIC_ASSERT(_nm_alignof(NMEtherAddr) <= _nm_alignof(NMIPAddr)); /*****************************************************************************/ +G_STATIC_ASSERT(_NM_INT_IS_SIGNED(1)); +G_STATIC_ASSERT(!_NM_INT_IS_SIGNED(1u)); +G_STATIC_ASSERT(_NM_INT_SAME_SIGNEDNESS((short) 1, 1l)); +G_STATIC_ASSERT(!_NM_INT_SAME_SIGNEDNESS((unsigned short) 1, 1l)); + +/*****************************************************************************/ + static void test_nm_static_assert(void) { @@ -58,6 +67,20 @@ test_nm_static_assert(void) /*****************************************************************************/ static void +test_max(void) +{ + /* Check that NM_MAX() of constant expressions is itself a constant. We + * build with -Wvla, so this is a constant! */ + char buf1[NM_MAX(55, 40)]; + char buf2[NM_MAX(1, NM_MAX(40, 55))]; + + G_STATIC_ASSERT(sizeof(buf1) == 55); + G_STATIC_ASSERT(sizeof(buf2) == 55); +} + +/*****************************************************************************/ + +static void test_gpid(void) { const int *int_ptr; @@ -427,7 +450,7 @@ _strv_cmp_fuzz_input(const char *const *in, if (l < 0) ss = g_strdupv((char **) in); else if (l == 0) { - ss = nmtst_get_rand_bool() ? NULL : g_new0(char *, 1); + ss = nmtst_get_rand_bool() ? NULL : nm_strv_empty_new(); } else { ss = nm_memdup(in, sizeof(const char *) * l); for (i = 0; i < (gsize) l; i++) @@ -2573,6 +2596,258 @@ test_nm_prioq(void) /*****************************************************************************/ +static const char * +_getpwuid_name(uid_t uid) +{ + static struct passwd *pw; + + pw = getpwuid(uid); + return pw ? nm_str_not_empty(pw->pw_name) : NULL; +} + +static void +test_uid_to_name(void) +{ + int i; + + for (i = 0; i < 20; i++) { + gs_free char *name = NULL; + gs_free struct passwd *pw = NULL; + uid_t uid; + + if (i < 5) + uid = i; + else + uid = nmtst_get_rand_uint32() % 2000u; + + name = nm_utils_uid_to_name(uid); + g_assert_cmpstr(name, ==, _getpwuid_name(uid)); + + pw = nm_getpwuid(uid); + g_assert_cmpstr(name, ==, nm_passwd_name(pw)); + } +} + +/*****************************************************************************/ + +static void +compare_ints(void) +{ + GVariant *value1, *value2; + + value1 = g_variant_new_int32(5); + value2 = g_variant_new_int32(5); + g_assert(nm_g_variant_cmp(value1, value2) == 0); + + g_variant_unref(value2); + value2 = g_variant_new_int32(10); + g_assert(nm_g_variant_cmp(value1, value2) < 0); + + g_variant_unref(value2); + value2 = g_variant_new_int32(-1); + g_assert(nm_g_variant_cmp(value1, value2) > 0); + + g_variant_unref(value1); + g_variant_unref(value2); +} + +static void +compare_strings(void) +{ + GVariant *value1, *value2; + const char *str1 = "hello"; + const char *str2 = "world"; + + value1 = g_variant_new_string(str1); + value2 = g_variant_new_string(str1); + g_assert(nm_g_variant_cmp(value1, value2) == 0); + + g_variant_unref(value2); + value2 = g_variant_new_string(str2); + g_assert(nm_g_variant_cmp(value1, value2) < 0); + + g_assert(nm_g_variant_cmp(value2, value1) > 0); + + g_variant_unref(value1); + g_variant_unref(value2); +} + +static void +compare_strv(void) +{ + GVariant *value1, *value2; + const char *const strv1[] = {"foo", "bar", "baz", NULL}; + const char *const strv2[] = {"foo", "bar", "bar", NULL}; + const char *const strv3[] = {"foo", "bar", NULL}; + const char *const strv4[] = {"foo", "bar", "baz", "bam", NULL}; + + value1 = g_variant_new_strv(strv1, -1); + value2 = g_variant_new_strv(strv1, -1); + g_assert(nm_g_variant_cmp(value1, value2) == 0); + + g_variant_unref(value2); + value2 = g_variant_new_strv(strv2, -1); + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value2); + value2 = g_variant_new_strv(strv3, -1); + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value2); + value2 = g_variant_new_strv(strv4, -1); + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value1); + g_variant_unref(value2); +} + +static void +compare_arrays(void) +{ + GVariant *value1, *value2; + guint32 array[] = {0, 1, 2, 3, 4}; + + value1 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + array, + G_N_ELEMENTS(array), + sizeof(guint32)); + value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + array, + G_N_ELEMENTS(array), + sizeof(guint32)); + + g_assert(nm_g_variant_cmp(value1, value2) == 0); + + g_variant_unref(value2); + value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + array + 1, + G_N_ELEMENTS(array) - 1, + sizeof(guint32)); + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + array[0] = 7; + g_variant_unref(value2); + value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + array, + G_N_ELEMENTS(array), + sizeof(guint32)); + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value1); + g_variant_unref(value2); +} + +static void +compare_str_hash(void) +{ + GVariant *value1, *value2; + GVariantBuilder builder; + + g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); + g_variant_builder_add(&builder, "{ss}", "key1", "hello"); + g_variant_builder_add(&builder, "{ss}", "key2", "world"); + g_variant_builder_add(&builder, "{ss}", "key3", "!"); + value1 = g_variant_builder_end(&builder); + + g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); + g_variant_builder_add(&builder, "{ss}", "key3", "!"); + g_variant_builder_add(&builder, "{ss}", "key2", "world"); + g_variant_builder_add(&builder, "{ss}", "key1", "hello"); + value2 = g_variant_builder_end(&builder); + + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value1); + g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}")); + g_variant_builder_add(&builder, "{sv}", "key1", g_variant_new_string("hello")); + g_variant_builder_add(&builder, "{sv}", "key2", g_variant_new_string("world")); + g_variant_builder_add(&builder, "{sv}", "key3", g_variant_new_string("!")); + value1 = g_variant_builder_end(&builder); + + g_variant_unref(value2); + g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}")); + g_variant_builder_add(&builder, "{sv}", "key1", g_variant_new_string("hello")); + g_variant_builder_add(&builder, "{sv}", "key2", g_variant_new_string("world")); + g_variant_builder_add(&builder, "{sv}", "key3", g_variant_new_string("!")); + value2 = g_variant_builder_end(&builder); + + g_assert(nm_g_variant_cmp(value1, value2) == 0); + + g_variant_unref(value2); + g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); + g_variant_builder_add(&builder, "{ss}", "key1", "hello"); + g_variant_builder_add(&builder, "{ss}", "key3", "!"); + value2 = g_variant_builder_end(&builder); + + g_assert(nm_g_variant_cmp(value1, value2) != 0); + g_assert(nm_g_variant_cmp(value2, value1) != 0); + + g_variant_unref(value2); + g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}")); + g_variant_builder_add(&builder, "{ss}", "key1", "hello"); + g_variant_builder_add(&builder, "{ss}", "key2", "moon"); + g_variant_builder_add(&builder, "{ss}", "key3", "!"); + value2 = g_variant_builder_end(&builder); + + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value1); + g_variant_unref(value2); +} + +static void +compare_ip6_addresses(void) +{ + GVariant *value1, *value2; + struct in6_addr addr1; + struct in6_addr addr2; + struct in6_addr addr3; + guint32 prefix1 = 64; + guint32 prefix2 = 64; + guint32 prefix3 = 0; + + inet_pton(AF_INET6, "1:2:3:4:5:6:7:8", &addr1); + inet_pton(AF_INET6, "ffff:2:3:4:5:6:7:8", &addr2); + inet_pton(AF_INET6, "::", &addr3); + + value1 = g_variant_new( + "(@ayu@ay)", + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr1.s6_addr, 16, 1), + prefix1, + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); + + value2 = g_variant_new( + "(@ayu@ay)", + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr1.s6_addr, 16, 1), + prefix1, + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); + + g_assert(nm_g_variant_cmp(value1, value2) == 0); + + g_variant_unref(value2); + value2 = g_variant_new( + "(@ayu@ay)", + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr2.s6_addr, 16, 1), + prefix2, + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); + + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value2); + value2 = g_variant_new( + "(@ayu@ay)", + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1), + prefix3, + g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1)); + + g_assert(nm_g_variant_cmp(value1, value2) != 0); + + g_variant_unref(value1); + g_variant_unref(value2); +} + +/*****************************************************************************/ + NMTST_DEFINE(); int @@ -2581,6 +2856,7 @@ main(int argc, char **argv) nmtst_init(&argc, &argv, TRUE); g_test_add_func("/general/test_nm_static_assert", test_nm_static_assert); + g_test_add_func("/general/test_max", test_max); g_test_add_func("/general/test_gpid", test_gpid); g_test_add_func("/general/test_monotonic_timestamp", test_monotonic_timestamp); g_test_add_func("/general/test_timespect_to", test_timespect_to); @@ -2623,6 +2899,14 @@ main(int argc, char **argv) g_test_add_func("/general/test_garray", test_garray); g_test_add_func("/general/test_nm_prioq", test_nm_prioq); g_test_add_func("/general/test_nm_random", test_nm_random); + g_test_add_func("/general/test_uid_to_name", test_uid_to_name); + + g_test_add_func("/libnm/compare/ints", compare_ints); + g_test_add_func("/libnm/compare/strings", compare_strings); + g_test_add_func("/libnm/compare/strv", compare_strv); + g_test_add_func("/libnm/compare/arrays", compare_arrays); + g_test_add_func("/libnm/compare/str_hash", compare_str_hash); + g_test_add_func("/libnm/compare/ip6_addresses", compare_ip6_addresses); return g_test_run(); } diff --git a/src/libnm-lldp/nm-lldp-rx.c b/src/libnm-lldp/nm-lldp-rx.c index 6d0f4a18..345c6d56 100644 --- a/src/libnm-lldp/nm-lldp-rx.c +++ b/src/libnm-lldp/nm-lldp-rx.c @@ -365,7 +365,7 @@ lldp_rx_start_timer(NMLldpRX *lldp_rx, NMLldpNeighbor *neighbor) timeout_msec = (n->until_usec / 1000) - nm_utils_get_monotonic_timestamp_msec(); lldp_rx->timer_event_source = - nm_g_source_attach(nm_g_timeout_source_new(NM_CLAMP(timeout_msec, 0, G_MAXUINT), + nm_g_source_attach(nm_g_timeout_source_new(NM_CLAMP(timeout_msec, 0, (gint64) G_MAXUINT), G_PRIORITY_DEFAULT, on_timer_event, lldp_rx, diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index 99eab9c7..22cd5784 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -163,7 +163,7 @@ typedef enum _nm_packed { G_STATIC_ASSERT(RTA_MAX == (__RTA_MAX - 1)); #define RTA_PREF 20 #undef RTA_MAX -#define RTA_MAX (MAX((__RTA_MAX - 1), RTA_PREF)) +#define RTA_MAX (NM_MAX_CONST((__RTA_MAX - 1), RTA_PREF)) #ifndef MACVLAN_FLAG_NOPROMISC #define MACVLAN_FLAG_NOPROMISC 1 @@ -229,6 +229,18 @@ G_STATIC_ASSERT(RTA_MAX == (__RTA_MAX - 1)); /*****************************************************************************/ +#define IFLA_HSR_UNSPEC 0 +#define IFLA_HSR_PORT1 1 +#define IFLA_HSR_PORT2 2 +#define IFLA_HSR_MULTICAST_SPEC 3 +#define IFLA_HSR_SUPERVISION_ADDR 4 +#define IFLA_HSR_SEQ_NR 5 +#define IFLA_HSR_VERSION 6 +#define IFLA_HSR_PROTOCOL 7 +#define __IFLA_HSR_MAX 8 + +/*****************************************************************************/ + #define IFLA_VTI_UNSPEC 0 #define IFLA_VTI_LINK 1 #define IFLA_VTI_IKEY 2 @@ -847,6 +859,7 @@ static const LinkDesc link_descs[] = { [NM_LINK_TYPE_BRIDGE] = {"bridge", "bridge", "bridge"}, [NM_LINK_TYPE_BOND] = {"bond", "bond", "bond"}, + [NM_LINK_TYPE_HSR] = {"hsr", "hsr", "hsr"}, [NM_LINK_TYPE_TEAM] = {"team", "team", NULL}, }; @@ -869,6 +882,7 @@ _link_type_from_rtnl_type(const char *name) NM_LINK_TYPE_DUMMY, /* "dummy" */ NM_LINK_TYPE_GRE, /* "gre" */ NM_LINK_TYPE_GRETAP, /* "gretap" */ + NM_LINK_TYPE_HSR, /* "hsr" */ NM_LINK_TYPE_IFB, /* "ifb" */ NM_LINK_TYPE_IP6GRE, /* "ip6gre" */ NM_LINK_TYPE_IP6GRETAP, /* "ip6gretap" */ @@ -943,6 +957,7 @@ _link_type_from_devtype(const char *name) NM_LINK_TYPE_BNEP, /* "bluetooth" */ NM_LINK_TYPE_BOND, /* "bond" */ NM_LINK_TYPE_BRIDGE, /* "bridge" */ + NM_LINK_TYPE_HSR, /* "hsr" */ NM_LINK_TYPE_PPP, /* "ppp" */ NM_LINK_TYPE_VLAN, /* "vlan" */ NM_LINK_TYPE_VRF, /* "vrf" */ @@ -1096,7 +1111,7 @@ _addrtime_extend_lifetime(guint32 lifetime, guint32 seconds) return lifetime; v = (guint64) lifetime + (guint64) seconds; - return MIN(v, NM_PLATFORM_LIFETIME_PERMANENT - 1); + return NM_MIN(v, NM_PLATFORM_LIFETIME_PERMANENT - 1); } /* The rtnl_addr object contains relative lifetimes @valid and @preferred @@ -1805,6 +1820,51 @@ _parse_lnk_gre(const char *kind, struct nlattr *info_data) /*****************************************************************************/ +static NMPObject * +_parse_lnk_hsr(const char *kind, struct nlattr *info_data) +{ + static const struct nla_policy policy[] = { + [IFLA_HSR_PORT1] = {.type = NLA_U32}, + [IFLA_HSR_PORT2] = {.type = NLA_U32}, + [IFLA_HSR_MULTICAST_SPEC] = {.type = NLA_U8}, + [IFLA_HSR_SUPERVISION_ADDR] = {.minlen = sizeof(NMEtherAddr)}, + [IFLA_HSR_PROTOCOL] = {.type = NLA_U8}, + }; + NMPlatformLnkHsr *props; + struct nlattr *tb[G_N_ELEMENTS(policy)]; + NMPObject *obj; + guint32 v_u32; + + if (!info_data || !kind) + return NULL; + + if (nla_parse_nested_arr(tb, info_data, policy) < 0) + return NULL; + + obj = nmp_object_new(NMP_OBJECT_TYPE_LNK_HSR, NULL); + props = &obj->lnk_hsr; + if (tb[IFLA_HSR_PORT1]) { + v_u32 = nla_get_u32(tb[IFLA_HSR_PORT1]); + if (v_u32 <= (unsigned) G_MAXINT) + props->port1 = v_u32; + } + if (tb[IFLA_HSR_PORT2]) { + v_u32 = nla_get_u32(tb[IFLA_HSR_PORT2]); + if (v_u32 <= (unsigned) G_MAXINT) + props->port2 = v_u32; + } + if (tb[IFLA_HSR_MULTICAST_SPEC]) + props->multicast_spec = nla_get_u8(tb[IFLA_HSR_MULTICAST_SPEC]); + if (tb[IFLA_HSR_SUPERVISION_ADDR]) + nla_memcpy(&props->supervision_address, tb[IFLA_HSR_SUPERVISION_ADDR], sizeof(NMEtherAddr)); + if (tb[IFLA_HSR_PROTOCOL]) + props->prp = nla_get_u8(tb[IFLA_HSR_PROTOCOL]); + + return obj; +} + +/*****************************************************************************/ + /* IFLA_IPOIB_* were introduced in the 3.7 kernel, but the kernel headers * we're building against might not have those properties even though the * running kernel might. @@ -3408,6 +3468,8 @@ _new_from_nl_link(NMPlatform *platform, if (nm_streq(s, "bond")) obj->link.port_kind = NM_PORT_KIND_BOND; + else if (nm_streq(s, "bridge")) + obj->link.port_kind = NM_PORT_KIND_BRIDGE; } if (li[IFLA_INFO_SLAVE_DATA]) { @@ -3415,7 +3477,13 @@ _new_from_nl_link(NMPlatform *platform, [IFLA_BOND_SLAVE_QUEUE_ID] = {.type = NLA_U16}, [IFLA_BOND_SLAVE_PRIO] = {.type = NLA_S32}, }; - struct nlattr *bp[G_N_ELEMENTS(policy_bond_port)]; + struct nlattr *bp[G_N_ELEMENTS(policy_bond_port)]; + static const struct nla_policy policy_bridge_port[] = { + [IFLA_BRPORT_COST] = {.type = NLA_U32}, + [IFLA_BRPORT_PRIORITY] = {.type = NLA_U16}, + [IFLA_BRPORT_MODE] = {.type = NLA_U8}, + }; + struct nlattr *brp[G_N_ELEMENTS(policy_bridge_port)]; switch (obj->link.port_kind) { case NM_PORT_KIND_BOND: @@ -3441,6 +3509,19 @@ _new_from_nl_link(NMPlatform *platform, } } break; + case NM_PORT_KIND_BRIDGE: + if (nla_parse_nested_arr(brp, li[IFLA_INFO_SLAVE_DATA], policy_bridge_port) < 0) + return NULL; + + if (brp[IFLA_BRPORT_COST]) + obj->link.port_data.bridge.path_cost = nla_get_u32(brp[IFLA_BRPORT_COST]); + + if (brp[IFLA_BRPORT_PRIORITY]) + obj->link.port_data.bridge.priority = nla_get_u16(brp[IFLA_BRPORT_PRIORITY]); + + if (brp[IFLA_BRPORT_MODE]) + obj->link.port_data.bridge.hairpin = nla_get_u8(brp[IFLA_BRPORT_MODE]); + break; case NM_PORT_KIND_NONE: break; } @@ -3547,6 +3628,9 @@ _new_from_nl_link(NMPlatform *platform, case NM_LINK_TYPE_GRETAP: lnk_data = _parse_lnk_gre(nl_info_kind, nl_info_data); break; + case NM_LINK_TYPE_HSR: + lnk_data = _parse_lnk_hsr(nl_info_kind, nl_info_data); + break; case NM_LINK_TYPE_INFINIBAND: lnk_data = _parse_lnk_infiniband(nl_info_kind, nl_info_data); break; @@ -3922,7 +4006,7 @@ _new_from_nl_route(const struct nlmsghdr *nlh, gboolean id_only, ParseNlmsgIter * hops in this list). */ nm_assert(v4_n_nexthops > 0u); if (v4_n_nexthops - 1u >= v4_nh_extra_alloc) { - v4_nh_extra_alloc = NM_MAX(4, v4_nh_extra_alloc * 2u); + v4_nh_extra_alloc = NM_MAX(4u, v4_nh_extra_alloc * 2u); if (!v4_nh_extra_nexthops_heap) { v4_nh_extra_nexthops_heap = g_new(NMPlatformIP4RtNextHop, v4_nh_extra_alloc); @@ -4977,6 +5061,24 @@ _nl_msg_new_link_set_linkinfo(struct nl_msg *msg, NMLinkType link_type, gconstpo NLA_PUT_U16(msg, IFLA_GRE_OFLAGS, htons(props->output_flags)); break; } + case NM_LINK_TYPE_HSR: + { + const NMPlatformLnkHsr *props = extra_data; + + nm_assert(props); + + if (!(data = nla_nest_start(msg, IFLA_INFO_DATA))) + goto nla_put_failure; + + NLA_PUT_U32(msg, IFLA_HSR_PORT1, props->port1); + NLA_PUT_U32(msg, IFLA_HSR_PORT2, props->port2); + + if (props->multicast_spec) + NLA_PUT_U8(msg, IFLA_HSR_MULTICAST_SPEC, props->multicast_spec); + + NLA_PUT_U8(msg, IFLA_HSR_PROTOCOL, props->prp); + break; + } case NM_LINK_TYPE_SIT: { const NMPlatformLnkSit *props = extra_data; @@ -8533,6 +8635,26 @@ link_change(NMPlatform *platform, nla_nest_end(nlmsg, nl_port_data); nla_nest_end(nlmsg, nl_info); break; + case NM_PORT_KIND_BRIDGE: + + nm_assert(port_data); + + if (!(nl_info = nla_nest_start(nlmsg, IFLA_LINKINFO))) + goto nla_put_failure; + + nm_assert(nm_streq0("bridge", nm_link_type_to_rtnl_type_string(NM_LINK_TYPE_BRIDGE))); + NLA_PUT_STRING(nlmsg, IFLA_INFO_SLAVE_KIND, "bridge"); + + if (!(nl_port_data = nla_nest_start(nlmsg, IFLA_INFO_SLAVE_DATA))) + goto nla_put_failure; + + NLA_PUT_U32(nlmsg, IFLA_BRPORT_COST, port_data->bridge.path_cost); + NLA_PUT_U16(nlmsg, IFLA_BRPORT_PRIORITY, port_data->bridge.priority); + NLA_PUT_U8(nlmsg, IFLA_BRPORT_MODE, port_data->bridge.hairpin); + + nla_nest_end(nlmsg, nl_port_data); + nla_nest_end(nlmsg, nl_info); + break; case NM_PORT_KIND_NONE: break; } @@ -9551,22 +9673,6 @@ wifi_set_wake_on_wlan(NMPlatform *platform, int ifindex, _NMSettingWirelessWakeO return nm_wifi_utils_set_wake_on_wlan(wifi_data, wowl); } -static gboolean -wifi_get_csme_conn_info(NMPlatform *platform, int ifindex, NMPlatformCsmeConnInfo *out_conn_info) -{ - WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); - - return nm_wifi_utils_get_csme_conn_info(wifi_data, out_conn_info); -} - -static gboolean -wifi_get_device_from_csme(NMPlatform *platform, int ifindex) -{ - WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); - - return nm_wifi_utils_get_device_from_csme(wifi_data); -} - /*****************************************************************************/ static gboolean @@ -11446,8 +11552,6 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass) platform_class->wifi_indicate_addressing_running = wifi_indicate_addressing_running; platform_class->wifi_get_wake_on_wlan = wifi_get_wake_on_wlan; platform_class->wifi_set_wake_on_wlan = wifi_set_wake_on_wlan; - platform_class->wifi_get_csme_conn_info = wifi_get_csme_conn_info; - platform_class->wifi_get_device_from_csme = wifi_get_device_from_csme; platform_class->mesh_get_channel = mesh_get_channel; platform_class->mesh_set_channel = mesh_set_channel; diff --git a/src/libnm-platform/nm-platform-utils.c b/src/libnm-platform/nm-platform-utils.c index 08d82fe8..6074c342 100644 --- a/src/libnm-platform/nm-platform-utils.c +++ b/src/libnm-platform/nm-platform-utils.c @@ -554,7 +554,7 @@ _ASSERT_ethtool_feature_infos(void) for (k = 0; k < inf->n_kernel_names; k++) { const char *name = inf->kernel_names[k]; - g_assert(nm_strv_find_first(inf->kernel_names, k, name) < 0); + g_assert(!nm_strv_contains(inf->kernel_names, k, name)); /* these offload features are only informational and cannot be set from user-space * (NETIF_F_NEVER_CHANGE). We should not track them in _ethtool_feature_infos. */ @@ -1068,6 +1068,69 @@ nmp_utils_ethtool_set_ring(int ifindex, const NMEthtoolRingState *ring) } gboolean +nmp_utils_ethtool_get_channels(int ifindex, NMEthtoolChannelsState *channels) +{ + struct ethtool_channels eth_data; + + g_return_val_if_fail(ifindex > 0, FALSE); + g_return_val_if_fail(channels, FALSE); + + eth_data.cmd = ETHTOOL_GCHANNELS; + + if (_ethtool_call_once(ifindex, ð_data, sizeof(eth_data)) < 0) { + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: failure getting channels settings", + ifindex, + "get-channels"); + return FALSE; + } + + *channels = (NMEthtoolChannelsState){ + .rx = eth_data.rx_count, + .tx = eth_data.tx_count, + .other = eth_data.other_count, + .combined = eth_data.combined_count, + }; + + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: retrieved kernel channels settings", + ifindex, + "get-channels"); + return TRUE; +} + +gboolean +nmp_utils_ethtool_set_channels(int ifindex, const NMEthtoolChannelsState *channels) +{ + struct ethtool_channels eth_data; + + g_return_val_if_fail(ifindex > 0, FALSE); + g_return_val_if_fail(channels, FALSE); + + eth_data = (struct ethtool_channels){ + .cmd = ETHTOOL_SCHANNELS, + .rx_count = channels->rx, + .tx_count = channels->tx, + .other_count = channels->other, + .combined_count = channels->combined, + }; + + if (_ethtool_call_once(ifindex, ð_data, sizeof(eth_data)) < 0) { + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: failure setting channels settings", + ifindex, + "set-channels"); + return FALSE; + } + + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: set kernel channels settings", + ifindex, + "set-channels"); + return TRUE; +} + +gboolean nmp_utils_ethtool_get_pause(int ifindex, NMEthtoolPauseState *pause) { struct ethtool_pauseparam eth_data; @@ -1099,6 +1162,35 @@ nmp_utils_ethtool_get_pause(int ifindex, NMEthtoolPauseState *pause) } gboolean +nmp_utils_ethtool_get_eee(int ifindex, NMEthtoolEEEState *eee) +{ + struct ethtool_eee eth_data; + nm_auto_socket_handle SocketHandle shandle = SOCKET_HANDLE_INIT(ifindex); + + g_return_val_if_fail(ifindex > 0, FALSE); + g_return_val_if_fail(eee, FALSE); + + eth_data.cmd = ETHTOOL_GEEE; + if (_ethtool_call_handle(&shandle, ð_data, sizeof(struct ethtool_eee)) != 0) { + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: failure getting eee settings", + ifindex, + "get-eee"); + return FALSE; + } + + *eee = (NMEthtoolEEEState){ + .enabled = eth_data.eee_enabled == 1, + }; + + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: retrieved kernel eee settings", + ifindex, + "get-eee"); + return TRUE; +} + +gboolean nmp_utils_ethtool_set_pause(int ifindex, const NMEthtoolPauseState *pause) { struct ethtool_pauseparam eth_data; @@ -1125,6 +1217,36 @@ nmp_utils_ethtool_set_pause(int ifindex, const NMEthtoolPauseState *pause) return TRUE; } +gboolean +nmp_utils_ethtool_set_eee(int ifindex, const NMEthtoolEEEState *eee) +{ + struct ethtool_eee eth_data; + nm_auto_socket_handle SocketHandle shandle = SOCKET_HANDLE_INIT(ifindex); + + g_return_val_if_fail(ifindex > 0, FALSE); + g_return_val_if_fail(eee, FALSE); + + eth_data.cmd = ETHTOOL_GEEE; + if (_ethtool_call_handle(&shandle, ð_data, sizeof(struct ethtool_eee)) != 0) { + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: failure getting eee settings", + ifindex, + "get-eee"); + return FALSE; + } + + eth_data.cmd = ETHTOOL_SEEE, eth_data.eee_enabled = eee->enabled ? 1 : 0; + + if (_ethtool_call_handle(&shandle, ð_data, sizeof(struct ethtool_eee)) != 0) { + nm_log_trace(LOGD_PLATFORM, + "ethtool[%d]: %s: failure setting eee settings", + ifindex, + "set-eee"); + return FALSE; + } + nm_log_trace(LOGD_PLATFORM, "ethtool[%d]: %s: set kernel eee settings", ifindex, "set-eee"); + return TRUE; +} /*****************************************************************************/ gboolean @@ -2055,7 +2177,7 @@ nmp_utils_new_vlan_name(const char *parent_iface, guint32 vlan_id) ifname = g_new(char, IFNAMSIZ); parent_len = strlen(parent_iface); - parent_len = MIN(parent_len, IFNAMSIZ - 1 - id_len); + parent_len = NM_MIN(parent_len, IFNAMSIZ - 1 - id_len); memcpy(ifname, parent_iface, parent_len); g_snprintf(&ifname[parent_len], IFNAMSIZ - parent_len, ".%u", vlan_id); @@ -2134,7 +2256,7 @@ nmp_utils_lifetime_get(guint32 timestamp, t_preferred = nmp_utils_lifetime_rebase_relative_time_on_now(timestamp, preferred, now); - NM_SET_OUT(out_preferred, MIN(t_preferred, t_lifetime)); + NM_SET_OUT(out_preferred, NM_MIN(t_preferred, t_lifetime)); /* Assert that non-permanent addresses have a (positive) @timestamp. nmp_utils_lifetime_rebase_relative_time_on_now() * treats addresses with timestamp 0 as *now*. Addresses passed to _address_get_lifetime() always diff --git a/src/libnm-platform/nm-platform-utils.h b/src/libnm-platform/nm-platform-utils.h index 14b09a79..18fc6155 100644 --- a/src/libnm-platform/nm-platform-utils.h +++ b/src/libnm-platform/nm-platform-utils.h @@ -54,10 +54,18 @@ gboolean nmp_utils_ethtool_get_ring(int ifindex, NMEthtoolRingState *ring); gboolean nmp_utils_ethtool_set_ring(int ifindex, const NMEthtoolRingState *ring); +gboolean nmp_utils_ethtool_get_channels(int ifindex, NMEthtoolChannelsState *channels); + +gboolean nmp_utils_ethtool_set_channels(int ifindex, const NMEthtoolChannelsState *channels); + gboolean nmp_utils_ethtool_get_pause(int ifindex, NMEthtoolPauseState *pause); gboolean nmp_utils_ethtool_set_pause(int ifindex, const NMEthtoolPauseState *pause); +gboolean nmp_utils_ethtool_get_eee(int ifindex, NMEthtoolEEEState *eee); + +gboolean nmp_utils_ethtool_set_eee(int ifindex, const NMEthtoolEEEState *eee); + /*****************************************************************************/ gboolean nmp_utils_mii_supports_carrier_detect(int ifindex); diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index 041354cf..531c98e8 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -88,6 +88,14 @@ _nmp_link_port_data_to_string(NMPortKind port_kind, port_data->bond.prio) : ""); goto out; + case NM_PORT_KIND_BRIDGE: + nm_strbuf_append(&sbuf, + &sbuf_len, + "port bridge path_cost %u priority %u hairpin %s", + port_data->bridge.path_cost, + port_data->bridge.priority, + port_data->bridge.hairpin ? "true" : "false"); + goto out; } nm_strbuf_append(&sbuf, &sbuf_len, "invalid-port-type %d", (int) port_kind); @@ -719,7 +727,7 @@ nm_platform_sysctl_ip_neigh_set_ipv6_reachable_time(NMPlatform *self, /* RFC 4861 says the value can't be greater than one hour. * Also use a reasonable lower threshold. */ - clamped = NM_CLAMP(value_ms, 100, 3600000); + clamped = NM_CLAMP(value_ms, 100u, 3600000u); nm_sprintf_buf(path, "/proc/sys/net/ipv6/neigh/%s/base_reachable_time_ms", iface); nm_sprintf_buf(str, "%u", clamped); if (!nm_platform_sysctl_set(self, NMP_SYSCTL_PATHID_ABSOLUTE(path), str)) @@ -746,7 +754,7 @@ nm_platform_sysctl_ip_neigh_set_ipv6_retrans_time(NMPlatform *self, return TRUE; nm_sprintf_buf(path, "/proc/sys/net/ipv6/neigh/%s/retrans_time_ms", iface); - nm_sprintf_buf(str, "%u", NM_CLAMP(value_ms, 10, 3600000)); + nm_sprintf_buf(str, "%u", NM_CLAMP(value_ms, 10u, 3600000u)); return nm_platform_sysctl_set(self, NMP_SYSCTL_PATHID_ABSOLUTE(path), str); } @@ -983,7 +991,7 @@ nm_platform_sysctl_ip_conf_get_rp_filter_ipv4(NMPlatform *self, /*****************************************************************************/ static int -_link_get_all_presort(gconstpointer p_a, gconstpointer p_b, gpointer sort_by_name) +_link_get_all_presort(gconstpointer p_a, gconstpointer p_b) { const NMPlatformLink *a = NMP_OBJECT_CAST_LINK(*((const NMPObject **) p_a)); const NMPlatformLink *b = NMP_OBJECT_CAST_LINK(*((const NMPObject **) p_b)); @@ -994,28 +1002,30 @@ _link_get_all_presort(gconstpointer p_a, gconstpointer p_b, gpointer sort_by_nam if (b->ifindex == NM_LOOPBACK_IFINDEX) return 1; - if (GPOINTER_TO_INT(sort_by_name)) { - /* Initialized links first */ - if (a->initialized > b->initialized) - return -1; - if (a->initialized < b->initialized) - return 1; + /* Initialized links first */ + if (a->initialized > b->initialized) + return -1; + if (a->initialized < b->initialized) + return 1; - return strcmp(a->name, b->name); - } else - return a->ifindex - b->ifindex; + NM_CMP_DIRECT_STRCMP(a->name, b->name); + /* Fallback to ifindex */ + NM_CMP_DIRECT(a->ifindex, b->ifindex); + /* Fallback to pointer comparison */ + NM_CMP_DIRECT_PTR(a, b); + + return 0; } /** * nm_platform_link_get_all: * @self: platform instance - * @sort_by_name: whether to sort by name or ifindex. * * Retrieve a snapshot of configuration for all links at once. The result is * owned by the caller and should be freed with g_ptr_array_unref(). */ GPtrArray * -nm_platform_link_get_all(NMPlatform *self, gboolean sort_by_name) +nm_platform_link_get_all(NMPlatform *self) { gs_unref_ptrarray GPtrArray *links = NULL; GPtrArray *result; @@ -1041,9 +1051,9 @@ nm_platform_link_get_all(NMPlatform *self, gboolean sort_by_name) if (links->len == 0) return NULL; - /* first sort the links by their ifindex or name. Below we will sort + /* first sort the links by their name. Below we will sort * further by moving children/slaves to the end. */ - g_ptr_array_sort_with_data(links, _link_get_all_presort, GINT_TO_POINTER(sort_by_name)); + g_ptr_array_sort(links, _link_get_all_presort); unseen = g_hash_table_new(nm_direct_hash, NULL); for (i = 0; i < links->len; i++) { @@ -1383,6 +1393,12 @@ nm_platform_link_add(NMPlatform *self, buf_p, buf_len); break; + case NM_LINK_TYPE_HSR: + nm_strbuf_append_str(&buf_p, &buf_len, ", "); + nm_platform_lnk_hsr_to_string((const NMPlatformLnkHsr *) extra_data, + buf_p, + buf_len); + break; case NM_LINK_TYPE_IP6TNL: case NM_LINK_TYPE_IP6GRE: case NM_LINK_TYPE_IP6GRETAP: @@ -1628,7 +1644,7 @@ nm_platform_link_get_udev_property(NMPlatform *self, const char *name, const char **out_value) { - struct udev_device *udevice = NULL; + struct udev_device *udevice; const char *uproperty; udevice = nm_platform_link_get_udev_device(self, ifindex); @@ -1647,22 +1663,34 @@ nm_platform_link_get_udev_property(NMPlatform *self, * nm_platform_link_get_unmanaged: * @self: platform instance * @ifindex: interface index - * @unmanaged: management status (in case %TRUE is returned) * - * Returns: %TRUE if platform overrides NM default-unmanaged status, - * %FALSE otherwise (with @unmanaged unmodified). + * Returns: %NM_OPTION_BOOL_DEFAULT if the udev property NM_UNMANAGED + * is not set. Otherwise, return NM_UNMANAGED as boolean. */ -gboolean -nm_platform_link_get_unmanaged(NMPlatform *self, int ifindex, gboolean *unmanaged) +NMOptionBool +nm_platform_link_get_unmanaged(NMPlatform *self, int ifindex) { - const char *value; + struct udev_device *udevice; + const char *val; - if (nm_platform_link_get_udev_property(self, ifindex, "NM_UNMANAGED", &value)) { - NM_SET_OUT(unmanaged, _nm_utils_ascii_str_to_bool(value, FALSE)); - return TRUE; + udevice = nm_platform_link_get_udev_device(self, ifindex); + if (!udevice) + return NM_OPTION_BOOL_DEFAULT; + + val = udev_device_get_property_value(udevice, "NM_UNMANAGED"); + if (val) + return _nm_utils_ascii_str_to_bool(val, FALSE); + + val = udev_device_get_property_value(udevice, "ID_NET_MANAGED_BY"); + if (val) { + if (!nm_streq(val, "org.freedesktop.NetworkManager")) { + /* There is another manager. UNMANAGED. */ + return TRUE; + } + return FALSE; } - return FALSE; + return NM_OPTION_BOOL_DEFAULT; } /** @@ -2173,9 +2201,12 @@ nm_platform_link_change(NMPlatform *self, int ifindex, NMPlatformLinkProps *props, NMPlatformLinkBondPort *bond_port, + NMPlatformLinkBridgePort *bridge_port, NMPlatformLinkChangeFlags flags) { - char sbuf_prio[100]; + NMPortKind port_kind = NM_PORT_KIND_NONE; + NMPlatformLinkPortData port_data; + char sbuf_prio[100]; _CHECK_SELF(self, klass, FALSE); @@ -2187,6 +2218,7 @@ nm_platform_link_change(NMPlatform *self, | NM_PLATFORM_LINK_CHANGE_GSO_MAX_SEGMENTS | NM_PLATFORM_LINK_CHANGE_GRO_MAX_SIZE) || props); + nm_assert((!!bond_port + !!bridge_port) <= 1); if (_LOGD_ENABLED()) { nm_auto_free_gstring GString *str = g_string_new(""); @@ -2210,6 +2242,12 @@ nm_platform_link_change(NMPlatform *self, !bond_port->prio_has ? "?" : "", bond_port->prio) : ""); + } else if (bridge_port) { + g_string_append_printf(str, + "bridge-port path_cost %u priority %u hairpin %s", + bridge_port->path_cost, + bridge_port->priority, + bridge_port->hairpin ? "true" : "false"); } if (str->len > 0 && str->str[str->len - 1] == ' ') @@ -2218,12 +2256,15 @@ nm_platform_link_change(NMPlatform *self, _LOG3D("link: change: %s", str->str); } - return klass->link_change(self, - ifindex, - props, - bond_port ? NM_PORT_KIND_BOND : NM_PORT_KIND_NONE, - (const NMPlatformLinkPortData *) bond_port, - flags); + if (bond_port) { + port_data.bond = *bond_port; + port_kind = NM_PORT_KIND_BOND; + } else if (bridge_port) { + port_data.bridge = *bridge_port; + port_kind = NM_PORT_KIND_BRIDGE; + } + + return klass->link_change(self, ifindex, props, port_kind, &port_data, flags); } /** @@ -2482,6 +2523,12 @@ nm_platform_link_get_lnk_gretap(NMPlatform *self, int ifindex, const NMPlatformL return _link_get_lnk(self, ifindex, NM_LINK_TYPE_GRETAP, out_link); } +const NMPlatformLnkHsr * +nm_platform_link_get_lnk_hsr(NMPlatform *self, int ifindex, const NMPlatformLink **out_link) +{ + return _link_get_lnk(self, ifindex, NM_LINK_TYPE_HSR, out_link); +} + const NMPlatformLnkInfiniband * nm_platform_link_get_lnk_infiniband(NMPlatform *self, int ifindex, const NMPlatformLink **out_link) { @@ -3353,28 +3400,6 @@ nm_platform_wifi_set_wake_on_wlan(NMPlatform *self, int ifindex, _NMSettingWirel return klass->wifi_set_wake_on_wlan(self, ifindex, wowl); } -gboolean -nm_platform_wifi_get_csme_conn_info(NMPlatform *self, - int ifindex, - NMPlatformCsmeConnInfo *out_conn_info) -{ - _CHECK_SELF(self, klass, FALSE); - - g_return_val_if_fail(ifindex > 0, FALSE); - - return klass->wifi_get_csme_conn_info(self, ifindex, out_conn_info); -} - -gboolean -nm_platform_wifi_get_device_from_csme(NMPlatform *self, int ifindex) -{ - _CHECK_SELF(self, klass, FALSE); - - g_return_val_if_fail(ifindex > 0, FALSE); - - return klass->wifi_get_device_from_csme(self, ifindex); -} - guint32 nm_platform_mesh_get_channel(NMPlatform *self, int ifindex) { @@ -3582,6 +3607,31 @@ nm_platform_ethtool_set_ring(NMPlatform *self, int ifindex, const NMEthtoolRingS } gboolean +nm_platform_ethtool_get_link_channels(NMPlatform *self, + int ifindex, + NMEthtoolChannelsState *channels) +{ + _CHECK_SELF_NETNS(self, klass, netns, FALSE); + + g_return_val_if_fail(ifindex > 0, FALSE); + g_return_val_if_fail(channels, FALSE); + + return nmp_utils_ethtool_get_channels(ifindex, channels); +} + +gboolean +nm_platform_ethtool_set_channels(NMPlatform *self, + int ifindex, + const NMEthtoolChannelsState *channels) +{ + _CHECK_SELF_NETNS(self, klass, netns, FALSE); + + g_return_val_if_fail(ifindex > 0, FALSE); + + return nmp_utils_ethtool_set_channels(ifindex, channels); +} + +gboolean nm_platform_ethtool_get_link_pause(NMPlatform *self, int ifindex, NMEthtoolPauseState *pause) { _CHECK_SELF_NETNS(self, klass, netns, FALSE); @@ -3593,6 +3643,17 @@ nm_platform_ethtool_get_link_pause(NMPlatform *self, int ifindex, NMEthtoolPause } gboolean +nm_platform_ethtool_get_link_eee(NMPlatform *self, int ifindex, NMEthtoolEEEState *eee) +{ + _CHECK_SELF_NETNS(self, klass, netns, FALSE); + + g_return_val_if_fail(ifindex > 0, FALSE); + g_return_val_if_fail(eee, FALSE); + + return nmp_utils_ethtool_get_eee(ifindex, eee); +} + +gboolean nm_platform_ethtool_set_pause(NMPlatform *self, int ifindex, const NMEthtoolPauseState *pause) { _CHECK_SELF_NETNS(self, klass, netns, FALSE); @@ -3602,6 +3663,15 @@ nm_platform_ethtool_set_pause(NMPlatform *self, int ifindex, const NMEthtoolPaus return nmp_utils_ethtool_set_pause(ifindex, pause); } +gboolean +nm_platform_ethtool_set_eee(NMPlatform *self, int ifindex, const NMEthtoolEEEState *eee) +{ + _CHECK_SELF_NETNS(self, klass, netns, FALSE); + + g_return_val_if_fail(ifindex > 0, FALSE); + + return nmp_utils_ethtool_set_eee(ifindex, eee); +} /*****************************************************************************/ const NMDedupMultiHeadEntry * @@ -5218,6 +5288,33 @@ _route_pref_normalize(guint8 pref) : NM_ICMPV6_ROUTER_PREF_MEDIUM; } +static guint16 +_ip4_route_weight_normalize(guint n_nexthops, guint16 weight, gboolean normalize_ecmp_weight) +{ + if (n_nexthops > 1u) { + /* This is a multihop-route. The weight is relevant. + * + * We only normalize a zero to one (because in kernel such weights + * don't exist. */ + return NM_MAX(weight, 1u); + } + if (n_nexthops == 0) { + /* This route has no next-hop (e.g. blackhole type). The weight is + * always irrelevant. Normalize to zero. */ + return 0; + } + + /* We have a IPv4 single-hop route. In kernel, the weight does not exist. + * It's always zero. + * + * For upper layers, we find it useful to track such routes with a positive + * weight. They are candidates to be merged into a multi-hop ECMP route. + * + * Depending on what the caller requests, we normalize it (or leave it + * unchanged). */ + return normalize_ecmp_weight ? 0u : weight; +} + /** * nm_platform_ip_route_normalize: * @addr_family: AF_INET or AF_INET6 @@ -5230,6 +5327,15 @@ _route_pref_normalize(guint8 pref) * Note that this function is related to NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY * in that if two routes compare semantically equal, after normalizing they also shall * compare equal with NM_PLATFORM_IP_ROUTE_CMP_TYPE_FULL. + * + * Note that a positive "weight" of IPv4 single hop routes is not meaningful in + * kernel. While we track such routes at upper layers, they don't exist in + * kernel (well, they exist, with their weight set to zero, which makes them a + * different route according to NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID. It will + * be normalized to zero too, making basically it a different route. + * + * Also, "metric_any" is normalized to FALSE. This also makes it a different route + * according to NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID. */ void nm_platform_ip_route_normalize(int addr_family, NMPlatformIPRoute *route) @@ -5243,6 +5349,33 @@ nm_platform_ip_route_normalize(int addr_family, NMPlatformIPRoute *route) route->rt_source = nmp_utils_ip_config_source_round_trip_rtprot(route->rt_source); + /* For the most part, nm_platform_ip_route_normalize() tries to normalize some fields + * as it happens when they go through kernel. + * + * In most cases, NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID comparison performs the same + * relaxed comparison. For example, normalize() will normalize "scope_inv", and also + * the NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID comparison will do that on-the-fly. Optimally, + * looking into a hash table gives you the same result, whether you normalize the + * needle first (or whether the entries in the hash table are normalized). + * + * Unfortunately, that's not always the case. Examples: + * + * - "metric": we have a "metric_any" field. This is used by higher layers + * to indicate that the metric is dynamically chosen (e.g. by the default + * metric of the default route). As such, as far as NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID + * is concerned, the "metric_any" and "metric" values are treated as distinguishing + * properties. But when we add a route in kernel, "metric_any" no longer exist. + * It becomes a fixed metric. Normalize will fix the metric. + * - "weight": for IPv4 single-hop routes, the weight does not exist in kernel. We however + * use the field to track ECMP information in higher layers. Consequently, + * NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID treats the weight as-is, while normalization + * (and adding it to kernel) will mangle it. + * + * You thus must be careful when you track NMPlatformIP4Route that make use of such + * higher-level features, which cannot be represented in kernel or the NMPlatform + * cache. + */ + switch (addr_family) { case AF_INET: r4 = (NMPlatformIP4Route *) route; @@ -5250,6 +5383,8 @@ nm_platform_ip_route_normalize(int addr_family, NMPlatformIPRoute *route) route->metric_any = FALSE; r4->network = nm_ip4_addr_clear_host_address(r4->network, r4->plen); r4->scope_inv = _ip_route_scope_inv_get_normalized(r4); + r4->n_nexthops = nm_platform_ip4_route_get_n_nexthops(r4); + r4->weight = _ip4_route_weight_normalize(r4->n_nexthops, r4->weight, TRUE); break; case AF_INET6: r6 = (NMPlatformIP6Route *) route; @@ -6307,6 +6442,27 @@ nm_platform_lnk_gre_to_string(const NMPlatformLnkGre *lnk, char *buf, gsize len) } const char * +nm_platform_lnk_hsr_to_string(const NMPlatformLnkHsr *lnk, char *buf, gsize len) +{ + if (!nm_utils_to_string_buffer_init_null(lnk, &buf, &len)) + return buf; + + g_snprintf(buf, + len, + "hsr " + "port1 %d " + "port2 %d " + "supervision_address " NM_ETHER_ADDR_FORMAT_STR " multicast_spec %u " + "prp %s", + lnk->port1, + lnk->port2, + NM_ETHER_ADDR_FORMAT_VAL(&lnk->supervision_address), + lnk->multicast_spec, + lnk->prp ? "on" : "off"); + return buf; +} + +const char * nm_platform_lnk_infiniband_to_string(const NMPlatformLnkInfiniband *lnk, char *buf, gsize len) { char str_p_key[64]; @@ -6983,7 +7139,7 @@ nm_platform_ip4_route_to_string_full(const NMPlatformIP4Route *route, route->plen, n_nexthops <= 1 && s_gateway[0] ? " via " : "", n_nexthops <= 1 ? s_gateway : "", - NM_PRINT_FMT_QUOTED2(n_nexthops <= 1 && route->weight != 0, + NM_PRINT_FMT_QUOTED2(n_nexthops <= 1 && route->weight != 0u, " weight ", nm_sprintf_buf(weight_str, "%u", route->weight), ""), @@ -7901,6 +8057,9 @@ nm_platform_link_hash_update(const NMPlatformLink *obj, NMHashState *h) case NM_PORT_KIND_BOND: nm_platform_link_bond_port_hash_update(&obj->port_data.bond, h); break; + case NM_PORT_KIND_BRIDGE: + nm_platform_link_bridge_port_hash_update(&obj->port_data.bridge, h); + break; } } @@ -7910,6 +8069,12 @@ nm_platform_link_bond_port_hash_update(const NMPlatformLinkBondPort *obj, NMHash nm_hash_update_vals(h, obj->prio, obj->queue_id, NM_HASH_COMBINE_BOOLS(guint8, obj->prio_has)); } +void +nm_platform_link_bridge_port_hash_update(const NMPlatformLinkBridgePort *obj, NMHashState *h) +{ + nm_hash_update_vals(h, obj->path_cost, obj->priority, obj->hairpin); +} + int nm_platform_link_cmp(const NMPlatformLink *a, const NMPlatformLink *b) { @@ -7948,6 +8113,9 @@ nm_platform_link_cmp(const NMPlatformLink *a, const NMPlatformLink *b) case NM_PORT_KIND_BOND: NM_CMP_RETURN(nm_platform_link_bond_port_cmp(&a->port_data.bond, &b->port_data.bond)); break; + case NM_PORT_KIND_BRIDGE: + NM_CMP_RETURN(nm_platform_link_bridge_port_cmp(&a->port_data.bridge, &b->port_data.bridge)); + break; } NM_CMP_FIELD(a, b, rx_packets); NM_CMP_FIELD(a, b, rx_bytes); @@ -8045,6 +8213,18 @@ nm_platform_link_bond_port_cmp(const NMPlatformLinkBondPort *a, const NMPlatform } int +nm_platform_link_bridge_port_cmp(const NMPlatformLinkBridgePort *a, + const NMPlatformLinkBridgePort *b) +{ + NM_CMP_SELF(a, b); + NM_CMP_FIELD(a, b, path_cost); + NM_CMP_FIELD(a, b, priority); + NM_CMP_FIELD(a, b, hairpin); + + return 0; +} + +int nm_platform_lnk_bond_cmp(const NMPlatformLnkBond *a, const NMPlatformLnkBond *b) { NM_CMP_SELF(a, b); @@ -8164,6 +8344,29 @@ nm_platform_lnk_gre_cmp(const NMPlatformLnkGre *a, const NMPlatformLnkGre *b) } void +nm_platform_lnk_hsr_hash_update(const NMPlatformLnkHsr *obj, NMHashState *h) +{ + nm_hash_update_vals(h, + obj->port1, + obj->port2, + obj->supervision_address, + obj->multicast_spec, + NM_HASH_COMBINE_BOOLS(guint8, obj->prp)); +} + +int +nm_platform_lnk_hsr_cmp(const NMPlatformLnkHsr *a, const NMPlatformLnkHsr *b) +{ + NM_CMP_SELF(a, b); + NM_CMP_FIELD(a, b, port1); + NM_CMP_FIELD(a, b, port2); + NM_CMP_FIELD_MEMCMP(a, b, supervision_address); + NM_CMP_FIELD(a, b, multicast_spec); + NM_CMP_FIELD_BOOL(a, b, prp); + return 0; +} + +void nm_platform_lnk_infiniband_hash_update(const NMPlatformLnkInfiniband *obj, NMHashState *h) { nm_hash_update_val(h, obj->p_key); @@ -8516,12 +8719,11 @@ nm_platform_ip4_rt_nexthop_hash_update(const NMPlatformIP4RtNextHop *obj, gboolean for_id, NMHashState *h) { - guint8 w; + guint16 w; nm_assert(obj); w = for_id ? NM_MAX(obj->weight, 1u) : obj->weight; - nm_hash_update_vals(h, obj->ifindex, obj->gateway, w); } @@ -8530,6 +8732,8 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, NMPlatformIPRouteCmpType cmp_type, NMHashState *h) { + guint n_nexthops; + switch (cmp_type) { case NM_PLATFORM_IP_ROUTE_CMP_TYPE_WEAK_ID: case NM_PLATFORM_IP_ROUTE_CMP_TYPE_ECMP_ID: @@ -8567,15 +8771,17 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, obj->lock_mtu, obj->lock_mss)); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) { + n_nexthops = nm_platform_ip4_route_get_n_nexthops(obj); nm_hash_update_vals(h, obj->ifindex, - nm_platform_ip4_route_get_n_nexthops(obj), + n_nexthops, obj->gateway, - (guint8) MAX(obj->weight, 1u)); + _ip4_route_weight_normalize(n_nexthops, obj->weight, FALSE)); } } break; case NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY: + n_nexthops = nm_platform_ip4_route_get_n_nexthops(obj); nm_hash_update_vals( h, obj->type_coerced, @@ -8584,9 +8790,9 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, nm_ip4_addr_clear_host_address(obj->network, obj->plen), obj->plen, obj->metric, - nm_platform_ip4_route_get_n_nexthops(obj), + n_nexthops, obj->gateway, - (guint8) MAX(obj->weight, 1u), + _ip4_route_weight_normalize(n_nexthops, obj->weight, FALSE), nmp_utils_ip_config_source_round_trip_rtprot(obj->rt_source), _ip_route_scope_inv_get_normalized(obj), obj->tos, @@ -8652,14 +8858,9 @@ nm_platform_ip4_rt_nexthop_cmp(const NMPlatformIP4RtNextHop *a, const NMPlatformIP4RtNextHop *b, gboolean for_id) { - guint8 w_a; - guint8 w_b; + guint16 w_a; + guint16 w_b; - /* Note that weight zero is not valid (in kernel). We thus treat - * weight zero usually the same as 1. - * - * Not here for cmp/hash_update functions. These functions check for the exact - * bit-pattern, and not the it means at other places. */ NM_CMP_SELF(a, b); NM_CMP_FIELD(a, b, ifindex); NM_CMP_FIELD(a, b, gateway); @@ -8676,6 +8877,8 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, const NMPlatformIP4Route *b, NMPlatformIPRouteCmpType cmp_type) { + guint n_nexthops; + NM_CMP_SELF(a, b); switch (cmp_type) { case NM_PLATFORM_IP_ROUTE_CMP_TYPE_ECMP_ID: @@ -8684,7 +8887,7 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, NM_CMP_FIELD_UNSAFE(a, b, table_any); NM_CMP_DIRECT(nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(a)), nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(b))); - NM_CMP_DIRECT_IP4_ADDR_SAME_PREFIX(a->network, b->network, MIN(a->plen, b->plen)); + NM_CMP_DIRECT_IP4_ADDR_SAME_PREFIX(a->network, b->network, NM_MIN(a->plen, b->plen)); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); NM_CMP_FIELD(a, b, metric); @@ -8722,9 +8925,10 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) { NM_CMP_FIELD(a, b, ifindex); NM_CMP_FIELD(a, b, gateway); - NM_CMP_DIRECT(NM_MAX(a->weight, 1u), NM_MAX(b->weight, 1u)); - NM_CMP_DIRECT(nm_platform_ip4_route_get_n_nexthops(a), - nm_platform_ip4_route_get_n_nexthops(b)); + n_nexthops = nm_platform_ip4_route_get_n_nexthops(a); + NM_CMP_DIRECT(n_nexthops, nm_platform_ip4_route_get_n_nexthops(b)); + NM_CMP_DIRECT(_ip4_route_weight_normalize(n_nexthops, a->weight, FALSE), + _ip4_route_weight_normalize(n_nexthops, b->weight, FALSE)); } } break; @@ -8739,22 +8943,22 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, NM_CMP_FIELD(a, b, table_coerced); NM_CMP_FIELD(a, b, ifindex); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) - NM_CMP_DIRECT_IP4_ADDR_SAME_PREFIX(a->network, b->network, MIN(a->plen, b->plen)); + NM_CMP_DIRECT_IP4_ADDR_SAME_PREFIX(a->network, b->network, NM_MIN(a->plen, b->plen)); else NM_CMP_FIELD(a, b, network); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); NM_CMP_FIELD(a, b, metric); + NM_CMP_FIELD(a, b, gateway); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) { - NM_CMP_DIRECT(nm_platform_ip4_route_get_n_nexthops(a), - nm_platform_ip4_route_get_n_nexthops(b)); - } else + n_nexthops = nm_platform_ip4_route_get_n_nexthops(a); + NM_CMP_DIRECT(n_nexthops, nm_platform_ip4_route_get_n_nexthops(b)); + NM_CMP_DIRECT(_ip4_route_weight_normalize(n_nexthops, a->weight, FALSE), + _ip4_route_weight_normalize(n_nexthops, b->weight, FALSE)); + } else { NM_CMP_FIELD(a, b, n_nexthops); - NM_CMP_FIELD(a, b, gateway); - if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) - NM_CMP_DIRECT(NM_MAX(a->weight, 1u), NM_MAX(b->weight, 1u)); - else NM_CMP_FIELD(a, b, weight); + } if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) { NM_CMP_DIRECT(nmp_utils_ip_config_source_round_trip_rtprot(a->rt_source), nmp_utils_ip_config_source_round_trip_rtprot(b->rt_source)); @@ -8911,11 +9115,11 @@ nm_platform_ip6_route_cmp(const NMPlatformIP6Route *a, NM_CMP_FIELD_UNSAFE(a, b, table_any); NM_CMP_DIRECT(nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(a)), nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(b))); - NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->network, &b->network, MIN(a->plen, b->plen)); + NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->network, &b->network, NM_MIN(a->plen, b->plen)); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); NM_CMP_FIELD(a, b, metric); - NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->src, &b->src, MIN(a->src_plen, b->src_plen)); + NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->src, &b->src, NM_MIN(a->src_plen, b->src_plen)); NM_CMP_FIELD(a, b, src_plen); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) { NM_CMP_FIELD(a, b, ifindex); @@ -8934,7 +9138,7 @@ nm_platform_ip6_route_cmp(const NMPlatformIP6Route *a, NM_CMP_FIELD(a, b, table_coerced); NM_CMP_FIELD(a, b, ifindex); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) - NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->network, &b->network, MIN(a->plen, b->plen)); + NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->network, &b->network, NM_MIN(a->plen, b->plen)); else NM_CMP_FIELD_IN6ADDR(a, b, network); NM_CMP_FIELD(a, b, plen); @@ -8943,7 +9147,7 @@ nm_platform_ip6_route_cmp(const NMPlatformIP6Route *a, NM_CMP_FIELD_IN6ADDR(a, b, gateway); NM_CMP_FIELD_IN6ADDR(a, b, pref_src); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_SEMANTICALLY) { - NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->src, &b->src, MIN(a->src_plen, b->src_plen)); + NM_CMP_DIRECT_IP6_ADDR_SAME_PREFIX(&a->src, &b->src, NM_MIN(a->src_plen, b->src_plen)); NM_CMP_FIELD(a, b, src_plen); NM_CMP_DIRECT(nmp_utils_ip_config_source_round_trip_rtprot(a->rt_source), nmp_utils_ip_config_source_round_trip_rtprot(b->rt_source)); diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index aeea5c42..996f84b8 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -175,8 +175,15 @@ typedef struct { bool prio_has : 1; } NMPlatformLinkBondPort; +typedef struct { + guint32 path_cost; + guint16 priority; + bool hairpin; +} NMPlatformLinkBridgePort; + typedef union { - NMPlatformLinkBondPort bond; + NMPlatformLinkBondPort bond; + NMPlatformLinkBridgePort bridge; } NMPlatformLinkPortData; struct _NMPlatformLink { @@ -437,18 +444,27 @@ struct _NMPlatformIP4Route { * pref_src must match, unless set to 0.0.0.0 to match any. */ in_addr_t pref_src; - /* This is the weight of for the first next-hop, in case of n_nexthops > 1. + /* This is the weight of for the first next-hop. * - * If n_nexthops is zero, this value is undefined (should be zero). - * If n_nexthops is 1, this also doesn't matter, but it's usually set to - * zero. - * If n_nexthops is greater or equal to one, this is the weight of - * the first hop. + * For multi-hop routes (n_nexthops > 1) this is the weight of the first + * hop. Note that the valid range is from 1-256. Zero is treated the same + * as 1 (for NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID comparison). * - * Note that upper layers (nm_utils_ip_route_attribute_to_platform()) use this flag to indicate - * whether this is a multihop route. Single-hop, non-ECMP routes will have a weight of zero. + * For routes without next-hop (e.g. blackhole type), the weight is + * meaningless. It should be set to zero. NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID + * will treat it as zero. * - * The valid range for weight in kernel is 1-256. */ + * For single-hop routes, in kernel they don't have a weight. That means, + * all routes in the platform cache have a weight of zero. For tracking + * purposes, we find it useful that upper layers have single-hop routes + * with a positive weight. Such routes can never exist in kernel. Trying + * to add such a route will somewhat work, because + * nm_platform_ip_route_normalize() normalizes the weight to zero + * (effectively adding another route, according to + * NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID). A lookup in the platform cache with + * such a route will not yield a result. It does not exist there. If you + * want to find such a route, normalize it first. + */ guint16 weight; /* rtm_tos (iproute2: tos) @@ -697,13 +713,11 @@ typedef struct { typedef struct { int ifindex; in_addr_t gateway; - /* The valid range for weight is 1-256. Single hop routes in kernel - * don't have a weight, we assign them weight zero (to indicate the - * weight is missing). + + /* The weight of the next hop. The valid range for weight is 1-256. * - * Upper layers (nm_utils_ip_route_attribute_to_platform()) care about - * the distinction of unset weight (no-ECMP). They express no-ECMP as - * zero. + * Zero is allowed too, but treated as 1 (by + * NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID comparison). */ guint16 weight; @@ -829,6 +843,14 @@ typedef struct { } _nm_alignas(NMPlatformObject) NMPlatformLnkGre; typedef struct { + int port1; + int port2; + NMEtherAddr supervision_address; + guint8 multicast_spec; + bool prp : 1; +} _nm_alignas(NMPlatformObject) NMPlatformLnkHsr; + +typedef struct { int p_key; const char *mode; } _nm_alignas(NMPlatformObject) NMPlatformLnkInfiniband; @@ -1009,14 +1031,6 @@ typedef struct { /*****************************************************************************/ -typedef struct _NMPlatformCsmeConnInfo { - guint8 ssid[32]; - guint32 channel; - NMEtherAddr addr; - guint8 sta_cipher; - guint8 auth_mode; -} NMPlatformCsmeConnInfo; - typedef enum { NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_L3MDEV, NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_UID_RANGE, @@ -1242,10 +1256,6 @@ typedef struct { gboolean (*wifi_set_wake_on_wlan)(NMPlatform *self, int ifindex, _NMSettingWirelessWakeOnWLan wowl); - gboolean (*wifi_get_csme_conn_info)(NMPlatform *self, - int ifindex, - NMPlatformCsmeConnInfo *out_conn_info); - gboolean (*wifi_get_device_from_csme)(NMPlatform *self, int ifindex); guint32 (*mesh_get_channel)(NMPlatform *self, int ifindex); gboolean (*mesh_set_channel)(NMPlatform *self, int ifindex, guint32 channel); @@ -1641,7 +1651,7 @@ const NMPlatformLink *nm_platform_link_get_by_address(NMPlatform *self, gconstpointer address, size_t length); -GPtrArray *nm_platform_link_get_all(NMPlatform *self, gboolean sort_by_name); +GPtrArray *nm_platform_link_get_all(NMPlatform *self); int nm_platform_link_add(NMPlatform *self, NMLinkType type, @@ -1748,6 +1758,17 @@ nm_platform_link_gre_add(NMPlatform *self, } static inline int +nm_platform_link_hsr_add(NMPlatform *self, + const char *name, + const NMPlatformLnkHsr *props, + const NMPlatformLink **out_link) +{ + g_return_val_if_fail(props, -NME_BUG); + + return nm_platform_link_add(self, NM_LINK_TYPE_HSR, name, 0, NULL, 0, 0, props, out_link); +} + +static inline int nm_platform_link_sit_add(NMPlatform *self, const char *name, const NMPlatformLnkSit *props, @@ -1946,9 +1967,9 @@ int nm_platform_link_get_master(NMPlatform *self, int slave); gboolean nm_platform_link_can_assume(NMPlatform *self, int ifindex); -gboolean nm_platform_link_get_unmanaged(NMPlatform *self, int ifindex, gboolean *unmanaged); -gboolean nm_platform_link_supports_slaves(NMPlatform *self, int ifindex); -const char *nm_platform_link_get_type_name(NMPlatform *self, int ifindex); +NMOptionBool nm_platform_link_get_unmanaged(NMPlatform *self, int ifindex); +gboolean nm_platform_link_supports_slaves(NMPlatform *self, int ifindex); +const char *nm_platform_link_get_type_name(NMPlatform *self, int ifindex); gboolean nm_platform_link_refresh(NMPlatform *self, int ifindex); void nm_platform_process_events(NMPlatform *self); @@ -1983,6 +2004,7 @@ gboolean nm_platform_link_change(NMPlatform *self, int ifindex, NMPlatformLinkProps *props, NMPlatformLinkBondPort *bond_port, + NMPlatformLinkBridgePort *bridge_port, NMPlatformLinkChangeFlags flags); gboolean nm_platform_link_get_udev_property(NMPlatform *self, @@ -2065,6 +2087,8 @@ const NMPlatformLnkGre * nm_platform_link_get_lnk_gre(NMPlatform *self, int ifindex, const NMPlatformLink **out_link); const NMPlatformLnkGre * nm_platform_link_get_lnk_gretap(NMPlatform *self, int ifindex, const NMPlatformLink **out_link); +const NMPlatformLnkHsr * +nm_platform_link_get_lnk_hsr(NMPlatform *self, int ifindex, const NMPlatformLink **out_link); const NMPlatformLnkIp6Tnl * nm_platform_link_get_lnk_ip6tnl(NMPlatform *self, int ifindex, const NMPlatformLink **out_link); const NMPlatformLnkIp6Tnl * @@ -2146,10 +2170,6 @@ void nm_platform_wifi_indicate_addressing_running(NMPlatform *self, int ifindex, _NMSettingWirelessWakeOnWLan nm_platform_wifi_get_wake_on_wlan(NMPlatform *self, int ifindex); gboolean nm_platform_wifi_set_wake_on_wlan(NMPlatform *self, int ifindex, _NMSettingWirelessWakeOnWLan wowl); -gboolean nm_platform_wifi_get_csme_conn_info(NMPlatform *self, - int ifindex, - NMPlatformCsmeConnInfo *out_conn_info); -gboolean nm_platform_wifi_get_device_from_csme(NMPlatform *self, int ifindex); guint32 nm_platform_mesh_get_channel(NMPlatform *self, int ifindex); gboolean nm_platform_mesh_set_channel(NMPlatform *self, int ifindex, guint32 channel); @@ -2391,6 +2411,7 @@ const char *nm_platform_link_to_string(const NMPlatformLink *link, char *buf, gs const char *nm_platform_lnk_bond_to_string(const NMPlatformLnkBond *lnk, char *buf, gsize len); const char *nm_platform_lnk_bridge_to_string(const NMPlatformLnkBridge *lnk, char *buf, gsize len); const char *nm_platform_lnk_gre_to_string(const NMPlatformLnkGre *lnk, char *buf, gsize len); +const char *nm_platform_lnk_hsr_to_string(const NMPlatformLnkHsr *lnk, char *buf, gsize len); const char * nm_platform_lnk_infiniband_to_string(const NMPlatformLnkInfiniband *lnk, char *buf, gsize len); const char *nm_platform_lnk_ip6tnl_to_string(const NMPlatformLnkIp6Tnl *lnk, char *buf, gsize len); @@ -2444,6 +2465,7 @@ int nm_platform_link_cmp(const NMPlatformLink *a, const NMPlatformLink *b); int nm_platform_lnk_bond_cmp(const NMPlatformLnkBond *a, const NMPlatformLnkBond *b); int nm_platform_lnk_bridge_cmp(const NMPlatformLnkBridge *a, const NMPlatformLnkBridge *b); int nm_platform_lnk_gre_cmp(const NMPlatformLnkGre *a, const NMPlatformLnkGre *b); +int nm_platform_lnk_hsr_cmp(const NMPlatformLnkHsr *a, const NMPlatformLnkHsr *b); int nm_platform_lnk_infiniband_cmp(const NMPlatformLnkInfiniband *a, const NMPlatformLnkInfiniband *b); int nm_platform_lnk_ip6tnl_cmp(const NMPlatformLnkIp6Tnl *a, const NMPlatformLnkIp6Tnl *b); @@ -2484,8 +2506,11 @@ int nm_platform_mptcp_addr_cmp(const NMPlatformMptcpAddr *a, const NMPlatformMpt void nm_platform_link_hash_update(const NMPlatformLink *obj, NMHashState *h); void nm_platform_link_bond_port_hash_update(const NMPlatformLinkBondPort *obj, NMHashState *h); +void nm_platform_link_bridge_port_hash_update(const NMPlatformLinkBridgePort *obj, NMHashState *h); int nm_platform_link_bond_port_cmp(const NMPlatformLinkBondPort *a, const NMPlatformLinkBondPort *b); +int nm_platform_link_bridge_port_cmp(const NMPlatformLinkBridgePort *a, + const NMPlatformLinkBridgePort *b); void nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, NMPlatformIPRouteCmpType cmp_type, NMHashState *h); @@ -2512,6 +2537,7 @@ void nm_platform_routing_rule_hash_update(const NMPlatformRoutingRule *obj, void nm_platform_lnk_bond_hash_update(const NMPlatformLnkBond *obj, NMHashState *h); void nm_platform_lnk_bridge_hash_update(const NMPlatformLnkBridge *obj, NMHashState *h); void nm_platform_lnk_gre_hash_update(const NMPlatformLnkGre *obj, NMHashState *h); +void nm_platform_lnk_hsr_hash_update(const NMPlatformLnkHsr *obj, NMHashState *h); void nm_platform_lnk_infiniband_hash_update(const NMPlatformLnkInfiniband *obj, NMHashState *h); void nm_platform_lnk_ip6tnl_hash_update(const NMPlatformLnkIp6Tnl *obj, NMHashState *h); void nm_platform_lnk_ipip_hash_update(const NMPlatformLnkIpIp *obj, NMHashState *h); @@ -2572,12 +2598,24 @@ gboolean nm_platform_ethtool_get_link_ring(NMPlatform *self, int ifindex, NMEtht gboolean nm_platform_ethtool_set_ring(NMPlatform *self, int ifindex, const NMEthtoolRingState *ring); +gboolean nm_platform_ethtool_get_link_channels(NMPlatform *self, + int ifindex, + NMEthtoolChannelsState *channels); + +gboolean nm_platform_ethtool_set_channels(NMPlatform *self, + int ifindex, + const NMEthtoolChannelsState *channels); + gboolean nm_platform_ethtool_get_link_pause(NMPlatform *self, int ifindex, NMEthtoolPauseState *pause); +gboolean nm_platform_ethtool_get_link_eee(NMPlatform *self, int ifindex, NMEthtoolEEEState *eee); + gboolean nm_platform_ethtool_set_pause(NMPlatform *self, int ifindex, const NMEthtoolPauseState *pause); +gboolean nm_platform_ethtool_set_eee(NMPlatform *self, int ifindex, const NMEthtoolEEEState *eee); + void nm_platform_ip4_dev_route_blacklist_set(NMPlatform *self, int ifindex, GPtrArray *ip4_dev_route_blacklist); diff --git a/src/libnm-platform/nmp-base.h b/src/libnm-platform/nmp-base.h index ffe59363..70b5d1bc 100644 --- a/src/libnm-platform/nmp-base.h +++ b/src/libnm-platform/nmp-base.h @@ -93,16 +93,12 @@ typedef struct { const NMEthtoolFeatureState states_list[]; } NMEthtoolFeatureStates; -/*****************************************************************************/ - typedef struct { guint32 s[_NM_ETHTOOL_ID_COALESCE_NUM /* indexed by (NMEthtoolID - _NM_ETHTOOL_ID_COALESCE_FIRST) */ ]; } NMEthtoolCoalesceState; -/*****************************************************************************/ - typedef struct { guint32 rx_pending; guint32 rx_mini_pending; @@ -116,6 +112,17 @@ typedef struct { bool tx : 1; } NMEthtoolPauseState; +typedef struct { + guint32 rx; + guint32 tx; + guint32 other; + guint32 combined; +} NMEthtoolChannelsState; + +typedef struct { + bool enabled : 1; +} NMEthtoolEEEState; + /*****************************************************************************/ typedef struct _NMPNetns NMPNetns; @@ -152,6 +159,7 @@ typedef enum _nm_packed { NMP_OBJECT_TYPE_LNK_BRIDGE, NMP_OBJECT_TYPE_LNK_GRE, NMP_OBJECT_TYPE_LNK_GRETAP, + NMP_OBJECT_TYPE_LNK_HSR, NMP_OBJECT_TYPE_LNK_INFINIBAND, NMP_OBJECT_TYPE_LNK_IP6TNL, NMP_OBJECT_TYPE_LNK_IP6GRE, diff --git a/src/libnm-platform/nmp-object.c b/src/libnm-platform/nmp-object.c index 7e3fb1a3..4090da71 100644 --- a/src/libnm-platform/nmp-object.c +++ b/src/libnm-platform/nmp-object.c @@ -3485,6 +3485,18 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_plobj_hash_update = (CmdPlobjHashUpdateFunc) nm_platform_lnk_gre_hash_update, .cmd_plobj_cmp = (CmdPlobjCmpFunc) nm_platform_lnk_gre_cmp, }, + [NMP_OBJECT_TYPE_LNK_HSR - 1] = + { + .parent = DEDUP_MULTI_OBJ_CLASS_INIT(), + .obj_type = NMP_OBJECT_TYPE_LNK_HSR, + .sizeof_data = sizeof(NMPObjectLnkHsr), + .sizeof_public = sizeof(NMPlatformLnkHsr), + .obj_type_name = "hsr", + .lnk_link_type = NM_LINK_TYPE_HSR, + .cmd_plobj_to_string = (CmdPlobjToStringFunc) nm_platform_lnk_hsr_to_string, + .cmd_plobj_hash_update = (CmdPlobjHashUpdateFunc) nm_platform_lnk_hsr_hash_update, + .cmd_plobj_cmp = (CmdPlobjCmpFunc) nm_platform_lnk_hsr_cmp, + }, [NMP_OBJECT_TYPE_LNK_INFINIBAND - 1] = { .parent = DEDUP_MULTI_OBJ_CLASS_INIT(), diff --git a/src/libnm-platform/nmp-object.h b/src/libnm-platform/nmp-object.h index 408f0318..19cace3d 100644 --- a/src/libnm-platform/nmp-object.h +++ b/src/libnm-platform/nmp-object.h @@ -254,6 +254,10 @@ typedef struct { } NMPObjectLnkGre; typedef struct { + NMPlatformLnkHsr _public; +} NMPObjectLnkHsr; + +typedef struct { NMPlatformLnkInfiniband _public; } NMPObjectLnkInfiniband; @@ -377,6 +381,9 @@ struct _NMPObject { NMPlatformLnkGre lnk_gre; NMPObjectLnkGre _lnk_gre; + NMPlatformLnkHsr lnk_hsr; + NMPObjectLnkHsr _lnk_hsr; + NMPlatformLnkInfiniband lnk_infiniband; NMPObjectLnkInfiniband _lnk_infiniband; @@ -530,6 +537,7 @@ _NMP_OBJECT_TYPE_IS_OBJ_WITH_IFINDEX(NMPObjectType obj_type) case NMP_OBJECT_TYPE_LNK_BOND: case NMP_OBJECT_TYPE_LNK_GRE: case NMP_OBJECT_TYPE_LNK_GRETAP: + case NMP_OBJECT_TYPE_LNK_HSR: case NMP_OBJECT_TYPE_LNK_INFINIBAND: case NMP_OBJECT_TYPE_LNK_IP6TNL: case NMP_OBJECT_TYPE_LNK_IP6GRE: diff --git a/src/libnm-platform/nmp-plobj.c b/src/libnm-platform/nmp-plobj.c index d3643ae1..70664634 100644 --- a/src/libnm-platform/nmp-plobj.c +++ b/src/libnm-platform/nmp-plobj.c @@ -424,7 +424,7 @@ nm_platform_ip4_address_to_string(const NMPlatformIP4Address *address, char *buf (address->lifetime == address->preferred) ? str_lft_p : (_lifetime_to_string(address->timestamp, - address->lifetime ? MIN(address->preferred, address->lifetime) + address->lifetime ? NM_MIN(address->preferred, address->lifetime) : NM_PLATFORM_LIFETIME_PERMANENT, now, str_pref, @@ -522,7 +522,7 @@ nm_platform_ip6_address_to_string(const NMPlatformIP6Address *address, char *buf (address->lifetime == address->preferred) ? str_lft_p : (_lifetime_to_string(address->timestamp, - address->lifetime ? MIN(address->preferred, address->lifetime) + address->lifetime ? NM_MIN(address->preferred, address->lifetime) : NM_PLATFORM_LIFETIME_PERMANENT, now, str_pref, diff --git a/src/libnm-platform/nmp-plobj.h b/src/libnm-platform/nmp-plobj.h index 35c81509..ad18573f 100644 --- a/src/libnm-platform/nmp-plobj.h +++ b/src/libnm-platform/nmp-plobj.h @@ -17,7 +17,7 @@ * also "packed" is specified. That's what we want. * https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html#Common-Type-Attributes. */ -#define _NMPlatformObject_Align (MAX(_nm_alignof(void *), _nm_alignof(gint64))) +#define _NMPlatformObject_Align (NM_MAX_CONST(_nm_alignof(void *), _nm_alignof(gint64))) struct _NMPlatformObject { /* the object type has no fields of its own, it is only used to having diff --git a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c index beddaf22..6109849a 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c @@ -696,10 +696,12 @@ nl80211_wiphy_info_handler(const struct nl_msg *msg, void *arg) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_VALID; - if (f->freq > 2400 && f->freq < 2500) + if (f->freq >= 2401 && f->freq <= 2495) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ; - if (f->freq > 4900 && f->freq < 6000) + if (f->freq >= 5150 && f->freq <= 5895) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ; + if (f->freq >= 5925 && f->freq <= 7125) + info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_6GHZ; info->num_freqs++; } @@ -825,111 +827,6 @@ nla_put_failure: g_return_val_if_reached(FALSE); } -struct nl80211_csme_conn_info { - NMWifiUtilsNl80211 *self; - NMPlatformCsmeConnInfo *conn_info; -}; - -static int -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; - NMWifiUtilsNl80211 *self = info->self; - struct genlmsghdr *gnlh = (void *) nlmsg_data(nlmsg_hdr(msg)); - struct nlattr *tb[NL80211_ATTR_MAX + 1]; - struct nlattr *data; - struct nlattr *attrs[NUM_IWL_MVM_VENDOR_ATTR]; - int err; - - static const struct nla_policy iwl_vendor_policy[NUM_IWL_MVM_VENDOR_ATTR] = { - [IWL_MVM_VENDOR_ATTR_AUTH_MODE] = {.type = NLA_U32}, - [IWL_MVM_VENDOR_ATTR_SSID] = {.type = NLA_UNSPEC, .maxlen = NM_IW_ESSID_MAX_SIZE}, - [IWL_MVM_VENDOR_ATTR_STA_CIPHER] = {.type = NLA_U32}, - [IWL_MVM_VENDOR_ATTR_CHANNEL_NUM] = {.type = NLA_U8}, - [IWL_MVM_VENDOR_ATTR_ADDR] = {.type = NLA_UNSPEC, .minlen = ETH_ALEN, .maxlen = ETH_ALEN}, - }; - - nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); - data = tb[NL80211_ATTR_VENDOR_DATA]; - - *out_conn_info = (NMPlatformCsmeConnInfo){}; - - err = nla_parse_nested(attrs, MAX_IWL_MVM_VENDOR_ATTR, data, iwl_vendor_policy); - if (err) { - _LOGD("IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO Failed to parse CSME connection info: %s", - nm_strerror(err)); - return -EINVAL; - } - - if (attrs[IWL_MVM_VENDOR_ATTR_AUTH_MODE]) - out_conn_info->auth_mode = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_AUTH_MODE]); - - if (attrs[IWL_MVM_VENDOR_ATTR_SSID]) - memcpy(out_conn_info->ssid, - nla_data(attrs[IWL_MVM_VENDOR_ATTR_SSID]), - nla_len(attrs[IWL_MVM_VENDOR_ATTR_SSID])); - - if (attrs[IWL_MVM_VENDOR_ATTR_STA_CIPHER]) - out_conn_info->sta_cipher = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_STA_CIPHER]); - - if (attrs[IWL_MVM_VENDOR_ATTR_CHANNEL_NUM]) - out_conn_info->channel = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_CHANNEL_NUM]); - - if (attrs[IWL_MVM_VENDOR_ATTR_ADDR]) - memcpy(&out_conn_info->addr, - nla_data(attrs[IWL_MVM_VENDOR_ATTR_ADDR]), - sizeof(out_conn_info->addr)); - - return NL_SKIP; -} - -static gboolean -wifi_nl80211_intel_vnd_get_csme_conn_info(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info) -{ - NMWifiUtilsNl80211 *self = (NMWifiUtilsNl80211 *) data; - nm_auto_nlmsg struct nl_msg *msg = NULL; - int err; - struct nl80211_csme_conn_info conn_info = { - .self = self, - .conn_info = out_conn_info, - }; - - msg = nl80211_alloc_msg(self, NL80211_CMD_VENDOR, 0); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_ID, INTEL_OUI); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_SUBCMD, IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO); - - err = nl80211_send_and_recv(self, msg, nl80211_csme_conn_event_handler, &conn_info); - if (err < 0) - _LOGD("IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO request failed: %s", nm_strerror(err)); - - return err >= 0; - -nla_put_failure: - g_return_val_if_reached(FALSE); -} - -static gboolean -wifi_nl80211_intel_vnd_get_device_from_csme(NMWifiUtils *data) -{ - NMWifiUtilsNl80211 *self = (NMWifiUtilsNl80211 *) data; - nm_auto_nlmsg struct nl_msg *msg = NULL; - int err; - - msg = nl80211_alloc_msg(self, NL80211_CMD_VENDOR, 0); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_ID, INTEL_OUI); - NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_SUBCMD, IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP); - - err = nl80211_send_and_recv(self, msg, NULL, NULL); - if (err < 0) - _LOGD("IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP request failed: %s", nm_strerror(err)); - - return err >= 0; - -nla_put_failure: - g_return_val_if_reached(FALSE); -} - static void nm_wifi_utils_nl80211_init(NMWifiUtilsNl80211 *self) {} @@ -954,8 +851,6 @@ nm_wifi_utils_nl80211_class_init(NMWifiUtilsNl80211Class *klass) wifi_utils_class->get_mesh_channel = wifi_nl80211_get_mesh_channel; wifi_utils_class->set_mesh_channel = wifi_nl80211_set_mesh_channel; wifi_utils_class->set_mesh_ssid = wifi_nl80211_set_mesh_ssid; - wifi_utils_class->get_csme_conn_info = wifi_nl80211_intel_vnd_get_csme_conn_info; - wifi_utils_class->get_device_from_csme = wifi_nl80211_intel_vnd_get_device_from_csme; } NMWifiUtils * diff --git a/src/libnm-platform/wifi/nm-wifi-utils-private.h b/src/libnm-platform/wifi/nm-wifi-utils-private.h index 8fa593c0..abec38e2 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-private.h +++ b/src/libnm-platform/wifi/nm-wifi-utils-private.h @@ -7,7 +7,6 @@ #define __WIFI_UTILS_PRIVATE_H__ #include "nm-wifi-utils.h" -#include "libnm-platform/nm-platform.h" typedef struct { GObjectClass parent; @@ -55,10 +54,6 @@ typedef struct { gboolean (*set_mesh_ssid)(NMWifiUtils *data, const guint8 *ssid, gsize len); gboolean (*indicate_addressing_running)(NMWifiUtils *data, gboolean running); - - gboolean (*get_csme_conn_info)(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info); - - gboolean (*get_device_from_csme)(NMWifiUtils *data); } NMWifiUtilsClass; struct NMWifiUtils { diff --git a/src/libnm-platform/wifi/nm-wifi-utils-wext.c b/src/libnm-platform/wifi/nm-wifi-utils-wext.c index 0cc8b6a6..16503430 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-wext.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-wext.c @@ -548,7 +548,7 @@ wifi_wext_set_mesh_ssid(NMWifiUtils *data, const guint8 *ssid, gsize len) return FALSE; memset(buf, 0, sizeof(buf)); - memcpy(buf, ssid, MIN(sizeof(buf) - 1, len)); + memcpy(buf, ssid, NM_MIN(sizeof(buf) - 1, len)); wrq.u.essid.pointer = (caddr_t) buf; wrq.u.essid.length = len; @@ -724,8 +724,8 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan) guint32 response_len = 0; struct iw_range_with_scan_capa *scan_capa_range; int i; - gboolean freq_valid = FALSE, has_5ghz = FALSE, has_2ghz = FALSE; - char ifname[IFNAMSIZ]; + gboolean freq_valid = FALSE, has_6ghz = FALSE, has_5ghz = FALSE, has_2ghz = FALSE; + char ifname[IFNAMSIZ]; if (!nmp_utils_if_indextoname(ifindex, ifname)) { _LOGW(LOGD_PLATFORM | LOGD_WIFI, "can't determine interface name for ifindex %d", ifindex); @@ -758,14 +758,16 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan) wext->max_qual.noise = range.max_qual.noise; wext->max_qual.updated = range.max_qual.updated; - wext->num_freqs = MIN(range.num_frequency, IW_MAX_FREQUENCIES); + wext->num_freqs = NM_MIN(range.num_frequency, (guint) IW_MAX_FREQUENCIES); for (i = 0; i < wext->num_freqs; i++) { wext->freqs[i] = iw_freq_to_uint32(&range.freq[i]); freq_valid = TRUE; - if (wext->freqs[i] > 2400 && wext->freqs[i] < 2500) + if (wext->freqs[i] >= 2401 && wext->freqs[i] <= 2495) has_2ghz = TRUE; - else if (wext->freqs[i] > 4900 && wext->freqs[i] < 6000) + else if (wext->freqs[i] >= 5150 && wext->freqs[i] <= 5895) has_5ghz = TRUE; + else if (wext->freqs[i] >= 5925 && wext->freqs[i] <= 7125) + has_6ghz = TRUE; } /* Check for scanning capability; cards that can't scan are not supported */ @@ -798,6 +800,8 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan) wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ; if (has_5ghz) wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ; + if (has_6ghz) + wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_6GHZ; _LOGI(LOGD_PLATFORM | LOGD_WIFI, "(%s): using WEXT for Wi-Fi device control", ifname); diff --git a/src/libnm-platform/wifi/nm-wifi-utils.c b/src/libnm-platform/wifi/nm-wifi-utils.c index 6f87e8c0..596ff644 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils.c +++ b/src/libnm-platform/wifi/nm-wifi-utils.c @@ -157,28 +157,6 @@ nm_wifi_utils_is_wifi(int dirfd, const char *ifname) return FALSE; } -gboolean -nm_wifi_utils_get_csme_conn_info(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info) -{ - NMWifiUtilsClass *klass; - - g_return_val_if_fail(data != NULL, FALSE); - - klass = NM_WIFI_UTILS_GET_CLASS(data); - return klass->get_csme_conn_info ? klass->get_csme_conn_info(data, out_conn_info) : FALSE; -} - -gboolean -nm_wifi_utils_get_device_from_csme(NMWifiUtils *data) -{ - NMWifiUtilsClass *klass; - - g_return_val_if_fail(data != NULL, FALSE); - - klass = NM_WIFI_UTILS_GET_CLASS(data); - return klass->get_device_from_csme ? klass->get_device_from_csme(data) : FALSE; -} - /* OLPC Mesh-only functions */ guint32 diff --git a/src/libnm-platform/wifi/nm-wifi-utils.h b/src/libnm-platform/wifi/nm-wifi-utils.h index 84d724a5..0532817e 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils.h +++ b/src/libnm-platform/wifi/nm-wifi-utils.h @@ -62,12 +62,6 @@ _NMSettingWirelessWakeOnWLan nm_wifi_utils_get_wake_on_wlan(NMWifiUtils *data); gboolean nm_wifi_utils_set_wake_on_wlan(NMWifiUtils *data, _NMSettingWirelessWakeOnWLan wowl); -struct _NMPlatformCsmeConnInfo; -gboolean nm_wifi_utils_get_csme_conn_info(NMWifiUtils *data, - struct _NMPlatformCsmeConnInfo *out_conn_info); - -gboolean nm_wifi_utils_get_device_from_csme(NMWifiUtils *data); - /* OLPC Mesh-only functions */ guint32 nm_wifi_utils_get_mesh_channel(NMWifiUtils *data); diff --git a/src/libnm-std-aux/nm-linux-compat.h b/src/libnm-std-aux/nm-linux-compat.h index 2675393d..2b04b0df 100644 --- a/src/libnm-std-aux/nm-linux-compat.h +++ b/src/libnm-std-aux/nm-linux-compat.h @@ -21,7 +21,6 @@ #include "linux-headers/ethtool.h" #include "linux-headers/nl802154.h" -#include "linux-headers/nl80211-vnd-intel.h" #include "linux-headers/mptcp.h" #endif /* __NM_LINUX_COMPAT_H__ */ diff --git a/src/libnm-std-aux/nm-std-aux.h b/src/libnm-std-aux/nm-std-aux.h index d310305e..3b39a019 100644 --- a/src/libnm-std-aux/nm-std-aux.h +++ b/src/libnm-std-aux/nm-std-aux.h @@ -154,6 +154,12 @@ typedef uint64_t _nm_bitwise nm_be64_t; /*****************************************************************************/ +#define _NM_INT_IS_SIGNED(arg) (!(((typeof(arg)) -1) > 0)) + +#define _NM_INT_SAME_SIGNEDNESS(arg1, arg2) (_NM_INT_IS_SIGNED(arg1) == _NM_INT_IS_SIGNED(arg2)) + +/*****************************************************************************/ + #define NM_PASTE_ARGS(identifier1, identifier2) identifier1##identifier2 #define NM_PASTE(identifier1, identifier2) NM_PASTE_ARGS(identifier1, identifier2) @@ -386,37 +392,63 @@ nm_mult_clamped_u(unsigned a, unsigned b) return c; } -/* glib's MIN()/MAX() macros don't have function-like behavior, in that they evaluate - * the argument possibly twice. - * - * Taken from systemd's MIN()/MAX() macros. */ - -#define NM_MIN(a, b) __NM_MIN(NM_UNIQ, a, NM_UNIQ, b) -#define __NM_MIN(aq, a, bq, b) \ - ({ \ - typeof(a) NM_UNIQ_T(A, aq) = (a); \ - typeof(b) NM_UNIQ_T(B, bq) = (b); \ - ((NM_UNIQ_T(A, aq) < NM_UNIQ_T(B, bq)) ? NM_UNIQ_T(A, aq) : NM_UNIQ_T(B, bq)); \ +/* In a few places where a constant expression is required, NM_MIN() doesn't work. + * In that case, use NM_MIN_CONST(). */ +#define NM_MIN_CONST(a, b) \ + ((NM_STATIC_ASSERT_EXPR_1(_NM_INT_SAME_SIGNEDNESS((a), (b)) && __builtin_constant_p((a)) \ + && __builtin_constant_p((b))) \ + && ((a) <= (b))) \ + ? (a) \ + : (b)) + +#define _NM_MIN_V(aq, a, bq, b) \ + ({ \ + typeof(a) NM_UNIQ_T(A, aq) = (a); \ + typeof(b) NM_UNIQ_T(B, bq) = (b); \ + \ + ((NM_UNIQ_T(A, aq) <= NM_UNIQ_T(B, bq)) ? NM_UNIQ_T(A, aq) : NM_UNIQ_T(B, bq)); \ }) -#define NM_MAX(a, b) __NM_MAX(NM_UNIQ, a, NM_UNIQ, b) -#define __NM_MAX(aq, a, bq, b) \ - ({ \ - typeof(a) NM_UNIQ_T(A, aq) = (a); \ - typeof(b) NM_UNIQ_T(B, bq) = (b); \ - ((NM_UNIQ_T(A, aq) > NM_UNIQ_T(B, bq)) ? NM_UNIQ_T(A, aq) : NM_UNIQ_T(B, bq)); \ +#define NM_MIN(a, b) \ + __builtin_choose_expr(__builtin_constant_p((a)) && __builtin_constant_p((b)) \ + && NM_STATIC_ASSERT_EXPR_1(_NM_INT_SAME_SIGNEDNESS((a), (b))), \ + (((a) <= (b)) ? (a) : (b)), \ + _NM_MIN_V(NM_UNIQ, a, NM_UNIQ, b)) + +#define NM_MAX_CONST(a, b) \ + ((NM_STATIC_ASSERT_EXPR_1(_NM_INT_SAME_SIGNEDNESS((a), (b)) && __builtin_constant_p((a)) \ + && __builtin_constant_p((b))) \ + && ((a) >= (b))) \ + ? (a) \ + : (b)) + +#define _NM_MAX_V(aq, a, bq, b) \ + ({ \ + typeof(a) NM_UNIQ_T(A, aq) = (a); \ + typeof(b) NM_UNIQ_T(B, bq) = (b); \ + \ + ((NM_UNIQ_T(A, aq) >= NM_UNIQ_T(B, bq)) ? NM_UNIQ_T(A, aq) : NM_UNIQ_T(B, bq)); \ }) +#define NM_MAX(a, b) \ + __builtin_choose_expr(__builtin_constant_p((a)) && __builtin_constant_p((b)) \ + && NM_STATIC_ASSERT_EXPR_1(_NM_INT_SAME_SIGNEDNESS((a), (b))), \ + (((a) >= (b)) ? (a) : (b)), \ + _NM_MAX_V(NM_UNIQ, a, NM_UNIQ, b)) + #define NM_CLAMP(x, low, high) __NM_CLAMP(NM_UNIQ, x, NM_UNIQ, low, NM_UNIQ, high) -#define __NM_CLAMP(xq, x, lowq, low, highq, high) \ - ({ \ - typeof(x) NM_UNIQ_T(X, xq) = (x); \ - typeof(low) NM_UNIQ_T(LOW, lowq) = (low); \ - typeof(high) NM_UNIQ_T(HIGH, highq) = (high); \ - \ - ((NM_UNIQ_T(X, xq) > NM_UNIQ_T(HIGH, highq)) ? NM_UNIQ_T(HIGH, highq) \ - : (NM_UNIQ_T(X, xq) < NM_UNIQ_T(LOW, lowq)) ? NM_UNIQ_T(LOW, lowq) \ - : NM_UNIQ_T(X, xq)); \ +#define __NM_CLAMP(xq, x, lowq, low, highq, high) \ + ({ \ + typeof(x) NM_UNIQ_T(X, xq) = (x); \ + typeof(low) NM_UNIQ_T(LOW, lowq) = (low); \ + typeof(high) NM_UNIQ_T(HIGH, highq) = (high); \ + \ + NM_STATIC_ASSERT(_NM_INT_SAME_SIGNEDNESS(NM_UNIQ_T(X, xq), NM_UNIQ_T(LOW, lowq))); \ + NM_STATIC_ASSERT(_NM_INT_SAME_SIGNEDNESS(NM_UNIQ_T(X, xq), NM_UNIQ_T(HIGH, highq))); \ + \ + ((NM_UNIQ_T(X, xq) > NM_UNIQ_T(HIGH, highq)) ? NM_UNIQ_T(HIGH, highq) \ + : (NM_UNIQ_T(X, xq) < NM_UNIQ_T(LOW, lowq)) ? NM_UNIQ_T(LOW, lowq) \ + : NM_UNIQ_T(X, xq)); \ }) #define NM_MAX_WITH_CMP(cmp, a, b) \ @@ -427,13 +459,6 @@ nm_mult_clamped_u(unsigned a, unsigned b) (((cmp(_a, _b)) >= 0) ? _a : _b); \ }) -/* evaluates to (void) if _A or _B are not constant or of different types */ -#define NM_CONST_MAX(_A, _B) \ - (__builtin_choose_expr((__builtin_constant_p(_A) && __builtin_constant_p(_B) \ - && __builtin_types_compatible_p(typeof(_A), typeof(_B))), \ - ((_A) > (_B)) ? (_A) : (_B), \ - ((void) 0))) - /* Determine whether @x is a power of two (@x being an integer type). * Basically, this returns TRUE, if @x has exactly one bit set. * For negative values and zero, this always returns FALSE. */ @@ -1287,13 +1312,15 @@ nm_ptr_to_uintptr(const void *p) /*****************************************************************************/ -#define NM_CMP_DIRECT(a, b) \ - do { \ - typeof(a) _a = (a); \ - typeof(b) _b = (b); \ - \ - if (_a != _b) \ - return (_a < _b) ? -1 : 1; \ +#define NM_CMP_DIRECT(a, b) \ + do { \ + typeof(a) _a = (a); \ + typeof(b) _b = (b); \ + \ + NM_STATIC_ASSERT(_NM_INT_SAME_SIGNEDNESS(_a, _b)); \ + \ + if (_a != _b) \ + return (_a < _b) ? -1 : 1; \ } while (0) #define NM_CMP_DIRECT_UNSAFE(a, b) \ diff --git a/src/libnm-std-aux/nm-std-utils.c b/src/libnm-std-aux/nm-std-utils.c index 8901378c..8bc109f2 100644 --- a/src/libnm-std-aux/nm-std-utils.c +++ b/src/libnm-std-aux/nm-std-utils.c @@ -92,3 +92,43 @@ out_huge: } return SIZE_MAX; } + +/*****************************************************************************/ + +/** + * _nm_strerror_r: + * @errsv: the errno passed to strerror_r() + * @buf: the string buffer, must be non-null + * @buf_size: the size of the buffer, must be positive. + * + * A wrapper around strerror_r(). Does little else, aside clearing up the + * confusion about the different versions of the function. + * + * errno is preserved. + * + * Returns: the error string. This is either a static strong or @buf. It + * is not guaranteed to be @buf. + */ +const char * +_nm_strerror_r(int errsv, char *buf, size_t buf_size) +{ + NM_AUTO_PROTECT_ERRNO(errsv2); + char *buf2; + + nm_assert(buf); + nm_assert(buf_size > 0); + +#if (!defined(__GLIBC__) && !defined(__UCLIBC__)) || ((_POSIX_C_SOURCE >= 200112L) && !_GNU_SOURCE) + /* XSI-compliant */ + if (strerror_r(errsv, buf, buf_size) != 0) { + snprintf(buf, buf_size, "Unspecified errno %d", errsv); + } + buf2 = buf; +#else + /* GNU-specific */ + buf2 = strerror_r(errsv, buf, buf_size); +#endif + + nm_assert(buf2); + return buf2; +} diff --git a/src/libnm-std-aux/nm-std-utils.h b/src/libnm-std-aux/nm-std-utils.h index 6aa787eb..015444c9 100644 --- a/src/libnm-std-aux/nm-std-utils.h +++ b/src/libnm-std-aux/nm-std-utils.h @@ -35,4 +35,6 @@ size_t nm_utils_get_next_realloc_size(bool true_realloc, size_t requested); +const char *_nm_strerror_r(int errsv, char *buf, size_t buf_size); + #endif /* __NM_STD_UTILS_H__ */ diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c index a2605b71..0e6f21f4 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c @@ -824,7 +824,7 @@ int dhcp6_client_send_message(sd_dhcp6_client *client) { /* RFC 8415 Section 21.9. * A client MUST include an Elapsed Time option in messages to indicate how long the client has * been trying to complete a DHCP message exchange. */ - elapsed_usec = MIN(usec_sub_unsigned(time_now, client->transaction_start) / USEC_PER_MSEC / 10, (usec_t) UINT16_MAX); + elapsed_usec = NM_MIN(usec_sub_unsigned(time_now, client->transaction_start) / USEC_PER_MSEC / 10, (usec_t) UINT16_MAX); elapsed_time = htobe16(elapsed_usec); r = dhcp6_option_append(&buf, &offset, SD_DHCP6_OPTION_ELAPSED_TIME, sizeof(elapsed_time), &elapsed_time); if (r < 0) @@ -1052,7 +1052,7 @@ static int client_enter_bound_state(sd_dhcp6_client *client) { goto error; lifetime_t2 = client_timeout_compute_random(lifetime_t2); - lifetime_t1 = client_timeout_compute_random(MIN(lifetime_t1, lifetime_t2)); + lifetime_t1 = client_timeout_compute_random(NM_MIN(lifetime_t1, lifetime_t2)); if (lifetime_t1 == USEC_INFINITY) { log_dhcp6_client(client, "Infinite T1"); diff --git a/src/libnm-systemd-shared/sd-adapt-shared/nm-sd-adapt-shared.h b/src/libnm-systemd-shared/sd-adapt-shared/nm-sd-adapt-shared.h index de6edd02..83916fb2 100644 --- a/src/libnm-systemd-shared/sd-adapt-shared/nm-sd-adapt-shared.h +++ b/src/libnm-systemd-shared/sd-adapt-shared/nm-sd-adapt-shared.h @@ -12,11 +12,6 @@ /*****************************************************************************/ -/* strerror() is not thread-safe. Patch systemd-sources via a define. */ -#define strerror(errsv) nm_strerror_native(errsv) - -/*****************************************************************************/ - /* systemd detects whether compiler supports "-Wstringop-truncation" to disable * the warning at particular places. Since we anyway build with -Wno-pragma, * we don't do that and just let systemd call diff --git a/src/libnmc-base/qrcodegen.h b/src/libnmc-base/qrcodegen.h index 46d986a3..26c842cd 100644 --- a/src/libnmc-base/qrcodegen.h +++ b/src/libnmc-base/qrcodegen.h @@ -130,7 +130,7 @@ struct qrcodegen_Segment { // as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];' // can store any single QR Code from version 1 to 25 (inclusive). The result fits in an int (or int16). // Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX. -#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) *4 + 17) * ((n) *4 + 17) + 7) / 8 + 1) +#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1) // The worst-case number of bytes needed to store one QR Code, up to and including // version 40. This value equals 3918, which is just under 4 kilobytes. diff --git a/src/libnmc-setting/meson.build b/src/libnmc-setting/meson.build index cf8a21fc..7fb460dc 100644 --- a/src/libnmc-setting/meson.build +++ b/src/libnmc-setting/meson.build @@ -2,28 +2,31 @@ if enable_docs assert(enable_introspection, '-Ddocs=true requires -Dintrospection=true') + + merge_cmd = join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-merge.py') settings_docs_input_xml = custom_target( 'settings-docs-input.xml', - input: [nm_settings_docs_xml_gir, nm_property_infos_xml['nmcli']], + input: [merge_cmd, nm_settings_docs_xml_gir['nmcli'], nm_property_infos_xml['nmcli']], output: 'settings-docs-input.xml', command: [ python.path(), - join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-merge.py'), + merge_cmd, '@OUTPUT@', nm_property_infos_xml['nmcli'], - nm_settings_docs_xml_gir, + nm_settings_docs_xml_gir['nmcli'], ], ) + gen_cmd = join_paths(meson.source_root(), 'tools', 'generate-docs-settings-docs.py') settings_docs_source = custom_target( 'settings-docs.h', - input: settings_docs_input_xml, + input: [gen_cmd, settings_docs_input_xml], output: 'settings-docs.h', command: [ python.path(), - join_paths(meson.source_root(), 'tools', 'generate-docs-settings-docs.py'), + gen_cmd, '--output', '@OUTPUT@', - '--xml', '@INPUT@' + '--xml', settings_docs_input_xml ], ) diff --git a/src/libnmc-setting/nm-meta-setting-base-impl.c b/src/libnmc-setting/nm-meta-setting-base-impl.c index b531ae85..34a7d22e 100644 --- a/src/libnmc-setting/nm-meta-setting-base-impl.c +++ b/src/libnmc-setting/nm-meta-setting-base-impl.c @@ -29,6 +29,7 @@ #include "nm-setting-generic.h" #include "nm-setting-gsm.h" #include "nm-setting-hostname.h" +#include "nm-setting-hsr.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip-config.h" #include "nm-setting-ip-tunnel.h" @@ -335,6 +336,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { .setting_name = NM_SETTING_HOSTNAME_SETTING_NAME, .get_setting_gtype = nm_setting_hostname_get_type, }, + [NM_META_SETTING_TYPE_HSR] = + { + .meta_type = NM_META_SETTING_TYPE_HSR, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_HSR_SETTING_NAME, + .get_setting_gtype = nm_setting_hsr_get_type, + }, [NM_META_SETTING_TYPE_INFINIBAND] = { .meta_type = NM_META_SETTING_TYPE_INFINIBAND, @@ -632,6 +640,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = { NM_META_SETTING_TYPE_DUMMY, NM_META_SETTING_TYPE_GENERIC, NM_META_SETTING_TYPE_GSM, + NM_META_SETTING_TYPE_HSR, NM_META_SETTING_TYPE_INFINIBAND, NM_META_SETTING_TYPE_IP_TUNNEL, NM_META_SETTING_TYPE_LOOPBACK, diff --git a/src/libnmc-setting/nm-meta-setting-base-impl.h b/src/libnmc-setting/nm-meta-setting-base-impl.h index c6d1c2fc..9226183f 100644 --- a/src/libnmc-setting/nm-meta-setting-base-impl.h +++ b/src/libnmc-setting/nm-meta-setting-base-impl.h @@ -123,6 +123,7 @@ typedef enum _nm_packed { NM_META_SETTING_TYPE_GENERIC, NM_META_SETTING_TYPE_GSM, NM_META_SETTING_TYPE_HOSTNAME, + NM_META_SETTING_TYPE_HSR, NM_META_SETTING_TYPE_INFINIBAND, NM_META_SETTING_TYPE_IP_TUNNEL, NM_META_SETTING_TYPE_IP4_CONFIG, diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c index 368beaab..075d03dc 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.c +++ b/src/libnmc-setting/nm-meta-setting-desc.c @@ -46,22 +46,16 @@ _gobject_property_get_gtype(GObject *gobject, const char *property_name) g_return_val_if_reached(G_TYPE_INVALID); } -static GType -_gtype_property_get_gtype(GType gtype, const char *property_name) -{ - /* given @gtype, a type for a GObject, lookup the property @property_name - * and return its value_type. */ - if (G_TYPE_IS_CLASSED(gtype)) { - GParamSpec *param_spec; - nm_auto_unref_gtypeclass GTypeClass *gtypeclass = g_type_class_ref(gtype); - - if (G_IS_OBJECT_CLASS(gtypeclass)) { - param_spec = g_object_class_find_property(G_OBJECT_CLASS(gtypeclass), property_name); - if (param_spec) - return param_spec->value_type; - } - } - g_return_val_if_reached(G_TYPE_INVALID); +static GParamSpec * +_property_get_spec(const NMMetaPropertyInfo *property_info) +{ + nm_auto_unref_gtypeclass NMSettingClass *setting_class = + g_type_class_ref(property_info->setting_info->general->get_setting_gtype()); + GParamSpec *param_spec = + g_object_class_find_property(G_OBJECT_CLASS(setting_class), property_info->property_name); + + nm_assert(param_spec); + return param_spec; } /*****************************************************************************/ @@ -1077,21 +1071,19 @@ _get_fcn_gobject_secret_flags(ARGS_GET_FCN) static gconstpointer _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 NMUtilsEnumValueInfo *value_infos = NULL; - gboolean has_gtype = FALSE; - nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; - gint64 v; - gboolean format_numeric = FALSE; - gboolean format_numeric_hex = FALSE; - gboolean format_numeric_hex_unknown = FALSE; - gboolean format_text = FALSE; - gboolean format_text_l10n = FALSE; - gs_free char *s = NULL; - char s_numeric[64]; - GParamSpec *pspec; + GType gtype = 0; + const NMUtilsEnumValueInfo *value_infos = NULL; + gboolean has_gtype = FALSE; + nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; + gint64 v; + gboolean format_numeric = FALSE; + gboolean format_numeric_hex = FALSE; + gboolean format_numeric_hex_unknown = FALSE; + gboolean format_text = FALSE; + gboolean format_text_l10n = FALSE; + gs_free char *s = NULL; + char s_numeric[64]; + GParamSpec *pspec; RETURN_UNSUPPORTED_GET_TYPE(); @@ -1147,50 +1139,32 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(setting), property_info->property_name); g_return_val_if_fail(pspec, NULL); + if (has_gtype) { + /* if the property is already enum, don't set get_gtype: it's redundant and error prone */ + g_return_val_if_fail(NM_IN_SET(pspec->value_type, G_TYPE_INT, G_TYPE_UINT), FALSE); + } else { + gtype = pspec->value_type; + } + + g_return_val_if_fail(G_TYPE_IS_ENUM(gtype) || G_TYPE_IS_FLAGS(gtype), NULL); + g_value_init(&gval, pspec->value_type); g_object_get_property(G_OBJECT(setting), property_info->property_name, &gval); NM_SET_OUT(out_is_default, g_param_value_defaults(pspec, &gval)); - if (pspec->value_type == G_TYPE_INT - || (G_TYPE_IS_CLASSED(pspec->value_type) - && G_IS_ENUM_CLASS( - (gtype_prop_class ?: (gtype_prop_class = g_type_class_ref(pspec->value_type)))))) { - if (pspec->value_type == G_TYPE_INT) { - if (!has_gtype) - g_return_val_if_reached(NULL); - v = g_value_get_int(&gval); - } else - v = g_value_get_enum(&gval); - } else if (pspec->value_type == G_TYPE_UINT - || (G_TYPE_IS_CLASSED(pspec->value_type) - && G_IS_FLAGS_CLASS( - (gtype_prop_class - ?: (gtype_prop_class = g_type_class_ref(pspec->value_type)))))) { - if (pspec->value_type == G_TYPE_UINT) { - if (!has_gtype) - g_return_val_if_reached(NULL); - v = g_value_get_uint(&gval); - } else - v = g_value_get_flags(&gval); - } else + if (pspec->value_type == G_TYPE_INT) + v = g_value_get_int(&gval); + else if (pspec->value_type == G_TYPE_UINT) + v = g_value_get_uint(&gval); + else if (G_TYPE_IS_ENUM(pspec->value_type)) + v = g_value_get_enum(&gval); + else if (G_TYPE_IS_FLAGS(pspec->value_type)) + v = g_value_get_flags(&gval); + else g_return_val_if_reached(NULL); - if (!has_gtype) { - gtype = pspec->value_type; - gtype_class = g_steal_pointer(>ype_prop_class); - } - - nm_assert(({ - nm_auto_unref_gtypeclass GTypeClass *t = NULL; - - (G_TYPE_IS_CLASSED(gtype) && (t = g_type_class_ref(gtype)) - && (G_IS_ENUM_CLASS(t) || G_IS_FLAGS_CLASS(t))); - })); - if (format_numeric && !format_text) { - s = format_numeric_hex - || (format_numeric_hex_unknown - && !G_IS_ENUM_CLASS(gtype_class ?: (gtype_class = g_type_class_ref(gtype)))) + s = format_numeric_hex || (format_numeric_hex_unknown && !G_TYPE_IS_ENUM(gtype)) ? g_strdup_printf("0x%" G_GINT64_MODIFIER "x", v) : g_strdup_printf("%" G_GINT64_FORMAT, v); RETURN_STR_TO_FREE(g_steal_pointer(&s)); @@ -1207,9 +1181,7 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) if (!format_numeric) RETURN_STR_TO_FREE(g_steal_pointer(&s)); - if (format_numeric_hex - || (format_numeric_hex_unknown - && !G_IS_ENUM_CLASS(gtype_class ?: (gtype_class = g_type_class_ref(gtype))))) + if (format_numeric_hex || (format_numeric_hex_unknown && !G_TYPE_IS_ENUM(gtype))) nm_sprintf_buf(s_numeric, "0x%" G_GINT64_MODIFIER "x", v); else nm_sprintf_buf(s_numeric, "%" G_GINT64_FORMAT, v); @@ -1225,6 +1197,113 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) /*****************************************************************************/ +/** + * nm_meta_property_int_get_range: + * @property_info: a #NMMetaProperty info of a int, uint, int64 or uint64 property + * @out_min: (out): low value of the property's valid range + * @out_max: (out): high value of the property's valid range + * + * Returns: FALSE if the full range of the type is returned, TRUE if it's smaller + */ +gboolean +nm_meta_property_int_get_range(const NMMetaPropertyInfo *property_info, + NMMetaSignUnsignInt64 *out_min, + NMMetaSignUnsignInt64 *out_max) +{ + GParamSpec *pspec = _property_get_spec(property_info); + + g_return_val_if_fail( + NM_IN_SET(pspec->value_type, G_TYPE_UINT, G_TYPE_UINT64, G_TYPE_INT, G_TYPE_INT64), + FALSE); + + if (property_info->property_typ_data + && (property_info->property_typ_data->subtype.gobject_int.min.u64 + || property_info->property_typ_data->subtype.gobject_int.max.u64)) { + *out_min = property_info->property_typ_data->subtype.gobject_int.min; + *out_max = property_info->property_typ_data->subtype.gobject_int.max; + return TRUE; + } + + switch (pspec->value_type) { + case G_TYPE_UINT: + out_min->u64 = ((GParamSpecUInt *) pspec)->minimum; + out_max->u64 = ((GParamSpecUInt *) pspec)->maximum; + return out_min->u64 != 0 || out_max->u64 != G_MAXUINT; + case G_TYPE_UINT64: + out_min->u64 = ((GParamSpecUInt64 *) pspec)->minimum; + out_max->u64 = ((GParamSpecUInt64 *) pspec)->maximum; + return out_min->u64 != 0 || out_max->u64 != G_MAXUINT64; + case G_TYPE_INT: + out_min->i64 = ((GParamSpecInt *) pspec)->minimum; + out_max->i64 = ((GParamSpecInt *) pspec)->maximum; + return out_min->i64 != G_MININT || out_max->i64 != G_MAXINT; + case G_TYPE_INT64: + out_min->i64 = ((GParamSpecInt64 *) pspec)->minimum; + out_max->i64 = ((GParamSpecInt64 *) pspec)->maximum; + return out_min->i64 != G_MININT64 || out_max->i64 != G_MAXINT64; + default: + g_return_val_if_reached(FALSE); + } +} + +/** + * nm_meta_property_enum_get_type: + * @property_info: a #NMMetaPropertyInfo of an enum or flags type property + * + * Returns: the #GType of the property, or G_TYPE_INVALID on error + */ +GType +nm_meta_property_enum_get_type(const NMMetaPropertyInfo *property_info) +{ + GType gtype = _property_get_spec(property_info)->value_type; + + if (property_info->property_typ_data + && property_info->property_typ_data->subtype.gobject_enum.get_gtype) { + /* if the property is already enum, don't set get_gtype: it's redundant and error prone */ + g_return_val_if_fail(NM_IN_SET(gtype, G_TYPE_INT, G_TYPE_UINT), G_TYPE_INVALID); + return property_info->property_typ_data->subtype.gobject_enum.get_gtype(); + } + + g_return_val_if_fail(G_TYPE_IS_ENUM(gtype) || G_TYPE_IS_FLAGS(gtype), G_TYPE_INVALID); + return gtype; +} + +/** + * nm_meta_property_enum_get_range: + * @property_info: a #NMMetaProperty info of an enum or flags type property + * @out_min: (out): low value of the property's valid range + * @out_max: (out): high value of the property's valid range + * + * Returns: FALSE if the full range of the type is returned, TRUE if it's smaller + */ +gboolean +nm_meta_property_enum_get_range(const NMMetaPropertyInfo *property_info, int *out_min, int *out_max) +{ + GType gtype = nm_meta_property_enum_get_type(property_info); + + if (property_info->property_typ_data + && (property_info->property_typ_data->subtype.gobject_enum.min + || property_info->property_typ_data->subtype.gobject_enum.max)) { + *out_min = property_info->property_typ_data->subtype.gobject_enum.min; + *out_max = property_info->property_typ_data->subtype.gobject_enum.max; + return TRUE; + } + + if (G_TYPE_IS_ENUM(gtype)) { + *out_min = G_MININT; + *out_max = G_MAXINT; + } else if (G_TYPE_IS_FLAGS(gtype)) { + *out_min = 0; + *out_max = (int) G_MAXUINT; + } else { + g_assert_not_reached(); + } + + return FALSE; +} + +/*****************************************************************************/ + static gboolean _set_fcn_gobject_string(ARGS_SET_FCN) { @@ -1318,10 +1397,9 @@ _set_fcn_gobject_int(ARGS_SET_FCN) nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; gboolean is_uint64; NMMetaSignUnsignInt64 v; - gboolean has_minmax = FALSE; - NMMetaSignUnsignInt64 min = {0}; - NMMetaSignUnsignInt64 max = {0}; - guint base = 10; + NMMetaSignUnsignInt64 min = {0}; + NMMetaSignUnsignInt64 max = {0}; + guint base = 10; const NMMetaUtilsIntValueInfo *value_infos; if (_SET_FCN_DO_RESET_DEFAULT(property_info, modifier, value)) @@ -1351,53 +1429,9 @@ _set_fcn_gobject_int(ARGS_SET_FCN) if (property_info->property_typ_data->subtype.gobject_int.base > 0) base = property_info->property_typ_data->subtype.gobject_int.base; - - if ((is_uint64 - && (property_info->property_typ_data->subtype.gobject_int.min.u64 - || property_info->property_typ_data->subtype.gobject_int.max.u64)) - || (!is_uint64 - && (property_info->property_typ_data->subtype.gobject_int.min.i64 - || property_info->property_typ_data->subtype.gobject_int.max.i64))) { - min = property_info->property_typ_data->subtype.gobject_int.min; - max = property_info->property_typ_data->subtype.gobject_int.max; - has_minmax = TRUE; - } } - if (!has_minmax) { - switch (pspec->value_type) { - case G_TYPE_INT: - { - const GParamSpecInt *p = (GParamSpecInt *) pspec; - - min.i64 = p->minimum; - max.i64 = p->maximum; - } break; - case G_TYPE_UINT: - { - const GParamSpecUInt *p = (GParamSpecUInt *) pspec; - - min.u64 = p->minimum; - max.u64 = p->maximum; - } break; - case G_TYPE_INT64: - { - const GParamSpecInt64 *p = (GParamSpecInt64 *) pspec; - - min.i64 = p->minimum; - max.i64 = p->maximum; - } break; - case G_TYPE_UINT64: - { - const GParamSpecUInt64 *p = (GParamSpecUInt64 *) pspec; - - min.u64 = p->minimum; - max.u64 = p->maximum; - } break; - default: - g_return_val_if_reached(FALSE); - } - } + nm_meta_property_int_get_range(property_info, &min, &max); if (is_uint64) v.u64 = _nm_utils_ascii_str_to_uint64(value, base, min.u64, max.u64, 0); @@ -1523,7 +1557,11 @@ _set_fcn_gobject_mac(ARGS_SET_FCN) } else { valid = nm_utils_hwaddr_valid(value, ETH_ALEN) - || (mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED && NM_CLONED_MAC_IS_SPECIAL(value)); + || (NM_IN_SET(mode, + NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET, + NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI) + && NM_CLONED_MAC_IS_SPECIAL(value, + mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI)); } if (!valid) { @@ -1541,14 +1579,12 @@ _set_fcn_gobject_mac(ARGS_SET_FCN) static gboolean _set_fcn_gobject_enum(ARGS_SET_FCN) { - GType gtype = 0; - GType gtype_prop; - gboolean has_gtype = FALSE; - nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; - nm_auto_unref_gtypeclass GTypeClass *gtype_prop_class = NULL; - nm_auto_unref_gtypeclass GTypeClass *gtype_class = NULL; - gboolean is_flags; - int v; + GType gtype = 0; + GType gtype_prop; + gboolean has_gtype = FALSE; + nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; + gboolean is_flags; + int v; if (_SET_FCN_DO_RESET_DEFAULT_WITH_SUPPORTS_REMOVE(property_info, modifier, value)) return _gobject_property_reset_default(setting, property_info->property_name); @@ -1562,17 +1598,15 @@ _set_fcn_gobject_enum(ARGS_SET_FCN) gtype_prop = _gobject_property_get_gtype(G_OBJECT(setting), property_info->property_name); - if (has_gtype && NM_IN_SET(gtype_prop, G_TYPE_INT, G_TYPE_UINT) && G_TYPE_IS_CLASSED(gtype) - && (gtype_prop_class = g_type_class_ref(gtype)) - && ((is_flags = G_IS_FLAGS_CLASS(gtype_prop_class)) || G_IS_ENUM_CLASS(gtype_prop_class))) { - /* valid */ - } else if (!has_gtype && G_TYPE_IS_CLASSED(gtype_prop) - && (gtype_prop_class = g_type_class_ref(gtype_prop)) - && ((is_flags = G_IS_FLAGS_CLASS(gtype_prop_class)) - || G_IS_ENUM_CLASS(gtype_prop_class))) { + if (has_gtype) { + /* if the property is already enum, don't set get_gtype: it's redundant and error prone */ + g_return_val_if_fail(NM_IN_SET(gtype_prop, G_TYPE_INT, G_TYPE_UINT), FALSE); + } else { gtype = gtype_prop; - } else - g_return_val_if_reached(FALSE); + } + + g_return_val_if_fail(G_TYPE_IS_FLAGS(gtype) || G_TYPE_IS_ENUM(gtype), FALSE); + is_flags = G_TYPE_IS_FLAGS(gtype); if (!_nm_utils_enum_from_str_full( gtype, @@ -1593,9 +1627,7 @@ _set_fcn_gobject_enum(ARGS_SET_FCN) v); } - gtype_class = g_type_class_ref(gtype); - - if (G_IS_FLAGS_CLASS(gtype_class) && !_SET_FCN_DO_SET_ALL(modifier, value)) { + if (is_flags && !_SET_FCN_DO_SET_ALL(modifier, value)) { nm_auto_unset_gvalue GValue int_value = {}; guint v_flag; @@ -1614,13 +1646,10 @@ _set_fcn_gobject_enum(ARGS_SET_FCN) g_value_set_int(&gval, v); else if (gtype_prop == G_TYPE_UINT) g_value_set_uint(&gval, v); - else if (is_flags) { - nm_assert(G_IS_FLAGS_CLASS(gtype_prop_class)); + else if (is_flags) g_value_set_flags(&gval, v); - } else { - nm_assert(G_IS_ENUM_CLASS(gtype_prop_class)); + else g_value_set_enum(&gval, v); - } if (!nm_g_object_set_property(G_OBJECT(setting), property_info->property_name, &gval, NULL)) goto fail; @@ -1629,26 +1658,12 @@ _set_fcn_gobject_enum(ARGS_SET_FCN) fail: if (error) { - gs_free const char **valid_all = NULL; - gs_free const char *valid_str = NULL; - gboolean has_minmax = FALSE; - int min = G_MININT; - int max = G_MAXINT; - - if (property_info->property_typ_data) { - if (property_info->property_typ_data->subtype.gobject_enum.min - || property_info->property_typ_data->subtype.gobject_enum.max) { - min = property_info->property_typ_data->subtype.gobject_enum.min; - max = property_info->property_typ_data->subtype.gobject_enum.max; - has_minmax = TRUE; - } - } - - if (!has_minmax && is_flags) { - min = 0; - max = (int) G_MAXUINT; - } + gs_free const char **valid_all = NULL; + gs_free const char *valid_str = NULL; + int min; + int max; + nm_meta_property_enum_get_range(property_info, &min, &max); valid_all = nm_utils_enum_get_values(gtype, min, max); valid_str = g_strjoinv(",", (char **) valid_all); if (is_flags) { @@ -1674,40 +1689,13 @@ static const char *const * _values_fcn_gobject_enum(ARGS_VALUES_FCN) { const NMUtilsEnumValueInfo *value_infos = NULL; - GType gtype = 0; - gboolean has_gtype = FALSE; - gboolean has_minmax = FALSE; - int min = G_MININT; - int max = G_MAXINT; + GType gtype; + int min; + int max; char **v; - if (property_info->property_typ_data) { - if (property_info->property_typ_data->subtype.gobject_enum.min - || property_info->property_typ_data->subtype.gobject_enum.max) { - min = property_info->property_typ_data->subtype.gobject_enum.min; - max = property_info->property_typ_data->subtype.gobject_enum.max; - has_minmax = TRUE; - } - if (property_info->property_typ_data->subtype.gobject_enum.get_gtype) { - gtype = property_info->property_typ_data->subtype.gobject_enum.get_gtype(); - has_gtype = TRUE; - } - } - - if (!has_gtype) { - gtype = _gtype_property_get_gtype(property_info->setting_info->general->get_setting_gtype(), - property_info->property_name); - } - - if (!has_minmax && G_TYPE_IS_CLASSED(gtype)) { - nm_auto_unref_gtypeclass GTypeClass *class = NULL; - - class = g_type_class_ref(gtype); - if (G_IS_FLAGS_CLASS(class)) { - min = 0; - max = (int) G_MAXUINT; - } - } + gtype = nm_meta_property_enum_get_type(property_info); + nm_meta_property_enum_get_range(property_info, &min, &max); /* 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 @@ -2821,7 +2809,7 @@ _complete_fcn_connection_master(ARGS_COMPLETE_FCN) * slave-type. */ s_con = nm_connection_get_setting_connection(operation_context->connection); if (s_con) - expected_type = nm_setting_connection_get_slave_type(s_con); + expected_type = nm_setting_connection_get_port_type(s_con); } text_len = text ? strlen(text) : 0; @@ -4390,6 +4378,43 @@ _set_fcn_wireless_wep_key(ARGS_SET_FCN) return TRUE; } +static gboolean +_set_fcn_wireless_mac_address_randomization(ARGS_SET_FCN) +{ + gboolean result; + + result = _set_fcn_gobject_enum(property_info, + environment, + environment_user_data, + setting, + modifier, + value, + error); + + if (result) { + NMSettingMacRandomization mac_address_randomization; + + mac_address_randomization = + nm_setting_wireless_get_mac_address_randomization(NM_SETTING_WIRELESS(setting)); + + /* "wifi.mac-address-randomization" is deprecated for "wifi.cloned-mac-address". To make that + * work, there is some normalization taking place, which mostly prefers "cloned-mac-address". + * Once set, "cloned-mac-address" will take preference. + * + * To workaround this normalization, we need to reset the "cloned-mac-address" explicitly. */ + g_object_set(setting, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, NULL, NULL); + + /* Clearing "cloned-mac-address" will also reset "mac-address-randomization". Need + * to set the value once again.*/ + g_object_set(setting, + NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, + (guint) mac_address_randomization, + NULL); + } + + return result; +} + static void _gobject_enum_pre_set_notify_fcn_wireless_security_wep_key_type( const NMMetaPropertyInfo *property_info, @@ -4437,26 +4462,33 @@ _get_fcn_ethtool(ARGS_GET_FCN) RETURN_UNSUPPORTED_GET_TYPE(); - if (nm_ethtool_id_is_coalesce(ethtool_id) || nm_ethtool_id_is_ring(ethtool_id)) { + switch (nm_ethtool_id_to_type(ethtool_id)) { + case NM_ETHTOOL_TYPE_CHANNELS: + case NM_ETHTOOL_TYPE_COALESCE: + case NM_ETHTOOL_TYPE_RING: if (!nm_setting_option_get_uint32(setting, nm_ethtool_data[ethtool_id]->optname, &u32)) { NM_SET_OUT(out_is_default, TRUE); return NULL; } RETURN_STR_TO_FREE(nm_strdup_int(u32)); - } - - nm_assert(nm_ethtool_id_is_feature(ethtool_id) || nm_ethtool_id_is_pause(ethtool_id)); + case NM_ETHTOOL_TYPE_FEATURE: + case NM_ETHTOOL_TYPE_PAUSE: + case NM_ETHTOOL_TYPE_EEE: + if (!nm_setting_option_get_boolean(setting, nm_ethtool_data[ethtool_id]->optname, &b)) { + NM_SET_OUT(out_is_default, TRUE); + return NULL; + } - if (!nm_setting_option_get_boolean(setting, nm_ethtool_data[ethtool_id]->optname, &b)) { - NM_SET_OUT(out_is_default, TRUE); - return NULL; + s = b ? N_("on") : N_("off"); + if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY) + s = gettext(s); + return s; + case NM_ETHTOOL_TYPE_UNKNOWN: + nm_assert_not_reached(); } - s = b ? N_("on") : N_("off"); - if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY) - s = gettext(s); - return s; + return NULL; } static gboolean @@ -4469,7 +4501,10 @@ _set_fcn_ethtool(ARGS_SET_FCN) if (_SET_FCN_DO_RESET_DEFAULT(property_info, modifier, value)) goto do_unset; - if (nm_ethtool_id_is_coalesce(ethtool_id) || nm_ethtool_id_is_ring(ethtool_id)) { + switch (nm_ethtool_id_to_type(ethtool_id)) { + case NM_ETHTOOL_TYPE_CHANNELS: + case NM_ETHTOOL_TYPE_COALESCE: + case NM_ETHTOOL_TYPE_RING: i64 = _nm_utils_ascii_str_to_int64(value, 10, 0, G_MAXUINT32, -1); if (i64 == -1) { nm_utils_error_set( @@ -4484,25 +4519,28 @@ _set_fcn_ethtool(ARGS_SET_FCN) nm_setting_option_set_uint32(setting, nm_ethtool_data[ethtool_id]->optname, i64); return TRUE; - } - - nm_assert(nm_ethtool_id_is_feature(ethtool_id) || nm_ethtool_id_is_pause(ethtool_id)); + case NM_ETHTOOL_TYPE_FEATURE: + case NM_ETHTOOL_TYPE_PAUSE: + case NM_ETHTOOL_TYPE_EEE: + if (!nmc_string_to_ternary_full(value, + NMC_STRING_TO_TERNARY_FLAGS_IGNORE_FOR_DEFAULT, + &t, + NULL)) { + nm_utils_error_set(error, + NM_UTILS_ERROR_INVALID_ARGUMENT, + _("'%s' is not valid; use 'on', 'off', or 'ignore'"), + value); + return FALSE; + } + if (t == NM_TERNARY_DEFAULT) + goto do_unset; - if (!nmc_string_to_ternary_full(value, - NMC_STRING_TO_TERNARY_FLAGS_IGNORE_FOR_DEFAULT, - &t, - NULL)) { - nm_utils_error_set(error, - NM_UTILS_ERROR_INVALID_ARGUMENT, - _("'%s' is not valid; use 'on', 'off', or 'ignore'"), - value); - return FALSE; + nm_setting_option_set_boolean(setting, nm_ethtool_data[ethtool_id]->optname, !!t); + return TRUE; + case NM_ETHTOOL_TYPE_UNKNOWN: + nm_assert_not_reached(); } - if (t == NM_TERNARY_DEFAULT) - goto do_unset; - - nm_setting_option_set_boolean(setting, nm_ethtool_data[ethtool_id]->optname, !!t); - return TRUE; + return FALSE; do_unset: nm_setting_option_set(setting, nm_ethtool_data[ethtool_id]->optname, NULL); @@ -4661,44 +4699,52 @@ static const NMMetaPropertyType _pt_gobject_readonly = { static const NMMetaPropertyType _pt_gobject_string = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_string, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, }; static const NMMetaPropertyType _pt_gobject_bool = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_bool, .complete_fcn = _complete_fcn_gobject_bool, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_BOOL, }; static const NMMetaPropertyType _pt_gobject_ternary = { .get_fcn = _get_fcn_gobject_enum, .set_fcn = _set_fcn_gobject_ternary, .complete_fcn = _complete_fcn_gobject_ternary, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_TERNARY, }; static const NMMetaPropertyType _pt_gobject_int = { .get_fcn = _get_fcn_gobject_int, .set_fcn = _set_fcn_gobject_int, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_INT, }; static const NMMetaPropertyType _pt_gobject_mtu = { .get_fcn = _get_fcn_gobject_mtu, .set_fcn = _set_fcn_gobject_mtu, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_MTU, }; static const NMMetaPropertyType _pt_gobject_bytes = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_bytes, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_BYTES, }; static const NMMetaPropertyType _pt_gobject_mac = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_mac, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_MAC, }; static const NMMetaPropertyType _pt_gobject_secret_flags = { .get_fcn = _get_fcn_gobject_secret_flags, .set_fcn = _set_fcn_gobject_enum, .values_fcn = _values_fcn_gobject_enum, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_SECRET_FLAGS, .set_supports_remove = TRUE, }; @@ -4706,6 +4752,7 @@ static const NMMetaPropertyType _pt_gobject_enum = { .get_fcn = _get_fcn_gobject_enum, .set_fcn = _set_fcn_gobject_enum, .values_fcn = _values_fcn_gobject_enum, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_ENUM, .set_supports_remove = TRUE, }; @@ -4713,45 +4760,53 @@ static const NMMetaPropertyType _pt_gobject_devices = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_string, .complete_fcn = _complete_fcn_gobject_devices, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, }; static const NMMetaPropertyType _pt_dcb_flags = { .get_fcn = _get_fcn_dcb_flags, .set_fcn = _set_fcn_dcb_flags, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_DCB_FLAGS, }; static const NMMetaPropertyType _pt_dcb_bool = { .get_fcn = _get_fcn_dcb_bool, .set_fcn = _set_fcn_dcb_bool, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_DCB_BOOL, }; static const NMMetaPropertyType _pt_dcb = { .get_fcn = _get_fcn_dcb, .set_fcn = _set_fcn_dcb, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_DCB, }; static const NMMetaPropertyType _pt_cert_8021x = { .get_fcn = _get_fcn_cert_8021x, .set_fcn = _set_fcn_cert_8021x, .complete_fcn = _complete_fcn_cert_8021x, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_PATH, }; static const NMMetaPropertyType _pt_ethtool = { .get_fcn = _get_fcn_ethtool, .set_fcn = _set_fcn_ethtool, .complete_fcn = _complete_fcn_ethtool, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_ETHTOOL, }; static const NMMetaPropertyType _pt_multilist = { .get_fcn = _get_fcn_multilist, .set_fcn = _set_fcn_multilist, .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_MULTILIST, }; static const NMMetaPropertyType _pt_objlist = { - .get_fcn = _get_fcn_objlist, - .set_fcn = _set_fcn_objlist, - .set_supports_remove = TRUE, + .get_fcn = _get_fcn_objlist, + .set_fcn = _set_fcn_objlist, + .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OBJLIST, }; #define MULTILIST_GET_NUM_FCN_U32(type, func) (((func) == ((guint32 (*) (type * )) (func))) ? ((guint32 (*) (NMSetting * )) (func)) : NULL) @@ -4879,6 +4934,7 @@ static const NMMetaPropertyInfo *const property_infos_802_1X[] = { .strsplit_plain = TRUE, ), .values_static = NM_MAKE_STRV ("leap", "md5", "tls", "peap", "ttls", "sim", "fast", "pwd"), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_802_1X_IDENTITY, @@ -4924,6 +4980,7 @@ static const NMMetaPropertyInfo *const property_infos_802_1X[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSetting8021x, nm_setting_802_1x_remove_altsubject_match_by_value), .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH, @@ -5009,7 +5066,11 @@ static const NMMetaPropertyInfo *const property_infos_802_1X[] = { .property_type = &_pt_gobject_secret_flags, ), PROPERTY_INFO_WITH_DESC (NM_SETTING_802_1X_PHASE2_CA_PATH, - .property_type = &_pt_gobject_string, + .property_type = DEFINE_PROPERTY_TYPE( + .get_fcn = _get_fcn_gobject, + .set_fcn = _set_fcn_gobject_string, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_PATH, + ) ), PROPERTY_INFO_WITH_DESC (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, .property_type = &_pt_gobject_string, @@ -5024,6 +5085,7 @@ static const NMMetaPropertyInfo *const property_infos_802_1X[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSetting8021x, nm_setting_802_1x_remove_phase2_altsubject_match_by_value), .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH, @@ -5215,6 +5277,7 @@ static const NMMetaPropertyInfo property_info_BOND_OPTIONS = .set_fcn = _set_fcn_optionlist, .set_supports_remove = TRUE, .values_fcn = _values_fcn_bond_options, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OPTIONLIST, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( PROPERTY_TYP_DATA_SUBTYPE (optionlist, @@ -5469,10 +5532,11 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .property_type = &_pt_gobject_string, ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_UUID, - .property_type = DEFINE_PROPERTY_TYPE ( - .get_fcn = _get_fcn_gobject, - .set_fcn = _set_fcn_connection_uuid, - ), + .property_type = DEFINE_PROPERTY_TYPE ( + .get_fcn = _get_fcn_gobject, + .set_fcn = _set_fcn_connection_uuid, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, + ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_STABLE_ID, .property_type = &_pt_gobject_string, @@ -5487,6 +5551,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_connection_type, .complete_fcn = _complete_fcn_connection_type, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_INTERFACE_NAME, @@ -5497,6 +5562,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_ifname, .complete_fcn = _complete_fcn_gobject_devices, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_AUTOCONNECT, @@ -5547,6 +5613,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .get_fcn = _get_fcn_connection_permissions, .set_fcn = _set_fcn_multilist, .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_MULTILIST, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( PROPERTY_TYP_DATA_SUBTYPE (multilist, @@ -5557,11 +5624,24 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .validate2_fcn = _multilist_validate2_fcn_connection_permissions, .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_ZONE, .property_type = &_pt_gobject_string, ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_CONTROLLER, + .is_cli_option = TRUE, + .property_alias = "controller", + .inf_flags = NM_META_PROPERTY_INF_FLAG_DONT_ASK, + .prompt = N_("Controller"), + .property_type = DEFINE_PROPERTY_TYPE ( + .get_fcn = _get_fcn_gobject, + .set_fcn = _set_fcn_gobject_string, + .complete_fcn = _complete_fcn_connection_master, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, + ), + ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_MASTER, .is_cli_option = TRUE, .property_alias = "master", @@ -5571,6 +5651,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_string, .complete_fcn = _complete_fcn_connection_master, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_SLAVE_TYPE, @@ -5587,6 +5668,20 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { NM_SETTING_VRF_SETTING_NAME), ), ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_PORT_TYPE, + .is_cli_option = TRUE, + .property_alias = "port-type", + .inf_flags = NM_META_PROPERTY_INF_FLAG_DONT_ASK, + .property_type = &_pt_gobject_string, + .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( + .values_static = NM_MAKE_STRV (NM_SETTING_BOND_SETTING_NAME, + NM_SETTING_BRIDGE_SETTING_NAME, + NM_SETTING_OVS_BRIDGE_SETTING_NAME, + NM_SETTING_OVS_PORT_SETTING_NAME, + NM_SETTING_TEAM_SETTING_NAME, + NM_SETTING_VRF_SETTING_NAME), + ), + ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES, .property_type = &_pt_gobject_enum, ), @@ -5608,6 +5703,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .validate2_fcn = _multilist_validate2_fcn_uuid, .strsplit_with_spaces = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, @@ -5623,9 +5719,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_connection_metered, .set_fcn = _set_fcn_connection_metered, - ), - .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( - .values_static = NM_MAKE_STRV ("yes", "no", "unknown"), + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_TERNARY, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_CONNECTION_LLDP, @@ -5901,10 +5995,15 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = { DEFINE_PROPERTY_TYP_DATA_SUBTYPE (ethtool, .ethtool_id = NM_ETHTOOL_ID_PAUSE_TX) ), + PROPERTY_INFO_ETHTOOL (EEE_ENABLED), PROPERTY_INFO_ETHTOOL (RING_RX), PROPERTY_INFO_ETHTOOL (RING_RX_JUMBO), PROPERTY_INFO_ETHTOOL (RING_RX_MINI), PROPERTY_INFO_ETHTOOL (RING_TX), + PROPERTY_INFO_ETHTOOL (CHANNELS_RX), + PROPERTY_INFO_ETHTOOL (CHANNELS_TX), + PROPERTY_INFO_ETHTOOL (CHANNELS_OTHER), + PROPERTY_INFO_ETHTOOL (CHANNELS_COMBINED), NULL, }; @@ -5916,6 +6015,7 @@ static const NMMetaPropertyInfo *const property_infos_GSM[] = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gsm_auto_config, .complete_fcn = _complete_fcn_gobject_bool, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_BOOL, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_GSM_NUMBER, @@ -5969,6 +6069,7 @@ static const NMMetaPropertyInfo *const property_infos_GSM[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gsm_sim_operator_id, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_GSM_MTU, @@ -5987,6 +6088,36 @@ static const NMMetaPropertyInfo *const property_infos_GSM[] = { }; #undef _CURRENT_NM_META_SETTING_TYPE +#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_HSR +static const NMMetaPropertyInfo *const property_infos_HSR[] = { + PROPERTY_INFO_WITH_DESC (NM_SETTING_HSR_PORT1, + .is_cli_option = TRUE, + .property_alias = "port1", + .inf_flags = NM_META_PROPERTY_INF_FLAG_REQD, + .prompt = N_("hsr port1"), + .property_type = &_pt_gobject_string, + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_HSR_PORT2, + .is_cli_option = TRUE, + .property_alias = "port2", + .inf_flags = NM_META_PROPERTY_INF_FLAG_REQD, + .prompt = N_("hsr port2"), + .property_type = &_pt_gobject_string, + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_HSR_MULTICAST_SPEC, + .is_cli_option = TRUE, + .property_alias = "multicast-spec", + .prompt = N_("hsr multicast spec"), + .property_type = &_pt_gobject_int, + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_HSR_PRP, + .property_type = &_pt_gobject_bool, + ), + NULL +}; + + +#undef _CURRENT_NM_META_SETTING_TYPE #define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_HOSTNAME static const NMMetaPropertyInfo *const property_infos_HOSTNAME[] = { PROPERTY_INFO (NM_SETTING_HOSTNAME_PRIORITY, DESCRIBE_DOC_NM_SETTING_HOSTNAME_PRIORITY, @@ -6042,7 +6173,16 @@ static const NMMetaPropertyInfo *const property_infos_INFINIBAND[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_infiniband_p_key, .set_fcn = _set_fcn_infiniband_p_key, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_INT, ), + .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE(gobject_int, + .value_infos = INT_VALUE_INFOS ( + { + .value.i64 = -1, + .nick = "default", + }, + ), + ) ), PROPERTY_INFO_WITH_DESC (NM_SETTING_INFINIBAND_PARENT, .is_cli_option = TRUE, @@ -6051,6 +6191,7 @@ static const NMMetaPropertyInfo *const property_infos_INFINIBAND[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_gobject_ifname, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), NULL @@ -6063,6 +6204,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_ip_config_method, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( .values_static = NM_MAKE_STRV (NM_SETTING_IP4_CONFIG_METHOD_AUTO, @@ -6085,6 +6227,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingIPConfig, nm_setting_ip_config_remove_dns_by_value), .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_IPV4, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_DNS_SEARCH, DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DNS_SEARCH, @@ -6098,6 +6241,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .validate_fcn = _multilist_validate_fcn_is_domain, .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_DNS_OPTIONS, DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DNS_OPTIONS, @@ -6112,6 +6256,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .strsplit_plain = TRUE, ), .is_default_fcn = _is_default_func_ip_config_dns_options, + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_DNS_PRIORITY, DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DNS_PRIORITY, @@ -6146,6 +6291,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_ip_config_gateway, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_IPV4, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_ROUTES, DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ROUTES, @@ -6298,6 +6444,7 @@ static const NMMetaPropertyInfo *const property_infos_IP4_CONFIG[] = { .validate_fcn = _multilist_validate_fcn_is_ipv4_addr_or_subnet, .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_IPV4, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_AUTO_ROUTE_EXT_GW, DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_AUTO_ROUTE_EXT_GW, @@ -6313,6 +6460,7 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_ip_config_method, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( .values_static = NM_MAKE_STRV (NM_SETTING_IP6_CONFIG_METHOD_IGNORE, @@ -6343,6 +6491,7 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingIPConfig, nm_setting_ip_config_remove_dns_by_value), .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_IPV6, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_DNS_SEARCH, DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DNS_SEARCH, @@ -6356,6 +6505,7 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = { .validate_fcn = _multilist_validate_fcn_is_domain, .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_DNS_OPTIONS, DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DNS_OPTIONS, @@ -6370,6 +6520,7 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = { .strsplit_plain = TRUE, ), .is_default_fcn = _is_default_func_ip_config_dns_options, + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_DNS_PRIORITY, DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DNS_PRIORITY, @@ -6404,6 +6555,7 @@ static const NMMetaPropertyInfo *const property_infos_IP6_CONFIG[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_ip_config_gateway, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_IPV6, ), ), PROPERTY_INFO (NM_SETTING_IP_CONFIG_ROUTES, DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ROUTES, @@ -6823,6 +6975,7 @@ static const NMMetaPropertyInfo *const property_infos_MATCH[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingMatch, nm_setting_match_remove_interface_name_by_value), .strsplit_with_spaces = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_MATCH_KERNEL_COMMAND_LINE, @@ -6835,6 +6988,7 @@ static const NMMetaPropertyInfo *const property_infos_MATCH[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingMatch, nm_setting_match_remove_kernel_command_line_by_value), .strsplit_with_spaces = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_MATCH_DRIVER, @@ -6847,6 +7001,7 @@ static const NMMetaPropertyInfo *const property_infos_MATCH[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingMatch, nm_setting_match_remove_driver_by_value), .strsplit_with_spaces = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_MATCH_PATH, @@ -6859,6 +7014,7 @@ static const NMMetaPropertyInfo *const property_infos_MATCH[] = { .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingMatch, nm_setting_match_remove_path_by_value), .strsplit_with_spaces = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), NULL @@ -6875,6 +7031,7 @@ static const NMMetaPropertyInfo *const property_infos_OLPC_MESH[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_olpc_mesh_ssid, .set_fcn = _set_fcn_gobject_ssid, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_OLPC_MESH_CHANNEL, @@ -6884,6 +7041,7 @@ static const NMMetaPropertyInfo *const property_infos_OLPC_MESH[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_olpc_mesh_channel, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_INT, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, @@ -7360,6 +7518,7 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = { ), .values_static = NM_MAKE_STRV ("eth", "vlan", "ipv4", "ipv6", "ip", "l3", "tcp", "udp", "sctp", "l4"), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_TEAM_RUNNER_TX_BALANCER, @@ -7620,6 +7779,7 @@ static const NMMetaPropertyInfo *const property_infos_VLAN[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_vlan_flags, .set_fcn = _set_fcn_gobject_flags, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_ENUM, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_VLAN_PROTOCOL, @@ -7636,6 +7796,7 @@ static const NMMetaPropertyInfo *const property_infos_VLAN[] = { .get_fcn = _get_fcn_vlan_xgress_priority_map, .set_fcn = _set_fcn_vlan_xgress_priority_map, .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OBJLIST, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, @@ -7646,6 +7807,7 @@ static const NMMetaPropertyInfo *const property_infos_VLAN[] = { .get_fcn = _get_fcn_vlan_xgress_priority_map, .set_fcn = _set_fcn_vlan_xgress_priority_map, .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OBJLIST, ), ), NULL @@ -7664,6 +7826,7 @@ static const NMMetaPropertyInfo *const property_infos_VPN[] = { .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_vpn_service_type, .complete_fcn = _complete_fcn_vpn_service_type, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_VPN_USER_NAME, @@ -7677,6 +7840,7 @@ static const NMMetaPropertyInfo *const property_infos_VPN[] = { .get_fcn = _get_fcn_vpn_options, .set_fcn = _set_fcn_optionlist, .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OPTIONLIST, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (optionlist, .set_fcn = _optionlist_set_fcn_vpn_data, @@ -7688,6 +7852,7 @@ static const NMMetaPropertyInfo *const property_infos_VPN[] = { .get_fcn = _get_fcn_vpn_options, .set_fcn = _set_fcn_optionlist, .set_supports_remove = TRUE, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OPTIONLIST, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (optionlist, .set_fcn = _optionlist_set_fcn_vpn_secrets, @@ -7869,7 +8034,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRED[] = { .prompt = N_("Cloned MAC [none]"), .property_type = &_pt_gobject_mac, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (mac, - .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED, + .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK, @@ -7886,6 +8051,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRED[] = { .validate2_fcn = _multilist_validate2_fcn_mac_addr, .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_MAC, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRED_MTU, @@ -7904,6 +8070,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRED[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_wired_s390_subchannels, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OBJLIST, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRED_S390_NETTYPE, @@ -7919,6 +8086,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRED[] = { .set_fcn = _set_fcn_optionlist, .set_supports_remove = TRUE, .values_fcn = _values_fcn_wired_s390_options, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_OPTIONLIST, ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (optionlist, .set_fcn = _optionlist_set_fcn_wired_s390_options, @@ -8003,6 +8171,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_wireless_ssid, .set_fcn = _set_fcn_gobject_ssid, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_MODE, @@ -8028,6 +8197,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_gobject, .set_fcn = _set_fcn_wireless_channel, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_INT, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_BSSID, @@ -8045,7 +8215,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS[] = { .prompt = N_("Cloned MAC [none]"), .property_type = &_pt_gobject_mac, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (mac, - .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED, + .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK, @@ -8062,10 +8232,17 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS[] = { .validate2_fcn = _multilist_validate2_fcn_mac_addr, .strsplit_plain = TRUE, ), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_MAC, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, - .property_type = &_pt_gobject_enum, + .property_type = DEFINE_PROPERTY_TYPE ( + .get_fcn = _get_fcn_gobject_enum, + .set_fcn = _set_fcn_wireless_mac_address_randomization, + .values_fcn = _values_fcn_gobject_enum, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_ENUM, + .set_supports_remove = TRUE, + ), .property_typ_data = DEFINE_PROPERTY_TYP_DATA ( PROPERTY_TYP_DATA_SUBTYPE (gobject_enum, .get_gtype = nm_setting_mac_randomization_get_type, @@ -8147,6 +8324,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .strsplit_plain = TRUE, ), .values_static = NM_MAKE_STRV ("wpa", "rsn"), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_PAIRWISE, @@ -8160,6 +8338,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .strsplit_plain = TRUE, ), .values_static = NM_MAKE_STRV ("tkip", "ccmp"), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_GROUP, @@ -8173,6 +8352,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .strsplit_plain = TRUE, ), .values_static = NM_MAKE_STRV ("wep40", "wep104", "tkip", "ccmp"), + .list_items_doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_PMF, @@ -8191,6 +8371,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_wireless_security_wep_key, .set_fcn = _set_fcn_wireless_wep_key, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, @@ -8198,6 +8379,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_wireless_security_wep_key, .set_fcn = _set_fcn_wireless_wep_key, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, @@ -8205,6 +8387,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_wireless_security_wep_key, .set_fcn = _set_fcn_wireless_wep_key, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, @@ -8212,6 +8395,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { .property_type = DEFINE_PROPERTY_TYPE ( .get_fcn = _get_fcn_wireless_security_wep_key, .set_fcn = _set_fcn_wireless_wep_key, + .doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING, ), ), PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, @@ -8474,6 +8658,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN) #define SETTING_PRETTY_NAME_GENERIC N_("Generic settings") #define SETTING_PRETTY_NAME_GSM N_("GSM mobile broadband connection") #define SETTING_PRETTY_NAME_HOSTNAME N_("Hostname settings") +#define SETTING_PRETTY_NAME_HSR N_("HSR settings") #define SETTING_PRETTY_NAME_INFINIBAND N_("InfiniBand connection") #define SETTING_PRETTY_NAME_IP4_CONFIG N_("IPv4 protocol") #define SETTING_PRETTY_NAME_IP6_CONFIG N_("IPv6 protocol") @@ -8617,6 +8802,12 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { .setting_init_fcn = _setting_init_fcn_gsm, ), SETTING_INFO (HOSTNAME), + SETTING_INFO (HSR, + .valid_parts = NM_META_SETTING_VALID_PARTS ( + NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), + NM_META_SETTING_VALID_PART_ITEM (HSR, TRUE), + ), + ), SETTING_INFO (INFINIBAND, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), diff --git a/src/libnmc-setting/nm-meta-setting-desc.h b/src/libnmc-setting/nm-meta-setting-desc.h index 8e3383cc..f8e36b0e 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.h +++ b/src/libnmc-setting/nm-meta-setting-desc.h @@ -178,11 +178,35 @@ typedef enum { typedef enum { NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT, - NM_META_PROPERTY_TYPE_MAC_MODE_CLONED, + NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET, + NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI, NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND, NM_META_PROPERTY_TYPE_MAC_MODE_WPAN, } NMMetaPropertyTypeMacMode; +typedef enum _nm_packed { + NM_META_PROPERTY_TYPE_FORMAT_UNDEF = 0, + NM_META_PROPERTY_TYPE_FORMAT_INT, + NM_META_PROPERTY_TYPE_FORMAT_STRING, + NM_META_PROPERTY_TYPE_FORMAT_ENUM, + NM_META_PROPERTY_TYPE_FORMAT_SECRET_FLAGS, + NM_META_PROPERTY_TYPE_FORMAT_BOOL, + NM_META_PROPERTY_TYPE_FORMAT_TERNARY, + NM_META_PROPERTY_TYPE_FORMAT_MAC, + NM_META_PROPERTY_TYPE_FORMAT_IPV4, + NM_META_PROPERTY_TYPE_FORMAT_IPV6, + NM_META_PROPERTY_TYPE_FORMAT_MTU, + NM_META_PROPERTY_TYPE_FORMAT_BYTES, + NM_META_PROPERTY_TYPE_FORMAT_PATH, + NM_META_PROPERTY_TYPE_FORMAT_ETHTOOL, + NM_META_PROPERTY_TYPE_FORMAT_MULTILIST, + NM_META_PROPERTY_TYPE_FORMAT_OBJLIST, + NM_META_PROPERTY_TYPE_FORMAT_OPTIONLIST, + NM_META_PROPERTY_TYPE_FORMAT_DCB, + NM_META_PROPERTY_TYPE_FORMAT_DCB_BOOL, + NM_META_PROPERTY_TYPE_FORMAT_DCB_FLAGS, +} NMMetaPropertyTypeFormat; + typedef struct _NMMetaEnvironment NMMetaEnvironment; typedef struct _NMMetaType NMMetaType; typedef struct _NMMetaAbstractInfo NMMetaAbstractInfo; @@ -232,6 +256,8 @@ struct _NMMetaPropertyType { gboolean *out_complete_filename, char ***out_to_free); + NMMetaPropertyTypeFormat doc_format; + /* Whether set_fcn() supports the '-' modifier. That is, whether the property * is a list type. */ bool set_supports_remove : 1; @@ -252,7 +278,7 @@ typedef struct { struct _NMMetaPropertyTypData { union { struct { - GType (*get_gtype)(void); + GType (*get_gtype)(void); /* note: only allowed for int/uint properties */ int min; int max; const struct _NMUtilsEnumValueInfo *value_infos_get; /* nicks for get function */ @@ -350,6 +376,7 @@ struct _NMMetaPropertyTypData { const char *const *values_static; const NMMetaPropertyTypDataNested *nested; NMMetaPropertyTypFlags typ_flags; + NMMetaPropertyTypeFormat list_items_doc_format; }; typedef enum { @@ -479,6 +506,16 @@ const NMMetaSettingValidPartItem *const * nm_meta_setting_info_valid_parts_for_slave_type(const char *slave_type, const char **out_slave_name); +gboolean nm_meta_property_int_get_range(const NMMetaPropertyInfo *property_info, + NMMetaSignUnsignInt64 *out_min, + NMMetaSignUnsignInt64 *out_max); + +gboolean nm_meta_property_enum_get_range(const NMMetaPropertyInfo *property_info, + int *out_min, + int *out_max); + +GType nm_meta_property_enum_get_type(const NMMetaPropertyInfo *property_info); + /*****************************************************************************/ typedef enum { diff --git a/src/libnmc-setting/settings-docs.h b/src/libnmc-setting/settings-docs.h index bdda8e50..77cde662 100644 --- a/src/libnmc-setting/settings-docs.h +++ b/src/libnmc-setting/settings-docs.h @@ -5,23 +5,25 @@ #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY N_("The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES N_("The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_CONTROLLER N_("Interface name of the controller device or UUID of the controller connection.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_DNS_OVER_TLS N_("Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: \"yes\" (2) use DNSOverTls and disabled fallback, \"opportunistic\" (1) use DNSOverTls but allow fallback to unencrypted resolution, \"no\" (0) don't ever use DNSOverTls. If unspecified \"default\" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT N_("If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_ID N_("A human readable unique identifier for the connection, like \"Work Wi-Fi\" or \"T-Mobile 3G\".") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_INTERFACE_NAME N_("The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_LLDP N_("Whether LLDP is enabled for the connection.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_LLMNR N_("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.") -#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_MASTER N_("Interface name of the master device or UUID of the master connection. Deprecated 1.46. Use \"controller\" instead, this is just an alias.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MDNS N_("Whether mDNS is enabled for the connection. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable mDNS for the interface, \"resolve\" (1) do not register hostname but allow resolving of mDNS host names and \"default\" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, \"default\" ultimately depends on the DNS plugin (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. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The \"enabled\" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless \"/proc/sys/net/mptcp/enabled\" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, \"also-without-sysctl\" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag \"also-without-default-route\" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is \"enabled,subflow\". Note that this means that MPTCP is by default done depending on the \"/proc/sys/net/mptcp/enabled\" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_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.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_PORT_TYPE N_("Setting name of the device type of this port's controller connection (eg, \"bond\"), or NULL if this connection is not a port.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_READ_ONLY N_("This property is deprecated and has no meaning.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_SECONDARIES N_("List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are \"${CONNECTION}\", \"${DEVICE}\", \"${MAC}\", \"${BOOT}\", \"${RANDOM}\". These effectively create unique IDs per-connection, per-device, per-boot, or every time. The \"${CONNECTION}\" uses the profile's connection.uuid, the \"${DEVICE}\" uses the interface name of the device and \"${MAC}\" the permanent MAC address of the device. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as \"$$\". For example, set it to \"${CONNECTION}-${BOOT}-${DEVICE}\" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is \"default${CONNECTION}\" go generate an ID unique per connection profile.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave. Deprecated 1.46. Use \"port-type\" instead, this is just an alias.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are \"${CONNECTION}\", \"${DEVICE}\", \"${MAC}\", \"${NETWORK_SSID}\", \"${BOOT}\", \"${RANDOM}\". These effectively create unique IDs per-connection, per-device, per-SSID, per-boot, or every time. The \"${CONNECTION}\" uses the profile's connection.uuid, the \"${DEVICE}\" uses the interface name of the device and \"${MAC}\" the permanent MAC address of the device. \"${NETWORK_SSID}\" uses the SSID for Wi-Fi networks and falls back to \"${CONNECTION}\" on other networks. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as \"$$\". For example, set it to \"${CONNECTION}-${BOOT}-${DEVICE}\" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is \"default${CONNECTION}\" go generate an ID unique per connection profile.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TIMESTAMP N_("The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TYPE N_("Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, \"802-3-ethernet\" or \"802-11-wireless\" or \"bluetooth\", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, \"vpn\" or \"bridge\", etc).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_UUID N_("The connection.uuid is the real identifier of a profile. It cannot change and it must be unique. It is therefore often best to refer to a profile by UUID, for example with `nmcli connection up uuid $UUID`. The UUID cannot be changed, except in offline mode. In that case, the special values \"new\", \"generate\" and \"\" are allowed to generate a new random UUID.") @@ -122,22 +124,22 @@ #define DESCRIBE_DOC_NM_SETTING_CDMA_PASSWORD N_("The password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here.") #define DESCRIBE_DOC_NM_SETTING_CDMA_PASSWORD_FLAGS N_("Flags indicating how to handle the \"password\" property.") #define DESCRIBE_DOC_NM_SETTING_CDMA_USERNAME N_("The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") #define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_MODE N_("The FCoE controller mode; either \"fabric\" or \"vn2vn\". Since 1.34, NULL is the default and means \"fabric\". Before 1.34, NULL was rejected as invalid and the default was \"fabric\".") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_PRIORITY N_("The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the \"app-fcoe-flags\" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_PRIORITY N_("The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the \"app-fip-flags\" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_PRIORITY N_("The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the \"app-iscsi-flags\" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_PRIORITY N_("The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the \"app-fcoe-flags\" property includes the \"enable\" (0x1) flag.") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_PRIORITY N_("The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the \"app-fip-flags\" property includes the \"enable\" (0x1) flag.") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_PRIORITY N_("The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the \"app-iscsi-flags\" property includes the \"enable\" (0x1) flag.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_BANDWIDTH N_("An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percents.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_FLOW_CONTROL N_("An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause.") -#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH N_("An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percents.") -#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_ID N_("An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH N_("An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS N_("An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped.") -#define DESCRIBE_DOC_NM_SETTING_GSM_APN N_("The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9.") +#define DESCRIBE_DOC_NM_SETTING_GSM_APN N_("The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9. If the APN is unset (the default) then it may be detected based on \"auto-config\" setting. The property can be explicitly set to the empty string to prevent that and use no APN.") #define DESCRIBE_DOC_NM_SETTING_GSM_AUTO_CONFIG N_("When TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database.") #define DESCRIBE_DOC_NM_SETTING_GSM_DEVICE_ID N_("The device unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will only apply to the specified device.") #define DESCRIBE_DOC_NM_SETTING_GSM_HOME_ONLY N_("When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.") @@ -160,11 +162,11 @@ #define DESCRIBE_DOC_NM_SETTING_INFINIBAND_TRANSPORT_MODE N_("The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\".") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ADDRESSES N_("A list of IPv4 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"192.168.1.5/24, 10.1.0.5/24\". The addresses are listed in decreasing priority, meaning the first address will be the primary address.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_AUTO_ROUTE_EXT_GW N_("VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DAD_TIMEOUT N_("Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID N_("A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values \"mac\" and \"perm-mac\" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value \"ipv6-duid\" uses the DUID from \"ipv6.dhcp-duid\" property as an RFC4361-compliant client identifier. As IAID it uses \"ipv4.dhcp-iaid\" and falls back to \"ipv6.dhcp-iaid\" if unset. The special value \"duid\" generates a RFC4361-compliant client identifier based on \"ipv4.dhcp-iaid\" and uses a DUID generated by hashing /etc/machine-id. The special value \"stable\" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the \"${DEVICE}\" or \"${MAC}\" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DAD_TIMEOUT N_("Maximum timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. The property is currently implemented only for IPv4. A zero value means that no duplicate address detection is performed, -1 means the default value (either the value configured globally in NetworkManger.conf or 200ms). A value greater than zero is a timeout in milliseconds. Note that the time intervals are subject to randomization as per RFC 5227 and so the actual duration can be between half and the full time specified in this property.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID N_("A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values \"mac\" and \"perm-mac\" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value \"ipv6-duid\" uses the DUID from \"ipv6.dhcp-duid\" property as an RFC4361-compliant client identifier. As IAID it uses \"ipv4.dhcp-iaid\" and falls back to \"ipv6.dhcp-iaid\" if unset. The special value \"duid\" generates a RFC4361-compliant client identifier based on \"ipv4.dhcp-iaid\" and uses a DUID generated by hashing /etc/machine-id. The special value \"stable\" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the \"${DEVICE}\" or \"${MAC}\" specifier to get a per-device key. The special value \"none\" prevents any client identifier from being sent. Note that this is normally not recommended. If unset, a globally configured default from NetworkManager.conf is used. If still unset, the default depends on the DHCP plugin. The internal dhcp client will default to \"mac\" and the dhclient plugin will try to use one from its config file if present, or won't sent any client-id otherwise.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_FQDN N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-hostname\" are mutually exclusive and cannot be set at the same time.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-fqdn\" are mutually exclusive and cannot be set at the same time.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) and \"fqdn-no-update\" (0x4). When no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is not set, the standard FQDN flags are set in the request: \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) for IPv4 and \"fqdn-serv-update\" (0x1) for IPv6. When this property is set to the default value \"none\" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also \"none\" (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_IAID N_("A string containing the \"Identity Association Identifier\" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values \"mac\", \"perm-mac\", \"ifname\" or \"stable\". When set to \"mac\" (or \"perm-mac\"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to \"ifname\", the IAID is computed by hashing the interface name. The special value \"stable\" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be \"ifname\". For DHCPv4, the IAID is only used with \"ipv4.dhcp-client-id\" values \"duid\" and \"ipv6-duid\" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the \"internal\" DHCPv6 plugin. The \"dhclient\" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_REJECT_SERVERS N_("Array of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. \"192.168.122.0/24\"). This property is currently not implemented for DHCPv6.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME N_("If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the \"dhcp-hostname\" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.") @@ -190,10 +192,10 @@ #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE N_("Configure method for creating the IPv6 interface identifer of addresses with RFC4862 IPv6 Stateless Address Autoconfiguration and Link Local addresses. The permitted values are: \"eui64\" (0), \"stable-privacy\" (1), \"default\" (3) or \"default-or-eui64\" (2). If the property is set to \"eui64\", the addresses will be generated using the interface token derived from hardware address. This makes the host part of the address to stay constant, making it possible to track the host's presence when it changes networks. The address changes when the interface hardware is replaced. If a duplicate address is detected, there is also no fallback to generate another address. When configured, the \"ipv6.token\" is used instead of the MAC address to generate addresses for stateless autoconfiguration. If the property is set to \"stable-privacy\", the interface identifier is generated as specified by RFC7217. This works by hashing a host specific key (see NetworkManager(8) manual), the interface name, the connection's \"connection.stable-id\" property and the address prefix. This improves privacy by making it harder to use the address to track the host's presence and the address is stable when the network interface hardware is replaced. The special values \"default\" and \"default-or-eui64\" will fallback to the global connection default as documented in the NetworkManager.conf(5) manual. If the global default is not specified, the fallback value is \"stable-privacy\" or \"eui64\", respectively. If not specified, when creating a new profile the default is \"default\". Note that this setting is distinct from the Privacy Extensions as configured by \"ip6-privacy\" property and it does not affect the temporary addresses configured with this option.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDRESSES N_("A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64\". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5).") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_AUTO_ROUTE_EXT_GW N_("VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect.") -#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DAD_TIMEOUT N_("Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.") +#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DAD_TIMEOUT N_("Maximum timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. The property is currently implemented only for IPv4. A zero value means that no duplicate address detection is performed, -1 means the default value (either the value configured globally in NetworkManger.conf or 200ms). A value greater than zero is a timeout in milliseconds. Note that the time intervals are subject to randomization as per RFC 5227 and so the actual duration can be between half and the full time specified in this property.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_DUID N_("A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value \"lease\" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and \"dhclient\" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values \"llt\" and \"ll\" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values \"stable-llt\", \"stable-ll\" and \"stable-uuid\" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the \"${DEVICE}\" or \"${MAC}\" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of \"stable-ll\" and \"stable-llt\" will be a generated address derived from the stable id. The DUID-LLT time value in the \"stable-llt\" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in \"llt\"). When the property is unset, the global value provided for \"ipv6.dhcp-duid\" is used. If no global value is provided, the default \"lease\" value is assumed.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-fqdn\" are mutually exclusive and cannot be set at the same time.") -#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") +#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) and \"fqdn-no-update\" (0x4). When no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is not set, the standard FQDN flags are set in the request: \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) for IPv4 and \"fqdn-serv-update\" (0x1) for IPv6. When this property is set to the default value \"none\" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also \"none\" (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_IAID N_("A string containing the \"Identity Association Identifier\" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values \"mac\", \"perm-mac\", \"ifname\" or \"stable\". When set to \"mac\" (or \"perm-mac\"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to \"ifname\", the IAID is computed by hashing the interface name. The special value \"stable\" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be \"ifname\". For DHCPv4, the IAID is only used with \"ipv4.dhcp-client-id\" values \"duid\" and \"ipv6-duid\" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the \"internal\" DHCPv6 plugin. The \"dhclient\" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_PD_HINT N_("A IPv6 address followed by a slash and a prefix length. If set, the value is sent to the DHCPv6 server as hint indicating the prefix delegation (IA_PD) we want to receive. To only hint a prefix length without prefix, set the address part to the zero address (for example \"::/60\").") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_REJECT_SERVERS N_("Array of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. \"192.168.122.0/24\"). This property is currently not implemented for DHCPv6.") @@ -296,7 +298,7 @@ #define DESCRIBE_DOC_NM_SETTING_PPPOE_SERVICE N_("If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.") #define DESCRIBE_DOC_NM_SETTING_PPPOE_USERNAME N_("Username used to authenticate with the PPPoE service.") #define DESCRIBE_DOC_NM_SETTING_PROXY_BROWSER_ONLY N_("Whether the proxy configuration is for browser only.") -#define DESCRIBE_DOC_NM_SETTING_PROXY_METHOD N_("Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)") +#define DESCRIBE_DOC_NM_SETTING_PROXY_METHOD N_("Method for proxy configuration, Default is \"none\" (0)") #define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_SCRIPT N_("The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes \"file://\" and \"js://\" are supported to explicitly differentiate between the two.") #define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_URL N_("PAC URL for obtaining PAC file.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_BAUD N_("Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.") @@ -304,7 +306,7 @@ #define DESCRIBE_DOC_NM_SETTING_SERIAL_PARITY N_("Parity setting of the serial port.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_SEND_DELAY N_("Time to delay between each byte sent to the modem, in microseconds.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_STOPBITS N_("Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in \"8n1\" for example.") -#define DESCRIBE_DOC_NM_SETTING_SRIOV_AUTOPROBE_DRIVERS N_("Whether to autoprobe virtual functions by a compatible driver. If set to NM_TERNARY_TRUE (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to NM_TERNARY_FALSE (0), VFs will not be claimed and no network interfaces will be created for them. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_TRUE (1).") +#define DESCRIBE_DOC_NM_SETTING_SRIOV_AUTOPROBE_DRIVERS N_("Whether to autoprobe virtual functions by a compatible driver. If set to \"true\" (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to \"false\" (0), VFs will not be claimed and no network interfaces will be created for them. When set to \"default\" (-1), the global default is used; in case the global default is unspecified it is assumed to be \"true\" (1).") #define DESCRIBE_DOC_NM_SETTING_SRIOV_TOTAL_VFS N_("The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection.") #define DESCRIBE_DOC_NM_SETTING_SRIOV_VFS N_("Array of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: \"INDEX [ATTR=VALUE[ ATTR=VALUE]...]\". for example: \"2 mac=00:11:22:33:44:55 spoof-check=true\". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The \"vlans\" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form \"ID[.PRIORITY[.PROTO]]\". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad.") #define DESCRIBE_DOC_NM_SETTING_TC_CONFIG_QDISCS N_("Array of TC queueing disciplines. When the \"tc\" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the \"net.core.default_qdisc\" sysctl. If the \"tc\" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface.") @@ -333,14 +335,14 @@ #define DESCRIBE_DOC_NM_SETTING_TEAM_PORT_QUEUE_ID N_("Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config.") #define DESCRIBE_DOC_NM_SETTING_TEAM_PORT_STICKY N_("Corresponds to the teamd ports.PORTIFNAME.sticky.") #define DESCRIBE_DOC_NM_SETTING_TUN_GROUP N_("The group ID which will own the device. If set to NULL everyone will be able to use the device.") -#define DESCRIBE_DOC_NM_SETTING_TUN_MODE N_("The operating mode of the virtual device. Allowed values are NM_SETTING_TUN_MODE_TUN (1) to create a layer 3 device and NM_SETTING_TUN_MODE_TAP (2) to create an Ethernet-like layer 2 one.") +#define DESCRIBE_DOC_NM_SETTING_TUN_MODE N_("The operating mode of the virtual device. Allowed values are \"tun\" (1) to create a layer 3 device and \"tap\" (2) to create an Ethernet-like layer 2 one.") #define DESCRIBE_DOC_NM_SETTING_TUN_MULTI_QUEUE N_("If the property is set to TRUE, the interface will support multiple file descriptors (queues) to parallelize packet sending or receiving. Otherwise, the interface will only support a single queue.") #define DESCRIBE_DOC_NM_SETTING_TUN_OWNER N_("The user ID which will own the device. If set to NULL everyone will be able to use the device.") #define DESCRIBE_DOC_NM_SETTING_TUN_PI N_("If TRUE the interface will prepend a 4 byte header describing the physical interface to the packets.") #define DESCRIBE_DOC_NM_SETTING_TUN_VNET_HDR N_("If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.") #define DESCRIBE_DOC_NM_SETTING_USER_DATA N_("A dictionary of key/value pairs with user data. This data is ignored by NetworkManager and can be used at the users discretion. The keys only support a strict ascii format, but the values can be arbitrary UTF8 strings up to a certain length.") #define DESCRIBE_DOC_NM_SETTING_VLAN_EGRESS_PRIORITY_MAP N_("For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format \"from:to\" where both \"from\" and \"to\" are unsigned integers, ie \"7:3\".") -#define DESCRIBE_DOC_NM_SETTING_VLAN_FLAGS N_("One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state). NM_VLAN_FLAG_MVRP (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.") +#define DESCRIBE_DOC_NM_SETTING_VLAN_FLAGS N_("One or more flags which control the behavior and features of the VLAN interface. Flags include \"reorder-headers\" (0x1) (reordering of output packet headers), \"gvrp\" (0x2) (use of the GVRP protocol), and \"loose-binding\" (0x4) (loose binding of the interface to its master device's operating state). \"mvrp\" (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.") #define DESCRIBE_DOC_NM_SETTING_VLAN_ID N_("The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095.") #define DESCRIBE_DOC_NM_SETTING_VLAN_INGRESS_PRIORITY_MAP N_("For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format \"from:to\" where both \"from\" and \"to\" are unsigned integers, ie \"7:3\".") #define DESCRIBE_DOC_NM_SETTING_VLAN_PARENT N_("If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an \"802-3-ethernet\" setting with a \"mac-address\" property.") @@ -386,7 +388,7 @@ #define DESCRIBE_DOC_NM_SETTING_WIRED_S390_OPTIONS N_("Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include \"portno\", \"layer2\", \"portname\", \"protocol\", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]). Currently, NetworkManager itself does nothing with this information. However, s390utils ships a udev rule which parses this information and applies it to the interface.") #define DESCRIBE_DOC_NM_SETTING_WIRED_S390_SUBCHANNELS N_("Identifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the \"mac-address\" property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.") #define DESCRIBE_DOC_NM_SETTING_WIRED_SPEED N_("When a value greater than 0 is set, configures the device to use the specified speed. If \"auto-negotiate\" is \"yes\" the specified speed will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabit speeds, as in this case link negotiation is mandatory. If the value is unset (0, the default), the link configuration will be either skipped (if \"auto-negotiate\" is \"no\", the default) or will be auto-negotiated (if \"auto-negotiate\" is \"yes\") and the local device will advertise all the supported speeds. In Mbit/s, ie 100 == 100Mbit/s. Must be set together with the \"duplex\" property when non-zero. Before specifying a speed value be sure your device supports it.") -#define DESCRIBE_DOC_NM_SETTING_WIRED_WAKE_ON_LAN N_("The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRED_WAKE_ON_LAN_PHY (0x2), NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST (0x4), NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST (0x8), NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST (0x10), NM_SETTING_WIRED_WAKE_ON_LAN_ARP (0x20), NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC (0x40) or the special values NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") +#define DESCRIBE_DOC_NM_SETTING_WIRED_WAKE_ON_LAN N_("The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of \"phy\" (0x2), \"unicast\" (0x4), \"multicast\" (0x8), \"broadcast\" (0x10), \"arp\" (0x20), \"magic\" (0x40) or the special values \"default\" (0x1) (to use global settings) and \"ignore\" (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") #define DESCRIBE_DOC_NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD N_("If specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_FWMARK N_("The use of fwmark is optional and is by default off. Setting it to 0 disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note that \"ip4-auto-default-route\" or \"ip6-auto-default-route\" enabled, implies to automatically choose a fwmark.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_IP4_AUTO_DEFAULT_ROUTE N_("Whether to enable special handling of the IPv4 default route. If enabled, the IPv4 default route from wireguard.peer-routes will be placed to a dedicated routing-table and two policy routing rules will be added. The fwmark number is also used as routing-table for the default-route, and if fwmark is zero, an unused fwmark/table is chosen automatically. This corresponds to what wg-quick does with Table=auto and what WireGuard calls \"Improved Rule-based Routing\". Note that for this automatism to work, you usually don't want to set ipv4.gateway, because that will result in a conflicting default route. Leaving this at the default will enable this option automatically if ipv4.never-default is not set and there are any peers that use a default-route as allowed-ips. Since this automatism only makes sense if you also have a peer with an /0 allowed-ips, it is usually not necessary to enable this explicitly. However, you can disable it if you want to configure your own routing and rules.") @@ -396,38 +398,38 @@ #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PEER_ROUTES N_("Whether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is \"0.0.0.0/0\" or \"::/0\" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PRIVATE_KEY N_("The 256 bit private-key in base64 encoding.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PRIVATE_KEY_FLAGS N_("Flags indicating how to handle the \"private-key\" property.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_AP_ISOLATION N_("Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from NM_TERNARY_DEFAULT (-1) only when the interface is configured in AP mode. If set to NM_TERNARY_TRUE (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to NM_TERNARY_FALSE (0), devices can talk to each other. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_FALSE (0).") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_AP_ISOLATION N_("Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from \"default\" (-1) only when the interface is configured in AP mode. If set to \"true\" (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to \"false\" (0), devices can talk to each other. When set to \"default\" (-1), the global default is used; in case the global default is unspecified it is assumed to be \"false\" (0).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_BAND N_("802.11 frequency band of the network. One of \"a\" for 5GHz 802.11a or \"bg\" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if \"a\" is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_BSSID N_("If specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future. Locking a client profile to a certain BSSID will prevent roaming and also disable background scanning. That can be useful, if there is only one access point for the SSID.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_CHANNEL N_("Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the \"band\" property to be set.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS N_("If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values \"preserve\", \"permanent\", \"random\" and \"stable\" are supported. \"preserve\" means not to touch the MAC address on activation. \"permanent\" means to use the permanent hardware address of the device. \"random\" creates a random MAC address on each connect. \"stable\" creates a hashed MAC address based on connection.stable-id and a machine dependent key. If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to \"preserve\" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as \"assigned-mac-address\" or the deprecated \"cloned-mac-address\".") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS N_("If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values \"preserve\", \"permanent\", \"random\", \"stable\" and \"stable-ssid\" are supported. \"preserve\" means not to touch the MAC address on activation. \"permanent\" means to use the permanent hardware address of the device. \"random\" creates a random MAC address on each connect. \"stable\" creates a hashed MAC address based on connection.stable-id and a machine dependent key. \"stable-ssid\" creates a hashed MAC address based on the SSID, the same as setting the stable-id to \"${NETWORK_SSID}\". If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to \"preserve\" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as \"assigned-mac-address\" or the deprecated \"cloned-mac-address\".") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK N_("With \"cloned-mac-address\" setting \"random\" or \"stable\", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting \"FE:FF:FF:00:00:00\" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the \"random\" or \"stable\" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of \"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of \"02:00:00:00:00:00 00:00:00:00:00:00\" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, \"02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00\" will create a fully scrambled MAC address, randomly locally or globally administered.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_HIDDEN N_("If TRUE, indicates that the network is a non-broadcasting network that hides its SSID. This works both in infrastructure and AP mode. In infrastructure mode, various workarounds are used for a more reliable discovery of hidden networks, such as probe-scanning the SSID. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution. In AP mode, the created network does not broadcast its SSID. Note that marking the network as hidden may be a privacy issue for you (in infrastructure mode) or client stations (in AP mode), as the explicit probe-scans are distinctly recognizable on the air.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS N_("If specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST N_("A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg \"00:11:22:33:44:55\").") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION N_("One of NM_SETTING_MAC_RANDOMIZATION_DEFAULT (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), NM_SETTING_MAC_RANDOMIZATION_NEVER (1) (never randomize the MAC address), or NM_SETTING_MAC_RANDOMIZATION_ALWAYS (2) (always randomize the MAC address).") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION N_("One of \"default\" (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), \"never\" (1) (never randomize the MAC address), or \"always\" (2) (always randomize the MAC address).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MODE N_("Wi-Fi network mode; one of \"infrastructure\", \"mesh\", \"adhoc\" or \"ap\". If blank, infrastructure is assumed.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MTU N_("If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_POWERSAVE N_("One of NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2) (disable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3) (enable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1) (don't touch currently configure setting) or NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0) (use the globally configured value). All other values are reserved.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_POWERSAVE N_("One of \"disable\" (2) (disable Wi-Fi power saving), \"enable\" (3) (enable Wi-Fi power saving), \"ignore\" (1) (don't touch currently configure setting) or \"default\" (0) (use the globally configured value). All other values are reserved.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_RATE N_("This property is not implemented and has no effect.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SEEN_BSSIDS N_("A list of BSSIDs (each BSSID formatted as a MAC address like \"00:11:22:33:44:55\") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved. This is not a regular property that the user would configure. Instead, NetworkManager automatically sets the seen BSSIDs and tracks them internally in \"/var/lib/NetworkManager/seen-bssids\" file.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SSID N_("SSID of the Wi-Fi network. Must be specified.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_TX_POWER N_("This property is not implemented and has no effect.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_WAKE_ON_WLAN N_("The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY (0x2), NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT (0x4), NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC (0x8), NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE (0x10), NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST (0x20), NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE (0x40), NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE (0x80), NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP (0x100) or the special values NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_WAKE_ON_WLAN N_("The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of \"any\" (0x2), \"disconnect\" (0x4), \"magic\" (0x8), \"gtk-rekey-failure\" (0x10), \"eap-identity-request\" (0x20), \"4way-handshake\" (0x40), \"rfkill-release\" (0x80), \"tcp\" (0x100) or the special values \"default\" (0x1) (to use global settings) and \"ignore\" (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_AUTH_ALG N_("When WEP is used (ie, key-mgmt = \"none\" or \"ieee8021x\") indicate the 802.11 authentication algorithm required by the AP here. One of \"open\" for Open System, \"shared\" for Shared Key, or \"leap\" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\") the \"leap-username\" and \"leap-password\" properties must be specified.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_FILS N_("Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_FILS N_("Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of \"default\" (0) (use global default value), \"disable\" (1) (disable FILS), \"optional\" (2) (enable FILS if the supplicant and the access point support it) or \"required\" (3) (enable FILS and fail if not supported). When set to \"default\" (0) and no global default is set, FILS will be optionally enabled.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_GROUP N_("A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of \"wep40\", \"wep104\", \"tkip\", or \"ccmp\".") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_KEY_MGMT N_("Key management used for the connection. One of \"none\" (WEP or no password protection), \"ieee8021x\" (Dynamic WEP), \"owe\" (Opportunistic Wireless Encryption), \"wpa-psk\" (WPA2 + WPA3 personal), \"sae\" (WPA3 personal only), \"wpa-eap\" (WPA2 + WPA3 enterprise) or \"wpa-eap-suite-b-192\" (WPA3 enterprise only). This property must be set for any Wi-Fi connection that uses security.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD N_("The login password for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\").") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS N_("Flags indicating how to handle the \"leap-password\" property.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME N_("The login username for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\").") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PAIRWISE N_("A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of \"tkip\" or \"ccmp\".") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PMF N_("Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE (1) (disable PMF), NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL (2) (enable PMF if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED (3) (enable PMF and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) and no global default is set, PMF will be optionally enabled.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PMF N_("Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of \"default\" (0) (use global default value), \"disable\" (1) (disable PMF), \"optional\" (2) (enable PMF if the supplicant and the access point support it) or \"required\" (3) (enable PMF and fail if not supported). When set to \"default\" (0) and no global default is set, PMF will be optionally enabled.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PROTO N_("List of strings specifying the allowed WPA protocol versions to use. Each element may be one \"wpa\" (allow WPA) or \"rsn\" (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PSK N_("Pre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII passphrase of 8 to 63 characters that is (as specified in the 802.11i standard) hashed to derive the actual key, or the key in form of 64 hexadecimal character. The WPA3-Personal networks use a passphrase of any length for SAE authentication.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS N_("Flags indicating how to handle the \"psk\" property.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS N_("Flags indicating how to handle the \"wep-key0\", \"wep-key1\", \"wep-key2\", and \"wep-key3\" properties.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE N_("Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or NM_WEP_KEY_TYPE_PASSPHRASE (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE N_("Controls the interpretation of WEP keys. Allowed values are \"key\" (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or \"passphrase\" (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 N_("Index 0 WEP key. This is the WEP key used in most networks. See the \"wep-key-type\" property for a description of how this key is interpreted.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 N_("Index 1 WEP key. This WEP index is not used by most networks. See the \"wep-key-type\" property for a description of how this key is interpreted.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 N_("Index 2 WEP key. This WEP index is not used by most networks. See the \"wep-key-type\" property for a description of how this key is interpreted.") @@ -441,10 +443,14 @@ #define DESCRIBE_DOC_NM_SETTING_WPAN_SHORT_ADDRESS N_("Short IEEE 802.15.4 address to be used within a restricted environment.") #define DESCRIBE_DOC_NM_SETTING_BOND_PORT_PRIO N_("The port priority for bond active port re-selection during failover. A higher number means a higher priority in selection. The primary port has the highest priority. This option is only compatible with active-backup, balance-tlb and balance-alb modes.") #define DESCRIBE_DOC_NM_SETTING_BOND_PORT_QUEUE_ID N_("The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device.") -#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DHCP N_("Whether the system hostname can be determined from DHCP on this connection. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).") -#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP N_("Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).") -#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT N_("If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0).") +#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DHCP N_("Whether the system hostname can be determined from DHCP on this connection. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"true\" (1).") +#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP N_("Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"true\" (1).") +#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT N_("If set to \"true\" (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to \"false\" (0), the hostname can be set from this device even if it doesn't have the default route. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"false\" (0).") #define DESCRIBE_DOC_NM_SETTING_HOSTNAME_PRIORITY N_("The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname.") +#define DESCRIBE_DOC_NM_SETTING_HSR_MULTICAST_SPEC N_("The last byte of supervision address.") +#define DESCRIBE_DOC_NM_SETTING_HSR_PORT1 N_("The port1 interface name of the HSR. This property is mandatory.") +#define DESCRIBE_DOC_NM_SETTING_HSR_PORT2 N_("The port2 interface name of the HSR. This property is mandatory.") +#define DESCRIBE_DOC_NM_SETTING_HSR_PRP N_("The protocol used by the interface, whether it is PRP or HSR.") #define DESCRIBE_DOC_NM_SETTING_LINK_GRO_MAX_SIZE N_("The maximum size of a packet built by the Generic Receive Offload stack for this device. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved.") #define DESCRIBE_DOC_NM_SETTING_LINK_GSO_MAX_SEGMENTS N_("The maximum segments of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved.") #define DESCRIBE_DOC_NM_SETTING_LINK_GSO_MAX_SIZE N_("The maximum size of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved.") diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index bdda8e50..77cde662 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -5,23 +5,25 @@ #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY N_("The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES N_("The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_CONTROLLER N_("Interface name of the controller device or UUID of the controller connection.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_DNS_OVER_TLS N_("Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: \"yes\" (2) use DNSOverTls and disabled fallback, \"opportunistic\" (1) use DNSOverTls but allow fallback to unencrypted resolution, \"no\" (0) don't ever use DNSOverTls. If unspecified \"default\" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT N_("If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_ID N_("A human readable unique identifier for the connection, like \"Work Wi-Fi\" or \"T-Mobile 3G\".") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_INTERFACE_NAME N_("The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_LLDP N_("Whether LLDP is enabled for the connection.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_LLMNR N_("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.") -#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_MASTER N_("Interface name of the master device or UUID of the master connection. Deprecated 1.46. Use \"controller\" instead, this is just an alias.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_MDNS N_("Whether mDNS is enabled for the connection. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable mDNS for the interface, \"resolve\" (1) do not register hostname but allow resolving of mDNS host names and \"default\" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, \"default\" ultimately depends on the DNS plugin (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. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The \"enabled\" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless \"/proc/sys/net/mptcp/enabled\" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, \"also-without-sysctl\" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag \"also-without-default-route\" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is \"enabled,subflow\". Note that this means that MPTCP is by default done depending on the \"/proc/sys/net/mptcp/enabled\" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_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.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_PORT_TYPE N_("Setting name of the device type of this port's controller connection (eg, \"bond\"), or NULL if this connection is not a port.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_READ_ONLY N_("This property is deprecated and has no meaning.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_SECONDARIES N_("List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are \"${CONNECTION}\", \"${DEVICE}\", \"${MAC}\", \"${BOOT}\", \"${RANDOM}\". These effectively create unique IDs per-connection, per-device, per-boot, or every time. The \"${CONNECTION}\" uses the profile's connection.uuid, the \"${DEVICE}\" uses the interface name of the device and \"${MAC}\" the permanent MAC address of the device. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as \"$$\". For example, set it to \"${CONNECTION}-${BOOT}-${DEVICE}\" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is \"default${CONNECTION}\" go generate an ID unique per connection profile.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave. Deprecated 1.46. Use \"port-type\" instead, this is just an alias.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are \"${CONNECTION}\", \"${DEVICE}\", \"${MAC}\", \"${NETWORK_SSID}\", \"${BOOT}\", \"${RANDOM}\". These effectively create unique IDs per-connection, per-device, per-SSID, per-boot, or every time. The \"${CONNECTION}\" uses the profile's connection.uuid, the \"${DEVICE}\" uses the interface name of the device and \"${MAC}\" the permanent MAC address of the device. \"${NETWORK_SSID}\" uses the SSID for Wi-Fi networks and falls back to \"${CONNECTION}\" on other networks. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as \"$$\". For example, set it to \"${CONNECTION}-${BOOT}-${DEVICE}\" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is \"default${CONNECTION}\" go generate an ID unique per connection profile.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TIMESTAMP N_("The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TYPE N_("Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, \"802-3-ethernet\" or \"802-11-wireless\" or \"bluetooth\", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, \"vpn\" or \"bridge\", etc).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_UUID N_("The connection.uuid is the real identifier of a profile. It cannot change and it must be unique. It is therefore often best to refer to a profile by UUID, for example with `nmcli connection up uuid $UUID`. The UUID cannot be changed, except in offline mode. In that case, the special values \"new\", \"generate\" and \"\" are allowed to generate a new random UUID.") @@ -122,22 +124,22 @@ #define DESCRIBE_DOC_NM_SETTING_CDMA_PASSWORD N_("The password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here.") #define DESCRIBE_DOC_NM_SETTING_CDMA_PASSWORD_FLAGS N_("Flags indicating how to handle the \"password\" property.") #define DESCRIBE_DOC_NM_SETTING_CDMA_USERNAME N_("The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") #define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_MODE N_("The FCoE controller mode; either \"fabric\" or \"vn2vn\". Since 1.34, NULL is the default and means \"fabric\". Before 1.34, NULL was rejected as invalid and the default was \"fabric\".") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_PRIORITY N_("The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the \"app-fcoe-flags\" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_PRIORITY N_("The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the \"app-fip-flags\" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") -#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_PRIORITY N_("The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the \"app-iscsi-flags\" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FCOE_PRIORITY N_("The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the \"app-fcoe-flags\" property includes the \"enable\" (0x1) flag.") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_FIP_PRIORITY N_("The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the \"app-fip-flags\" property includes the \"enable\" (0x1) flag.") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_FLAGS N_("Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_APP_ISCSI_PRIORITY N_("The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the \"app-iscsi-flags\" property includes the \"enable\" (0x1) flag.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_BANDWIDTH N_("An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percents.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_FLOW_CONTROL N_("An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause.") -#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH N_("An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percents.") -#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).") +#define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_FLAGS N_("Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of \"enable\" (0x1), \"advertise\" (0x2), and \"willing\" (0x4).") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_GROUP_ID N_("An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH N_("An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group.") #define DESCRIBE_DOC_NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS N_("An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped.") -#define DESCRIBE_DOC_NM_SETTING_GSM_APN N_("The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9.") +#define DESCRIBE_DOC_NM_SETTING_GSM_APN N_("The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9. If the APN is unset (the default) then it may be detected based on \"auto-config\" setting. The property can be explicitly set to the empty string to prevent that and use no APN.") #define DESCRIBE_DOC_NM_SETTING_GSM_AUTO_CONFIG N_("When TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database.") #define DESCRIBE_DOC_NM_SETTING_GSM_DEVICE_ID N_("The device unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will only apply to the specified device.") #define DESCRIBE_DOC_NM_SETTING_GSM_HOME_ONLY N_("When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.") @@ -160,11 +162,11 @@ #define DESCRIBE_DOC_NM_SETTING_INFINIBAND_TRANSPORT_MODE N_("The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\".") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ADDRESSES N_("A list of IPv4 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"192.168.1.5/24, 10.1.0.5/24\". The addresses are listed in decreasing priority, meaning the first address will be the primary address.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_AUTO_ROUTE_EXT_GW N_("VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DAD_TIMEOUT N_("Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID N_("A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values \"mac\" and \"perm-mac\" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value \"ipv6-duid\" uses the DUID from \"ipv6.dhcp-duid\" property as an RFC4361-compliant client identifier. As IAID it uses \"ipv4.dhcp-iaid\" and falls back to \"ipv6.dhcp-iaid\" if unset. The special value \"duid\" generates a RFC4361-compliant client identifier based on \"ipv4.dhcp-iaid\" and uses a DUID generated by hashing /etc/machine-id. The special value \"stable\" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the \"${DEVICE}\" or \"${MAC}\" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DAD_TIMEOUT N_("Maximum timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. The property is currently implemented only for IPv4. A zero value means that no duplicate address detection is performed, -1 means the default value (either the value configured globally in NetworkManger.conf or 200ms). A value greater than zero is a timeout in milliseconds. Note that the time intervals are subject to randomization as per RFC 5227 and so the actual duration can be between half and the full time specified in this property.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID N_("A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values \"mac\" and \"perm-mac\" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value \"ipv6-duid\" uses the DUID from \"ipv6.dhcp-duid\" property as an RFC4361-compliant client identifier. As IAID it uses \"ipv4.dhcp-iaid\" and falls back to \"ipv6.dhcp-iaid\" if unset. The special value \"duid\" generates a RFC4361-compliant client identifier based on \"ipv4.dhcp-iaid\" and uses a DUID generated by hashing /etc/machine-id. The special value \"stable\" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the \"${DEVICE}\" or \"${MAC}\" specifier to get a per-device key. The special value \"none\" prevents any client identifier from being sent. Note that this is normally not recommended. If unset, a globally configured default from NetworkManager.conf is used. If still unset, the default depends on the DHCP plugin. The internal dhcp client will default to \"mac\" and the dhclient plugin will try to use one from its config file if present, or won't sent any client-id otherwise.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_FQDN N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-hostname\" are mutually exclusive and cannot be set at the same time.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-fqdn\" are mutually exclusive and cannot be set at the same time.") -#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") +#define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) and \"fqdn-no-update\" (0x4). When no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is not set, the standard FQDN flags are set in the request: \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) for IPv4 and \"fqdn-serv-update\" (0x1) for IPv6. When this property is set to the default value \"none\" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also \"none\" (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_IAID N_("A string containing the \"Identity Association Identifier\" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values \"mac\", \"perm-mac\", \"ifname\" or \"stable\". When set to \"mac\" (or \"perm-mac\"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to \"ifname\", the IAID is computed by hashing the interface name. The special value \"stable\" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be \"ifname\". For DHCPv4, the IAID is only used with \"ipv4.dhcp-client-id\" values \"duid\" and \"ipv6-duid\" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the \"internal\" DHCPv6 plugin. The \"dhclient\" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_REJECT_SERVERS N_("Array of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. \"192.168.122.0/24\"). This property is currently not implemented for DHCPv6.") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME N_("If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the \"dhcp-hostname\" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.") @@ -190,10 +192,10 @@ #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE N_("Configure method for creating the IPv6 interface identifer of addresses with RFC4862 IPv6 Stateless Address Autoconfiguration and Link Local addresses. The permitted values are: \"eui64\" (0), \"stable-privacy\" (1), \"default\" (3) or \"default-or-eui64\" (2). If the property is set to \"eui64\", the addresses will be generated using the interface token derived from hardware address. This makes the host part of the address to stay constant, making it possible to track the host's presence when it changes networks. The address changes when the interface hardware is replaced. If a duplicate address is detected, there is also no fallback to generate another address. When configured, the \"ipv6.token\" is used instead of the MAC address to generate addresses for stateless autoconfiguration. If the property is set to \"stable-privacy\", the interface identifier is generated as specified by RFC7217. This works by hashing a host specific key (see NetworkManager(8) manual), the interface name, the connection's \"connection.stable-id\" property and the address prefix. This improves privacy by making it harder to use the address to track the host's presence and the address is stable when the network interface hardware is replaced. The special values \"default\" and \"default-or-eui64\" will fallback to the global connection default as documented in the NetworkManager.conf(5) manual. If the global default is not specified, the fallback value is \"stable-privacy\" or \"eui64\", respectively. If not specified, when creating a new profile the default is \"default\". Note that this setting is distinct from the Privacy Extensions as configured by \"ip6-privacy\" property and it does not affect the temporary addresses configured with this option.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDRESSES N_("A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64\". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5).") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_AUTO_ROUTE_EXT_GW N_("VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect.") -#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DAD_TIMEOUT N_("Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.") +#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DAD_TIMEOUT N_("Maximum timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. The property is currently implemented only for IPv4. A zero value means that no duplicate address detection is performed, -1 means the default value (either the value configured globally in NetworkManger.conf or 200ms). A value greater than zero is a timeout in milliseconds. Note that the time intervals are subject to randomization as per RFC 5227 and so the actual duration can be between half and the full time specified in this property.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_DUID N_("A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value \"lease\" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and \"dhclient\" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values \"llt\" and \"ll\" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values \"stable-llt\", \"stable-ll\" and \"stable-uuid\" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the \"${DEVICE}\" or \"${MAC}\" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of \"stable-ll\" and \"stable-llt\" will be a generated address derived from the stable id. The DUID-LLT time value in the \"stable-llt\" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in \"llt\"). When the property is unset, the global value provided for \"ipv6.dhcp-duid\" is used. If no global value is provided, the default \"lease\" value is assumed.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-fqdn\" are mutually exclusive and cannot be set at the same time.") -#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") +#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME_FLAGS N_("Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) and \"fqdn-no-update\" (0x4). When no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and \"fqdn-clear-flags\" (0x8) is not set, the standard FQDN flags are set in the request: \"fqdn-serv-update\" (0x1), \"fqdn-encoded\" (0x2) for IPv4 and \"fqdn-serv-update\" (0x1) for IPv6. When this property is set to the default value \"none\" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also \"none\" (0x0), then the standard FQDN flags described above are sent in the DHCP requests.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_IAID N_("A string containing the \"Identity Association Identifier\" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values \"mac\", \"perm-mac\", \"ifname\" or \"stable\". When set to \"mac\" (or \"perm-mac\"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to \"ifname\", the IAID is computed by hashing the interface name. The special value \"stable\" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be \"ifname\". For DHCPv4, the IAID is only used with \"ipv4.dhcp-client-id\" values \"duid\" and \"ipv6-duid\" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the \"internal\" DHCPv6 plugin. The \"dhclient\" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_PD_HINT N_("A IPv6 address followed by a slash and a prefix length. If set, the value is sent to the DHCPv6 server as hint indicating the prefix delegation (IA_PD) we want to receive. To only hint a prefix length without prefix, set the address part to the zero address (for example \"::/60\").") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_REJECT_SERVERS N_("Array of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. \"192.168.122.0/24\"). This property is currently not implemented for DHCPv6.") @@ -296,7 +298,7 @@ #define DESCRIBE_DOC_NM_SETTING_PPPOE_SERVICE N_("If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.") #define DESCRIBE_DOC_NM_SETTING_PPPOE_USERNAME N_("Username used to authenticate with the PPPoE service.") #define DESCRIBE_DOC_NM_SETTING_PROXY_BROWSER_ONLY N_("Whether the proxy configuration is for browser only.") -#define DESCRIBE_DOC_NM_SETTING_PROXY_METHOD N_("Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)") +#define DESCRIBE_DOC_NM_SETTING_PROXY_METHOD N_("Method for proxy configuration, Default is \"none\" (0)") #define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_SCRIPT N_("The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes \"file://\" and \"js://\" are supported to explicitly differentiate between the two.") #define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_URL N_("PAC URL for obtaining PAC file.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_BAUD N_("Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.") @@ -304,7 +306,7 @@ #define DESCRIBE_DOC_NM_SETTING_SERIAL_PARITY N_("Parity setting of the serial port.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_SEND_DELAY N_("Time to delay between each byte sent to the modem, in microseconds.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_STOPBITS N_("Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in \"8n1\" for example.") -#define DESCRIBE_DOC_NM_SETTING_SRIOV_AUTOPROBE_DRIVERS N_("Whether to autoprobe virtual functions by a compatible driver. If set to NM_TERNARY_TRUE (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to NM_TERNARY_FALSE (0), VFs will not be claimed and no network interfaces will be created for them. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_TRUE (1).") +#define DESCRIBE_DOC_NM_SETTING_SRIOV_AUTOPROBE_DRIVERS N_("Whether to autoprobe virtual functions by a compatible driver. If set to \"true\" (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to \"false\" (0), VFs will not be claimed and no network interfaces will be created for them. When set to \"default\" (-1), the global default is used; in case the global default is unspecified it is assumed to be \"true\" (1).") #define DESCRIBE_DOC_NM_SETTING_SRIOV_TOTAL_VFS N_("The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection.") #define DESCRIBE_DOC_NM_SETTING_SRIOV_VFS N_("Array of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: \"INDEX [ATTR=VALUE[ ATTR=VALUE]...]\". for example: \"2 mac=00:11:22:33:44:55 spoof-check=true\". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The \"vlans\" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form \"ID[.PRIORITY[.PROTO]]\". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad.") #define DESCRIBE_DOC_NM_SETTING_TC_CONFIG_QDISCS N_("Array of TC queueing disciplines. When the \"tc\" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the \"net.core.default_qdisc\" sysctl. If the \"tc\" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface.") @@ -333,14 +335,14 @@ #define DESCRIBE_DOC_NM_SETTING_TEAM_PORT_QUEUE_ID N_("Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config.") #define DESCRIBE_DOC_NM_SETTING_TEAM_PORT_STICKY N_("Corresponds to the teamd ports.PORTIFNAME.sticky.") #define DESCRIBE_DOC_NM_SETTING_TUN_GROUP N_("The group ID which will own the device. If set to NULL everyone will be able to use the device.") -#define DESCRIBE_DOC_NM_SETTING_TUN_MODE N_("The operating mode of the virtual device. Allowed values are NM_SETTING_TUN_MODE_TUN (1) to create a layer 3 device and NM_SETTING_TUN_MODE_TAP (2) to create an Ethernet-like layer 2 one.") +#define DESCRIBE_DOC_NM_SETTING_TUN_MODE N_("The operating mode of the virtual device. Allowed values are \"tun\" (1) to create a layer 3 device and \"tap\" (2) to create an Ethernet-like layer 2 one.") #define DESCRIBE_DOC_NM_SETTING_TUN_MULTI_QUEUE N_("If the property is set to TRUE, the interface will support multiple file descriptors (queues) to parallelize packet sending or receiving. Otherwise, the interface will only support a single queue.") #define DESCRIBE_DOC_NM_SETTING_TUN_OWNER N_("The user ID which will own the device. If set to NULL everyone will be able to use the device.") #define DESCRIBE_DOC_NM_SETTING_TUN_PI N_("If TRUE the interface will prepend a 4 byte header describing the physical interface to the packets.") #define DESCRIBE_DOC_NM_SETTING_TUN_VNET_HDR N_("If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.") #define DESCRIBE_DOC_NM_SETTING_USER_DATA N_("A dictionary of key/value pairs with user data. This data is ignored by NetworkManager and can be used at the users discretion. The keys only support a strict ascii format, but the values can be arbitrary UTF8 strings up to a certain length.") #define DESCRIBE_DOC_NM_SETTING_VLAN_EGRESS_PRIORITY_MAP N_("For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format \"from:to\" where both \"from\" and \"to\" are unsigned integers, ie \"7:3\".") -#define DESCRIBE_DOC_NM_SETTING_VLAN_FLAGS N_("One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state). NM_VLAN_FLAG_MVRP (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.") +#define DESCRIBE_DOC_NM_SETTING_VLAN_FLAGS N_("One or more flags which control the behavior and features of the VLAN interface. Flags include \"reorder-headers\" (0x1) (reordering of output packet headers), \"gvrp\" (0x2) (use of the GVRP protocol), and \"loose-binding\" (0x4) (loose binding of the interface to its master device's operating state). \"mvrp\" (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.") #define DESCRIBE_DOC_NM_SETTING_VLAN_ID N_("The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095.") #define DESCRIBE_DOC_NM_SETTING_VLAN_INGRESS_PRIORITY_MAP N_("For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format \"from:to\" where both \"from\" and \"to\" are unsigned integers, ie \"7:3\".") #define DESCRIBE_DOC_NM_SETTING_VLAN_PARENT N_("If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an \"802-3-ethernet\" setting with a \"mac-address\" property.") @@ -386,7 +388,7 @@ #define DESCRIBE_DOC_NM_SETTING_WIRED_S390_OPTIONS N_("Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include \"portno\", \"layer2\", \"portname\", \"protocol\", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]). Currently, NetworkManager itself does nothing with this information. However, s390utils ships a udev rule which parses this information and applies it to the interface.") #define DESCRIBE_DOC_NM_SETTING_WIRED_S390_SUBCHANNELS N_("Identifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the \"mac-address\" property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.") #define DESCRIBE_DOC_NM_SETTING_WIRED_SPEED N_("When a value greater than 0 is set, configures the device to use the specified speed. If \"auto-negotiate\" is \"yes\" the specified speed will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabit speeds, as in this case link negotiation is mandatory. If the value is unset (0, the default), the link configuration will be either skipped (if \"auto-negotiate\" is \"no\", the default) or will be auto-negotiated (if \"auto-negotiate\" is \"yes\") and the local device will advertise all the supported speeds. In Mbit/s, ie 100 == 100Mbit/s. Must be set together with the \"duplex\" property when non-zero. Before specifying a speed value be sure your device supports it.") -#define DESCRIBE_DOC_NM_SETTING_WIRED_WAKE_ON_LAN N_("The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRED_WAKE_ON_LAN_PHY (0x2), NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST (0x4), NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST (0x8), NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST (0x10), NM_SETTING_WIRED_WAKE_ON_LAN_ARP (0x20), NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC (0x40) or the special values NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") +#define DESCRIBE_DOC_NM_SETTING_WIRED_WAKE_ON_LAN N_("The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of \"phy\" (0x2), \"unicast\" (0x4), \"multicast\" (0x8), \"broadcast\" (0x10), \"arp\" (0x20), \"magic\" (0x40) or the special values \"default\" (0x1) (to use global settings) and \"ignore\" (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") #define DESCRIBE_DOC_NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD N_("If specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_FWMARK N_("The use of fwmark is optional and is by default off. Setting it to 0 disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note that \"ip4-auto-default-route\" or \"ip6-auto-default-route\" enabled, implies to automatically choose a fwmark.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_IP4_AUTO_DEFAULT_ROUTE N_("Whether to enable special handling of the IPv4 default route. If enabled, the IPv4 default route from wireguard.peer-routes will be placed to a dedicated routing-table and two policy routing rules will be added. The fwmark number is also used as routing-table for the default-route, and if fwmark is zero, an unused fwmark/table is chosen automatically. This corresponds to what wg-quick does with Table=auto and what WireGuard calls \"Improved Rule-based Routing\". Note that for this automatism to work, you usually don't want to set ipv4.gateway, because that will result in a conflicting default route. Leaving this at the default will enable this option automatically if ipv4.never-default is not set and there are any peers that use a default-route as allowed-ips. Since this automatism only makes sense if you also have a peer with an /0 allowed-ips, it is usually not necessary to enable this explicitly. However, you can disable it if you want to configure your own routing and rules.") @@ -396,38 +398,38 @@ #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PEER_ROUTES N_("Whether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is \"0.0.0.0/0\" or \"::/0\" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PRIVATE_KEY N_("The 256 bit private-key in base64 encoding.") #define DESCRIBE_DOC_NM_SETTING_WIREGUARD_PRIVATE_KEY_FLAGS N_("Flags indicating how to handle the \"private-key\" property.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_AP_ISOLATION N_("Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from NM_TERNARY_DEFAULT (-1) only when the interface is configured in AP mode. If set to NM_TERNARY_TRUE (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to NM_TERNARY_FALSE (0), devices can talk to each other. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_FALSE (0).") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_AP_ISOLATION N_("Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from \"default\" (-1) only when the interface is configured in AP mode. If set to \"true\" (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to \"false\" (0), devices can talk to each other. When set to \"default\" (-1), the global default is used; in case the global default is unspecified it is assumed to be \"false\" (0).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_BAND N_("802.11 frequency band of the network. One of \"a\" for 5GHz 802.11a or \"bg\" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if \"a\" is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_BSSID N_("If specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future. Locking a client profile to a certain BSSID will prevent roaming and also disable background scanning. That can be useful, if there is only one access point for the SSID.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_CHANNEL N_("Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the \"band\" property to be set.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS N_("If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values \"preserve\", \"permanent\", \"random\" and \"stable\" are supported. \"preserve\" means not to touch the MAC address on activation. \"permanent\" means to use the permanent hardware address of the device. \"random\" creates a random MAC address on each connect. \"stable\" creates a hashed MAC address based on connection.stable-id and a machine dependent key. If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to \"preserve\" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as \"assigned-mac-address\" or the deprecated \"cloned-mac-address\".") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS N_("If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values \"preserve\", \"permanent\", \"random\", \"stable\" and \"stable-ssid\" are supported. \"preserve\" means not to touch the MAC address on activation. \"permanent\" means to use the permanent hardware address of the device. \"random\" creates a random MAC address on each connect. \"stable\" creates a hashed MAC address based on connection.stable-id and a machine dependent key. \"stable-ssid\" creates a hashed MAC address based on the SSID, the same as setting the stable-id to \"${NETWORK_SSID}\". If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to \"preserve\" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as \"assigned-mac-address\" or the deprecated \"cloned-mac-address\".") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK N_("With \"cloned-mac-address\" setting \"random\" or \"stable\", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting \"FE:FF:FF:00:00:00\" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the \"random\" or \"stable\" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of \"FE:FF:FF:00:00:00 68:F7:28:00:00:00\" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of \"02:00:00:00:00:00 00:00:00:00:00:00\" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, \"02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00\" will create a fully scrambled MAC address, randomly locally or globally administered.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_HIDDEN N_("If TRUE, indicates that the network is a non-broadcasting network that hides its SSID. This works both in infrastructure and AP mode. In infrastructure mode, various workarounds are used for a more reliable discovery of hidden networks, such as probe-scanning the SSID. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution. In AP mode, the created network does not broadcast its SSID. Note that marking the network as hidden may be a privacy issue for you (in infrastructure mode) or client stations (in AP mode), as the explicit probe-scans are distinctly recognizable on the air.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS N_("If specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST N_("A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg \"00:11:22:33:44:55\").") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION N_("One of NM_SETTING_MAC_RANDOMIZATION_DEFAULT (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), NM_SETTING_MAC_RANDOMIZATION_NEVER (1) (never randomize the MAC address), or NM_SETTING_MAC_RANDOMIZATION_ALWAYS (2) (always randomize the MAC address).") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION N_("One of \"default\" (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), \"never\" (1) (never randomize the MAC address), or \"always\" (2) (always randomize the MAC address).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MODE N_("Wi-Fi network mode; one of \"infrastructure\", \"mesh\", \"adhoc\" or \"ap\". If blank, infrastructure is assumed.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_MTU N_("If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_POWERSAVE N_("One of NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2) (disable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3) (enable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1) (don't touch currently configure setting) or NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0) (use the globally configured value). All other values are reserved.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_POWERSAVE N_("One of \"disable\" (2) (disable Wi-Fi power saving), \"enable\" (3) (enable Wi-Fi power saving), \"ignore\" (1) (don't touch currently configure setting) or \"default\" (0) (use the globally configured value). All other values are reserved.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_RATE N_("This property is not implemented and has no effect.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SEEN_BSSIDS N_("A list of BSSIDs (each BSSID formatted as a MAC address like \"00:11:22:33:44:55\") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved. This is not a regular property that the user would configure. Instead, NetworkManager automatically sets the seen BSSIDs and tracks them internally in \"/var/lib/NetworkManager/seen-bssids\" file.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SSID N_("SSID of the Wi-Fi network. Must be specified.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_TX_POWER N_("This property is not implemented and has no effect.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_WAKE_ON_WLAN N_("The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY (0x2), NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT (0x4), NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC (0x8), NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE (0x10), NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST (0x20), NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE (0x40), NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE (0x80), NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP (0x100) or the special values NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_WAKE_ON_WLAN N_("The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of \"any\" (0x2), \"disconnect\" (0x4), \"magic\" (0x8), \"gtk-rekey-failure\" (0x10), \"eap-identity-request\" (0x20), \"4way-handshake\" (0x40), \"rfkill-release\" (0x80), \"tcp\" (0x100) or the special values \"default\" (0x1) (to use global settings) and \"ignore\" (0x8000) (to disable management of Wake-on-LAN in NetworkManager).") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_AUTH_ALG N_("When WEP is used (ie, key-mgmt = \"none\" or \"ieee8021x\") indicate the 802.11 authentication algorithm required by the AP here. One of \"open\" for Open System, \"shared\" for Shared Key, or \"leap\" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\") the \"leap-username\" and \"leap-password\" properties must be specified.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_FILS N_("Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_FILS N_("Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of \"default\" (0) (use global default value), \"disable\" (1) (disable FILS), \"optional\" (2) (enable FILS if the supplicant and the access point support it) or \"required\" (3) (enable FILS and fail if not supported). When set to \"default\" (0) and no global default is set, FILS will be optionally enabled.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_GROUP N_("A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of \"wep40\", \"wep104\", \"tkip\", or \"ccmp\".") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_KEY_MGMT N_("Key management used for the connection. One of \"none\" (WEP or no password protection), \"ieee8021x\" (Dynamic WEP), \"owe\" (Opportunistic Wireless Encryption), \"wpa-psk\" (WPA2 + WPA3 personal), \"sae\" (WPA3 personal only), \"wpa-eap\" (WPA2 + WPA3 enterprise) or \"wpa-eap-suite-b-192\" (WPA3 enterprise only). This property must be set for any Wi-Fi connection that uses security.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD N_("The login password for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\").") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS N_("Flags indicating how to handle the \"leap-password\" property.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME N_("The login username for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\").") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PAIRWISE N_("A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of \"tkip\" or \"ccmp\".") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PMF N_("Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE (1) (disable PMF), NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL (2) (enable PMF if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED (3) (enable PMF and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) and no global default is set, PMF will be optionally enabled.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PMF N_("Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of \"default\" (0) (use global default value), \"disable\" (1) (disable PMF), \"optional\" (2) (enable PMF if the supplicant and the access point support it) or \"required\" (3) (enable PMF and fail if not supported). When set to \"default\" (0) and no global default is set, PMF will be optionally enabled.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PROTO N_("List of strings specifying the allowed WPA protocol versions to use. Each element may be one \"wpa\" (allow WPA) or \"rsn\" (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PSK N_("Pre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII passphrase of 8 to 63 characters that is (as specified in the 802.11i standard) hashed to derive the actual key, or the key in form of 64 hexadecimal character. The WPA3-Personal networks use a passphrase of any length for SAE authentication.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS N_("Flags indicating how to handle the \"psk\" property.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS N_("Flags indicating how to handle the \"wep-key0\", \"wep-key1\", \"wep-key2\", and \"wep-key3\" properties.") -#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE N_("Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or NM_WEP_KEY_TYPE_PASSPHRASE (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key.") +#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE N_("Controls the interpretation of WEP keys. Allowed values are \"key\" (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or \"passphrase\" (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 N_("Index 0 WEP key. This is the WEP key used in most networks. See the \"wep-key-type\" property for a description of how this key is interpreted.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 N_("Index 1 WEP key. This WEP index is not used by most networks. See the \"wep-key-type\" property for a description of how this key is interpreted.") #define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 N_("Index 2 WEP key. This WEP index is not used by most networks. See the \"wep-key-type\" property for a description of how this key is interpreted.") @@ -441,10 +443,14 @@ #define DESCRIBE_DOC_NM_SETTING_WPAN_SHORT_ADDRESS N_("Short IEEE 802.15.4 address to be used within a restricted environment.") #define DESCRIBE_DOC_NM_SETTING_BOND_PORT_PRIO N_("The port priority for bond active port re-selection during failover. A higher number means a higher priority in selection. The primary port has the highest priority. This option is only compatible with active-backup, balance-tlb and balance-alb modes.") #define DESCRIBE_DOC_NM_SETTING_BOND_PORT_QUEUE_ID N_("The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device.") -#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DHCP N_("Whether the system hostname can be determined from DHCP on this connection. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).") -#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP N_("Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).") -#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT N_("If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0).") +#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DHCP N_("Whether the system hostname can be determined from DHCP on this connection. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"true\" (1).") +#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP N_("Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"true\" (1).") +#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT N_("If set to \"true\" (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to \"false\" (0), the hostname can be set from this device even if it doesn't have the default route. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"false\" (0).") #define DESCRIBE_DOC_NM_SETTING_HOSTNAME_PRIORITY N_("The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname.") +#define DESCRIBE_DOC_NM_SETTING_HSR_MULTICAST_SPEC N_("The last byte of supervision address.") +#define DESCRIBE_DOC_NM_SETTING_HSR_PORT1 N_("The port1 interface name of the HSR. This property is mandatory.") +#define DESCRIBE_DOC_NM_SETTING_HSR_PORT2 N_("The port2 interface name of the HSR. This property is mandatory.") +#define DESCRIBE_DOC_NM_SETTING_HSR_PRP N_("The protocol used by the interface, whether it is PRP or HSR.") #define DESCRIBE_DOC_NM_SETTING_LINK_GRO_MAX_SIZE N_("The maximum size of a packet built by the Generic Receive Offload stack for this device. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved.") #define DESCRIBE_DOC_NM_SETTING_LINK_GSO_MAX_SEGMENTS N_("The maximum segments of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved.") #define DESCRIBE_DOC_NM_SETTING_LINK_GSO_MAX_SIZE N_("The maximum size of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved.") diff --git a/src/libnmt-newt/nmt-newt-button-box.c b/src/libnmt-newt/nmt-newt-button-box.c index f3c8b27e..de17d5a8 100644 --- a/src/libnmt-newt/nmt-newt-button-box.c +++ b/src/libnmt-newt/nmt-newt-button-box.c @@ -218,12 +218,12 @@ size_request_buttons(NmtNewtButtonBox *bbox, GPtrArray *buttons, int *width, int *width += child_width; if (i > 0) *width += 1; - *height = MAX(*height, child_height); + *height = NM_MAX(*height, child_height); } else { *height += child_height; if (i > 0) *height += 1; - *width = MAX(*width, child_width); + *width = NM_MAX(*width, child_width); } } } diff --git a/src/libnmt-newt/nmt-newt-form.c b/src/libnmt-newt/nmt-newt-form.c index 6e0589cc..3565799c 100644 --- a/src/libnmt-newt/nmt-newt-form.c +++ b/src/libnmt-newt/nmt-newt-form.c @@ -182,9 +182,9 @@ nmt_newt_form_build(NmtNewtForm *form) newtGetScreenSize(&screen_width, &screen_height); if (!priv->fixed_width) - priv->width = MIN(form_width + 2 * priv->padding, screen_width - 2); + priv->width = NM_MIN(form_width + 2 * ((gint64) priv->padding), screen_width - 2); if (!priv->fixed_height) - priv->height = MIN(form_height + 2 * priv->padding, screen_height - 2); + priv->height = NM_MIN(form_height + 2 * ((gint64) priv->padding), screen_height - 2); if (!priv->fixed_x) priv->x = (screen_width - form_width) / 2; diff --git a/src/libnmt-newt/nmt-newt-section.c b/src/libnmt-newt/nmt-newt-section.c index eb551273..e0c404f0 100644 --- a/src/libnmt-newt/nmt-newt-section.c +++ b/src/libnmt-newt/nmt-newt-section.c @@ -249,7 +249,7 @@ nmt_newt_section_size_request(NmtNewtWidget *widget, int *width, int *height) nmt_newt_widget_size_request(priv->header, &priv->hwidth_req, &priv->hheight_req); nmt_newt_widget_size_request(priv->body, &priv->bwidth_req, &priv->bheight_req); - *width = MAX(priv->hwidth_req, priv->bwidth_req) + 2; + *width = NM_MAX(priv->hwidth_req, priv->bwidth_req) + 2; if (priv->open) *height = priv->hheight_req + priv->bheight_req + (priv->show_border ? 1 : 0); else diff --git a/src/libnmt-newt/nmt-newt-textbox.c b/src/libnmt-newt/nmt-newt-textbox.c index 24aae9f9..bf9b6a294 100644 --- a/src/libnmt-newt/nmt-newt-textbox.c +++ b/src/libnmt-newt/nmt-newt-textbox.c @@ -95,7 +95,7 @@ nmt_newt_textbox_set_text(NmtNewtTextbox *textbox, const char *text) priv->width = width; } g_free(lines); - priv->height = MIN(i, 1); + priv->height = NM_MIN(i, 1); g_object_notify(G_OBJECT(textbox), "text"); nmt_newt_widget_needs_rebuild(NMT_NEWT_WIDGET(textbox)); diff --git a/src/libnmt-newt/nmt-newt-utils.c b/src/libnmt-newt/nmt-newt-utils.c index 14825fab..8eeee202 100644 --- a/src/libnmt-newt/nmt-newt-utils.c +++ b/src/libnmt-newt/nmt-newt-utils.c @@ -65,7 +65,7 @@ nmt_newt_dialog_g_log_handler(const char *log_domain, */ newtGetScreenSize(&screen_width, &screen_height); - text = newtTextboxReflowed(-1, -1, full_message, MAX(70, screen_width - 10), 0, 0, 0); + text = newtTextboxReflowed(-1, -1, full_message, NM_MAX(70, screen_width - 10), 0, 0, 0); g_free(full_message); ok = newtButton(-1, -1, "OK"); @@ -282,7 +282,7 @@ nmt_newt_message_dialog(const char *message, ...) * Displays the given message in a dialog box with two buttons with * the indicated labels, and waits for the user to click one. * - * Returns: which button was clicked: 0 for @button1 or 1 for @button2 + * Returns: which button was clicked: 1 for @button1, 2 for @button2 or 0 otherwise */ int nmt_newt_choice_dialog(const char *button1, const char *button2, const char *message, ...) diff --git a/src/linux-headers/nl80211-vnd-intel.h b/src/linux-headers/nl80211-vnd-intel.h deleted file mode 100644 index 4ed7d0b2..00000000 --- a/src/linux-headers/nl80211-vnd-intel.h +++ /dev/null @@ -1,106 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -/* - * Copyright (C) 2012-2014, 2018-2021 Intel Corporation - * Copyright (C) 2013-2015 Intel Mobile Communications GmbH - * Copyright (C) 2016-2017 Intel Deutschland GmbH - */ -#ifndef __VENDOR_CMD_INTEL_H__ -#define __VENDOR_CMD_INTEL_H__ - -#define INTEL_OUI 0x001735 - -/** - * enum iwl_mvm_vendor_cmd - supported vendor commands - * @IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO: reports CSME connection info. - * @IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP: asks for ownership on the device. - * This is useful when the CSME firmware owns the device and the kernel - * wants to use it. In case the CSME firmware has no connection active the - * kernel will manage on its own to get ownership of the device. - * When the CSME firmware has an active connection, the user space - * involvement is required. The kernel will assert the RFKILL signal with - * the "device not owned" reason so that nobody can touch the device. Then - * the user space can run the following flow to be able to get connected - * to the very same AP the CSME firmware is currently connected to: - * - * 1) The user space (NetworkManager) boots and sees that the device is - * in RFKILL because the host doesn't own the device - * 2) The user space asks the kernel what AP the CSME firmware is - * connected to (with %IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO) - * 3) The user space checks if it has a profile that matches the reply - * from the CSME firmware - * 4) The user space installs a network to the wpa_supplicant with a - * specific BSSID and a specific frequency - * 5) The user space prevents any type of full scan - * 6) The user space asks iwlmei to request ownership on the device (with - * this command) - * 7) iwlmei requests ownership from the CSME firmware - * 8) The CSME firmware grants ownership - * 9) iwlmei tells iwlwifi to lift the RFKILL - * 10) RFKILL OFF is reported to user space - * 11) The host boots the device, loads the firwmare, and connects to a - * specific BSSID without scanning including IP as fast as it can - * 12) The host reports to the CSME firmware that there is a connection - * 13) The TCP connection is preserved and the host has connectivity - * - * @IWL_MVM_VENDOR_CMD_ROAMING_FORBIDDEN_EVENT: notifies if roaming is allowed. - * It contains a &IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN and a - * &IWL_MVM_VENDOR_ATTR_VIF_ADDR attributes. - */ - -enum iwl_mvm_vendor_cmd { - IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO = 0x2d, - IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP = 0x30, - IWL_MVM_VENDOR_CMD_ROAMING_FORBIDDEN_EVENT = 0x32, -}; - -enum iwl_vendor_auth_akm_mode { - IWL_VENDOR_AUTH_OPEN, - IWL_VENDOR_AUTH_RSNA = 0x6, - IWL_VENDOR_AUTH_RSNA_PSK, - IWL_VENDOR_AUTH_SAE = 0x9, - IWL_VENDOR_AUTH_MAX, -}; - -/** - * enum iwl_mvm_vendor_attr - attributes used in vendor commands - * @__IWL_MVM_VENDOR_ATTR_INVALID: attribute 0 is invalid - * @IWL_MVM_VENDOR_ATTR_VIF_ADDR: interface MAC address - * @IWL_MVM_VENDOR_ATTR_ADDR: MAC address - * @IWL_MVM_VENDOR_ATTR_SSID: SSID (binary attribute, 0..32 octets) - * @IWL_MVM_VENDOR_ATTR_STA_CIPHER: the cipher to use for the station with the - * mac address specified in &IWL_MVM_VENDOR_ATTR_ADDR. - * @IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN: u8 attribute. Indicates whether - * roaming is forbidden or not. Value 1 means roaming is forbidden, - * 0 mean roaming is allowed. - * @IWL_MVM_VENDOR_ATTR_AUTH_MODE: u32 attribute. Authentication mode type - * as specified in &enum iwl_vendor_auth_akm_mode. - * @IWL_MVM_VENDOR_ATTR_CHANNEL_NUM: u8 attribute. Contains channel number. - * @IWL_MVM_VENDOR_ATTR_BAND: u8 attribute. - * 0 for 2.4 GHz band, 1 for 5.2GHz band and 2 for 6GHz band. - * @IWL_MVM_VENDOR_ATTR_COLLOC_CHANNEL: u32 attribute. Channel number of - * collocated AP. Relevant for 6GHz AP info. - * @IWL_MVM_VENDOR_ATTR_COLLOC_ADDR: MAC address of a collocated AP. - * Relevant for 6GHz AP info. - * - * @NUM_IWL_MVM_VENDOR_ATTR: number of vendor attributes - * @MAX_IWL_MVM_VENDOR_ATTR: highest vendor attribute number - - */ -enum iwl_mvm_vendor_attr { - __IWL_MVM_VENDOR_ATTR_INVALID = 0x00, - IWL_MVM_VENDOR_ATTR_VIF_ADDR = 0x02, - IWL_MVM_VENDOR_ATTR_ADDR = 0x0a, - IWL_MVM_VENDOR_ATTR_SSID = 0x3d, - IWL_MVM_VENDOR_ATTR_STA_CIPHER = 0x51, - IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN = 0x64, - IWL_MVM_VENDOR_ATTR_AUTH_MODE = 0x65, - IWL_MVM_VENDOR_ATTR_CHANNEL_NUM = 0x66, - IWL_MVM_VENDOR_ATTR_BAND = 0x69, - IWL_MVM_VENDOR_ATTR_COLLOC_CHANNEL = 0x70, - IWL_MVM_VENDOR_ATTR_COLLOC_ADDR = 0x71, - - NUM_IWL_MVM_VENDOR_ATTR, - MAX_IWL_MVM_VENDOR_ATTR = NUM_IWL_MVM_VENDOR_ATTR - 1, -}; - -#endif /* __VENDOR_CMD_INTEL_H__ */ diff --git a/src/n-acd/src/n-acd-private.h b/src/n-acd/src/n-acd-private.h index 4583c018..db28b1a5 100644 --- a/src/n-acd/src/n-acd-private.h +++ b/src/n-acd/src/n-acd-private.h @@ -105,6 +105,7 @@ struct NAcdProbe { void *userdata; /* state */ + unsigned int seed; unsigned int state; unsigned int n_iteration; unsigned int defend; diff --git a/src/n-acd/src/n-acd-probe.c b/src/n-acd/src/n-acd-probe.c index c1ed59ae..d32e0103 100644 --- a/src/n-acd/src/n-acd-probe.c +++ b/src/n-acd/src/n-acd-probe.c @@ -172,7 +172,7 @@ static void n_acd_probe_schedule(NAcdProbe *probe, uint64_t n_timeout, unsigned if (n_jitter) { uint64_t random; - random = ((uint64_t)rand_r(&probe->acd->seed) << 32) | (uint64_t)rand_r(&probe->acd->seed); + random = ((uint64_t)rand_r(&probe->seed) << 32) | (uint64_t)rand_r(&probe->seed); n_time += random % n_jitter; } @@ -283,6 +283,7 @@ int n_acd_probe_new(NAcdProbe **probep, NAcd *acd, NAcdProbeConfig *config) { *probe = (NAcdProbe)N_ACD_PROBE_NULL(*probe); probe->acd = n_acd_ref(acd); probe->ip = config->ip; + probe->seed = acd->seed; /* * We use the provided timeout-length as multiplier for all our diff --git a/src/n-dhcp4/src/n-dhcp4-c-connection.c b/src/n-dhcp4/src/n-dhcp4-c-connection.c index 5abd6f59..dd1a573a 100644 --- a/src/n-dhcp4/src/n-dhcp4-c-connection.c +++ b/src/n-dhcp4/src/n-dhcp4-c-connection.c @@ -543,12 +543,14 @@ static int n_dhcp4_c_connection_new_message(NDhcp4CConnection *connection, if (r) return r; - r = n_dhcp4_outgoing_append(message, - N_DHCP4_OPTION_CLIENT_IDENTIFIER, - connection->client_config->client_id, - connection->client_config->n_client_id); - if (r) - return r; + if (connection->client_config->n_client_id > 0) { + r = n_dhcp4_outgoing_append(message, + N_DHCP4_OPTION_CLIENT_IDENTIFIER, + connection->client_config->client_id, + connection->client_config->n_client_id); + if (r) + return r; + } switch (message_type) { case N_DHCP4_MESSAGE_DISCOVER: diff --git a/src/n-dhcp4/src/n-dhcp4-client.c b/src/n-dhcp4/src/n-dhcp4-client.c index 3b4a70c8..7689ba93 100644 --- a/src/n-dhcp4/src/n-dhcp4-client.c +++ b/src/n-dhcp4/src/n-dhcp4-client.c @@ -403,7 +403,7 @@ _c_public_ int n_dhcp4_client_new(NDhcp4Client **clientp, NDhcp4ClientConfig *co return N_DHCP4_E_INVALID_TRANSPORT; } - if (config->n_client_id < 1) + if (config->n_client_id != 0 && config->n_client_id < 2) return N_DHCP4_E_INVALID_CLIENT_ID; } diff --git a/src/nm-cloud-setup/nm-cloud-setup.service.in b/src/nm-cloud-setup/nm-cloud-setup.service.in index a2b4581f..e73654d8 100644 --- a/src/nm-cloud-setup/nm-cloud-setup.service.in +++ b/src/nm-cloud-setup/nm-cloud-setup.service.in @@ -22,22 +22,30 @@ ExecStart=@libexecdir@/nm-cloud-setup #Environment=NM_CLOUD_SETUP_ALIYUN=yes CapabilityBoundingSet= +KeyringMode=private LockPersonality=yes MemoryDenyWriteExecute=yes NoNewPrivileges=yes PrivateDevices=yes PrivateTmp=yes +PrivateUsers=yes +ProtectClock=yes ProtectControlGroups=yes ProtectHome=yes ProtectHostname=yes ProtectKernelLogs=yes ProtectKernelModules=yes ProtectKernelTunables=yes +ProtectProc=invisible ProtectSystem=strict -RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 RestrictNamespaces=yes RestrictRealtime=yes RestrictSUIDSGID=yes +SystemCallArchitectures=native + +DevicePolicy=closed +PrivateNetwork=no +RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 SystemCallFilter=@system-service [Install] diff --git a/src/nm-daemon-helper/nm-daemon-helper.c b/src/nm-daemon-helper/nm-daemon-helper.c index a447d63c..810ea5fa 100644 --- a/src/nm-daemon-helper/nm-daemon-helper.c +++ b/src/nm-daemon-helper/nm-daemon-helper.c @@ -94,12 +94,15 @@ cmd_resolve_address(void) NI_NAMEREQD); if (ret != 0) { if (ret == EAI_SYSTEM) { + int errsv = errno; + char buf[1024]; + fprintf(stderr, "getnameinfo() failed: %d (%s), system error: %d (%s)\n", ret, gai_strerror(ret), - errno, - strerror(errno)); + errsv, + _nm_strerror_r(errsv, buf, sizeof(buf))); } else { fprintf(stderr, "getnameinfo() failed: %d (%s)\n", ret, gai_strerror(ret)); } diff --git a/src/nm-dispatcher/nm-dispatcher-utils.c b/src/nm-dispatcher/nm-dispatcher-utils.c index 74ea4e40..f8a4c280 100644 --- a/src/nm-dispatcher/nm-dispatcher-utils.c +++ b/src/nm-dispatcher/nm-dispatcher-utils.c @@ -453,8 +453,12 @@ nm_dispatcher_utils_construct_envp(const char *action, items = g_ptr_array_new_with_free_func(g_free); - /* Hostname and connectivity changes don't require a device nor contain a connection */ - if (NM_IN_STRSET(action, NMD_ACTION_HOSTNAME, NMD_ACTION_CONNECTIVITY_CHANGE)) + /* Hostname, dns and connectivity changes don't require a device nor contain + * a connection */ + if (NM_IN_STRSET(action, + NMD_ACTION_HOSTNAME, + NMD_ACTION_CONNECTIVITY_CHANGE, + NMD_ACTION_DNS_CHANGE)) goto done; /* Connection properties */ diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c index 68fe7004..7bb7e43e 100644 --- a/src/nm-initrd-generator/nmi-cmdline-reader.c +++ b/src/nm-initrd-generator/nmi-cmdline-reader.c @@ -486,12 +486,12 @@ _parse_ip_method(const char *kind) nm_strv_sort(strv, -1); nm_strv_cleanup_const(strv, TRUE, TRUE); - if (nm_strv_find_first(strv, -1, "auto") >= 0) { + if (nm_strv_contains(strv, -1, "auto")) { /* if "auto" is present, then "dhcp4", "dhcp6", and "local6" is implied. */ _strv_remove(strv, "dhcp4"); _strv_remove(strv, "dhcp6"); _strv_remove(strv, "local6"); - } else if (nm_strv_find_first(strv, -1, "dhcp6") >= 0) { + } else if (nm_strv_contains(strv, -1, "dhcp6")) { /* if "dhcp6" is present, then "local6" is implied. */ _strv_remove(strv, "local6"); } @@ -924,9 +924,9 @@ reader_parse_master(Reader *reader, char *argument, const char *type_name, const connection = reader_get_connection(reader, slave, NULL, TRUE); s_con = nm_connection_get_setting_connection(connection); g_object_set(s_con, - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, type_name, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, master, NULL); } while (slaves && *slaves != '\0'); @@ -1435,7 +1435,7 @@ nmi_cmdline_reader_parse(const char *etc_connections_dir, } } - reader->dhcp_timeout = NM_CLAMP(dhcp_timeout * dhcp_num_tries, 1, G_MAXINT32); + reader->dhcp_timeout = NM_CLAMP(dhcp_timeout * dhcp_num_tries, 1u, (guint32) G_MAXINT32); for (i = 0; argv[i]; i++) { gs_free char *argument_clone = NULL; diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c index 7124d74e..3dbbd4d5 100644 --- a/src/nm-initrd-generator/tests/test-cmdline-reader.c +++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c @@ -1031,7 +1031,7 @@ test_bond(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1047,7 +1047,7 @@ test_bond(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1129,7 +1129,7 @@ test_bond_ip(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1145,7 +1145,7 @@ test_bond_ip(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1208,7 +1208,7 @@ test_bond_default(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1284,9 +1284,7 @@ test_bridge(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), - ==, - NM_SETTING_BRIDGE_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1302,9 +1300,7 @@ test_bridge(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), - ==, - NM_SETTING_BRIDGE_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1365,9 +1361,7 @@ test_bridge_default(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), - ==, - NM_SETTING_BRIDGE_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1433,7 +1427,7 @@ test_bridge_ip(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, ifname); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); @@ -1499,7 +1493,7 @@ test_team(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_TEAM_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_TEAM_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, @@ -1515,7 +1509,7 @@ test_team(void) ==, NM_SETTING_WIRED_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1"); - g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_TEAM_SETTING_NAME); + g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_TEAM_SETTING_NAME); g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, master_uuid); g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con), ==, diff --git a/src/nm-online/nm-online.c b/src/nm-online/nm-online.c index bba3cd5c..b1de621e 100644 --- a/src/nm-online/nm-online.c +++ b/src/nm-online/nm-online.c @@ -76,7 +76,7 @@ _print_progress(gboolean wait_startup, int progress_next_step_i, gint64 remainin g_print("\r%s", _("Connecting")); for (i = 0; i < PROGRESS_STEPS; i++) putchar(i < j ? '.' : ' '); - g_print(" %4lds", (long) (MAX(0, remaining_ms + 999) / 1000)); + g_print(" %4lds", (long) (NM_MAX(0, remaining_ms + 999) / 1000)); if (retval != EXIT_NONE) { const char *result; diff --git a/src/nmcli/common.c b/src/nmcli/common.c index 518faa2f..04d2ebf9 100644 --- a/src/nmcli/common.c +++ b/src/nmcli/common.c @@ -1016,7 +1016,7 @@ nmc_readline_echo(const NmcConfig *nmc_config, gboolean echo_on, const char *pro saved_history = history_get_history_state(); history_set_history_state(&passwd_history); #else - start = where_history(); + start = where_history(); #endif /* stifling history is important as it tells readline to * not store anything, otherwise sensitive data could be diff --git a/src/nmcli/connections.c b/src/nmcli/connections.c index d6413c91..0ab11e3e 100644 --- a/src/nmcli/connections.c +++ b/src/nmcli/connections.c @@ -291,65 +291,91 @@ connection_type_to_display(const char *type, NMMetaAccessorGetType get_type) static int active_connection_get_state_ord(NMActiveConnection *active) { + static const NMActiveConnectionState ordered_states[] = { + NM_ACTIVE_CONNECTION_STATE_UNKNOWN, + NM_ACTIVE_CONNECTION_STATE_DEACTIVATED, + NM_ACTIVE_CONNECTION_STATE_DEACTIVATING, + NM_ACTIVE_CONNECTION_STATE_ACTIVATING, + NM_ACTIVE_CONNECTION_STATE_ACTIVATED, + }; + NMActiveConnectionState state; + int i; + gboolean is_external; + /* returns an integer related to @active's state, that can be used for sorting * active connections based on their activation state. */ + if (!active) - return -2; + return -10; - switch (nm_active_connection_get_state(active)) { - case NM_ACTIVE_CONNECTION_STATE_UNKNOWN: - return 0; - case NM_ACTIVE_CONNECTION_STATE_DEACTIVATED: - return 1; - case NM_ACTIVE_CONNECTION_STATE_DEACTIVATING: - return 2; - case NM_ACTIVE_CONNECTION_STATE_ACTIVATING: - return 3; - case NM_ACTIVE_CONNECTION_STATE_ACTIVATED: - return 4; + state = nm_active_connection_get_state(active); + is_external = NM_FLAGS_HAS(nm_active_connection_get_state_flags(active), + NM_ACTIVATION_STATE_FLAG_EXTERNAL); + + for (i = 0; i < (int) G_N_ELEMENTS(ordered_states); i++) { + if (state == ordered_states[i]) { + if (!is_external) + i += G_N_ELEMENTS(ordered_states); + return i; + } } - return -1; + + return is_external ? -2 : -1; } int nmc_active_connection_cmp(NMActiveConnection *ac_a, NMActiveConnection *ac_b) { - NMSettingIPConfig *s_ip; - NMRemoteConnection *conn; + NMSettingIPConfig *s_ip4_a; + NMSettingIPConfig *s_ip4_b; + NMSettingIPConfig *s_ip6_a; + NMSettingIPConfig *s_ip6_b; + NMRemoteConnection *conn_a; + NMRemoteConnection *conn_b; NMIPConfig *da_ip; NMIPConfig *db_ip; - int da_num_addrs; - int db_num_addrs; - int cmp = 0; + gint64 da_num_addrs; + gint64 db_num_addrs; + gboolean bool_a; + gboolean bool_b; + + /* nmc_active_connection_cmp() sorts more-important ACs later. That means, + * - NULL comes first + * - then sorting by state (active_connection_get_state_ord()), with "activated" sorted last. + * - various properties of the AC. + * + * This is basically the inverse order of `nmcli connection`. + */ - /* Non-active sort last. */ + /* Non-active (and NULL) sort first! */ NM_CMP_SELF(ac_a, ac_b); - NM_CMP_DIRECT(active_connection_get_state_ord(ac_b), active_connection_get_state_ord(ac_a)); + NM_CMP_DIRECT(active_connection_get_state_ord(ac_a), active_connection_get_state_ord(ac_b)); + + conn_a = nm_active_connection_get_connection(ac_a); + conn_b = nm_active_connection_get_connection(ac_b); + + s_ip6_a = conn_a ? nm_connection_get_setting_ip6_config(NM_CONNECTION(conn_a)) : NULL; + s_ip6_b = conn_b ? nm_connection_get_setting_ip6_config(NM_CONNECTION(conn_b)) : NULL; /* Shared connections (likely hotspots) go on the top if possible */ - conn = nm_active_connection_get_connection(ac_a); - s_ip = conn ? nm_connection_get_setting_ip6_config(NM_CONNECTION(conn)) : NULL; - if (s_ip - && nm_streq(nm_setting_ip_config_get_method(s_ip), NM_SETTING_IP6_CONFIG_METHOD_SHARED)) - cmp++; - conn = nm_active_connection_get_connection(ac_b); - s_ip = conn ? nm_connection_get_setting_ip6_config(NM_CONNECTION(conn)) : NULL; - if (s_ip - && nm_streq(nm_setting_ip_config_get_method(s_ip), NM_SETTING_IP6_CONFIG_METHOD_SHARED)) - cmp--; - NM_CMP_RETURN(cmp); - - conn = nm_active_connection_get_connection(ac_a); - s_ip = conn ? nm_connection_get_setting_ip4_config(NM_CONNECTION(conn)) : NULL; - if (s_ip - && nm_streq(nm_setting_ip_config_get_method(s_ip), NM_SETTING_IP4_CONFIG_METHOD_SHARED)) - cmp++; - conn = nm_active_connection_get_connection(ac_b); - s_ip = conn ? nm_connection_get_setting_ip4_config(NM_CONNECTION(conn)) : NULL; - if (s_ip - && nm_streq(nm_setting_ip_config_get_method(s_ip), NM_SETTING_IP4_CONFIG_METHOD_SHARED)) - cmp--; - NM_CMP_RETURN(cmp); + bool_a = (s_ip6_a + && nm_streq(nm_setting_ip_config_get_method(s_ip6_a), + NM_SETTING_IP6_CONFIG_METHOD_SHARED)); + bool_b = (s_ip6_b + && nm_streq(nm_setting_ip_config_get_method(s_ip6_b), + NM_SETTING_IP6_CONFIG_METHOD_SHARED)); + NM_CMP_DIRECT(bool_a, bool_b); + + s_ip4_a = conn_a ? nm_connection_get_setting_ip4_config(NM_CONNECTION(conn_a)) : NULL; + s_ip4_b = conn_b ? nm_connection_get_setting_ip4_config(NM_CONNECTION(conn_b)) : NULL; + + bool_a = (s_ip4_a + && nm_streq(nm_setting_ip_config_get_method(s_ip4_a), + NM_SETTING_IP4_CONFIG_METHOD_SHARED)); + bool_b = (s_ip4_b + && nm_streq(nm_setting_ip_config_get_method(s_ip4_b), + NM_SETTING_IP4_CONFIG_METHOD_SHARED)); + NM_CMP_DIRECT(bool_a, bool_b); /* VPNs go next */ NM_CMP_DIRECT(!!nm_active_connection_get_vpn(ac_a), !!nm_active_connection_get_vpn(ac_b)); @@ -367,9 +393,9 @@ nmc_active_connection_cmp(NMActiveConnection *ac_a, NMActiveConnection *ac_b) db_num_addrs = db_ip ? nm_ip_config_get_addresses(db_ip)->len : 0; da_ip = nm_active_connection_get_ip6_config(ac_a); - da_num_addrs += da_ip ? nm_ip_config_get_addresses(da_ip)->len : 0; + da_num_addrs += (gint64) (da_ip ? nm_ip_config_get_addresses(da_ip)->len : 0u); db_ip = nm_active_connection_get_ip6_config(ac_b); - db_num_addrs += db_ip ? nm_ip_config_get_addresses(db_ip)->len : 0; + db_num_addrs += (gint64) (db_ip ? nm_ip_config_get_addresses(db_ip)->len : 0u); NM_CMP_DIRECT(da_num_addrs, db_num_addrs); @@ -779,7 +805,7 @@ _metagen_con_show_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARGS) case NMC_GENERIC_INFO_TYPE_CON_SHOW_PORT: if (!s_con) return NULL; - return nm_setting_connection_get_slave_type(s_con); + return nm_setting_connection_get_port_type(s_con); case NMC_GENERIC_INFO_TYPE_CON_SHOW_FILENAME: if (!NM_IS_REMOTE_CONNECTION(c)) return NULL; @@ -1049,7 +1075,8 @@ const NmcMetaGenericInfo "," NM_SETTING_LINK_SETTING_NAME "," NM_SETTING_PROXY_SETTING_NAME \ "," NM_SETTING_TC_CONFIG_SETTING_NAME "," NM_SETTING_SRIOV_SETTING_NAME \ "," NM_SETTING_ETHTOOL_SETTING_NAME "," NM_SETTING_OVS_DPDK_SETTING_NAME \ - "," NM_SETTING_HOSTNAME_SETTING_NAME /* NM_SETTING_DUMMY_SETTING_NAME NM_SETTING_WIMAX_SETTING_NAME */ + "," NM_SETTING_HOSTNAME_SETTING_NAME "," NM_SETTING_HSR_SETTING_NAME +/* NM_SETTING_DUMMY_SETTING_NAME NM_SETTING_WIMAX_SETTING_NAME */ const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[] = { NMC_META_GENERIC_WITH_NESTED("GENERAL", metagen_con_active_general), /* 0 */ @@ -1447,7 +1474,7 @@ get_ac_for_connection_cmp(gconstpointer pa, gconstpointer pb) NMActiveConnection *ac_a = *((NMActiveConnection *const *) pa); NMActiveConnection *ac_b = *((NMActiveConnection *const *) pb); - NM_CMP_RETURN(nmc_active_connection_cmp(ac_a, ac_b)); + NM_CMP_RETURN(nmc_active_connection_cmp(ac_b, ac_a)); NM_CMP_DIRECT_STRCMP0(nm_active_connection_get_id(ac_a), nm_active_connection_get_id(ac_b)); NM_CMP_DIRECT_STRCMP0(nm_active_connection_get_connection_type(ac_a), nm_active_connection_get_connection_type(ac_b)); @@ -2262,7 +2289,7 @@ get_connection(NmCli *nmc, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT, _("%s argument is missing"), - selector); + (*argv)[0]); return NULL; } } else { @@ -3838,7 +3865,7 @@ is_setting_mandatory(NMConnection *connection, NMSetting *setting) g_return_val_if_fail(s_con, FALSE); c_type = nm_setting_connection_get_connection_type(s_con); - s_type = nm_setting_connection_get_slave_type(s_con); + s_type = nm_setting_connection_get_port_type(s_con); name = nm_setting_get_name(setting); @@ -4427,7 +4454,7 @@ con_settings(NMConnection *connection, s_con = nm_connection_get_setting_connection(connection); g_return_val_if_fail(s_con, FALSE); - con_type = nm_setting_connection_get_slave_type(s_con); + con_type = nm_setting_connection_get_port_type(s_con); *port_settings = nm_meta_setting_info_valid_parts_for_slave_type(con_type, NULL); if (!*port_settings) { g_set_error(error, @@ -4527,14 +4554,16 @@ enable_type_settings_and_options(NmCli *nmc, NMConnection *con, GError **error) s_con = nm_connection_get_setting_connection(con); g_return_val_if_fail(s_con, FALSE); - if (nm_setting_connection_get_slave_type(s_con)) - enable_options(NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_MASTER, NULL); + if (nm_setting_connection_get_port_type(s_con)) { + enable_options(NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_CONTROLLER, NULL); + } if (NM_IN_STRSET(nm_setting_connection_get_connection_type(s_con), NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_DUMMY_SETTING_NAME, + NM_SETTING_HSR_SETTING_NAME, NM_SETTING_OVS_BRIDGE_SETTING_NAME, NM_SETTING_OVS_PATCH_SETTING_NAME, NM_SETTING_OVS_PORT_SETTING_NAME, @@ -4587,7 +4616,7 @@ set_connection_type(NmCli *nmc, if (!set_property(nmc->client, con, NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, port_type, NM_META_ACCESSOR_MODIFIER_SET, error)) { @@ -4657,14 +4686,14 @@ set_connection_controller(NmCli *nmc, return FALSE; } - port_type = nm_setting_connection_get_slave_type(s_con); + port_type = nm_setting_connection_get_port_type(s_con); connections = nmc_get_connections(nmc); value = normalized_controller_for_port(connections, value, port_type, &port_type); if (!set_property(nmc->client, con, NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, port_type, NM_META_ACCESSOR_MODIFIER_SET, error)) { @@ -4894,6 +4923,11 @@ _meta_abstract_get_option_info(const NMMetaAbstractInfo *abstract_info) "master", set_connection_controller, NULL), + OPTION_INFO(CONNECTION, + NM_SETTING_CONNECTION_CONTROLLER, + "controller", + set_connection_controller, + NULL), OPTION_INFO(BLUETOOTH, NM_SETTING_BLUETOOTH_TYPE, "bt-type", @@ -4984,7 +5018,7 @@ complete_property_name(NmCli *nmc, connection_type = nm_connection_get_connection_type(connection); s_con = nm_connection_get_setting_connection(connection); if (s_con) - port_type = nm_setting_connection_get_slave_type(s_con); + port_type = nm_setting_connection_get_port_type(s_con); valid_settings_main = get_valid_settings_array(connection_type); valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(port_type, NULL); @@ -5927,7 +5961,7 @@ read_properties: /* Traditionally, we didn't ask for these options for ethernet ports. They don't * make much sense, since these are likely to be set by the controller anyway. */ - if (nm_setting_connection_get_slave_type(s_con)) { + if (nm_setting_connection_get_port_type(s_con)) { disable_options(NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MTU); disable_options(NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS); disable_options(NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_CLONED_MAC_ADDRESS); @@ -5938,7 +5972,7 @@ read_properties: if (!nm_setting_connection_get_id(s_con)) { const char *ifname = nm_setting_connection_get_interface_name(s_con); const char *type = nm_setting_connection_get_connection_type(s_con); - const char *port_type = nm_setting_connection_get_slave_type(s_con); + const char *port_type = nm_setting_connection_get_port_type(s_con); /* If only bother when there's a type, which is not guaranteed at this point. * Otherwise, the validation will fail anyway. */ @@ -6213,7 +6247,7 @@ gen_setting_names(const char *text, int state) /* is_port */ s_con = nm_connection_get_setting_connection(nmc_tab_completion.connection); if (s_con) - s_type = nm_setting_connection_get_slave_type(s_con); + s_type = nm_setting_connection_get_port_type(s_con); valid_settings_arr = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL); if (list_idx < NM_PTRARRAY_LEN(valid_settings_arr)) { @@ -6580,7 +6614,7 @@ get_setting_and_property(const char *prompt, /* Is this too much (and useless?) effort for an unlikely case? */ s_con = nm_connection_get_setting_connection(nmc_tab_completion.connection); if (s_con) - s_type = nm_setting_connection_get_slave_type(s_con); + s_type = nm_setting_connection_get_port_type(s_con); valid_settings_main = get_valid_settings_array(nmc_tab_completion.con_type); valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL); @@ -7951,7 +7985,7 @@ editor_menu_main(NmCli *nmc, NMConnection *connection, const char *connection_ty s_con = nm_connection_get_setting_connection(connection); if (s_con) - s_type = nm_setting_connection_get_slave_type(s_con); + s_type = nm_setting_connection_get_port_type(s_con); valid_settings_main = get_valid_settings_array(connection_type); valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL); @@ -8824,9 +8858,9 @@ editor_init_new_connection(NmCli *nmc, NMConnection *connection, const char *por g_object_set(s_con, NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, dev_ifname ?: "eth0", - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, port_type, NULL); } else { @@ -9369,8 +9403,10 @@ do_connection_delete(const NMCCommand *cmd, NmCli *nmc, int argc, const char *co g_clear_error(&error); if (nmc->return_value != NMC_RESULT_ERROR_NOT_FOUND) { - g_string_free(invalid_cons, TRUE); - invalid_cons = NULL; + if (invalid_cons) { + g_string_free(invalid_cons, TRUE); + invalid_cons = NULL; + } goto finish; } diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index a56f0f81..a3ea7c45 100644 --- a/src/nmcli/devices.c +++ b/src/nmcli/devices.c @@ -597,6 +597,12 @@ _metagen_device_detail_wifi_properties_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARG ? (NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_5GHZ) ? N_("yes") : N_("no")) : N_("unknown"), get_type); + case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ: + return nmc_meta_generic_get_str_i18n( + NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_VALID) + ? (NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_6GHZ) ? N_("yes") : N_("no")) + : N_("unknown"), + get_type); case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH: return nmc_meta_generic_get_bool(NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_MESH), get_type); case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN: @@ -644,6 +650,9 @@ const NmcMetaGenericInfo *const NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_5GHZ, "5GHZ"), _METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES( + NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ, + "6GHZ"), + _METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES( NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH, "MESH"), _METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES( @@ -725,15 +734,16 @@ const NmcMetaGenericInfo *const nmc_fields_dev_wifi_list[] = { NMC_META_GENERIC("CHAN"), /* 5 */ NMC_META_GENERIC("FREQ"), /* 6 */ NMC_META_GENERIC("RATE"), /* 7 */ - NMC_META_GENERIC("SIGNAL"), /* 8 */ - NMC_META_GENERIC("BARS"), /* 9 */ - NMC_META_GENERIC("SECURITY"), /* 10 */ - NMC_META_GENERIC("WPA-FLAGS"), /* 11 */ - NMC_META_GENERIC("RSN-FLAGS"), /* 12 */ - NMC_META_GENERIC("DEVICE"), /* 13 */ - NMC_META_GENERIC("ACTIVE"), /* 14 */ - NMC_META_GENERIC("IN-USE"), /* 15 */ - NMC_META_GENERIC("DBUS-PATH"), /* 16 */ + NMC_META_GENERIC("BANDWIDTH"), /* 8 */ + NMC_META_GENERIC("SIGNAL"), /* 9 */ + NMC_META_GENERIC("BARS"), /* 10 */ + NMC_META_GENERIC("SECURITY"), /* 11 */ + NMC_META_GENERIC("WPA-FLAGS"), /* 12 */ + NMC_META_GENERIC("RSN-FLAGS"), /* 13 */ + NMC_META_GENERIC("DEVICE"), /* 14 */ + NMC_META_GENERIC("ACTIVE"), /* 15 */ + NMC_META_GENERIC("IN-USE"), /* 16 */ + NMC_META_GENERIC("DBUS-PATH"), /* 17 */ NULL, }; #define NMC_FIELDS_DEV_WIFI_LIST_COMMON "IN-USE,BSSID,SSID,MODE,CHAN,RATE,SIGNAL,BARS,SECURITY" @@ -1072,8 +1082,8 @@ compare_devices(const void *a, const void *b) NMActiveConnection *da_ac = nm_device_get_active_connection(da); NMActiveConnection *db_ac = nm_device_get_active_connection(db); - NM_CMP_DIRECT(nm_device_get_state(db), nm_device_get_state(da)); NM_CMP_RETURN(nmc_active_connection_cmp(db_ac, da_ac)); + NM_CMP_DIRECT(nm_device_get_state(db), nm_device_get_state(da)); NM_CMP_DIRECT_STRCMP0(nm_device_get_type_description(da), nm_device_get_type_description(db)); NM_CMP_DIRECT_STRCMP0(nm_device_get_iface(da), nm_device_get_iface(db)); NM_CMP_DIRECT_STRCMP0(nm_object_get_path(NM_OBJECT(da)), nm_object_get_path(NM_OBJECT(db))); @@ -1305,7 +1315,9 @@ fill_output_access_point(NMAccessPoint *ap, const APInfo *info) NmcOutputField *arr; gboolean active; NM80211ApSecurityFlags wpa_flags, rsn_flags; - guint32 freq, bitrate; + guint32 freq; + guint32 bitrate; + guint32 bandwidth; guint8 strength; GBytes *ssid; const char *bssid; @@ -1315,6 +1327,7 @@ fill_output_access_point(NMAccessPoint *ap, const APInfo *info) char *ssid_str = NULL; char *ssid_hex_str = NULL; char *bitrate_str; + char *bandwidth_str; char *strength_str; char *wpa_flags_str; char *rsn_flags_str; @@ -1333,7 +1346,8 @@ fill_output_access_point(NMAccessPoint *ap, const APInfo *info) freq = nm_access_point_get_frequency(ap); mode = nm_access_point_get_mode(ap); bitrate = nm_access_point_get_max_bitrate(ap); - strength = MIN(nm_access_point_get_strength(ap), 100); + bandwidth = nm_access_point_get_bandwidth(ap); + strength = NM_MIN(nm_access_point_get_strength(ap), 100u); /* Convert to strings */ if (ssid) { @@ -1347,6 +1361,7 @@ fill_output_access_point(NMAccessPoint *ap, const APInfo *info) channel_str = g_strdup_printf("%u", nm_utils_wifi_freq_to_channel(freq)); freq_str = g_strdup_printf(_("%u MHz"), freq); bitrate_str = g_strdup_printf(_("%u Mbit/s"), bitrate / 1000); + bandwidth_str = g_strdup_printf(_("%u MHz"), bandwidth); strength_str = nm_strdup_int(strength); wpa_flags_str = ap_wpa_rsn_flags_to_string(wpa_flags, NM_META_ACCESSOR_GET_TYPE_PRETTY); rsn_flags_str = ap_wpa_rsn_flags_to_string(rsn_flags, NM_META_ACCESSOR_GET_TYPE_PRETTY); @@ -1402,15 +1417,16 @@ fill_output_access_point(NMAccessPoint *ap, const APInfo *info) set_val_str(arr, 5, channel_str); set_val_str(arr, 6, freq_str); set_val_str(arr, 7, bitrate_str); - set_val_str(arr, 8, strength_str); - set_val_strc(arr, 9, sig_bars); - set_val_str(arr, 10, g_string_free(security_str, FALSE)); - set_val_str(arr, 11, wpa_flags_str); - set_val_str(arr, 12, rsn_flags_str); - set_val_strc(arr, 13, info->device); - set_val_strc(arr, 14, active ? _("yes") : _("no")); - set_val_strc(arr, 15, active ? "*" : " "); - set_val_strc(arr, 16, nm_object_get_path(NM_OBJECT(ap))); + set_val_str(arr, 8, bandwidth_str); + set_val_str(arr, 9, strength_str); + set_val_strc(arr, 10, sig_bars); + set_val_str(arr, 11, g_string_free(security_str, FALSE)); + set_val_str(arr, 12, wpa_flags_str); + set_val_str(arr, 13, rsn_flags_str); + set_val_strc(arr, 14, info->device); + set_val_strc(arr, 15, active ? _("yes") : _("no")); + set_val_strc(arr, 16, active ? "*" : " "); + set_val_strc(arr, 17, nm_object_get_path(NM_OBJECT(ap))); /* Set colors */ color = wifi_signal_to_color(strength); diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.c b/src/nmcli/gen-metadata-nm-settings-nmcli.c index 8e5831ac..babf1f06 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.c +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.c @@ -3,9 +3,43 @@ #include "libnm-client-aux-extern/nm-default-client.h" #include "libnmc-setting/nm-meta-setting-desc.h" +#include "libnmc-setting/nm-meta-setting-base.h" +#include "libnm-glib-aux/nm-enum-utils.h" +#include "libnm-core-aux-intern/nm-common-macros.h" +#include "nm-core-enum-types.h" +#include <stdarg.h> +#include <stdlib.h> #define INDENT 4 +#define prop_assert(cond, ...) \ + G_STMT_START \ + if (!(cond)) \ + _prop_log(TRUE, __VA_ARGS__); \ + G_STMT_END +#define prop_abort(...) _prop_log(TRUE, __VA_ARGS__) +#define prop_warn(...) _prop_log(FALSE, __VA_ARGS__) + +static void G_GNUC_PRINTF(3, 4) + _prop_log(gboolean fatal, const NMMetaPropertyInfo *prop_info, const char *fmt, ...) +{ + va_list vaargs; + gs_free char *msg = NULL; + gs_free char *msg_full = NULL; + + va_start(vaargs, fmt); + msg = g_strdup_vprintf(fmt, vaargs); + msg_full = g_strdup_printf("gen-metadata-nm-settings-nmcli: %s.%s (type %d): %s\n", + prop_info->setting_info->general->setting_name, + prop_info->property_name, + (int) prop_info->property_type->doc_format, + msg); + if (fatal) + g_error("%s", msg_full); + else + g_warning("%s", msg_full); +} + static char * _xml_escape_attribute(const char *value) { @@ -24,6 +58,448 @@ _indent_level(guint num_spaces) return &spaces[G_N_ELEMENTS(spaces) - num_spaces - 1]; } +static GType +_property_get_gtype(const NMMetaPropertyInfo *prop_info) +{ + nm_auto_unref_gtypeclass NMSettingClass *setting_class = + g_type_class_ref(prop_info->setting_info->general->get_setting_gtype()); + GParamSpec *param_spec = + g_object_class_find_property(G_OBJECT_CLASS(setting_class), prop_info->property_name); + + if (param_spec) + return param_spec->value_type; + g_return_val_if_reached(G_TYPE_INVALID); +} + +static char * +get_enum_format(GType g_type) +{ + if (G_TYPE_IS_FLAGS(g_type)) + return g_strdup_printf("flags (%s)", g_type_name(g_type)); + else + return g_strdup_printf("choice (%s)", g_type_name(g_type)); +} + +static char * +get_mac_format(const NMMetaPropertyInfo *prop_info) +{ + const NMMetaPropertyTypData *prop_typ_data = prop_info->property_typ_data; + + if (prop_typ_data) { + switch (prop_typ_data->subtype.mac.mode) { + case NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT: + case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET: + case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI: + break; + case NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND: + return g_strdup("Infiniband MAC address"); + case NM_META_PROPERTY_TYPE_MAC_MODE_WPAN: + return g_strdup("WPAN MAC address"); + default: + prop_abort(prop_info, "unknown mode (%d)", prop_typ_data->subtype.mac.mode); + break; + } + } + + return g_strdup("MAC address"); +} + +static char * +get_ethtool_format(const NMMetaPropertyInfo *prop_info) +{ + NMEthtoolID ethtool_id; + + prop_assert(prop_info->property_typ_data, prop_info, "missing .property_typ_data"); + + ethtool_id = prop_info->property_typ_data->subtype.ethtool.ethtool_id; + + switch (nm_ethtool_id_to_type(ethtool_id)) { + case NM_ETHTOOL_TYPE_CHANNELS: + case NM_ETHTOOL_TYPE_COALESCE: + case NM_ETHTOOL_TYPE_RING: + return g_strdup("integer"); + case NM_ETHTOOL_TYPE_FEATURE: + case NM_ETHTOOL_TYPE_PAUSE: + case NM_ETHTOOL_TYPE_EEE: + return g_strdup("ternary"); + case NM_ETHTOOL_TYPE_UNKNOWN: + nm_assert_not_reached(); + }; + + return NULL; +} + +static char * +get_multilist_format(const NMMetaPropertyInfo *prop_info) +{ + NMMetaPropertyTypeFormat item_fmt; + + if (prop_info->property_typ_data) { + item_fmt = prop_info->property_typ_data->list_items_doc_format; + + switch (item_fmt) { + case NM_META_PROPERTY_TYPE_FORMAT_UNDEF: + prop_abort(prop_info, "undefined item format for multilist"); + break; + case NM_META_PROPERTY_TYPE_FORMAT_INT: + case NM_META_PROPERTY_TYPE_FORMAT_MTU: + return g_strdup("list of integers"); + case NM_META_PROPERTY_TYPE_FORMAT_STRING: + return g_strdup("list of strings"); + case NM_META_PROPERTY_TYPE_FORMAT_BOOL: + return g_strdup("list of booleans"); + case NM_META_PROPERTY_TYPE_FORMAT_TERNARY: + return g_strdup("list of ternaries"); + case NM_META_PROPERTY_TYPE_FORMAT_MAC: + return g_strdup("list of MAC addresses"); + case NM_META_PROPERTY_TYPE_FORMAT_IPV4: + return g_strdup("list of IPv4 addresses"); + case NM_META_PROPERTY_TYPE_FORMAT_IPV6: + return g_strdup("list of IPv6 addresses"); + default: + prop_abort(prop_info, "unsupported item format (%d)", item_fmt); + break; + } + } + + return NULL; +} + +static char * +get_property_format(const NMMetaPropertyInfo *prop_info) +{ + const NMMetaPropertyType *prop_type = prop_info->property_type; + NMMetaPropertyTypeFormat fmt = prop_type->doc_format; + + if (!prop_type->set_fcn) + return g_strdup("read only"); + + switch (fmt) { + case NM_META_PROPERTY_TYPE_FORMAT_INT: + case NM_META_PROPERTY_TYPE_FORMAT_MTU: + return g_strdup("integer"); + case NM_META_PROPERTY_TYPE_FORMAT_STRING: + return g_strdup("string"); + case NM_META_PROPERTY_TYPE_FORMAT_ENUM: + return get_enum_format(nm_meta_property_enum_get_type(prop_info)); + case NM_META_PROPERTY_TYPE_FORMAT_SECRET_FLAGS: + return get_enum_format(NM_TYPE_SETTING_SECRET_FLAGS); + case NM_META_PROPERTY_TYPE_FORMAT_DCB_FLAGS: + return get_enum_format(NM_TYPE_SETTING_DCB_FLAGS); + case NM_META_PROPERTY_TYPE_FORMAT_BOOL: + return g_strdup("boolean"); + case NM_META_PROPERTY_TYPE_FORMAT_TERNARY: + return g_strdup("ternary"); + case NM_META_PROPERTY_TYPE_FORMAT_MAC: + return get_mac_format(prop_info); + case NM_META_PROPERTY_TYPE_FORMAT_IPV4: + return g_strdup("IPv4 address"); + case NM_META_PROPERTY_TYPE_FORMAT_IPV6: + return g_strdup("IPv6 address"); + case NM_META_PROPERTY_TYPE_FORMAT_BYTES: + return g_strdup("bytes"); + case NM_META_PROPERTY_TYPE_FORMAT_PATH: + return g_strdup("filesystem path"); + case NM_META_PROPERTY_TYPE_FORMAT_ETHTOOL: + return get_ethtool_format(prop_info); + case NM_META_PROPERTY_TYPE_FORMAT_MULTILIST: + return get_multilist_format(prop_info); + case NM_META_PROPERTY_TYPE_FORMAT_OBJLIST: + return g_strdup_printf("list of %s.%s objects", + prop_info->setting_info->general->setting_name, + prop_info->property_name); + case NM_META_PROPERTY_TYPE_FORMAT_OPTIONLIST: + return g_strdup("list of key/value options"); + case NM_META_PROPERTY_TYPE_FORMAT_DCB: + return g_strdup("list of integers"); + case NM_META_PROPERTY_TYPE_FORMAT_DCB_BOOL: + return g_strdup("list of booleans"); + default: + prop_abort(prop_info, "missing .format"); + return NULL; + } +} + +#define append_vals(to, ...) \ + G_STMT_START \ + { \ + size_t i; \ + const char *from[] = {__VA_ARGS__}; \ + for (i = 0; i < NM_N_ELEMENTS(from); i++) \ + g_ptr_array_add((to), g_strdup(from[i])); \ + } \ + G_STMT_END + +static void +append_connection_types(GPtrArray *valid_values) +{ + size_t i; + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { + /* If the setting has a priority of a base-type, it's a valid value for connection.type */ + NMSettingPriority pri = + _nm_setting_type_get_base_type_priority(nm_meta_setting_infos[i].get_setting_gtype()); + if (pri != NM_SETTING_PRIORITY_INVALID) + g_ptr_array_add(valid_values, g_strdup(nm_meta_setting_infos[i].setting_name)); + } +} + +static void +append_int_valid_range(const NMMetaPropertyInfo *prop_info, GPtrArray *valid_values) +{ + NMMetaSignUnsignInt64 min; + NMMetaSignUnsignInt64 max; + + nm_meta_property_int_get_range(prop_info, &min, &max); + if (NM_IN_SET(_property_get_gtype(prop_info), G_TYPE_UINT, G_TYPE_UINT64)) { + g_ptr_array_add( + valid_values, + g_strdup_printf("%" G_GUINT64_FORMAT " - %" G_GUINT64_FORMAT, min.u64, max.u64)); + } else { + g_ptr_array_add( + valid_values, + g_strdup_printf("%" G_GINT64_FORMAT " - %" G_GINT64_FORMAT, min.i64, max.i64)); + } +} + +static void +_append_enum_valid_values(GType g_type, + int min, + int max, + const NMUtilsEnumValueInfo *value_infos, + GPtrArray *valid_values) +{ + size_t i; + const char **alias; + GString *names = g_string_sized_new(64); + GArray *values = _nm_utils_enum_get_values_full(g_type, min, max, value_infos); + + for (i = 0; i < values->len; i++) { + NMUtilsEnumValueInfoFull *val = &nm_g_array_index(values, NMUtilsEnumValueInfoFull, i); + + g_string_assign(names, val->nick); + + if (val->aliases) { + for (alias = val->aliases; *alias; alias++) { + g_string_append_c(names, '/'); + g_string_append(names, *alias); + } + } + + g_ptr_array_add(valid_values, g_strdup_printf("%s (%s)", names->str, val->value_str)); + } + + g_string_free(names, TRUE); + g_array_unref(values); +} + +static void +append_enum_valid_values(const NMMetaPropertyInfo *prop_info, GPtrArray *valid_values) +{ + const NMMetaPropertyTypData *prop_typ_data = prop_info->property_typ_data; + const NMUtilsEnumValueInfo *value_infos; + GType gtype; + int min; + int max; + + gtype = nm_meta_property_enum_get_type(prop_info); + nm_meta_property_enum_get_range(prop_info, &min, &max); + value_infos = prop_typ_data ? prop_typ_data->subtype.gobject_enum.value_infos : NULL; + + _append_enum_valid_values(gtype, min, max, value_infos, valid_values); +} + +static void +append_ethtool_valid_values(const NMMetaPropertyInfo *prop_info, GPtrArray *valid_values) +{ + NMEthtoolID ethtool_id; + + prop_assert(prop_info->property_typ_data, prop_info, "missing .property_typ_data"); + + ethtool_id = prop_info->property_typ_data->subtype.ethtool.ethtool_id; + + switch (nm_ethtool_id_to_type(ethtool_id)) { + case NM_ETHTOOL_TYPE_CHANNELS: + case NM_ETHTOOL_TYPE_COALESCE: + case NM_ETHTOOL_TYPE_RING: + g_ptr_array_add(valid_values, g_strdup_printf("0 - %u", G_MAXUINT32)); + break; + case NM_ETHTOOL_TYPE_FEATURE: + case NM_ETHTOOL_TYPE_PAUSE: + case NM_ETHTOOL_TYPE_EEE: + append_vals(valid_values, "on", "off", "ignore"); + break; + case NM_ETHTOOL_TYPE_UNKNOWN: + nm_assert_not_reached(); + } +} + +static void +append_dcb_valid_values(const NMMetaPropertyInfo *prop_info, GPtrArray *valid_values) +{ + guint max; + guint other; + + prop_assert(prop_info->property_typ_data, prop_info, "missing .property_typ_data"); + + max = prop_info->property_typ_data->subtype.dcb.max; + other = prop_info->property_typ_data->subtype.dcb.other; + + if (max != 0) + g_ptr_array_add(valid_values, g_strdup_printf("0 - %u", max)); + if (other != 0 && (!max || other > max)) + g_ptr_array_add(valid_values, g_strdup_printf("%u", other)); +} + +static GPtrArray * +get_property_valid_values(const NMMetaPropertyInfo *prop_info) +{ + const NMMetaPropertyType *prop_type = prop_info->property_type; + const NMMetaPropertyTypData *prop_typ_data = prop_info->property_typ_data; + NMMetaPropertyTypeFormat fmt = prop_type->doc_format; + GPtrArray *valid_values = g_ptr_array_new_full(16, g_free); + + /* connection.type is generated differently */ + if (prop_info->setting_info->general->meta_type == NM_META_SETTING_TYPE_CONNECTION + && !nm_strcmp0(prop_info->property_name, "type")) { + append_connection_types(valid_values); + return valid_values; + } + + /* If it's a list, get the format of the items, but only if we can process it + * (prop_typ_data->subtype is of type multilist, so we can't process ints or enums) */ + if (fmt == NM_META_PROPERTY_TYPE_FORMAT_MULTILIST && prop_typ_data) { + switch (prop_typ_data->list_items_doc_format) { + case NM_META_PROPERTY_TYPE_FORMAT_SECRET_FLAGS: + case NM_META_PROPERTY_TYPE_FORMAT_DCB_FLAGS: + case NM_META_PROPERTY_TYPE_FORMAT_BOOL: + case NM_META_PROPERTY_TYPE_FORMAT_DCB_BOOL: + case NM_META_PROPERTY_TYPE_FORMAT_TERNARY: + case NM_META_PROPERTY_TYPE_FORMAT_ETHTOOL: + fmt = prop_typ_data->list_items_doc_format; + break; + case NM_META_PROPERTY_TYPE_FORMAT_ENUM: + prop_warn(prop_info, "unknown enum type, can't get valid values"); + break; + case NM_META_PROPERTY_TYPE_FORMAT_INT: + prop_warn(prop_info, "can't check for valid range in multilists"); + break; + default: + /* Other types probably don't need to show "Valid values" */ + break; + } + } + + switch (fmt) { + case NM_META_PROPERTY_TYPE_FORMAT_INT: + append_int_valid_range(prop_info, valid_values); + break; + case NM_META_PROPERTY_TYPE_FORMAT_ENUM: + append_enum_valid_values(prop_info, valid_values); + break; + case NM_META_PROPERTY_TYPE_FORMAT_SECRET_FLAGS: + _append_enum_valid_values(NM_TYPE_SETTING_SECRET_FLAGS, 0, G_MAXUINT, NULL, valid_values); + break; + case NM_META_PROPERTY_TYPE_FORMAT_DCB_FLAGS: + _append_enum_valid_values(NM_TYPE_SETTING_DCB_FLAGS, 0, G_MAXUINT, NULL, valid_values); + break; + case NM_META_PROPERTY_TYPE_FORMAT_BOOL: + case NM_META_PROPERTY_TYPE_FORMAT_DCB_BOOL: + append_vals(valid_values, "true/yes/on", "false/no/off"); + break; + case NM_META_PROPERTY_TYPE_FORMAT_TERNARY: + append_vals(valid_values, "true/yes/on", "false/no/off", "default/unknown"); + break; + case NM_META_PROPERTY_TYPE_FORMAT_ETHTOOL: + append_ethtool_valid_values(prop_info, valid_values); + break; + case NM_META_PROPERTY_TYPE_FORMAT_DCB: + append_dcb_valid_values(prop_info, valid_values); + break; + default: + break; + } + + if (prop_typ_data && prop_typ_data->values_static) { + const char *const *v; + for (v = prop_typ_data->values_static; *v; v++) + g_ptr_array_add(valid_values, g_strdup(*v)); + } + + return valid_values; +} + +static void +append_int_special_values(const NMMetaPropertyInfo *prop_info, GPtrArray *special_values) +{ + const NMMetaPropertyTypData *prop_typ_data = prop_info->property_typ_data; + + if (prop_typ_data && prop_typ_data->subtype.gobject_int.value_infos) { + GType gtype = _property_get_gtype(prop_info); + bool is_uint = NM_IN_SET(gtype, G_TYPE_UINT, G_TYPE_UINT64); + guint base = prop_typ_data->subtype.gobject_int.base; + const NMMetaUtilsIntValueInfo *v = prop_typ_data->subtype.gobject_int.value_infos; + + if (!(base == 0 || base == 10 || (is_uint && base == 16))) { + if (is_uint) + prop_abort(prop_info, "only base 10 supported for signed int"); + else + prop_abort(prop_info, "only base 10 or 16 supported for uint"); + } + + for (; v->nick != NULL; v++) { + char *v_str; + if (base == 16) + v_str = g_strdup_printf("%s (0x%" G_GINT64_MODIFIER "x)", v->nick, v->value.u64); + else if (is_uint) + v_str = g_strdup_printf("%s (%" G_GUINT64_FORMAT ")", v->nick, v->value.u64); + else + v_str = g_strdup_printf("%s (%" G_GINT64_FORMAT ")", v->nick, v->value.i64); + + g_ptr_array_add(special_values, v_str); + } + } +} + +static GPtrArray * +get_property_special_values(const NMMetaPropertyInfo *prop_info) +{ + const NMMetaPropertyType *prop_type = prop_info->property_type; + const NMMetaPropertyTypData *prop_typ_data = prop_info->property_typ_data; + NMMetaPropertyTypeFormat fmt = prop_type->doc_format; + GPtrArray *special_values = g_ptr_array_new_full(16, g_free); + + switch (fmt) { + case NM_META_PROPERTY_TYPE_FORMAT_INT: + append_int_special_values(prop_info, special_values); + break; + case NM_META_PROPERTY_TYPE_FORMAT_MAC: + if (prop_typ_data) { + switch (prop_typ_data->subtype.mac.mode) { + case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET: + case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI: + append_vals(special_values, + NM_CLONED_MAC_PRESERVE, + NM_CLONED_MAC_PERMANENT, + NM_CLONED_MAC_RANDOM, + NM_CLONED_MAC_STABLE); + if (prop_typ_data->subtype.mac.mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI) + append_vals(special_values, NM_CLONED_MAC_STABLE_SSID); + break; + default: + break; + } + } + break; + case NM_META_PROPERTY_TYPE_FORMAT_MTU: + g_ptr_array_add(special_values, g_strdup("auto")); + break; + default: + break; + } + + return special_values; +} + int main(int argc, char *argv[]) { @@ -46,17 +522,22 @@ main(int argc, char *argv[]) g_print(" >\n"); for (i_property = 0; i_property < sett_info->properties_num; i_property++) { - const NMMetaPropertyInfo *prop_info = sett_info->properties[i_property]; - gs_free char *tmp2 = NULL; - gs_free char *tmp3 = NULL; - gs_free char *tmp4 = NULL; + const NMMetaPropertyInfo *prop_info = sett_info->properties[i_property]; + gs_free char *name = NULL; + gs_free char *alias = NULL; + gs_free char *descr = NULL; + gs_free char *fmt = NULL; + gs_unref_ptrarray GPtrArray *vals_arr = NULL; + gs_free char *vals_str = NULL; + gs_unref_ptrarray GPtrArray *specials_arr = NULL; + gs_free char *specials_str = NULL; g_print("%s<property", _indent_level(2 * INDENT)); - g_print(" name=%s", tmp2 = _xml_escape_attribute(prop_info->property_name)); + g_print(" name=%s", name = _xml_escape_attribute(prop_info->property_name)); if (prop_info->property_alias) g_print("\n%salias=%s", _indent_level(2 * INDENT + 10), - tmp3 = _xml_escape_attribute(prop_info->property_alias)); + alias = _xml_escape_attribute(prop_info->property_alias)); if (prop_info->describe_doc) { /* These descriptions are used by interactive nmcli modes. For the most part, * they are themselves generated (see "settings-docs.h"). Some of them are instead @@ -71,8 +552,33 @@ main(int argc, char *argv[]) * Name them something else ("<nmcli-description>") which isn't actually used. */ g_print("\n%snmcli-description=%s", _indent_level(2 * INDENT + 10), - tmp4 = _xml_escape_attribute(prop_info->describe_doc)); + descr = _xml_escape_attribute(prop_info->describe_doc)); } + + fmt = get_property_format(prop_info); + if (fmt) + g_print("\n%sformat=%s", + _indent_level(2 * INDENT + 10), + _xml_escape_attribute(fmt)); + + vals_arr = get_property_valid_values(prop_info); + if (vals_arr->len) { + g_ptr_array_add(vals_arr, NULL); + vals_str = g_strjoinv(", ", (char **) vals_arr->pdata); + g_print("\n%svalues=%s", + _indent_level(2 * INDENT + 10), + _xml_escape_attribute(vals_str)); + } + + specials_arr = get_property_special_values(prop_info); + if (specials_arr->len) { + g_ptr_array_add(specials_arr, NULL); + specials_str = g_strjoinv(", ", (char **) specials_arr->pdata); + g_print("\n%sspecial-values=%s", + _indent_level(2 * INDENT + 10), + _xml_escape_attribute(specials_str)); + } + g_print(" />\n"); } diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in index 1e0797ab..8806bf25 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in @@ -2,1199 +2,2181 @@ <setting name="6lowpan" > <property name="parent" alias="dev" - nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created." /> + nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created." + format="string" /> </setting> <setting name="802-11-olpc-mesh" alias="olpc-mesh" > <property name="ssid" alias="ssid" - nmcli-description="SSID of the mesh network to join." /> + nmcli-description="SSID of the mesh network to join." + format="string" /> <property name="channel" alias="channel" - nmcli-description="Channel on which the mesh network to join is located." /> + nmcli-description="Channel on which the mesh network to join is located." + format="integer" + values="0 - 4294967295" /> <property name="dhcp-anycast-address" alias="dhcp-anycast" - nmcli-description="Anycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the request. This is currently only implemented by dhclient DHCP plugin." /> + nmcli-description="Anycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the request. This is currently only implemented by dhclient DHCP plugin." + format="MAC address" /> </setting> <setting name="802-11-wireless" alias="wifi" > <property name="ssid" alias="ssid" - nmcli-description="SSID of the Wi-Fi network. Must be specified." /> + nmcli-description="SSID of the Wi-Fi network. Must be specified." + format="string" /> <property name="mode" alias="mode" - nmcli-description="Wi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed." /> + nmcli-description="Wi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed." + format="string" + values="infrastructure, adhoc, ap, mesh" /> <property name="band" - nmcli-description="802.11 frequency band of the network. One of "a" for 5GHz 802.11a or "bg" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if "a" is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers." /> + nmcli-description="802.11 frequency band of the network. One of "a" for 5GHz 802.11a or "bg" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if "a" is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers." + format="string" + values="a, bg" /> <property name="channel" - nmcli-description="Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the "band" property to be set." /> + nmcli-description="Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the "band" property to be set." + format="integer" + values="0 - 4294967295" /> <property name="bssid" - nmcli-description="If specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future. Locking a client profile to a certain BSSID will prevent roaming and also disable background scanning. That can be useful, if there is only one access point for the SSID." /> + nmcli-description="If specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future. Locking a client profile to a certain BSSID will prevent roaming and also disable background scanning. That can be useful, if there is only one access point for the SSID." + format="MAC address" /> <property name="mac-address" alias="mac" - nmcli-description="If specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." /> + nmcli-description="If specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." + format="MAC address" /> <property name="cloned-mac-address" alias="cloned-mac" - nmcli-description="If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values "preserve", "permanent", "random" and "stable" are supported. "preserve" means not to touch the MAC address on activation. "permanent" means to use the permanent hardware address of the device. "random" creates a random MAC address on each connect. "stable" creates a hashed MAC address based on connection.stable-id and a machine dependent key. If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to "preserve" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as "assigned-mac-address" or the deprecated "cloned-mac-address"." /> + nmcli-description="If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values "preserve", "permanent", "random", "stable" and "stable-ssid" are supported. "preserve" means not to touch the MAC address on activation. "permanent" means to use the permanent hardware address of the device. "random" creates a random MAC address on each connect. "stable" creates a hashed MAC address based on connection.stable-id and a machine dependent key. "stable-ssid" creates a hashed MAC address based on the SSID, the same as setting the stable-id to "${NETWORK_SSID}". If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to "preserve" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as "assigned-mac-address" or the deprecated "cloned-mac-address"." + format="MAC address" + special-values="preserve, permanent, random, stable, stable-ssid" /> <property name="generate-mac-address-mask" - nmcli-description="With "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered." /> + nmcli-description="With "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered." + format="string" /> <property name="mac-address-blacklist" - nmcli-description="A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg "00:11:22:33:44:55")." /> + nmcli-description="A list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg "00:11:22:33:44:55")." + format="list of MAC addresses" /> <property name="mac-address-randomization" - nmcli-description="One of NM_SETTING_MAC_RANDOMIZATION_DEFAULT (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), NM_SETTING_MAC_RANDOMIZATION_NEVER (1) (never randomize the MAC address), or NM_SETTING_MAC_RANDOMIZATION_ALWAYS (2) (always randomize the MAC address)." /> + nmcli-description="One of "default" (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), "never" (1) (never randomize the MAC address), or "always" (2) (always randomize the MAC address)." + format="choice (NMSettingMacRandomization)" + values="default (0), never (1), always (2)" /> <property name="mtu" alias="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." + format="integer" + special-values="auto" /> <property name="seen-bssids" - nmcli-description="A list of BSSIDs (each BSSID formatted as a MAC address like "00:11:22:33:44:55") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved. This is not a regular property that the user would configure. Instead, NetworkManager automatically sets the seen BSSIDs and tracks them internally in "/var/lib/NetworkManager/seen-bssids" file." /> + nmcli-description="A list of BSSIDs (each BSSID formatted as a MAC address like "00:11:22:33:44:55") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved. This is not a regular property that the user would configure. Instead, NetworkManager automatically sets the seen BSSIDs and tracks them internally in "/var/lib/NetworkManager/seen-bssids" file." + format="read only" /> <property name="hidden" - nmcli-description="If TRUE, indicates that the network is a non-broadcasting network that hides its SSID. This works both in infrastructure and AP mode. In infrastructure mode, various workarounds are used for a more reliable discovery of hidden networks, such as probe-scanning the SSID. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution. In AP mode, the created network does not broadcast its SSID. Note that marking the network as hidden may be a privacy issue for you (in infrastructure mode) or client stations (in AP mode), as the explicit probe-scans are distinctly recognizable on the air." /> + nmcli-description="If TRUE, indicates that the network is a non-broadcasting network that hides its SSID. This works both in infrastructure and AP mode. In infrastructure mode, various workarounds are used for a more reliable discovery of hidden networks, such as probe-scanning the SSID. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution. In AP mode, the created network does not broadcast its SSID. Note that marking the network as hidden may be a privacy issue for you (in infrastructure mode) or client stations (in AP mode), as the explicit probe-scans are distinctly recognizable on the air." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="powersave" - nmcli-description="One of NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2) (disable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3) (enable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1) (don't touch currently configure setting) or NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0) (use the globally configured value). All other values are reserved." /> + nmcli-description="One of "disable" (2) (disable Wi-Fi power saving), "enable" (3) (enable Wi-Fi power saving), "ignore" (1) (don't touch currently configure setting) or "default" (0) (use the globally configured value). All other values are reserved." + format="choice (NMSettingWirelessPowersave)" + values="default (0), ignore (1), disable (2), enable (3)" /> <property name="wake-on-wlan" - nmcli-description="The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY (0x2), NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT (0x4), NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC (0x8), NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE (0x10), NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST (0x20), NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE (0x40), NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE (0x80), NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP (0x100) or the special values NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager)." /> + nmcli-description="The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of "any" (0x2), "disconnect" (0x4), "magic" (0x8), "gtk-rekey-failure" (0x10), "eap-identity-request" (0x20), "4way-handshake" (0x40), "rfkill-release" (0x80), "tcp" (0x100) or the special values "default" (0x1) (to use global settings) and "ignore" (0x8000) (to disable management of Wake-on-LAN in NetworkManager)." + format="flags (NMSettingWirelessWakeOnWLan)" + values="any (0x2), disconnect (0x4), magic (0x8), gtk-rekey-failure (0x10), eap-identity-request (0x20), 4way-handshake (0x40), rfkill-release (0x80), tcp (0x100), all (0x1fe), default (0x1), ignore (0x8000)" /> <property name="ap-isolation" - nmcli-description="Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from NM_TERNARY_DEFAULT (-1) only when the interface is configured in AP mode. If set to NM_TERNARY_TRUE (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to NM_TERNARY_FALSE (0), devices can talk to each other. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_FALSE (0)." /> + nmcli-description="Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from "default" (-1) only when the interface is configured in AP mode. If set to "true" (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to "false" (0), devices can talk to each other. When set to "default" (-1), the global default is used; in case the global default is unspecified it is assumed to be "false" (0)." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> </setting> <setting name="802-11-wireless-security" alias="wifi-sec" > <property name="key-mgmt" - nmcli-description="Key management used for the connection. One of "none" (WEP or no password protection), "ieee8021x" (Dynamic WEP), "owe" (Opportunistic Wireless Encryption), "wpa-psk" (WPA2 + WPA3 personal), "sae" (WPA3 personal only), "wpa-eap" (WPA2 + WPA3 enterprise) or "wpa-eap-suite-b-192" (WPA3 enterprise only). This property must be set for any Wi-Fi connection that uses security." /> + nmcli-description="Key management used for the connection. One of "none" (WEP or no password protection), "ieee8021x" (Dynamic WEP), "owe" (Opportunistic Wireless Encryption), "wpa-psk" (WPA2 + WPA3 personal), "sae" (WPA3 personal only), "wpa-eap" (WPA2 + WPA3 enterprise) or "wpa-eap-suite-b-192" (WPA3 enterprise only). This property must be set for any Wi-Fi connection that uses security." + format="string" + values="none, ieee8021x, wpa-psk, wpa-eap, wpa-eap-suite-b-192, sae, owe" /> <property name="wep-tx-keyidx" - nmcli-description="When static WEP is used (ie, key-mgmt = "none") and a non-default WEP key index is used by the AP, put that WEP key index here. Valid values are 0 (default key) through 3. Note that some consumer access points (like the Linksys WRT54G) number the keys 1 - 4." /> + nmcli-description="When static WEP is used (ie, key-mgmt = "none") and a non-default WEP key index is used by the AP, put that WEP key index here. Valid values are 0 (default key) through 3. Note that some consumer access points (like the Linksys WRT54G) number the keys 1 - 4." + format="integer" + values="0 - 3" /> <property name="auth-alg" - nmcli-description="When WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the 802.11 authentication algorithm required by the AP here. One of "open" for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the "leap-username" and "leap-password" properties must be specified." /> + nmcli-description="When WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the 802.11 authentication algorithm required by the AP here. One of "open" for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the "leap-username" and "leap-password" properties must be specified." + format="string" + values="open, shared, leap" /> <property name="proto" - nmcli-description="List of strings specifying the allowed WPA protocol versions to use. Each element may be one "wpa" (allow WPA) or "rsn" (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed." /> + nmcli-description="List of strings specifying the allowed WPA protocol versions to use. Each element may be one "wpa" (allow WPA) or "rsn" (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed." + format="list of strings" + values="wpa, rsn" /> <property name="pairwise" - nmcli-description="A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "tkip" or "ccmp"." /> + nmcli-description="A list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "tkip" or "ccmp"." + format="list of strings" + values="tkip, ccmp" /> <property name="group" - nmcli-description="A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "wep40", "wep104", "tkip", or "ccmp"." /> + nmcli-description="A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "wep40", "wep104", "tkip", or "ccmp"." + format="list of strings" + values="wep40, wep104, tkip, ccmp" /> <property name="pmf" - nmcli-description="Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE (1) (disable PMF), NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL (2) (enable PMF if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED (3) (enable PMF and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) and no global default is set, PMF will be optionally enabled." /> + nmcli-description="Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of "default" (0) (use global default value), "disable" (1) (disable PMF), "optional" (2) (enable PMF if the supplicant and the access point support it) or "required" (3) (enable PMF and fail if not supported). When set to "default" (0) and no global default is set, PMF will be optionally enabled." + format="choice (NMSettingWirelessSecurityPmf)" + values="default (0), disable (1), optional (2), required (3)" /> <property name="leap-username" - nmcli-description="The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap")." /> + nmcli-description="The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap")." + format="string" /> <property name="wep-key0" - nmcli-description="Index 0 WEP key. This is the WEP key used in most networks. See the "wep-key-type" property for a description of how this key is interpreted." /> + nmcli-description="Index 0 WEP key. This is the WEP key used in most networks. See the "wep-key-type" property for a description of how this key is interpreted." + format="string" /> <property name="wep-key1" - nmcli-description="Index 1 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted." /> + nmcli-description="Index 1 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted." + format="string" /> <property name="wep-key2" - nmcli-description="Index 2 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted." /> + nmcli-description="Index 2 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted." + format="string" /> <property name="wep-key3" - nmcli-description="Index 3 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted." /> + nmcli-description="Index 3 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted." + format="string" /> <property name="wep-key-flags" - nmcli-description="Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties." /> + nmcli-description="Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="wep-key-type" - nmcli-description="Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or NM_WEP_KEY_TYPE_PASSPHRASE (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key." /> + nmcli-description="Controls the interpretation of WEP keys. Allowed values are "key" (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or "passphrase" (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key." + format="choice (NMWepKeyType)" + values="unknown (0), key (1), passphrase (2)" /> <property name="psk" - nmcli-description="Pre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII passphrase of 8 to 63 characters that is (as specified in the 802.11i standard) hashed to derive the actual key, or the key in form of 64 hexadecimal character. The WPA3-Personal networks use a passphrase of any length for SAE authentication." /> + nmcli-description="Pre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII passphrase of 8 to 63 characters that is (as specified in the 802.11i standard) hashed to derive the actual key, or the key in form of 64 hexadecimal character. The WPA3-Personal networks use a passphrase of any length for SAE authentication." + format="string" /> <property name="psk-flags" - nmcli-description="Flags indicating how to handle the "psk" property." /> + nmcli-description="Flags indicating how to handle the "psk" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="leap-password" - nmcli-description="The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap")." /> + nmcli-description="The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap")." + format="string" /> <property name="leap-password-flags" - nmcli-description="Flags indicating how to handle the "leap-password" property." /> + nmcli-description="Flags indicating how to handle the "leap-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="wps-method" - nmcli-description="Flags indicating which mode of WPS is to be used if any. There's little point in changing the default setting as NetworkManager will automatically determine whether it's feasible to start WPS enrollment from the Access Point capabilities. WPS can be disabled by setting this property to a value of 1." /> + nmcli-description="Flags indicating which mode of WPS is to be used if any. There's little point in changing the default setting as NetworkManager will automatically determine whether it's feasible to start WPS enrollment from the Access Point capabilities. WPS can be disabled by setting this property to a value of 1." + format="flags (NMSettingWirelessSecurityWpsMethod)" + values="default (0x0), disabled (0x1), auto (0x2), pbc (0x4), pin (0x8)" /> <property name="fils" - nmcli-description="Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled." /> + nmcli-description="Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of "default" (0) (use global default value), "disable" (1) (disable FILS), "optional" (2) (enable FILS if the supplicant and the access point support it) or "required" (3) (enable FILS and fail if not supported). When set to "default" (0) and no global default is set, FILS will be optionally enabled." + format="choice (NMSettingWirelessSecurityFils)" + values="default (0), disable (1), optional (2), required (3)" /> </setting> <setting name="802-1x" > <property name="optional" - nmcli-description="Whether the 802.1X authentication is optional. If TRUE, the activation will continue even after a timeout or an authentication failure. Setting the property to TRUE is currently allowed only for Ethernet connections. If set to FALSE, the activation can continue only after a successful authentication." /> + nmcli-description="Whether the 802.1X authentication is optional. If TRUE, the activation will continue even after a timeout or an authentication failure. Setting the property to TRUE is currently allowed only for Ethernet connections. If set to FALSE, the activation can continue only after a successful authentication." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="eap" - nmcli-description="The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd", and "fast". Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations." /> + nmcli-description="The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd", and "fast". Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations." + format="list of strings" + values="leap, md5, tls, peap, ttls, sim, fast, pwd" /> <property name="identity" - nmcli-description="Identity string for EAP authentication methods. Often the user's user or login name." /> + nmcli-description="Identity string for EAP authentication methods. Often the user's user or login name." + format="string" /> <property name="anonymous-identity" - nmcli-description="Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS." /> + nmcli-description="Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS." + format="string" /> <property name="pac-file" - nmcli-description="UTF-8 encoded file path containing PAC for EAP-FAST." /> + nmcli-description="UTF-8 encoded file path containing PAC for EAP-FAST." + format="string" /> <property name="ca-cert" - nmcli-description="Contains the CA certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory." /> + nmcli-description="Contains the CA certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory." + format="filesystem path" /> <property name="ca-cert-password" - nmcli-description="The password used to access the CA certificate stored in "ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." /> + nmcli-description="The password used to access the CA certificate stored in "ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." + format="string" /> <property name="ca-cert-password-flags" - nmcli-description="Flags indicating how to handle the "ca-cert-password" property." /> + nmcli-description="Flags indicating how to handle the "ca-cert-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="ca-path" - nmcli-description="UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored." /> + nmcli-description="UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored." + format="string" /> <property name="subject-match" - nmcli-description="Substring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and should not be used." /> + nmcli-description="Substring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and should not be used." + format="string" /> <property name="altsubject-matches" - nmcli-description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed." /> + nmcli-description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed." + format="list of strings" /> <property name="domain-suffix-match" - nmcli-description="Constraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list." /> + nmcli-description="Constraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list." + format="string" /> <property name="domain-match" - nmcli-description="Constraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list." /> + nmcli-description="Constraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list." + format="string" /> <property name="client-cert" - nmcli-description="Contains the client certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte." /> + nmcli-description="Contains the client certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte." + format="filesystem path" /> <property name="client-cert-password" - nmcli-description="The password used to access the client certificate stored in "client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." /> + nmcli-description="The password used to access the client certificate stored in "client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." + format="string" /> <property name="client-cert-password-flags" - nmcli-description="Flags indicating how to handle the "client-cert-password" property." /> + nmcli-description="Flags indicating how to handle the "client-cert-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="phase1-peapver" - nmcli-description="Forces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version." /> + nmcli-description="Forces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version." + format="string" + values="0, 1" /> <property name="phase1-peaplabel" - nmcli-description="Forces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details." /> + nmcli-description="Forces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details." + format="string" + values="0, 1" /> <property name="phase1-fast-provisioning" - nmcli-description="Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" property. Recognized values are "0" (disabled), "1" (allow unauthenticated provisioning), "2" (allow authenticated provisioning), and "3" (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details." /> + nmcli-description="Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" property. Recognized values are "0" (disabled), "1" (allow unauthenticated provisioning), "2" (allow authenticated provisioning), and "3" (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details." + format="string" + values="0, 1, 2, 3" /> <property name="phase1-auth-flags" - nmcli-description="Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly disabled. TLS time checks can be also disabled. If a certain TLS disable flag is not set, it is up to the supplicant to allow or forbid it. The TLS options map to tls_disable_tlsv1_x and tls_disable_time_checks settings. See the wpa_supplicant documentation for more details." /> + nmcli-description="Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly disabled. TLS time checks can be also disabled. If a certain TLS disable flag is not set, it is up to the supplicant to allow or forbid it. The TLS options map to tls_disable_tlsv1_x and tls_disable_time_checks settings. See the wpa_supplicant documentation for more details." + format="flags (NMSetting8021xAuthFlags)" + values="none (0x0), tls-1-0-disable (0x1), tls-1-1-disable (0x2), tls-1-2-disable (0x4), tls-disable-time-checks (0x8), tls-1-3-disable (0x10), tls-1-0-enable (0x20), tls-1-1-enable (0x40), tls-1-2-enable (0x80), tls-1-3-enable (0x100), all (0x1ff)" /> <property name="phase2-auth" - nmcli-description="Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified." /> + nmcli-description="Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified." + format="string" + values="pap, chap, mschap, mschapv2, gtc, otp, md5, tls" /> <property name="phase2-autheap" - nmcli-description="Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." /> + nmcli-description="Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." + format="string" + values="md5, mschapv2, otp, gtc, tls" /> <property name="phase2-ca-cert" - nmcli-description="Contains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory." /> + nmcli-description="Contains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory." + format="filesystem path" /> <property name="phase2-ca-cert-password" - nmcli-description="The password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." /> + nmcli-description="The password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." + format="string" /> <property name="phase2-ca-cert-password-flags" - nmcli-description="Flags indicating how to handle the "phase2-ca-cert-password" property." /> + nmcli-description="Flags indicating how to handle the "phase2-ca-cert-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="phase2-ca-path" - nmcli-description="UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "phase2-ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored." /> + nmcli-description="UTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "phase2-ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored." + format="filesystem path" /> <property name="phase2-subject-match" - nmcli-description="Substring to be matched against the subject of the certificate presented by the authentication server during the inner "phase 2" authentication. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and should not be used." /> + nmcli-description="Substring to be matched against the subject of the certificate presented by the authentication server during the inner "phase 2" authentication. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and should not be used." + format="string" /> <property name="phase2-altsubject-matches" - nmcli-description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed." /> + nmcli-description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed." + format="list of strings" /> <property name="phase2-domain-suffix-match" - nmcli-description="Constraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list." /> + nmcli-description="Constraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list." + format="string" /> <property name="phase2-domain-match" - nmcli-description="Constraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list." /> + nmcli-description="Constraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list." + format="string" /> <property name="phase2-client-cert" - nmcli-description="Contains the "phase 2" client certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended." /> + nmcli-description="Contains the "phase 2" client certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended." + format="filesystem path" /> <property name="phase2-client-cert-password" - nmcli-description="The password used to access the "phase2" client certificate stored in "phase2-client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." /> + nmcli-description="The password used to access the "phase2" client certificate stored in "phase2-client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login." + format="string" /> <property name="phase2-client-cert-password-flags" - nmcli-description="Flags indicating how to handle the "phase2-client-cert-password" property." /> + nmcli-description="Flags indicating how to handle the "phase2-client-cert-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="password" - nmcli-description="UTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred." /> + nmcli-description="UTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred." + format="string" /> <property name="password-flags" - nmcli-description="Flags indicating how to handle the "password" property." /> + nmcli-description="Flags indicating how to handle the "password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="password-raw" - nmcli-description="Password used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both the "password" property and the "password-raw" property are specified, "password" is preferred." /> + nmcli-description="Password used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both the "password" property and the "password-raw" property are specified, "password" is preferred." + format="bytes" /> <property name="password-raw-flags" - nmcli-description="Flags indicating how to handle the "password-raw" property." /> + nmcli-description="Flags indicating how to handle the "password-raw" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="private-key" - nmcli-description="Contains the private key when the "eap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: "private-key" is not a "secret" property, and thus unencrypted private key data using the BLOB scheme may be readable by unprivileged users. Private keys should always be encrypted with a private key password to prevent unauthorized access to unencrypted private key data." /> + nmcli-description="Contains the private key when the "eap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: "private-key" is not a "secret" property, and thus unencrypted private key data using the BLOB scheme may be readable by unprivileged users. Private keys should always be encrypted with a private key password to prevent unauthorized access to unencrypted private key data." + format="filesystem path" /> <property name="private-key-password" - nmcli-description="The password used to decrypt the private key specified in the "private-key" property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key." /> + nmcli-description="The password used to decrypt the private key specified in the "private-key" property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key." + format="string" /> <property name="private-key-password-flags" - nmcli-description="Flags indicating how to handle the "private-key-password" property." /> + nmcli-description="Flags indicating how to handle the "private-key-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="phase2-private-key" - nmcli-description="Contains the "phase 2" inner private key when the "phase2-auth" or "phase2-autheap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "phase2-private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate." /> + nmcli-description="Contains the "phase 2" inner private key when the "phase2-auth" or "phase2-autheap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "phase2-private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate." + format="filesystem path" /> <property name="phase2-private-key-password" - nmcli-description="The password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key." /> + nmcli-description="The password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key." + format="string" /> <property name="phase2-private-key-password-flags" - nmcli-description="Flags indicating how to handle the "phase2-private-key-password" property." /> + nmcli-description="Flags indicating how to handle the "phase2-private-key-password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="pin" - nmcli-description="PIN used for EAP authentication methods." /> + nmcli-description="PIN used for EAP authentication methods." + format="string" /> <property name="pin-flags" - nmcli-description="Flags indicating how to handle the "pin" property." /> + nmcli-description="Flags indicating how to handle the "pin" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="system-ca-certs" - nmcli-description="When TRUE, overrides the "ca-path" and "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the "ca-cert" and "phase2-ca-cert" properties. If the path provided with --system-ca-path is rather a file name (bundle of trusted CA certificates), it overrides "ca-cert" and "phase2-ca-cert" properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant)." /> + nmcli-description="When TRUE, overrides the "ca-path" and "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the "ca-cert" and "phase2-ca-cert" properties. If the path provided with --system-ca-path is rather a file name (bundle of trusted CA certificates), it overrides "ca-cert" and "phase2-ca-cert" properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant)." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="auth-timeout" - nmcli-description="A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds." /> + nmcli-description="A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds." + format="integer" + values="0 - 2147483647" /> </setting> <setting name="802-3-ethernet" alias="ethernet" > <property name="port" - nmcli-description="Specific port type to use if the device supports multiple attachment methods. One of "tp" (Twisted Pair), "aui" (Attachment Unit Interface), "bnc" (Thin Ethernet) or "mii" (Media Independent Interface). If the device supports only one port type, this setting is ignored." /> + nmcli-description="Specific port type to use if the device supports multiple attachment methods. One of "tp" (Twisted Pair), "aui" (Attachment Unit Interface), "bnc" (Thin Ethernet) or "mii" (Media Independent Interface). If the device supports only one port type, this setting is ignored." + format="read only" /> <property name="speed" - nmcli-description="When a value greater than 0 is set, configures the device to use the specified speed. If "auto-negotiate" is "yes" the specified speed will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabit speeds, as in this case link negotiation is mandatory. If the value is unset (0, the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported speeds. In Mbit/s, ie 100 == 100Mbit/s. Must be set together with the "duplex" property when non-zero. Before specifying a speed value be sure your device supports it." /> + nmcli-description="When a value greater than 0 is set, configures the device to use the specified speed. If "auto-negotiate" is "yes" the specified speed will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabit speeds, as in this case link negotiation is mandatory. If the value is unset (0, the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported speeds. In Mbit/s, ie 100 == 100Mbit/s. Must be set together with the "duplex" property when non-zero. Before specifying a speed value be sure your device supports it." + format="integer" + values="0 - 4294967295" /> <property name="duplex" - nmcli-description="When a value is set, either "half" or "full", configures the device to use the specified duplex mode. If "auto-negotiate" is "yes" the specified duplex mode will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. If the value is unset (the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported duplex modes. Must be set together with the "speed" property if specified. Before specifying a duplex mode be sure your device supports it." /> + nmcli-description="When a value is set, either "half" or "full", configures the device to use the specified duplex mode. If "auto-negotiate" is "yes" the specified duplex mode will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. If the value is unset (the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported duplex modes. Must be set together with the "speed" property if specified. Before specifying a duplex mode be sure your device supports it." + format="string" + values="half, full" /> <property name="auto-negotiate" - nmcli-description="When TRUE, enforce auto-negotiation of speed and duplex mode. If "speed" and "duplex" properties are both specified, only that single mode will be advertised and accepted during the link auto-negotiation process: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. When FALSE, "speed" and "duplex" properties should be both set or link configuration will be skipped." /> + nmcli-description="When TRUE, enforce auto-negotiation of speed and duplex mode. If "speed" and "duplex" properties are both specified, only that single mode will be advertised and accepted during the link auto-negotiation process: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. When FALSE, "speed" and "duplex" properties should be both set or link configuration will be skipped." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="mac-address" alias="mac" - nmcli-description="If specified, this connection will only apply to the Ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." /> + nmcli-description="If specified, this connection will only apply to the Ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." + format="MAC address" /> <property name="cloned-mac-address" alias="cloned-mac" - nmcli-description="If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values "preserve", "permanent", "random" and "stable" are supported. "preserve" means not to touch the MAC address on activation. "permanent" means to use the permanent hardware address if the device has one (otherwise this is treated as "preserve"). "random" creates a random MAC address on each connect. "stable" creates a hashed MAC address based on connection.stable-id and a machine dependent key. If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to "preserve" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as "assigned-mac-address" or the deprecated "cloned-mac-address"." /> + nmcli-description="If specified, request that the device use this MAC address instead. This is known as MAC cloning or spoofing. Beside explicitly specifying a MAC address, the special values "preserve", "permanent", "random" and "stable" are supported. "preserve" means not to touch the MAC address on activation. "permanent" means to use the permanent hardware address if the device has one (otherwise this is treated as "preserve"). "random" creates a random MAC address on each connect. "stable" creates a hashed MAC address based on connection.stable-id and a machine dependent key. If unspecified, the value can be overwritten via global defaults, see manual of NetworkManager.conf. If still unspecified, it defaults to "preserve" (older versions of NetworkManager may use a different default value). On D-Bus, this field is expressed as "assigned-mac-address" or the deprecated "cloned-mac-address"." + format="MAC address" + special-values="preserve, permanent, random, stable" /> <property name="generate-mac-address-mask" - nmcli-description="With "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered." /> + nmcli-description="With "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered." + format="string" /> <property name="mac-address-blacklist" - nmcli-description="If specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55)." /> + nmcli-description="If specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55)." + format="list of MAC addresses" /> <property name="mtu" alias="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." + format="integer" + special-values="auto" /> <property name="s390-subchannels" - nmcli-description="Identifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the "mac-address" property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character." /> + nmcli-description="Identifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the "mac-address" property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character." + format="list of 802-3-ethernet.s390-subchannels objects" /> <property name="s390-nettype" - nmcli-description="s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems." /> + nmcli-description="s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems." + format="string" + values="qeth, lcs, ctc" /> <property name="s390-options" - nmcli-description="Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include "portno", "layer2", "portname", "protocol", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]). Currently, NetworkManager itself does nothing with this information. However, s390utils ships a udev rule which parses this information and applies it to the interface." /> + nmcli-description="Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include "portno", "layer2", "portname", "protocol", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]). Currently, NetworkManager itself does nothing with this information. However, s390utils ships a udev rule which parses this information and applies it to the interface." + format="list of key/value options" /> <property name="wake-on-lan" - nmcli-description="The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRED_WAKE_ON_LAN_PHY (0x2), NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST (0x4), NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST (0x8), NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST (0x10), NM_SETTING_WIRED_WAKE_ON_LAN_ARP (0x20), NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC (0x40) or the special values NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager)." /> + nmcli-description="The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of "phy" (0x2), "unicast" (0x4), "multicast" (0x8), "broadcast" (0x10), "arp" (0x20), "magic" (0x40) or the special values "default" (0x1) (to use global settings) and "ignore" (0x8000) (to disable management of Wake-on-LAN in NetworkManager)." + format="flags (NMSettingWiredWakeOnLan)" + values="phy (0x2), unicast (0x4), multicast (0x8), broadcast (0x10), arp (0x20), magic (0x40), default (0x1), ignore (0x8000)" /> <property name="wake-on-lan-password" - nmcli-description="If specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required." /> + nmcli-description="If specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required." + format="MAC address" /> <property name="accept-all-mac-addresses" - nmcli-description="When TRUE, setup the interface to accept packets for all MAC addresses. This is enabling the kernel interface flag IFF_PROMISC. When FALSE, the interface will only accept the packets with the interface destination mac address or broadcast." /> + nmcli-description="When TRUE, setup the interface to accept packets for all MAC addresses. This is enabling the kernel interface flag IFF_PROMISC. When FALSE, the interface will only accept the packets with the interface destination mac address or broadcast." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> </setting> <setting name="adsl" > <property name="username" alias="username" - nmcli-description="Username used to authenticate with the ADSL service." /> + nmcli-description="Username used to authenticate with the ADSL service." + format="string" /> <property name="password" alias="password" - nmcli-description="Password used to authenticate with the ADSL service." /> + nmcli-description="Password used to authenticate with the ADSL service." + format="string" /> <property name="password-flags" - nmcli-description="Flags indicating how to handle the "password" property." /> + nmcli-description="Flags indicating how to handle the "password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="protocol" alias="protocol" - nmcli-description="ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm"." /> + nmcli-description="ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm"." + format="string" + values="pppoa, pppoe, ipoatm" /> <property name="encapsulation" alias="encapsulation" - nmcli-description="Encapsulation of ADSL connection. Can be "vcmux" or "llc"." /> + nmcli-description="Encapsulation of ADSL connection. Can be "vcmux" or "llc"." + format="string" + values="vcmux, llc" /> <property name="vpi" - nmcli-description="VPI of ADSL connection" /> + nmcli-description="VPI of ADSL connection" + format="integer" + values="0 - 65536" /> <property name="vci" - nmcli-description="VCI of ADSL connection" /> + nmcli-description="VCI of ADSL connection" + format="integer" + values="0 - 65536" /> </setting> <setting name="bluetooth" > <property name="bdaddr" alias="addr" - nmcli-description="The Bluetooth address of the device." /> + nmcli-description="The Bluetooth address of the device." + format="MAC address" /> <property name="type" alias="bt-type" - nmcli-description="Either "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile." /> + nmcli-description="Either "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile." + format="string" + values="dun, panu, nap" /> </setting> <setting name="bond" > <property name="options" - nmcli-description="Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9])." /> + nmcli-description="Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9])." + format="list of key/value options" /> </setting> <setting name="bond-port" > <property name="queue-id" alias="queue-id" - nmcli-description="The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device." /> + nmcli-description="The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device." + format="integer" + values="0 - 65535" /> <property name="prio" alias="prio" - nmcli-description="The port priority for bond active port re-selection during failover. A higher number means a higher priority in selection. The primary port has the highest priority. This option is only compatible with active-backup, balance-tlb and balance-alb modes." /> + nmcli-description="The port priority for bond active port re-selection during failover. A higher number means a higher priority in selection. The primary port has the highest priority. This option is only compatible with active-backup, balance-tlb and balance-alb modes." + format="integer" + values="-2147483648 - 2147483647" /> </setting> <setting name="bridge" > <property name="mac-address" alias="mac" - nmcli-description="If specified, the MAC address of bridge. When creating a new bridge, this MAC address will be set. If this field is left unspecified, the "ethernet.cloned-mac-address" is referred instead to generate the initial MAC address. Note that setting "ethernet.cloned-mac-address" anyway overwrites the MAC address of the bridge later while activating the bridge." /> + nmcli-description="If specified, the MAC address of bridge. When creating a new bridge, this MAC address will be set. If this field is left unspecified, the "ethernet.cloned-mac-address" is referred instead to generate the initial MAC address. Note that setting "ethernet.cloned-mac-address" anyway overwrites the MAC address of the bridge later while activating the bridge." + format="MAC address" /> <property name="stp" alias="stp" - nmcli-description="Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." /> + nmcli-description="Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="priority" alias="priority" - nmcli-description="Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge." /> + nmcli-description="Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge." + format="integer" + values="0 - 65535" /> <property name="forward-delay" alias="forward-delay" - nmcli-description="The Spanning Tree Protocol (STP) forwarding delay, in seconds." /> + nmcli-description="The Spanning Tree Protocol (STP) forwarding delay, in seconds." + format="integer" + values="0 - 30" /> <property name="hello-time" alias="hello-time" - nmcli-description="The Spanning Tree Protocol (STP) hello time, in seconds." /> + nmcli-description="The Spanning Tree Protocol (STP) hello time, in seconds." + format="integer" + values="0 - 10" /> <property name="max-age" alias="max-age" - nmcli-description="The Spanning Tree Protocol (STP) maximum message age, in seconds." /> + nmcli-description="The Spanning Tree Protocol (STP) maximum message age, in seconds." + format="integer" + values="0 - 40" /> <property name="ageing-time" alias="ageing-time" - nmcli-description="The Ethernet MAC address aging time, in seconds." /> + nmcli-description="The Ethernet MAC address aging time, in seconds." + format="integer" + values="0 - 1000000" /> <property name="group-address" - nmcli-description="If specified, The MAC address of the multicast group this bridge uses for STP. The address must be a link-local address in standard Ethernet MAC address format, ie an address of the form 01:80:C2:00:00:0X, with X in [0, 4..F]. If not specified the default value is 01:80:C2:00:00:00." /> + nmcli-description="If specified, The MAC address of the multicast group this bridge uses for STP. The address must be a link-local address in standard Ethernet MAC address format, ie an address of the form 01:80:C2:00:00:0X, with X in [0, 4..F]. If not specified the default value is 01:80:C2:00:00:00." + format="MAC address" /> <property name="group-forward-mask" alias="group-forward-mask" - nmcli-description="A mask of group addresses to forward. Usually, group addresses in the range from 01:80:C2:00:00:00 to 01:80:C2:00:00:0F are not forwarded according to standards. This property is a mask of 16 bits, each corresponding to a group address in that range that must be forwarded. The mask can't have bits 0, 1 or 2 set because they are used for STP, MAC pause frames and LACP." /> + nmcli-description="A mask of group addresses to forward. Usually, group addresses in the range from 01:80:C2:00:00:00 to 01:80:C2:00:00:0F are not forwarded according to standards. This property is a mask of 16 bits, each corresponding to a group address in that range that must be forwarded. The mask can't have bits 0, 1 or 2 set because they are used for STP, MAC pause frames and LACP." + format="integer" + values="0 - 65535" /> <property name="multicast-hash-max" - nmcli-description="Set maximum size of multicast hash table (value must be a power of 2)." /> + nmcli-description="Set maximum size of multicast hash table (value must be a power of 2)." + format="integer" + values="1 - 4294967295" /> <property name="multicast-last-member-count" - nmcli-description="Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received." /> + nmcli-description="Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received." + format="integer" + values="0 - 4294967295" /> <property name="multicast-last-member-interval" - nmcli-description="Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received." /> + nmcli-description="Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received." + format="integer" + values="0 - 18446744073709551615" /> <property name="multicast-membership-interval" - nmcli-description="Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received." /> + nmcli-description="Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received." + format="integer" + values="0 - 18446744073709551615" /> <property name="multicast-querier" - nmcli-description="Enable or disable sending of multicast queries by the bridge. If not specified the option is disabled." /> + nmcli-description="Enable or disable sending of multicast queries by the bridge. If not specified the option is disabled." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="multicast-querier-interval" - nmcli-description="If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries." /> + nmcli-description="If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries." + format="integer" + values="0 - 18446744073709551615" /> <property name="multicast-query-interval" - nmcli-description="Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase." /> + nmcli-description="Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase." + format="integer" + values="0 - 18446744073709551615" /> <property name="multicast-query-response-interval" - nmcli-description="Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge." /> + nmcli-description="Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge." + format="integer" + values="0 - 18446744073709551615" /> <property name="multicast-query-use-ifaddr" - nmcli-description="If enabled the bridge's own IP address is used as the source address for IGMP queries otherwise the default of 0.0.0.0 is used." /> + nmcli-description="If enabled the bridge's own IP address is used as the source address for IGMP queries otherwise the default of 0.0.0.0 is used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="multicast-snooping" alias="multicast-snooping" - nmcli-description="Controls whether IGMP snooping is enabled for this bridge. Note that if snooping was automatically disabled due to hash collisions, the system may refuse to enable the feature until the collisions are resolved." /> + nmcli-description="Controls whether IGMP snooping is enabled for this bridge. Note that if snooping was automatically disabled due to hash collisions, the system may refuse to enable the feature until the collisions are resolved." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="multicast-startup-query-count" - nmcli-description="Set the number of IGMP queries to send during startup phase." /> + nmcli-description="Set the number of IGMP queries to send during startup phase." + format="integer" + values="0 - 4294967295" /> <property name="multicast-startup-query-interval" - nmcli-description="Sets the time (in deciseconds) between queries sent out at startup to determine membership information." /> + nmcli-description="Sets the time (in deciseconds) between queries sent out at startup to determine membership information." + format="integer" + values="0 - 18446744073709551615" /> <property name="multicast-router" - nmcli-description="Sets bridge's multicast router. Multicast-snooping must be enabled for this option to work. Supported values are: 'auto', 'disabled', 'enabled' to which kernel assigns the numbers 1, 0, and 2, respectively. If not specified the default value is 'auto' (1)." /> + nmcli-description="Sets bridge's multicast router. Multicast-snooping must be enabled for this option to work. Supported values are: 'auto', 'disabled', 'enabled' to which kernel assigns the numbers 1, 0, and 2, respectively. If not specified the default value is 'auto' (1)." + format="string" + values="auto, disabled, enabled" /> <property name="vlan-filtering" - nmcli-description="Control whether VLAN filtering is enabled on the bridge." /> + nmcli-description="Control whether VLAN filtering is enabled on the bridge." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="vlan-default-pvid" - nmcli-description="The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames." /> + nmcli-description="The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames." + format="integer" + values="0 - 4094" /> <property name="vlan-stats-enabled" - nmcli-description="Controls whether per-VLAN stats accounting is enabled." /> + nmcli-description="Controls whether per-VLAN stats accounting is enabled." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="vlan-protocol" - nmcli-description="If specified, the protocol used for VLAN filtering. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'." /> + nmcli-description="If specified, the protocol used for VLAN filtering. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'." + format="string" + values="802.1Q, 802.1ad" /> <property name="vlans" - nmcli-description="Array of bridge VLAN objects. In addition to the VLANs specified here, the bridge will also have the default-pvid VLAN configured by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash." /> + nmcli-description="Array of bridge VLAN objects. In addition to the VLANs specified here, the bridge will also have the default-pvid VLAN configured by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash." + format="list of bridge.vlans objects" /> </setting> <setting name="bridge-port" > <property name="priority" alias="priority" - nmcli-description="The Spanning Tree Protocol (STP) priority of this bridge port." /> + nmcli-description="The Spanning Tree Protocol (STP) priority of this bridge port." + format="integer" + values="0 - 63" /> <property name="path-cost" alias="path-cost" - nmcli-description="The Spanning Tree Protocol (STP) port cost for destinations via this port." /> + nmcli-description="The Spanning Tree Protocol (STP) port cost for destinations via this port." + format="integer" + values="0 - 65535" /> <property name="hairpin-mode" alias="hairpin" - nmcli-description="Enables or disables "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on." /> + nmcli-description="Enables or disables "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="vlans" - nmcli-description="Array of bridge VLAN objects. In addition to the VLANs specified here, the port will also have the default-pvid VLAN configured on the bridge by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash." /> + nmcli-description="Array of bridge VLAN objects. In addition to the VLANs specified here, the port will also have the default-pvid VLAN configured on the bridge by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash." + format="list of bridge-port.vlans objects" /> </setting> <setting name="cdma" > <property name="number" - nmcli-description="The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required." /> + nmcli-description="The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required." + format="string" /> <property name="username" alias="user" - nmcli-description="The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here." /> + nmcli-description="The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here." + format="string" /> <property name="password" alias="password" - nmcli-description="The password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here." /> + nmcli-description="The password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here." + format="string" /> <property name="password-flags" - nmcli-description="Flags indicating how to handle the "password" property." /> + nmcli-description="Flags indicating how to handle the "password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." + format="integer" + special-values="auto" /> </setting> <setting name="connection" > <property name="id" alias="con-name" - nmcli-description="A human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G"." /> + nmcli-description="A human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G"." + format="string" /> <property name="uuid" - nmcli-description="The connection.uuid is the real identifier of a profile. It cannot change and it must be unique. It is therefore often best to refer to a profile by UUID, for example with `nmcli connection up uuid $UUID`. The UUID cannot be changed, except in offline mode. In that case, the special values "new", "generate" and "" are allowed to generate a new random UUID." /> + nmcli-description="The connection.uuid is the real identifier of a profile. It cannot change and it must be unique. It is therefore often best to refer to a profile by UUID, for example with `nmcli connection up uuid $UUID`. The UUID cannot be changed, except in offline mode. In that case, the special values "new", "generate" and "" are allowed to generate a new random UUID." + format="string" /> <property name="stable-id" - nmcli-description="This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are "${CONNECTION}", "${DEVICE}", "${MAC}", "${BOOT}", "${RANDOM}". These effectively create unique IDs per-connection, per-device, per-boot, or every time. The "${CONNECTION}" uses the profile's connection.uuid, the "${DEVICE}" uses the interface name of the device and "${MAC}" the permanent MAC address of the device. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as "$$". For example, set it to "${CONNECTION}-${BOOT}-${DEVICE}" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is "default${CONNECTION}" go generate an ID unique per connection profile." /> + nmcli-description="This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are "${CONNECTION}", "${DEVICE}", "${MAC}", "${NETWORK_SSID}", "${BOOT}", "${RANDOM}". These effectively create unique IDs per-connection, per-device, per-SSID, per-boot, or every time. The "${CONNECTION}" uses the profile's connection.uuid, the "${DEVICE}" uses the interface name of the device and "${MAC}" the permanent MAC address of the device. "${NETWORK_SSID}" uses the SSID for Wi-Fi networks and falls back to "${CONNECTION}" on other networks. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as "$$". For example, set it to "${CONNECTION}-${BOOT}-${DEVICE}" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is "default${CONNECTION}" go generate an ID unique per connection profile." + format="string" /> <property name="type" alias="type" - nmcli-description="Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, "802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, "vpn" or "bridge", etc)." /> + nmcli-description="Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, "802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, "vpn" or "bridge", etc)." + format="string" + values="6lowpan, 802-11-olpc-mesh, 802-11-wireless, 802-3-ethernet, adsl, bluetooth, bond, bridge, cdma, dummy, generic, gsm, hsr, infiniband, ip-tunnel, loopback, macsec, macvlan, ovs-bridge, ovs-dpdk, ovs-interface, ovs-patch, ovs-port, pppoe, team, tun, veth, vlan, vpn, vrf, vxlan, wifi-p2p, wimax, wireguard, wpan" /> <property name="interface-name" alias="ifname" - nmcli-description="The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface." /> + nmcli-description="The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface." + format="string" /> <property name="autoconnect" alias="autoconnect" - nmcli-description="Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times." /> + nmcli-description="Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="autoconnect-priority" - nmcli-description="The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen." /> + nmcli-description="The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen." + format="integer" + values="-999 - 999" /> <property name="autoconnect-retries" - nmcli-description="The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again." /> + nmcli-description="The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again." + format="integer" + values="-1 - 2147483647" + special-values="default (-1), forever (0)" /> <property name="multi-connect" - nmcli-description="Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect." /> + nmcli-description="Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect." + format="choice (NMConnectionMultiConnect)" + values="default (0), single (1), manual-multiple (2), multiple (3)" /> <property name="auth-retries" - nmcli-description="The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Currently, this only applies to 802-1x authentication." /> + nmcli-description="The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Currently, this only applies to 802-1x authentication." + format="integer" + values="-1 - 2147483647" /> <property name="timestamp" - nmcli-description="The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved)." /> + nmcli-description="The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved)." + format="read only" /> <property name="permissions" - nmcli-description="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." /> + nmcli-description="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." + format="list of strings" /> <property name="zone" - nmcli-description="The trust level of a the connection. Free form case-insensitive string (for example "Home", "Work", "Public"). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall. When updating this property on a currently activated connection, the change takes effect immediately." /> + nmcli-description="The trust level of a the connection. Free form case-insensitive string (for example "Home", "Work", "Public"). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall. When updating this property on a currently activated connection, the change takes effect immediately." + format="string" /> + <property name="controller" + alias="controller" + nmcli-description="Interface name of the controller device or UUID of the controller connection." + format="string" /> <property name="master" alias="master" - nmcli-description="Interface name of the master device or UUID of the master connection." /> + nmcli-description="Interface name of the master device or UUID of the master connection. Deprecated 1.46. Use "controller" instead, this is just an alias." + format="string" /> <property name="slave-type" alias="slave-type" - nmcli-description="Setting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave." /> + nmcli-description="Setting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave. Deprecated 1.46. Use "port-type" instead, this is just an alias." + format="string" + values="bond, bridge, ovs-bridge, ovs-port, team, vrf" /> + <property name="port-type" + alias="port-type" + nmcli-description="Setting name of the device type of this port's controller connection (eg, "bond"), or NULL if this connection is not a port." + format="string" + values="bond, bridge, ovs-bridge, ovs-port, team, vrf" /> <property name="autoconnect-slaves" - nmcli-description="Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties "autoconnect", "autoconnect-priority" and "autoconnect-retries" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0." /> + nmcli-description="Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties "autoconnect", "autoconnect-priority" and "autoconnect-retries" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0." + format="choice (NMSettingConnectionAutoconnectSlaves)" + values="default (-1), no (0), yes (1)" /> <property name="secondaries" - nmcli-description="List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported." /> + nmcli-description="List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported." + format="list of strings" /> <property name="gateway-ping-timeout" - nmcli-description="If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping." /> + nmcli-description="If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping." + format="integer" + values="0 - 600" /> <property name="metered" - nmcli-description="Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately." /> + nmcli-description="Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="lldp" - nmcli-description="Whether LLDP is enabled for the connection." /> + nmcli-description="Whether LLDP is enabled for the connection." + format="choice (NMSettingConnectionLldp)" + values="default (-1), disable (0), enable-rx/enable (1)" /> <property name="mdns" - nmcli-description="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." /> + nmcli-description="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." + format="choice (NMSettingConnectionMdns)" + values="default (-1), no (0), resolve (1), yes (2)" /> <property name="llmnr" - nmcli-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." /> + nmcli-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." + format="choice (NMSettingConnectionLlmnr)" + values="default (-1), no (0), resolve (1), yes (2)" /> <property name="dns-over-tls" - nmcli-description="Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: "yes" (2) use DNSOverTls and disabled fallback, "opportunistic" (1) use DNSOverTls but allow fallback to unencrypted resolution, "no" (0) don't ever use DNSOverTls. If unspecified "default" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved." /> + nmcli-description="Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: "yes" (2) use DNSOverTls and disabled fallback, "opportunistic" (1) use DNSOverTls but allow fallback to unencrypted resolution, "no" (0) don't ever use DNSOverTls. If unspecified "default" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved." + format="choice (NMSettingConnectionDnsOverTls)" + values="default (-1), no (0), opportunistic (1), yes (2)" /> <property name="mptcp-flags" - nmcli-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 "enabled" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless "/proc/sys/net/mptcp/enabled" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, "also-without-sysctl" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag "also-without-default-route" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags "signal" (0x10), "subflow" (0x20), "backup" (0x40), "fullmesh" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is "enabled,subflow". Note that this means that MPTCP is by default done depending on the "/proc/sys/net/mptcp/enabled" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via "/proc/sys/net/mptcp/enabled". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2)." /> + nmcli-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 "enabled" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless "/proc/sys/net/mptcp/enabled" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, "also-without-sysctl" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag "also-without-default-route" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags "signal" (0x10), "subflow" (0x20), "backup" (0x40), "fullmesh" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is "enabled,subflow". Note that this means that MPTCP is by default done depending on the "/proc/sys/net/mptcp/enabled" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via "/proc/sys/net/mptcp/enabled". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2)." + format="flags (NMMptcpFlags)" + values="none/default (0x0), disabled (0x1), enabled (0x2), also-without-sysctl (0x4), also-without-default-route (0x8), signal (0x10), subflow (0x20), backup (0x40), fullmesh (0x80)" /> <property name="mud-url" - nmcli-description="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"." /> + nmcli-description="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"." + format="string" /> <property name="wait-device-timeout" - nmcli-description="Timeout in milliseconds to wait for device at startup. During boot, devices may take a while to be detected by the driver. This property will cause to delay NetworkManager-wait-online.service and nm-online to give the device a chance to appear. This works by waiting for the given timeout until a compatible device for the profile is available and managed. The value 0 means no wait time. The default value is -1, which currently has the same meaning as no wait time." /> + nmcli-description="Timeout in milliseconds to wait for device at startup. During boot, devices may take a while to be detected by the driver. This property will cause to delay NetworkManager-wait-online.service and nm-online to give the device a chance to appear. This works by waiting for the given timeout until a compatible device for the profile is available and managed. The value 0 means no wait time. The default value is -1, which currently has the same meaning as no wait time." + format="integer" + values="-1 - 2147483647" /> <property name="wait-activation-delay" - nmcli-description="Time in milliseconds to wait for connection to be considered activated. The wait will start after the pre-up dispatcher event. The value 0 means no wait time. The default value is -1, which currently has the same meaning as no wait time." /> + nmcli-description="Time in milliseconds to wait for connection to be considered activated. The wait will start after the pre-up dispatcher event. The value 0 means no wait time. The default value is -1, which currently has the same meaning as no wait time." + format="integer" + values="-1 - 2147483647" /> </setting> <setting name="dcb" > <property name="app-fcoe-flags" - nmcli-description="Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." /> + nmcli-description="Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of "enable" (0x1), "advertise" (0x2), and "willing" (0x4)." + format="flags (NMSettingDcbFlags)" + values="none (0x0), enable (0x1), advertise (0x2), willing (0x4)" /> <property name="app-fcoe-priority" - nmcli-description="The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the "app-fcoe-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." /> + nmcli-description="The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the "app-fcoe-flags" property includes the "enable" (0x1) flag." + format="integer" + values="-1 - 7" + special-values="unset (-1)" /> <property name="app-fcoe-mode" - nmcli-description="The FCoE controller mode; either "fabric" or "vn2vn". Since 1.34, NULL is the default and means "fabric". Before 1.34, NULL was rejected as invalid and the default was "fabric"." /> + nmcli-description="The FCoE controller mode; either "fabric" or "vn2vn". Since 1.34, NULL is the default and means "fabric". Before 1.34, NULL was rejected as invalid and the default was "fabric"." + format="string" + values="fabric, vn2vn" /> <property name="app-iscsi-flags" - nmcli-description="Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." /> + nmcli-description="Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of "enable" (0x1), "advertise" (0x2), and "willing" (0x4)." + format="flags (NMSettingDcbFlags)" + values="none (0x0), enable (0x1), advertise (0x2), willing (0x4)" /> <property name="app-iscsi-priority" - nmcli-description="The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the "app-iscsi-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." /> + nmcli-description="The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the "app-iscsi-flags" property includes the "enable" (0x1) flag." + format="integer" + values="-1 - 7" + special-values="unset (-1)" /> <property name="app-fip-flags" - nmcli-description="Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." /> + nmcli-description="Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of "enable" (0x1), "advertise" (0x2), and "willing" (0x4)." + format="flags (NMSettingDcbFlags)" + values="none (0x0), enable (0x1), advertise (0x2), willing (0x4)" /> <property name="app-fip-priority" - nmcli-description="The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the "app-fip-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." /> + nmcli-description="The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the "app-fip-flags" property includes the "enable" (0x1) flag." + format="integer" + values="-1 - 7" + special-values="unset (-1)" /> <property name="priority-flow-control-flags" - nmcli-description="Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." /> + nmcli-description="Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of "enable" (0x1), "advertise" (0x2), and "willing" (0x4)." + format="flags (NMSettingDcbFlags)" + values="none (0x0), enable (0x1), advertise (0x2), willing (0x4)" /> <property name="priority-flow-control" - nmcli-description="An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause." /> + nmcli-description="An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause." + format="list of booleans" + values="true/yes/on, false/no/off" /> <property name="priority-group-flags" - nmcli-description="Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." /> + nmcli-description="Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of "enable" (0x1), "advertise" (0x2), and "willing" (0x4)." + format="flags (NMSettingDcbFlags)" + values="none (0x0), enable (0x1), advertise (0x2), willing (0x4)" /> <property name="priority-group-id" - nmcli-description="An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group." /> + nmcli-description="An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group." + format="list of integers" + values="0 - 7, 15" /> <property name="priority-group-bandwidth" - nmcli-description="An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percents." /> + nmcli-description="An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percents." + format="list of integers" + values="0 - 100" /> <property name="priority-bandwidth" - nmcli-description="An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percents." /> + nmcli-description="An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percents." + format="list of integers" + values="0 - 100" /> <property name="priority-strict-bandwidth" - nmcli-description="An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group." /> + nmcli-description="An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group." + format="list of booleans" + values="true/yes/on, false/no/off" /> <property name="priority-traffic-class" - nmcli-description="An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped." /> + nmcli-description="An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped." + format="list of integers" + values="0 - 7" /> </setting> <setting name="dummy" > </setting> <setting name="ethtool" > - <property name="feature-esp-hw-offload" /> - <property name="feature-esp-tx-csum-hw-offload" /> - <property name="feature-fcoe-mtu" /> - <property name="feature-gro" /> - <property name="feature-gso" /> - <property name="feature-highdma" /> - <property name="feature-hw-tc-offload" /> - <property name="feature-l2-fwd-offload" /> - <property name="feature-loopback" /> - <property name="feature-lro" /> - <property name="feature-macsec-hw-offload" /> - <property name="feature-ntuple" /> - <property name="feature-rx" /> - <property name="feature-rxhash" /> - <property name="feature-rxvlan" /> - <property name="feature-rx-all" /> - <property name="feature-rx-fcs" /> - <property name="feature-rx-gro-hw" /> - <property name="feature-rx-gro-list" /> - <property name="feature-rx-udp-gro-forwarding" /> - <property name="feature-rx-udp_tunnel-port-offload" /> - <property name="feature-rx-vlan-filter" /> - <property name="feature-rx-vlan-stag-filter" /> - <property name="feature-rx-vlan-stag-hw-parse" /> - <property name="feature-sg" /> - <property name="feature-tls-hw-record" /> - <property name="feature-tls-hw-rx-offload" /> - <property name="feature-tls-hw-tx-offload" /> - <property name="feature-tso" /> - <property name="feature-tx" /> - <property name="feature-txvlan" /> - <property name="feature-tx-checksum-fcoe-crc" /> - <property name="feature-tx-checksum-ipv4" /> - <property name="feature-tx-checksum-ipv6" /> - <property name="feature-tx-checksum-ip-generic" /> - <property name="feature-tx-checksum-sctp" /> - <property name="feature-tx-esp-segmentation" /> - <property name="feature-tx-fcoe-segmentation" /> - <property name="feature-tx-gre-csum-segmentation" /> - <property name="feature-tx-gre-segmentation" /> - <property name="feature-tx-gso-list" /> - <property name="feature-tx-gso-partial" /> - <property name="feature-tx-gso-robust" /> - <property name="feature-tx-ipxip4-segmentation" /> - <property name="feature-tx-ipxip6-segmentation" /> - <property name="feature-tx-nocache-copy" /> - <property name="feature-tx-scatter-gather" /> - <property name="feature-tx-scatter-gather-fraglist" /> - <property name="feature-tx-sctp-segmentation" /> - <property name="feature-tx-tcp6-segmentation" /> - <property name="feature-tx-tcp-ecn-segmentation" /> - <property name="feature-tx-tcp-mangleid-segmentation" /> - <property name="feature-tx-tcp-segmentation" /> - <property name="feature-tx-tunnel-remcsum-segmentation" /> - <property name="feature-tx-udp-segmentation" /> - <property name="feature-tx-udp_tnl-csum-segmentation" /> - <property name="feature-tx-udp_tnl-segmentation" /> - <property name="feature-tx-vlan-stag-hw-insert" /> - <property name="coalesce-adaptive-rx" /> - <property name="coalesce-adaptive-tx" /> - <property name="coalesce-pkt-rate-high" /> - <property name="coalesce-pkt-rate-low" /> - <property name="coalesce-rx-frames" /> - <property name="coalesce-rx-frames-irq" /> - <property name="coalesce-rx-frames-high" /> - <property name="coalesce-rx-frames-low" /> - <property name="coalesce-rx-usecs" /> - <property name="coalesce-rx-usecs-irq" /> - <property name="coalesce-rx-usecs-high" /> - <property name="coalesce-rx-usecs-low" /> - <property name="coalesce-sample-interval" /> - <property name="coalesce-stats-block-usecs" /> - <property name="coalesce-tx-frames" /> - <property name="coalesce-tx-frames-irq" /> - <property name="coalesce-tx-frames-high" /> - <property name="coalesce-tx-frames-low" /> - <property name="coalesce-tx-usecs" /> - <property name="coalesce-tx-usecs-irq" /> - <property name="coalesce-tx-usecs-high" /> - <property name="coalesce-tx-usecs-low" /> + <property name="feature-esp-hw-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-esp-tx-csum-hw-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-fcoe-mtu" + format="ternary" + values="on, off, ignore" /> + <property name="feature-gro" + format="ternary" + values="on, off, ignore" /> + <property name="feature-gso" + format="ternary" + values="on, off, ignore" /> + <property name="feature-highdma" + format="ternary" + values="on, off, ignore" /> + <property name="feature-hw-tc-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-l2-fwd-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-loopback" + format="ternary" + values="on, off, ignore" /> + <property name="feature-lro" + format="ternary" + values="on, off, ignore" /> + <property name="feature-macsec-hw-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-ntuple" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rxhash" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rxvlan" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-all" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-fcs" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-gro-hw" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-gro-list" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-udp-gro-forwarding" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-udp_tunnel-port-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-vlan-filter" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-vlan-stag-filter" + format="ternary" + values="on, off, ignore" /> + <property name="feature-rx-vlan-stag-hw-parse" + format="ternary" + values="on, off, ignore" /> + <property name="feature-sg" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tls-hw-record" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tls-hw-rx-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tls-hw-tx-offload" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tso" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx" + format="ternary" + values="on, off, ignore" /> + <property name="feature-txvlan" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-checksum-fcoe-crc" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-checksum-ipv4" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-checksum-ipv6" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-checksum-ip-generic" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-checksum-sctp" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-esp-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-fcoe-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-gre-csum-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-gre-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-gso-list" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-gso-partial" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-gso-robust" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-ipxip4-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-ipxip6-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-nocache-copy" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-scatter-gather" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-scatter-gather-fraglist" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-sctp-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-tcp6-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-tcp-ecn-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-tcp-mangleid-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-tcp-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-tunnel-remcsum-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-udp-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-udp_tnl-csum-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-udp_tnl-segmentation" + format="ternary" + values="on, off, ignore" /> + <property name="feature-tx-vlan-stag-hw-insert" + format="ternary" + values="on, off, ignore" /> + <property name="coalesce-adaptive-rx" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-adaptive-tx" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-pkt-rate-high" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-pkt-rate-low" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-frames" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-frames-irq" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-frames-high" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-frames-low" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-usecs" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-usecs-irq" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-usecs-high" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-rx-usecs-low" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-sample-interval" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-stats-block-usecs" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-frames" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-frames-irq" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-frames-high" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-frames-low" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-usecs" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-usecs-irq" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-usecs-high" + format="integer" + values="0 - 4294967295" /> + <property name="coalesce-tx-usecs-low" + format="integer" + values="0 - 4294967295" /> <property name="pause-autoneg" - nmcli-description="Whether to automatically negotiate on pause frame of flow control mechanism defined by IEEE 802.3x standard." /> + nmcli-description="Whether to automatically negotiate on pause frame of flow control mechanism defined by IEEE 802.3x standard." + format="ternary" + values="on, off, ignore" /> <property name="pause-rx" - nmcli-description="Whether RX pause should be enabled. Only valid when automatic negotiation is disabled" /> + nmcli-description="Whether RX pause should be enabled. Only valid when automatic negotiation is disabled" + format="ternary" + values="on, off, ignore" /> <property name="pause-tx" - nmcli-description="Whether TX pause should be enabled. Only valid when automatic negotiation is disabled" /> - <property name="ring-rx" /> - <property name="ring-rx-jumbo" /> - <property name="ring-rx-mini" /> - <property name="ring-tx" /> + nmcli-description="Whether TX pause should be enabled. Only valid when automatic negotiation is disabled" + format="ternary" + values="on, off, ignore" /> + <property name="eee-enabled" + format="ternary" + values="on, off, ignore" /> + <property name="ring-rx" + format="integer" + values="0 - 4294967295" /> + <property name="ring-rx-jumbo" + format="integer" + values="0 - 4294967295" /> + <property name="ring-rx-mini" + format="integer" + values="0 - 4294967295" /> + <property name="ring-tx" + format="integer" + values="0 - 4294967295" /> + <property name="channels-rx" + format="integer" + values="0 - 4294967295" /> + <property name="channels-tx" + format="integer" + values="0 - 4294967295" /> + <property name="channels-other" + format="integer" + values="0 - 4294967295" /> + <property name="channels-combined" + format="integer" + values="0 - 4294967295" /> </setting> <setting name="generic" > </setting> <setting name="gsm" > <property name="auto-config" - nmcli-description="When TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database." /> + nmcli-description="When TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="number" - nmcli-description="Legacy setting that used to help establishing PPP data sessions for GSM-based modems." /> + nmcli-description="Legacy setting that used to help establishing PPP data sessions for GSM-based modems." + format="string" /> <property name="username" alias="user" - nmcli-description="The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here." /> + nmcli-description="The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here." + format="string" /> <property name="password" alias="password" - nmcli-description="The password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here." /> + nmcli-description="The password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here." + format="string" /> <property name="password-flags" - nmcli-description="Flags indicating how to handle the "password" property." /> + nmcli-description="Flags indicating how to handle the "password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="apn" alias="apn" - nmcli-description="The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9." /> + nmcli-description="The GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9. If the APN is unset (the default) then it may be detected based on "auto-config" setting. The property can be explicitly set to the empty string to prevent that and use no APN." + format="string" /> <property name="network-id" - nmcli-description="The Network ID (GSM LAI format, ie MCC-MNC) to force specific network registration. If the Network ID is specified, NetworkManager will attempt to force the device to register only on the specified network. This can be used to ensure that the device does not roam when direct roaming control of the device is not otherwise possible." /> + nmcli-description="The Network ID (GSM LAI format, ie MCC-MNC) to force specific network registration. If the Network ID is specified, NetworkManager will attempt to force the device to register only on the specified network. This can be used to ensure that the device does not roam when direct roaming control of the device is not otherwise possible." + format="string" /> <property name="pin" - nmcli-description="If the SIM is locked with a PIN it must be unlocked before any other operations are requested. Specify the PIN here to allow operation of the device." /> + nmcli-description="If the SIM is locked with a PIN it must be unlocked before any other operations are requested. Specify the PIN here to allow operation of the device." + format="string" /> <property name="pin-flags" - nmcli-description="Flags indicating how to handle the "pin" property." /> + nmcli-description="Flags indicating how to handle the "pin" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="home-only" - nmcli-description="When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made." /> + nmcli-description="When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="device-id" - nmcli-description="The device unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will only apply to the specified device." /> + nmcli-description="The device unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will only apply to the specified device." + format="string" /> <property name="sim-id" - nmcli-description="The SIM card unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" which contains a SIM card matching the given identifier." /> + nmcli-description="The SIM card unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" which contains a SIM card matching the given identifier." + format="string" /> <property name="sim-operator-id" - nmcli-description="A MCC/MNC string like "310260" or "21601" identifying the specific mobile network operator which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" and "sim-id" which contains a SIM card provisioned by the given operator." /> + nmcli-description="A MCC/MNC string like "310260" or "21601" identifying the specific mobile network operator which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" and "sim-id" which contains a SIM card provisioned by the given operator." + format="string" /> <property name="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." + format="integer" + special-values="auto" /> <property name="initial-eps-bearer-configure" - nmcli-description="For LTE modems, this setting determines whether the initial EPS bearer shall be configured when bringing up the connection. It is inferred TRUE if initial-eps-bearer-apn is set." /> + nmcli-description="For LTE modems, this setting determines whether the initial EPS bearer shall be configured when bringing up the connection. It is inferred TRUE if initial-eps-bearer-apn is set." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="initial-eps-bearer-apn" - nmcli-description="For LTE modems, this sets the APN for the initial EPS bearer that is set up when attaching to the network. Setting this parameter implies initial-eps-bearer-configure to be TRUE." /> + nmcli-description="For LTE modems, this sets the APN for the initial EPS bearer that is set up when attaching to the network. Setting this parameter implies initial-eps-bearer-configure to be TRUE." + format="string" /> </setting> <setting name="hostname" > <property name="priority" - nmcli-description="The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname." /> + nmcli-description="The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname." + format="integer" + values="-2147483648 - 2147483647" /> <property name="from-dhcp" - nmcli-description="Whether the system hostname can be determined from DHCP on this connection. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1)." /> + nmcli-description="Whether the system hostname can be determined from DHCP on this connection. When set to "default" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be "true" (1)." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="from-dns-lookup" - nmcli-description="Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1)." /> + nmcli-description="Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to "default" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be "true" (1)." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="only-from-default" - nmcli-description="If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0)." /> + nmcli-description="If set to "true" (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to "false" (0), the hostname can be set from this device even if it doesn't have the default route. When set to "default" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be "false" (0)." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> + </setting> + <setting name="hsr" > + <property name="port1" + alias="port1" + nmcli-description="The port1 interface name of the HSR. This property is mandatory." + format="string" /> + <property name="port2" + alias="port2" + nmcli-description="The port2 interface name of the HSR. This property is mandatory." + format="string" /> + <property name="multicast-spec" + alias="multicast-spec" + nmcli-description="The last byte of supervision address." + format="integer" + values="0 - 255" /> + <property name="prp" + nmcli-description="The protocol used by the interface, whether it is PRP or HSR." + format="boolean" + values="true/yes/on, false/no/off" /> </setting> <setting name="infiniband" > <property name="mac-address" alias="mac" - nmcli-description="If specified, this connection will only apply to the IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." /> + nmcli-description="If specified, this connection will only apply to the IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." + format="Infiniband MAC address" /> <property name="mtu" alias="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." + format="integer" + special-values="auto" /> <property name="transport-mode" alias="transport-mode" - nmcli-description="The IP-over-InfiniBand transport mode. Either "datagram" or "connected"." /> + nmcli-description="The IP-over-InfiniBand transport mode. Either "datagram" or "connected"." + format="string" + values="datagram, connected" /> <property name="p-key" alias="p-key" - nmcli-description="The InfiniBand p-key to use for this device. A value of -1 means to use the default p-key (aka "the p-key at index 0"). Otherwise, it is a 16-bit unsigned integer, whose high bit 0x8000 is set if it is a "full membership" p-key. The values 0 and 0x8000 are not allowed. With the p-key set, the interface name is always "$parent.$p_key". Setting "connection.interface-name" to another name is not supported. Note that kernel will internally always set the full membership bit, although the interface name does not reflect that. Usually the user would want to configure a full membership p-key with 0x8000 flag set." /> + nmcli-description="The InfiniBand p-key to use for this device. A value of -1 means to use the default p-key (aka "the p-key at index 0"). Otherwise, it is a 16-bit unsigned integer, whose high bit 0x8000 is set if it is a "full membership" p-key. The values 0 and 0x8000 are not allowed. With the p-key set, the interface name is always "$parent.$p_key". Setting "connection.interface-name" to another name is not supported. Note that kernel will internally always set the full membership bit, although the interface name does not reflect that. Usually the user would want to configure a full membership p-key with 0x8000 flag set." + format="integer" + values="-1 - 65535" + special-values="default (-1)" /> <property name="parent" alias="parent" - nmcli-description="The interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address"." /> + nmcli-description="The interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address"." + format="string" /> </setting> <setting name="ip-tunnel" > <property name="mode" alias="mode" - nmcli-description="The tunneling mode. Valid values: ipip (1), gre (2), sit (3), isatap (4), vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap (10) and ip6gretap (11)" /> + nmcli-description="The tunneling mode. Valid values: ipip (1), gre (2), sit (3), isatap (4), vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap (10) and ip6gretap (11)" + format="choice (NMIPTunnelMode)" + values="ipip (1), gre (2), sit (3), isatap (4), vti (5), ip6ip6 (6), ipip6 (7), ip6gre (8), vti6 (9), gretap (10), ip6gretap (11)" /> <property name="parent" alias="dev" - nmcli-description="If given, specifies the parent interface name or parent connection UUID the new device will be bound to so that tunneled packets will only be routed via that interface." /> + nmcli-description="If given, specifies the parent interface name or parent connection UUID the new device will be bound to so that tunneled packets will only be routed via that interface." + format="string" /> <property name="local" alias="local" - nmcli-description="The local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address." /> + nmcli-description="The local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address." + format="string" /> <property name="remote" alias="remote" - nmcli-description="The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address." /> + nmcli-description="The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address." + format="string" /> <property name="ttl" - nmcli-description="The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value." /> + nmcli-description="The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value." + format="integer" + values="0 - 255" /> <property name="tos" - nmcli-description="The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets." /> + nmcli-description="The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets." + format="integer" + values="0 - 255" /> <property name="path-mtu-discovery" - nmcli-description="Whether to enable Path MTU Discovery on this tunnel." /> + nmcli-description="Whether to enable Path MTU Discovery on this tunnel." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="input-key" - nmcli-description="The key used for tunnel input packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used." /> + nmcli-description="The key used for tunnel input packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used." + format="string" /> <property name="output-key" - nmcli-description="The key used for tunnel output packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used." /> + nmcli-description="The key used for tunnel output packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used." + format="string" /> <property name="encapsulation-limit" - nmcli-description="How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels. To disable this option, add 0x1 (ip6-ign-encap-limit) to ip-tunnel flags." /> + nmcli-description="How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels. To disable this option, add 0x1 (ip6-ign-encap-limit) to ip-tunnel flags." + format="integer" + values="0 - 255" /> <property name="flow-label" - nmcli-description="The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels." /> + nmcli-description="The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels." + format="integer" + values="0 - 1048575" /> <property name="fwmark" - nmcli-description="The fwmark value to assign to tunnel packets. This property can be set to a non zero value only on VTI and VTI6 tunnels." /> + nmcli-description="The fwmark value to assign to tunnel packets. This property can be set to a non zero value only on VTI and VTI6 tunnels." + format="integer" + values="0 - 4294967295" /> <property name="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments." + format="integer" + special-values="auto" /> <property name="flags" - nmcli-description="Tunnel flags. Currently, the following values are supported: 0x1 (ip6-ign-encap-limit), 0x2 (ip6-use-orig-tclass), 0x4 (ip6-use-orig-flowlabel), 0x8 (ip6-mip6-dev), 0x10 (ip6-rcv-dscp-copy) and 0x20 (ip6-use-orig-fwmark). They are valid only for IPv6 tunnels." /> + nmcli-description="Tunnel flags. Currently, the following values are supported: 0x1 (ip6-ign-encap-limit), 0x2 (ip6-use-orig-tclass), 0x4 (ip6-use-orig-flowlabel), 0x8 (ip6-mip6-dev), 0x10 (ip6-rcv-dscp-copy) and 0x20 (ip6-use-orig-fwmark). They are valid only for IPv6 tunnels." + format="flags (NMIPTunnelFlags)" + values="none (0x0), ip6-ign-encap-limit (0x1), ip6-use-orig-tclass (0x2), ip6-use-orig-flowlabel (0x4), ip6-mip6-dev (0x8), ip6-rcv-dscp-copy (0x10), ip6-use-orig-fwmark (0x20)" /> </setting> <setting name="ipv4" > <property name="method" - nmcli-description="The IPv4 connection method." /> + nmcli-description="The IPv4 connection method." + format="string" + values="auto, link-local, manual, shared, disabled" /> <property name="dns" - nmcli-description="Array of IP addresses of DNS servers. For DoT (DNS over TLS), the SNI server name can be specified by appending "#example.com" to the IP address of the DNS server. This currently only has effect when using systemd-resolved." /> + nmcli-description="Array of IP addresses of DNS servers. For DoT (DNS over TLS), the SNI server name can be specified by appending "#example.com" to the IP address of the DNS server. This currently only has effect when using systemd-resolved." + format="list of IPv4 addresses" /> <property name="dns-search" - nmcli-description="List of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting. When set on a profile that also enabled DHCP, the DNS search list received automatically (option 119 for DHCPv4 and option 24 for DHCPv6) gets merged with the manual list. This can be prevented by setting "ignore-auto-dns". Note that if no DNS searches are configured, the fallback will be derived from the domain from DHCP (option 15)." /> + nmcli-description="List of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting. When set on a profile that also enabled DHCP, the DNS search list received automatically (option 119 for DHCPv4 and option 24 for DHCPv6) gets merged with the manual list. This can be prevented by setting "ignore-auto-dns". Note that if no DNS searches are configured, the fallback will be derived from the domain from DHCP (option 15)." + format="list of strings" /> <property name="dns-options" - nmcli-description="DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The currently supported options are "attempts", "debug", "edns0", "ndots", "no-aaaa", "no-check-names", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". See the resolv.conf(5) manual. Note that there is a distinction between an unset (default) list and an empty list. In nmcli, to unset the list set the value to "". To set an empty list, set it to " ". Currently, an unset list has the same meaning as an empty list. That might change in the future. The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added. The valid "ipv4.dns-options" and "ipv6.dns-options" get merged together." /> + nmcli-description="DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The currently supported options are "attempts", "debug", "edns0", "ndots", "no-aaaa", "no-check-names", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". See the resolv.conf(5) manual. Note that there is a distinction between an unset (default) list and an empty list. In nmcli, to unset the list set the value to "". To set an empty list, set it to " ". Currently, an unset list has the same meaning as an empty list. That might change in the future. The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added. The valid "ipv4.dns-options" and "ipv6.dns-options" get merged together." + format="list of strings" /> <property name="dns-priority" - nmcli-description="DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured." /> + nmcli-description="DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured." + format="integer" + values="-2147483648 - 2147483647" /> <property name="addresses" alias="ip4" - nmcli-description="A list of IPv4 addresses and their prefix length. Multiple addresses can be separated by comma. For example "192.168.1.5/24, 10.1.0.5/24". The addresses are listed in decreasing priority, meaning the first address will be the primary address." /> + nmcli-description="A list of IPv4 addresses and their prefix length. Multiple addresses can be separated by comma. For example "192.168.1.5/24, 10.1.0.5/24". The addresses are listed in decreasing priority, meaning the first address will be the primary address." + format="list of ipv4.addresses objects" /> <property name="gateway" alias="gw4" - nmcli-description="The gateway associated with this configuration. This is only meaningful if "addresses" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if "never-default" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See "ip4-auto-default-route"." /> + nmcli-description="The gateway associated with this configuration. This is only meaningful if "addresses" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if "never-default" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See "ip4-auto-default-route"." + format="IPv4 address" /> <property name="routes" - nmcli-description="A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: "ip[/prefix] [next-hop] [metric] [attribute=val]...[,ip[/prefix]...]". For example "192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24"." /> + nmcli-description="A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: "ip[/prefix] [next-hop] [metric] [attribute=val]...[,ip[/prefix]...]". For example "192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24"." + format="list of ipv4.routes objects" /> <property name="route-metric" - nmcli-description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." /> + nmcli-description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." + format="integer" + values="-1 - 4294967295" /> <property name="route-table" - nmcli-description="Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager." /> - <property name="routing-rules" /> + nmcli-description="Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager." + format="integer" + values="0 - 4294967295" + special-values="unspec (0), main (254)" /> + <property name="routing-rules" + format="list of ipv4.routing-rules objects" /> <property name="replace-local-rule" - nmcli-description="Connections will default to keep the autogenerated priority 0 local rule unless this setting is set to TRUE." /> + nmcli-description="Connections will default to keep the autogenerated priority 0 local rule unless this setting is set to TRUE." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="ignore-auto-routes" - nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used." /> + nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="ignore-auto-dns" - nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used." /> + nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="dhcp-client-id" - nmcli-description="A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values "mac" and "perm-mac" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value "ipv6-duid" uses the DUID from "ipv6.dhcp-duid" property as an RFC4361-compliant client identifier. As IAID it uses "ipv4.dhcp-iaid" and falls back to "ipv6.dhcp-iaid" if unset. The special value "duid" generates a RFC4361-compliant client identifier based on "ipv4.dhcp-iaid" and uses a DUID generated by hashing /etc/machine-id. The special value "stable" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin." /> + nmcli-description="A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values "mac" and "perm-mac" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value "ipv6-duid" uses the DUID from "ipv6.dhcp-duid" property as an RFC4361-compliant client identifier. As IAID it uses "ipv4.dhcp-iaid" and falls back to "ipv6.dhcp-iaid" if unset. The special value "duid" generates a RFC4361-compliant client identifier based on "ipv4.dhcp-iaid" and uses a DUID generated by hashing /etc/machine-id. The special value "stable" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a per-device key. The special value "none" prevents any client identifier from being sent. Note that this is normally not recommended. If unset, a globally configured default from NetworkManager.conf is used. If still unset, the default depends on the DHCP plugin. The internal dhcp client will default to "mac" and the dhclient plugin will try to use one from its config file if present, or won't sent any client-id otherwise." + format="string" /> <property name="dhcp-iaid" - nmcli-description="A string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values "mac", "perm-mac", "ifname" or "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". For DHCPv4, the IAID is only used with "ipv4.dhcp-client-id" values "duid" and "ipv6-duid" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the "internal" DHCPv6 plugin. The "dhclient" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device." /> + nmcli-description="A string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values "mac", "perm-mac", "ifname" or "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". For DHCPv4, the IAID is only used with "ipv4.dhcp-client-id" values "duid" and "ipv6-duid" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the "internal" DHCPv6 plugin. The "dhclient" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device." + format="string" /> <property name="dhcp-timeout" - nmcli-description="A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity." /> + nmcli-description="A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity." + format="integer" + values="0 - 2147483647" + special-values="default (0), infinity (2147483647)" /> <property name="dhcp-send-hostname" - nmcli-description="If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." /> + nmcli-description="If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="dhcp-hostname" - nmcli-description="If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time." /> + nmcli-description="If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time." + format="string" /> <property name="dhcp-fqdn" - nmcli-description="If the "dhcp-send-hostname" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and "dhcp-hostname" are mutually exclusive and cannot be set at the same time." /> + nmcli-description="If the "dhcp-send-hostname" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and "dhcp-hostname" are mutually exclusive and cannot be set at the same time." + format="string" /> <property name="dhcp-hostname-flags" - nmcli-description="Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests." /> + nmcli-description="Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are "fqdn-serv-update" (0x1), "fqdn-encoded" (0x2) and "fqdn-no-update" (0x4). When no FQDN flag is set and "fqdn-clear-flags" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and "fqdn-clear-flags" (0x8) is not set, the standard FQDN flags are set in the request: "fqdn-serv-update" (0x1), "fqdn-encoded" (0x2) for IPv4 and "fqdn-serv-update" (0x1) for IPv6. When this property is set to the default value "none" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also "none" (0x0), then the standard FQDN flags described above are sent in the DHCP requests." + format="flags (NMDhcpHostnameFlags)" + values="none (0x0), fqdn-serv-update (0x1), fqdn-encoded (0x2), fqdn-no-update (0x4), fqdn-clear-flags (0x8)" /> <property name="never-default" - nmcli-description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." /> + nmcli-description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="may-fail" - nmcli-description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." /> + nmcli-description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="required-timeout" - nmcli-description="The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero)." /> + nmcli-description="The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero)." + format="integer" + values="-1 - 2147483647" + special-values="default (-1), infinity (2147483647)" /> <property name="dad-timeout" - nmcli-description="Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4." /> + nmcli-description="Maximum timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. The property is currently implemented only for IPv4. A zero value means that no duplicate address detection is performed, -1 means the default value (either the value configured globally in NetworkManger.conf or 200ms). A value greater than zero is a timeout in milliseconds. Note that the time intervals are subject to randomization as per RFC 5227 and so the actual duration can be between half and the full time specified in this property." + format="integer" + values="-1 - 30000" + special-values="default (-1), off (0)" /> <property name="dhcp-vendor-class-identifier" - nmcli-description="The Vendor Class Identifier DHCP option (60). Special characters in the data string may be escaped using C-style escapes, nevertheless this property cannot contain nul bytes. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the DHCP option is not sent to the server." /> + nmcli-description="The Vendor Class Identifier DHCP option (60). Special characters in the data string may be escaped using C-style escapes, nevertheless this property cannot contain nul bytes. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the DHCP option is not sent to the server." + format="string" /> <property name="link-local" - nmcli-description="Enable and disable the IPv4 link-local configuration independently of the ipv4.method configuration. This allows a link-local address (169.254.x.y/16) to be obtained in addition to other addresses, such as those manually configured or obtained from a DHCP server. When set to "auto", the value is dependent on "ipv4.method". When set to "default", it honors the global connection default, before falling back to "auto". Note that if "ipv4.method" is "disabled", then link local addressing is always disabled too. The default is "default"." /> + nmcli-description="Enable and disable the IPv4 link-local configuration independently of the ipv4.method configuration. This allows a link-local address (169.254.x.y/16) to be obtained in addition to other addresses, such as those manually configured or obtained from a DHCP server. When set to "auto", the value is dependent on "ipv4.method". When set to "default", it honors the global connection default, before falling back to "auto". Note that if "ipv4.method" is "disabled", then link local addressing is always disabled too. The default is "default"." + format="choice (NMSettingIP4LinkLocal)" + values="default (0), auto (1), disabled (2), enabled (3)" /> <property name="dhcp-reject-servers" - nmcli-description="Array of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. "192.168.122.0/24"). This property is currently not implemented for DHCPv6." /> + nmcli-description="Array of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. "192.168.122.0/24"). This property is currently not implemented for DHCPv6." + format="list of IPv4 addresses" /> <property name="auto-route-ext-gw" - nmcli-description="VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect." /> + nmcli-description="VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> </setting> <setting name="ipv6" > <property name="method" - nmcli-description="The IPv6 connection method." /> + nmcli-description="The IPv6 connection method." + format="string" + values="ignore, auto, dhcp, link-local, manual, shared, disabled" /> <property name="dns" - nmcli-description="Array of IP addresses of DNS servers. For DoT (DNS over TLS), the SNI server name can be specified by appending "#example.com" to the IP address of the DNS server. This currently only has effect when using systemd-resolved." /> + nmcli-description="Array of IP addresses of DNS servers. For DoT (DNS over TLS), the SNI server name can be specified by appending "#example.com" to the IP address of the DNS server. This currently only has effect when using systemd-resolved." + format="list of IPv6 addresses" /> <property name="dns-search" - nmcli-description="List of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting. When set on a profile that also enabled DHCP, the DNS search list received automatically (option 119 for DHCPv4 and option 24 for DHCPv6) gets merged with the manual list. This can be prevented by setting "ignore-auto-dns". Note that if no DNS searches are configured, the fallback will be derived from the domain from DHCP (option 15)." /> + nmcli-description="List of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting. When set on a profile that also enabled DHCP, the DNS search list received automatically (option 119 for DHCPv4 and option 24 for DHCPv6) gets merged with the manual list. This can be prevented by setting "ignore-auto-dns". Note that if no DNS searches are configured, the fallback will be derived from the domain from DHCP (option 15)." + format="list of strings" /> <property name="dns-options" - nmcli-description="DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The currently supported options are "attempts", "debug", "edns0", "ndots", "no-aaaa", "no-check-names", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc" and "inet6", "ip6-bytestring", "ip6-dotint", "no-ip6-dotint". See the resolv.conf(5) manual. Note that there is a distinction between an unset (default) list and an empty list. In nmcli, to unset the list set the value to "". To set an empty list, set it to " ". Currently, an unset list has the same meaning as an empty list. That might change in the future. The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added. The valid "ipv4.dns-options" and "ipv6.dns-options" get merged together." /> + nmcli-description="DNS options for /etc/resolv.conf as described in resolv.conf(5) manual. The currently supported options are "attempts", "debug", "edns0", "ndots", "no-aaaa", "no-check-names", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc" and "inet6", "ip6-bytestring", "ip6-dotint", "no-ip6-dotint". See the resolv.conf(5) manual. Note that there is a distinction between an unset (default) list and an empty list. In nmcli, to unset the list set the value to "". To set an empty list, set it to " ". Currently, an unset list has the same meaning as an empty list. That might change in the future. The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added. The valid "ipv4.dns-options" and "ipv6.dns-options" get merged together." + format="list of strings" /> <property name="dns-priority" - nmcli-description="DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured." /> + nmcli-description="DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured." + format="integer" + values="-2147483648 - 2147483647" /> <property name="addresses" alias="ip6" - nmcli-description="A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5)." /> + nmcli-description="A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5)." + format="list of ipv6.addresses objects" /> <property name="gateway" alias="gw6" - nmcli-description="The gateway associated with this configuration. This is only meaningful if "addresses" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if "never-default" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See "ip4-auto-default-route"." /> + nmcli-description="The gateway associated with this configuration. This is only meaningful if "addresses" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if "never-default" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See "ip4-auto-default-route"." + format="IPv6 address" /> <property name="routes" - nmcli-description="Array of IP routes." /> + nmcli-description="Array of IP routes." + format="list of ipv6.routes objects" /> <property name="route-metric" - nmcli-description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." /> + nmcli-description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." + format="integer" + values="-1 - 4294967295" /> <property name="route-table" - nmcli-description="Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager." /> - <property name="routing-rules" /> + nmcli-description="Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager." + format="integer" + values="0 - 4294967295" + special-values="unspec (0), main (254)" /> + <property name="routing-rules" + format="list of ipv6.routing-rules objects" /> <property name="replace-local-rule" - nmcli-description="Connections will default to keep the autogenerated priority 0 local rule unless this setting is set to TRUE." /> + nmcli-description="Connections will default to keep the autogenerated priority 0 local rule unless this setting is set to TRUE." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="ignore-auto-routes" - nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used." /> + nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="ignore-auto-dns" - nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used." /> + nmcli-description="When "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="never-default" - nmcli-description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." /> + nmcli-description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="may-fail" - nmcli-description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." /> + nmcli-description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="required-timeout" - nmcli-description="The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero)." /> + nmcli-description="The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero)." + format="integer" + values="-1 - 2147483647" + special-values="default (-1), infinity (2147483647)" /> <property name="ip6-privacy" - nmcli-description="Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to "-1" (unknown) means fallback to global configuration "ipv6.ip6-privacy". If also global configuration is unspecified or set to "-1", fallback to read "/proc/sys/net/ipv6/conf/default/use_tempaddr". Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the "addr-gen-mode" property's "stable-privacy" setting as another way of avoiding host tracking with IPv6 addresses." /> + nmcli-description="Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to "-1" (unknown) means fallback to global configuration "ipv6.ip6-privacy". If also global configuration is unspecified or set to "-1", fallback to read "/proc/sys/net/ipv6/conf/default/use_tempaddr". Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the "addr-gen-mode" property's "stable-privacy" setting as another way of avoiding host tracking with IPv6 addresses." + format="choice (NMSettingIP6ConfigPrivacy)" + values="unknown (-1), disabled (0), prefer-public-addr (1), prefer-temp-addr (2)" /> <property name="addr-gen-mode" - nmcli-description="Configure method for creating the IPv6 interface identifer of addresses with RFC4862 IPv6 Stateless Address Autoconfiguration and Link Local addresses. The permitted values are: "eui64" (0), "stable-privacy" (1), "default" (3) or "default-or-eui64" (2). If the property is set to "eui64", the addresses will be generated using the interface token derived from hardware address. This makes the host part of the address to stay constant, making it possible to track the host's presence when it changes networks. The address changes when the interface hardware is replaced. If a duplicate address is detected, there is also no fallback to generate another address. When configured, the "ipv6.token" is used instead of the MAC address to generate addresses for stateless autoconfiguration. If the property is set to "stable-privacy", the interface identifier is generated as specified by RFC7217. This works by hashing a host specific key (see NetworkManager(8) manual), the interface name, the connection's "connection.stable-id" property and the address prefix. This improves privacy by making it harder to use the address to track the host's presence and the address is stable when the network interface hardware is replaced. The special values "default" and "default-or-eui64" will fallback to the global connection default as documented in the NetworkManager.conf(5) manual. If the global default is not specified, the fallback value is "stable-privacy" or "eui64", respectively. If not specified, when creating a new profile the default is "default". Note that this setting is distinct from the Privacy Extensions as configured by "ip6-privacy" property and it does not affect the temporary addresses configured with this option." /> + nmcli-description="Configure method for creating the IPv6 interface identifer of addresses with RFC4862 IPv6 Stateless Address Autoconfiguration and Link Local addresses. The permitted values are: "eui64" (0), "stable-privacy" (1), "default" (3) or "default-or-eui64" (2). If the property is set to "eui64", the addresses will be generated using the interface token derived from hardware address. This makes the host part of the address to stay constant, making it possible to track the host's presence when it changes networks. The address changes when the interface hardware is replaced. If a duplicate address is detected, there is also no fallback to generate another address. When configured, the "ipv6.token" is used instead of the MAC address to generate addresses for stateless autoconfiguration. If the property is set to "stable-privacy", the interface identifier is generated as specified by RFC7217. This works by hashing a host specific key (see NetworkManager(8) manual), the interface name, the connection's "connection.stable-id" property and the address prefix. This improves privacy by making it harder to use the address to track the host's presence and the address is stable when the network interface hardware is replaced. The special values "default" and "default-or-eui64" will fallback to the global connection default as documented in the NetworkManager.conf(5) manual. If the global default is not specified, the fallback value is "stable-privacy" or "eui64", respectively. If not specified, when creating a new profile the default is "default". Note that this setting is distinct from the Privacy Extensions as configured by "ip6-privacy" property and it does not affect the temporary addresses configured with this option." + format="choice (NMSettingIP6ConfigAddrGenMode)" + values="eui64 (0), stable-privacy (1), default-or-eui64 (2), default (3)" /> <property name="ra-timeout" - nmcli-description="A timeout for waiting Router Advertisements in seconds. If zero (the default), a globally configured default is used. If still unspecified, the timeout depends on the sysctl settings of the device. Set to 2147483647 (MAXINT32) for infinity." /> + nmcli-description="A timeout for waiting Router Advertisements in seconds. If zero (the default), a globally configured default is used. If still unspecified, the timeout depends on the sysctl settings of the device. Set to 2147483647 (MAXINT32) for infinity." + format="integer" + values="0 - 2147483647" + special-values="default (0), infinity (2147483647)" /> <property name="mtu" - nmcli-description="Maximum transmission unit size, in bytes. If zero (the default), the MTU is set automatically from router advertisements or is left equal to the link-layer MTU. If greater than the link-layer MTU, or greater than zero but less than the minimum IPv6 MTU of 1280, this value has no effect." /> + nmcli-description="Maximum transmission unit size, in bytes. If zero (the default), the MTU is set automatically from router advertisements or is left equal to the link-layer MTU. If greater than the link-layer MTU, or greater than zero but less than the minimum IPv6 MTU of 1280, this value has no effect." + format="integer" + special-values="auto" /> <property name="dhcp-pd-hint" - nmcli-description="A IPv6 address followed by a slash and a prefix length. If set, the value is sent to the DHCPv6 server as hint indicating the prefix delegation (IA_PD) we want to receive. To only hint a prefix length without prefix, set the address part to the zero address (for example "::/60")." /> + nmcli-description="A IPv6 address followed by a slash and a prefix length. If set, the value is sent to the DHCPv6 server as hint indicating the prefix delegation (IA_PD) we want to receive. To only hint a prefix length without prefix, set the address part to the zero address (for example "::/60")." + format="string" /> <property name="dhcp-duid" - nmcli-description="A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value "lease" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and "dhclient" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values "llt" and "ll" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values "stable-llt", "stable-ll" and "stable-uuid" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the "${DEVICE}" or "${MAC}" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of "stable-ll" and "stable-llt" will be a generated address derived from the stable id. The DUID-LLT time value in the "stable-llt" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in "llt"). When the property is unset, the global value provided for "ipv6.dhcp-duid" is used. If no global value is provided, the default "lease" value is assumed." /> + nmcli-description="A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value "lease" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and "dhclient" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values "llt" and "ll" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values "stable-llt", "stable-ll" and "stable-uuid" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the "${DEVICE}" or "${MAC}" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of "stable-ll" and "stable-llt" will be a generated address derived from the stable id. The DUID-LLT time value in the "stable-llt" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in "llt"). When the property is unset, the global value provided for "ipv6.dhcp-duid" is used. If no global value is provided, the default "lease" value is assumed." + format="string" /> <property name="dhcp-iaid" - nmcli-description="A string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values "mac", "perm-mac", "ifname" or "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". For DHCPv4, the IAID is only used with "ipv4.dhcp-client-id" values "duid" and "ipv6-duid" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the "internal" DHCPv6 plugin. The "dhclient" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device." /> + nmcli-description="A string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The string can be a 32-bit number (either decimal, hexadecimal or as colon separated hexadecimal numbers). Alternatively it can be set to the special values "mac", "perm-mac", "ifname" or "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". For DHCPv4, the IAID is only used with "ipv4.dhcp-client-id" values "duid" and "ipv6-duid" to generate the client-id. For DHCPv6, note that at the moment this property is only supported by the "internal" DHCPv6 plugin. The "dhclient" DHCPv6 plugin always derives the IAID from the MAC address. The actually used DHCPv6 IAID for a currently activated interface is exposed in the lease information of the device." + format="string" /> <property name="dhcp-timeout" - nmcli-description="A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity." /> + nmcli-description="A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity." + format="integer" + values="0 - 2147483647" + special-values="default (0), infinity (2147483647)" /> <property name="dhcp-send-hostname" - nmcli-description="If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." /> + nmcli-description="If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="dhcp-hostname" - nmcli-description="If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time." /> + nmcli-description="If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time." + format="string" /> <property name="dhcp-hostname-flags" - nmcli-description="Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests." /> + nmcli-description="Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are "fqdn-serv-update" (0x1), "fqdn-encoded" (0x2) and "fqdn-no-update" (0x4). When no FQDN flag is set and "fqdn-clear-flags" (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and "fqdn-clear-flags" (0x8) is not set, the standard FQDN flags are set in the request: "fqdn-serv-update" (0x1), "fqdn-encoded" (0x2) for IPv4 and "fqdn-serv-update" (0x1) for IPv6. When this property is set to the default value "none" (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also "none" (0x0), then the standard FQDN flags described above are sent in the DHCP requests." + format="flags (NMDhcpHostnameFlags)" + values="none (0x0), fqdn-serv-update (0x1), fqdn-encoded (0x2), fqdn-no-update (0x4), fqdn-clear-flags (0x8)" /> <property name="auto-route-ext-gw" - nmcli-description="VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect." /> + nmcli-description="VPN connections will default to add the route automatically unless this setting is set to FALSE. For other connection types, adding such an automatic route is currently not supported and setting this to TRUE has no effect." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="token" - nmcli-description="Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode. When set, the token is used as IPv6 interface identifier instead of the hardware address. This only applies to addresses from stateless autoconfiguration, not to IPv6 link local addresses." /> + nmcli-description="Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode. When set, the token is used as IPv6 interface identifier instead of the hardware address. This only applies to addresses from stateless autoconfiguration, not to IPv6 link local addresses." + format="string" /> </setting> <setting name="link" > <property name="gso-max-segments" - nmcli-description="The maximum segments of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." /> + nmcli-description="The maximum segments of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." + format="integer" + values="-1 - 4294967295" + special-values="default (-1)" /> <property name="gso-max-size" - nmcli-description="The maximum size of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." /> + nmcli-description="The maximum size of a Generic Segment Offload packet the device should accept. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." + format="integer" + values="-1 - 4294967295" + special-values="default (-1)" /> <property name="gro-max-size" - nmcli-description="The maximum size of a packet built by the Generic Receive Offload stack for this device. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." /> + nmcli-description="The maximum size of a packet built by the Generic Receive Offload stack for this device. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." + format="integer" + values="-1 - 4294967295" + special-values="default (-1)" /> <property name="tx-queue-length" - nmcli-description="The size of the transmit queue for the device, in number of packets. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." /> + nmcli-description="The size of the transmit queue for the device, in number of packets. The value must be between 0 and 4294967295. When set to -1, the existing value is preserved." + format="integer" + values="-1 - 4294967295" + special-values="default (-1)" /> </setting> <setting name="loopback" > <property name="mtu" alias="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." + format="integer" + special-values="auto" /> </setting> <setting name="macsec" > <property name="parent" alias="dev" - nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this MACSEC interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property." /> + nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this MACSEC interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property." + format="string" /> <property name="mode" alias="mode" - nmcli-description="Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained." /> + nmcli-description="Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained." + format="choice (NMSettingMacsecMode)" + values="psk (0), eap (1)" /> <property name="encrypt" alias="encrypt" - nmcli-description="Whether the transmitted traffic must be encrypted." /> + nmcli-description="Whether the transmitted traffic must be encrypted." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="mka-cak" alias="cak" - nmcli-description="The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement. Must be a string of 32 hexadecimal characters." /> + nmcli-description="The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement. Must be a string of 32 hexadecimal characters." + format="string" /> <property name="mka-cak-flags" - nmcli-description="Flags indicating how to handle the "mka-cak" property." /> + nmcli-description="Flags indicating how to handle the "mka-cak" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="mka-ckn" alias="ckn" - nmcli-description="The pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement. Must be a string of hexadecimal characters with a even length between 2 and 64." /> + nmcli-description="The pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement. Must be a string of hexadecimal characters with a even length between 2 and 64." + format="string" /> <property name="port" alias="port" - nmcli-description="The port component of the SCI (Secure Channel Identifier), between 1 and 65534." /> + nmcli-description="The port component of the SCI (Secure Channel Identifier), between 1 and 65534." + format="integer" + values="1 - 65534" /> <property name="validation" - nmcli-description="Specifies the validation mode for incoming frames." /> + nmcli-description="Specifies the validation mode for incoming frames." + format="choice (NMSettingMacsecValidation)" + values="disable (0), check (1), strict (2)" /> <property name="send-sci" - nmcli-description="Specifies whether the SCI (Secure Channel Identifier) is included in every packet." /> + nmcli-description="Specifies whether the SCI (Secure Channel Identifier) is included in every packet." + format="boolean" + values="true/yes/on, false/no/off" /> </setting> <setting name="macvlan" > <property name="parent" alias="dev" - nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this MAC-VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property." /> + nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this MAC-VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property." + format="string" /> <property name="mode" alias="mode" - nmcli-description="The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device." /> + nmcli-description="The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device." + format="choice (NMSettingMacvlanMode)" + values="vepa (1), bridge (2), private (3), passthru (4), source (5)" /> <property name="promiscuous" - nmcli-description="Whether the interface should be put in promiscuous mode." /> + nmcli-description="Whether the interface should be put in promiscuous mode." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="tap" alias="tap" - nmcli-description="Whether the interface should be a MACVTAP." /> + nmcli-description="Whether the interface should be a MACVTAP." + format="boolean" + values="true/yes/on, false/no/off" /> </setting> <setting name="match" > <property name="interface-name" - nmcli-description="A list of interface names to match. Each element is a shell wildcard pattern. An element can be prefixed with a pipe symbol (|) or an ampersand (&). The former means that the element is optional and the latter means that it is mandatory. If there are any optional elements, than the match evaluates to true if at least one of the optional element matches (logical OR). If there are any mandatory elements, then they all must match (logical AND). By default, an element is optional. This means that an element "foo" behaves the same as "|foo". An element can also be inverted with exclamation mark (!) between the pipe symbol (or the ampersand) and before the pattern. Note that "!foo" is a shortcut for the mandatory match "&!foo". Finally, a backslash can be used at the beginning of the element (after the optional special characters) to escape the start of the pattern. For example, "&\!a" is an mandatory match for literally "!a"." /> + nmcli-description="A list of interface names to match. Each element is a shell wildcard pattern. An element can be prefixed with a pipe symbol (|) or an ampersand (&). The former means that the element is optional and the latter means that it is mandatory. If there are any optional elements, than the match evaluates to true if at least one of the optional element matches (logical OR). If there are any mandatory elements, then they all must match (logical AND). By default, an element is optional. This means that an element "foo" behaves the same as "|foo". An element can also be inverted with exclamation mark (!) between the pipe symbol (or the ampersand) and before the pattern. Note that "!foo" is a shortcut for the mandatory match "&!foo". Finally, a backslash can be used at the beginning of the element (after the optional special characters) to escape the start of the pattern. For example, "&\!a" is an mandatory match for literally "!a"." + format="list of strings" /> <property name="kernel-command-line" - nmcli-description="A list of kernel command line arguments to match. This may be used to check whether a specific kernel command line option is set (or unset, if prefixed with the exclamation mark). The argument must either be a single word, or an assignment (i.e. two words, joined by "="). In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is looked for with right and left hand side matching. Wildcard patterns are not supported. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the match." /> + nmcli-description="A list of kernel command line arguments to match. This may be used to check whether a specific kernel command line option is set (or unset, if prefixed with the exclamation mark). The argument must either be a single word, or an assignment (i.e. two words, joined by "="). In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is looked for with right and left hand side matching. Wildcard patterns are not supported. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the match." + format="list of strings" /> <property name="driver" - nmcli-description="A list of driver names to match. Each element is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the pattern." /> + nmcli-description="A list of driver names to match. Each element is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the pattern." + format="list of strings" /> <property name="path" - nmcli-description="A list of paths to match against the ID_PATH udev property of devices. ID_PATH represents the topological persistent path of a device. It typically contains a subsystem string (pci, usb, platform, etc.) and a subsystem-specific identifier. For PCI devices the path has the form "pci-$domain:$bus:$device.$function", where each variable is an hexadecimal value; for example "pci-0000:0a:00.0". The path of a device can be obtained with "udevadm info /sys/class/net/$dev | grep ID_PATH=" or by looking at the "path" property exported by NetworkManager ("nmcli -f general.path device show $dev"). Each element of the list is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the pattern." /> + nmcli-description="A list of paths to match against the ID_PATH udev property of devices. ID_PATH represents the topological persistent path of a device. It typically contains a subsystem string (pci, usb, platform, etc.) and a subsystem-specific identifier. For PCI devices the path has the form "pci-$domain:$bus:$device.$function", where each variable is an hexadecimal value; for example "pci-0000:0a:00.0". The path of a device can be obtained with "udevadm info /sys/class/net/$dev | grep ID_PATH=" or by looking at the "path" property exported by NetworkManager ("nmcli -f general.path device show $dev"). Each element of the list is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the pattern." + format="list of strings" /> </setting> <setting name="ovs-bridge" > <property name="fail-mode" - nmcli-description="The bridge failure mode. One of "secure", "standalone" or empty." /> + nmcli-description="The bridge failure mode. One of "secure", "standalone" or empty." + format="string" + values="secure, standalone" /> <property name="mcast-snooping-enable" - nmcli-description="Enable or disable multicast snooping." /> + nmcli-description="Enable or disable multicast snooping." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="rstp-enable" - nmcli-description="Enable or disable RSTP." /> + nmcli-description="Enable or disable RSTP." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="stp-enable" - nmcli-description="Enable or disable STP." /> + nmcli-description="Enable or disable STP." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="datapath-type" - nmcli-description="The data path type. One of "system", "netdev" or empty." /> + nmcli-description="The data path type. One of "system", "netdev" or empty." + format="string" + values="system, netdev" /> </setting> <setting name="ovs-dpdk" > <property name="devargs" - nmcli-description="Open vSwitch DPDK device arguments." /> + nmcli-description="Open vSwitch DPDK device arguments." + format="string" /> <property name="n-rxq" - nmcli-description="Open vSwitch DPDK number of rx queues. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures one queue." /> + nmcli-description="Open vSwitch DPDK number of rx queues. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures one queue." + format="integer" + values="0 - 4294967295" /> <property name="n-rxq-desc" - nmcli-description="The rx queue size (number of rx descriptors) for DPDK ports. Must be zero or a power of 2 between 1 and 4096, and supported by the hardware. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures 2048 descriptors." /> + nmcli-description="The rx queue size (number of rx descriptors) for DPDK ports. Must be zero or a power of 2 between 1 and 4096, and supported by the hardware. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures 2048 descriptors." + format="integer" + values="0 - 4096" /> <property name="n-txq-desc" - nmcli-description="The tx queue size (number of tx descriptors) for DPDK ports. Must be zero or a power of 2 between 1 and 4096, and supported by the hardware. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures 2048 descriptors." /> + nmcli-description="The tx queue size (number of tx descriptors) for DPDK ports. Must be zero or a power of 2 between 1 and 4096, and supported by the hardware. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures 2048 descriptors." + format="integer" + values="0 - 4096" /> </setting> <setting name="ovs-external-ids" > </setting> <setting name="ovs-interface" > <property name="type" - nmcli-description="The interface type. Either "internal", "system", "patch", "dpdk", or empty." /> + nmcli-description="The interface type. Either "internal", "system", "patch", "dpdk", or empty." + format="string" + values="internal, system, patch, dpdk" /> <property name="ofport-request" - nmcli-description="Open vSwitch openflow port number. Defaults to zero which means that port number will not be specified and it will be chosen randomly by ovs. OpenFlow ports are the network interfaces for passing packets between OpenFlow processing and the rest of the network. OpenFlow switches connect logically to each other via their OpenFlow ports." /> + nmcli-description="Open vSwitch openflow port number. Defaults to zero which means that port number will not be specified and it will be chosen randomly by ovs. OpenFlow ports are the network interfaces for passing packets between OpenFlow processing and the rest of the network. OpenFlow switches connect logically to each other via their OpenFlow ports." + format="integer" + values="0 - 65279" /> </setting> <setting name="ovs-other-config" > </setting> <setting name="ovs-patch" > <property name="peer" - nmcli-description="Specifies the name of the interface for the other side of the patch. The patch on the other side must also set this interface as peer." /> + nmcli-description="Specifies the name of the interface for the other side of the patch. The patch on the other side must also set this interface as peer." + format="string" /> </setting> <setting name="ovs-port" > <property name="vlan-mode" - nmcli-description="The VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk", "dot1q-tunnel" or unset." /> + nmcli-description="The VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk", "dot1q-tunnel" or unset." + format="string" + values="access, native-tagged, native-untagged, trunk, dot1q-tunnel" /> <property name="trunks" - nmcli-description="A list of VLAN ranges that this port trunks. The property is valid only for ports with mode "trunk", "native-tagged", or "native-untagged port". If it is empty, the port trunks all VLANs." /> + nmcli-description="A list of VLAN ranges that this port trunks. The property is valid only for ports with mode "trunk", "native-tagged", or "native-untagged port". If it is empty, the port trunks all VLANs." + format="list of ovs-port.trunks objects" /> <property name="tag" - nmcli-description="The VLAN tag in the range 0-4095." /> + nmcli-description="The VLAN tag in the range 0-4095." + format="integer" + values="0 - 4095" /> <property name="lacp" - nmcli-description="LACP mode. One of "active", "off", or "passive"." /> + nmcli-description="LACP mode. One of "active", "off", or "passive"." + format="string" + values="active, off, passive" /> <property name="bond-mode" - nmcli-description="Bonding mode. One of "active-backup", "balance-slb", or "balance-tcp"." /> + nmcli-description="Bonding mode. One of "active-backup", "balance-slb", or "balance-tcp"." + format="string" + values="active-backup, balance-slb, balance-tcp" /> <property name="bond-updelay" - nmcli-description="The time port must be active before it starts forwarding traffic." /> + nmcli-description="The time port must be active before it starts forwarding traffic." + format="integer" + values="0 - 4294967295" /> <property name="bond-downdelay" - nmcli-description="The time port must be inactive in order to be considered down." /> + nmcli-description="The time port must be inactive in order to be considered down." + format="integer" + values="0 - 4294967295" /> </setting> <setting name="ppp" > <property name="noauth" - nmcli-description="If TRUE, do not require the other side (usually the PPP server) to authenticate itself to the client. If FALSE, require authentication from the remote side. In almost all cases, this should be TRUE." /> + nmcli-description="If TRUE, do not require the other side (usually the PPP server) to authenticate itself to the client. If FALSE, require authentication from the remote side. In almost all cases, this should be TRUE." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="refuse-eap" - nmcli-description="If TRUE, the EAP authentication method will not be used." /> + nmcli-description="If TRUE, the EAP authentication method will not be used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="refuse-pap" - nmcli-description="If TRUE, the PAP authentication method will not be used." /> + nmcli-description="If TRUE, the PAP authentication method will not be used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="refuse-chap" - nmcli-description="If TRUE, the CHAP authentication method will not be used." /> + nmcli-description="If TRUE, the CHAP authentication method will not be used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="refuse-mschap" - nmcli-description="If TRUE, the MSCHAP authentication method will not be used." /> + nmcli-description="If TRUE, the MSCHAP authentication method will not be used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="refuse-mschapv2" - nmcli-description="If TRUE, the MSCHAPv2 authentication method will not be used." /> + nmcli-description="If TRUE, the MSCHAPv2 authentication method will not be used." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="nobsdcomp" - nmcli-description="If TRUE, BSD compression will not be requested." /> + nmcli-description="If TRUE, BSD compression will not be requested." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="nodeflate" - nmcli-description="If TRUE, "deflate" compression will not be requested." /> + nmcli-description="If TRUE, "deflate" compression will not be requested." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="no-vj-comp" - nmcli-description="If TRUE, Van Jacobsen TCP header compression will not be requested." /> + nmcli-description="If TRUE, Van Jacobsen TCP header compression will not be requested." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="require-mppe" - nmcli-description="If TRUE, MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session. If either 64-bit or 128-bit MPPE is not available the session will fail. Note that MPPE is not used on mobile broadband connections." /> + nmcli-description="If TRUE, MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session. If either 64-bit or 128-bit MPPE is not available the session will fail. Note that MPPE is not used on mobile broadband connections." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="require-mppe-128" - nmcli-description="If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session, and the "require-mppe" property must also be set to TRUE. If 128-bit MPPE is not available the session will fail." /> + nmcli-description="If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session, and the "require-mppe" property must also be set to TRUE. If 128-bit MPPE is not available the session will fail." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="mppe-stateful" - nmcli-description="If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE." /> + nmcli-description="If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="crtscts" - nmcli-description="If TRUE, specify that pppd should set the serial port to use hardware flow control with RTS and CTS signals. This value should normally be set to FALSE." /> + nmcli-description="If TRUE, specify that pppd should set the serial port to use hardware flow control with RTS and CTS signals. This value should normally be set to FALSE." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="baud" - nmcli-description="If non-zero, instruct pppd to set the serial port to the specified baudrate. This value should normally be left as 0 to automatically choose the speed." /> + nmcli-description="If non-zero, instruct pppd to set the serial port to the specified baudrate. This value should normally be left as 0 to automatically choose the speed." + format="integer" + values="0 - 4294967295" /> <property name="mru" - nmcli-description="If non-zero, instruct pppd to request that the peer send packets no larger than the specified size. If non-zero, the MRU should be between 128 and 16384." /> + nmcli-description="If non-zero, instruct pppd to request that the peer send packets no larger than the specified size. If non-zero, the MRU should be between 128 and 16384." + format="integer" + values="0 - 16384" /> <property name="mtu" - nmcli-description="If non-zero, instruct pppd to send packets no larger than the specified size." /> + nmcli-description="If non-zero, instruct pppd to send packets no larger than the specified size." + format="integer" + special-values="auto" /> <property name="lcp-echo-failure" - nmcli-description="If non-zero, instruct pppd to presume the connection to the peer has failed if the specified number of LCP echo-requests go unanswered by the peer. The "lcp-echo-interval" property must also be set to a non-zero value if this property is used." /> + nmcli-description="If non-zero, instruct pppd to presume the connection to the peer has failed if the specified number of LCP echo-requests go unanswered by the peer. The "lcp-echo-interval" property must also be set to a non-zero value if this property is used." + format="integer" + values="0 - 4294967295" /> <property name="lcp-echo-interval" - nmcli-description="If non-zero, instruct pppd to send an LCP echo-request frame to the peer every n seconds (where n is the specified value). Note that some PPP peers will respond to echo requests and some will not, and it is not possible to autodetect this." /> + nmcli-description="If non-zero, instruct pppd to send an LCP echo-request frame to the peer every n seconds (where n is the specified value). Note that some PPP peers will respond to echo requests and some will not, and it is not possible to autodetect this." + format="integer" + values="0 - 4294967295" /> </setting> <setting name="pppoe" > <property name="parent" alias="parent" - nmcli-description="If given, specifies the parent interface name on which this PPPoE connection should be created. If this property is not specified, the connection is activated on the interface specified in "interface-name" of NMSettingConnection." /> + nmcli-description="If given, specifies the parent interface name on which this PPPoE connection should be created. If this property is not specified, the connection is activated on the interface specified in "interface-name" of NMSettingConnection." + format="string" /> <property name="service" alias="service" - nmcli-description="If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required." /> + nmcli-description="If specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required." + format="string" /> <property name="username" alias="username" - nmcli-description="Username used to authenticate with the PPPoE service." /> + nmcli-description="Username used to authenticate with the PPPoE service." + format="string" /> <property name="password" alias="password" - nmcli-description="Password used to authenticate with the PPPoE service." /> + nmcli-description="Password used to authenticate with the PPPoE service." + format="string" /> <property name="password-flags" - nmcli-description="Flags indicating how to handle the "password" property." /> + nmcli-description="Flags indicating how to handle the "password" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> </setting> <setting name="proxy" > <property name="method" alias="method" - nmcli-description="Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)" /> + nmcli-description="Method for proxy configuration, Default is "none" (0)" + format="choice (NMSettingProxyMethod)" + values="none (0), auto (1)" /> <property name="browser-only" alias="browser-only" - nmcli-description="Whether the proxy configuration is for browser only." /> + nmcli-description="Whether the proxy configuration is for browser only." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="pac-url" alias="pac-url" - nmcli-description="PAC URL for obtaining PAC file." /> + nmcli-description="PAC URL for obtaining PAC file." + format="string" /> <property name="pac-script" alias="pac-script" - nmcli-description="The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two." /> + nmcli-description="The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two." + format="string" /> </setting> <setting name="serial" > <property name="baud" - nmcli-description="Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed." /> + nmcli-description="Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed." + format="integer" + values="0 - 4294967295" /> <property name="bits" - nmcli-description="Byte-width of the serial communication. The 8 in "8n1" for example." /> + nmcli-description="Byte-width of the serial communication. The 8 in "8n1" for example." + format="integer" + values="5 - 8" /> <property name="parity" - nmcli-description="Parity setting of the serial port." /> + nmcli-description="Parity setting of the serial port." + format="choice (NMSettingSerialParity)" + values="none/N/n (0), even/E/e (1), odd/O/o (2)" /> <property name="stopbits" - nmcli-description="Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example." /> + nmcli-description="Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example." + format="integer" + values="1 - 2" /> <property name="send-delay" - nmcli-description="Time to delay between each byte sent to the modem, in microseconds." /> + nmcli-description="Time to delay between each byte sent to the modem, in microseconds." + format="integer" + values="0 - 18446744073709551615" /> </setting> <setting name="sriov" > <property name="total-vfs" - nmcli-description="The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection." /> + nmcli-description="The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection." + format="integer" + values="0 - 4294967295" /> <property name="vfs" - nmcli-description="Array of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: "INDEX [ATTR=VALUE[ ATTR=VALUE]...]". for example: "2 mac=00:11:22:33:44:55 spoof-check=true". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The "vlans" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form "ID[.PRIORITY[.PROTO]]". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad." /> + nmcli-description="Array of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: "INDEX [ATTR=VALUE[ ATTR=VALUE]...]". for example: "2 mac=00:11:22:33:44:55 spoof-check=true". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The "vlans" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form "ID[.PRIORITY[.PROTO]]". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad." + format="list of sriov.vfs objects" /> <property name="autoprobe-drivers" - nmcli-description="Whether to autoprobe virtual functions by a compatible driver. If set to NM_TERNARY_TRUE (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to NM_TERNARY_FALSE (0), VFs will not be claimed and no network interfaces will be created for them. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_TRUE (1)." /> + nmcli-description="Whether to autoprobe virtual functions by a compatible driver. If set to "true" (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to "false" (0), VFs will not be claimed and no network interfaces will be created for them. When set to "default" (-1), the global default is used; in case the global default is unspecified it is assumed to be "true" (1)." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> </setting> <setting name="tc" > <property name="qdiscs" - nmcli-description="Array of TC queueing disciplines. When the "tc" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the "net.core.default_qdisc" sysctl. If the "tc" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface." /> + nmcli-description="Array of TC queueing disciplines. When the "tc" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the "net.core.default_qdisc" sysctl. If the "tc" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface." + format="list of tc.qdiscs objects" /> <property name="tfilters" - nmcli-description="Array of TC traffic filters. When the "tc" setting is present, filters from this property are applied upon activation. If the property is empty, NetworkManager removes all the filters. If the "tc" setting is not present, NetworkManager doesn't touch the filters present on the interface." /> + nmcli-description="Array of TC traffic filters. When the "tc" setting is present, filters from this property are applied upon activation. If the property is empty, NetworkManager removes all the filters. If the "tc" setting is not present, NetworkManager doesn't touch the filters present on the interface." + format="list of tc.tfilters objects" /> </setting> <setting name="team" > <property name="config" alias="config" - nmcli-description="The JSON configuration for the team network interface. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details." /> + nmcli-description="The JSON configuration for the team network interface. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details." + format="string" /> <property name="notify-peers-count" - nmcli-description="Corresponds to the teamd notify_peers.count." /> + nmcli-description="Corresponds to the teamd notify_peers.count." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), disabled (0)" /> <property name="notify-peers-interval" - nmcli-description="Corresponds to the teamd notify_peers.interval." /> + nmcli-description="Corresponds to the teamd notify_peers.interval." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (0)" /> <property name="mcast-rejoin-count" - nmcli-description="Corresponds to the teamd mcast_rejoin.count." /> + nmcli-description="Corresponds to the teamd mcast_rejoin.count." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), disabled (0)" /> <property name="mcast-rejoin-interval" - nmcli-description="Corresponds to the teamd mcast_rejoin.interval." /> + nmcli-description="Corresponds to the teamd mcast_rejoin.interval." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (0)" /> <property name="runner" - nmcli-description="Corresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random"." /> + nmcli-description="Corresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random"." + format="string" + values="broadcast, roundrobin, random, activebackup, loadbalance, lacp" /> <property name="runner-hwaddr-policy" - nmcli-description="Corresponds to the teamd runner.hwaddr_policy." /> + nmcli-description="Corresponds to the teamd runner.hwaddr_policy." + format="string" + values="same_all, by_active, only_active" /> <property name="runner-tx-hash" - nmcli-description="Corresponds to the teamd runner.tx_hash." /> + nmcli-description="Corresponds to the teamd runner.tx_hash." + format="list of strings" + values="eth, vlan, ipv4, ipv6, ip, l3, tcp, udp, sctp, l4" /> <property name="runner-tx-balancer" - nmcli-description="Corresponds to the teamd runner.tx_balancer.name." /> + nmcli-description="Corresponds to the teamd runner.tx_balancer.name." + format="string" + values="basic" /> <property name="runner-tx-balancer-interval" - nmcli-description="Corresponds to the teamd runner.tx_balancer.interval." /> + nmcli-description="Corresponds to the teamd runner.tx_balancer.interval." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (50)" /> <property name="runner-active" - nmcli-description="Corresponds to the teamd runner.active." /> + nmcli-description="Corresponds to the teamd runner.active." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="runner-fast-rate" - nmcli-description="Corresponds to the teamd runner.fast_rate." /> + nmcli-description="Corresponds to the teamd runner.fast_rate." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="runner-sys-prio" - nmcli-description="Corresponds to the teamd runner.sys_prio." /> + nmcli-description="Corresponds to the teamd runner.sys_prio." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (65535)" /> <property name="runner-min-ports" - nmcli-description="Corresponds to the teamd runner.min_ports." /> + nmcli-description="Corresponds to the teamd runner.min_ports." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (1)" /> <property name="runner-agg-select-policy" - nmcli-description="Corresponds to the teamd runner.agg_select_policy." /> + nmcli-description="Corresponds to the teamd runner.agg_select_policy." + format="string" + values="lacp_prio, lacp_prio_stable, bandwidth, count, port_config" /> <property name="link-watchers" - nmcli-description="Link watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details." /> + nmcli-description="Link watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details." + format="list of team.link-watchers objects" /> </setting> <setting name="team-port" > <property name="config" alias="config" - nmcli-description="The JSON configuration for the team port. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details." /> + nmcli-description="The JSON configuration for the team port. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details." + format="string" /> <property name="queue-id" - nmcli-description="Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config." /> + nmcli-description="Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (0)" /> <property name="prio" - nmcli-description="Corresponds to the teamd ports.PORTIFNAME.prio." /> + nmcli-description="Corresponds to the teamd ports.PORTIFNAME.prio." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (0), default (0)" /> <property name="sticky" - nmcli-description="Corresponds to the teamd ports.PORTIFNAME.sticky." /> + nmcli-description="Corresponds to the teamd ports.PORTIFNAME.sticky." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="lacp-prio" - nmcli-description="Corresponds to the teamd ports.PORTIFNAME.lacp_prio." /> + nmcli-description="Corresponds to the teamd ports.PORTIFNAME.lacp_prio." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (255)" /> <property name="lacp-key" - nmcli-description="Corresponds to the teamd ports.PORTIFNAME.lacp_key." /> + nmcli-description="Corresponds to the teamd ports.PORTIFNAME.lacp_key." + format="integer" + values="-2147483648 - 2147483647" + special-values="unset (-1), default (0)" /> <property name="link-watchers" - nmcli-description="Link watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details." /> + nmcli-description="Link watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details." + format="list of team-port.link-watchers objects" /> </setting> <setting name="tun" > <property name="mode" alias="mode" - nmcli-description="The operating mode of the virtual device. Allowed values are NM_SETTING_TUN_MODE_TUN (1) to create a layer 3 device and NM_SETTING_TUN_MODE_TAP (2) to create an Ethernet-like layer 2 one." /> + nmcli-description="The operating mode of the virtual device. Allowed values are "tun" (1) to create a layer 3 device and "tap" (2) to create an Ethernet-like layer 2 one." + format="choice (NMSettingTunMode)" + values="tun (1), tap (2)" /> <property name="owner" alias="owner" - nmcli-description="The user ID which will own the device. If set to NULL everyone will be able to use the device." /> + nmcli-description="The user ID which will own the device. If set to NULL everyone will be able to use the device." + format="string" /> <property name="group" alias="group" - nmcli-description="The group ID which will own the device. If set to NULL everyone will be able to use the device." /> + nmcli-description="The group ID which will own the device. If set to NULL everyone will be able to use the device." + format="string" /> <property name="pi" alias="pi" - nmcli-description="If TRUE the interface will prepend a 4 byte header describing the physical interface to the packets." /> + nmcli-description="If TRUE the interface will prepend a 4 byte header describing the physical interface to the packets." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="vnet-hdr" alias="vnet-hdr" - nmcli-description="If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header." /> + nmcli-description="If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="multi-queue" alias="multi-queue" - nmcli-description="If the property is set to TRUE, the interface will support multiple file descriptors (queues) to parallelize packet sending or receiving. Otherwise, the interface will only support a single queue." /> + nmcli-description="If the property is set to TRUE, the interface will support multiple file descriptors (queues) to parallelize packet sending or receiving. Otherwise, the interface will only support a single queue." + format="boolean" + values="true/yes/on, false/no/off" /> </setting> <setting name="user" > </setting> <setting name="veth" > <property name="peer" alias="peer" - nmcli-description="This property specifies the peer interface name of the veth. This property is mandatory." /> + nmcli-description="This property specifies the peer interface name of the veth. This property is mandatory." + format="string" /> </setting> <setting name="vlan" > <property name="parent" alias="dev" - nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property." /> + nmcli-description="If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property." + format="string" /> <property name="id" alias="id" - nmcli-description="The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095." /> + nmcli-description="The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095." + format="integer" + values="0 - 4095" /> <property name="flags" alias="flags" - nmcli-description="One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state). NM_VLAN_FLAG_MVRP (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0." /> + nmcli-description="One or more flags which control the behavior and features of the VLAN interface. Flags include "reorder-headers" (0x1) (reordering of output packet headers), "gvrp" (0x2) (use of the GVRP protocol), and "loose-binding" (0x4) (loose binding of the interface to its master device's operating state). "mvrp" (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0." + format="flags (NMVlanFlags)" + values="reorder-headers (0x1), gvrp (0x2), loose-binding (0x4), mvrp (0x8)" /> <property name="protocol" - nmcli-description="Specifies the VLAN protocol to use for encapsulation. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'." /> + nmcli-description="Specifies the VLAN protocol to use for encapsulation. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'." + format="string" + values="802.1Q, 802.1ad" /> <property name="ingress-priority-map" alias="ingress" - nmcli-description="For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3"." /> + nmcli-description="For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3"." + format="list of vlan.ingress-priority-map objects" /> <property name="egress-priority-map" alias="egress" - nmcli-description="For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3"." /> + nmcli-description="For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3"." + format="list of vlan.egress-priority-map objects" /> </setting> <setting name="vpn" > <property name="service-type" alias="vpn-type" - nmcli-description="D-Bus service name of the VPN plugin that this setting uses to connect to its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc plugin." /> + nmcli-description="D-Bus service name of the VPN plugin that this setting uses to connect to its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc plugin." + format="string" /> <property name="user-name" alias="user" - nmcli-description="If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection." /> + nmcli-description="If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection." + format="string" /> <property name="data" - nmcli-description="Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings." /> + nmcli-description="Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings." + format="list of key/value options" /> <property name="secrets" - nmcli-description="Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings." /> + nmcli-description="Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings." + format="list of key/value options" /> <property name="persistent" - nmcli-description="If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected." /> + nmcli-description="If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="timeout" - nmcli-description="Timeout for the VPN service to establish the connection. Some services may take quite a long time to connect. Value of 0 means a default timeout, which is 60 seconds (unless overridden by vpn.timeout in configuration file). Values greater than zero mean timeout in seconds." /> + nmcli-description="Timeout for the VPN service to establish the connection. Some services may take quite a long time to connect. Value of 0 means a default timeout, which is 60 seconds (unless overridden by vpn.timeout in configuration file). Values greater than zero mean timeout in seconds." + format="integer" + values="0 - 4294967295" /> </setting> <setting name="vrf" > <property name="table" alias="table" - nmcli-description="The routing table for this VRF." /> + nmcli-description="The routing table for this VRF." + format="integer" + values="0 - 4294967295" /> </setting> <setting name="vxlan" > <property name="parent" alias="dev" - nmcli-description="If given, specifies the parent interface name or parent connection UUID." /> + nmcli-description="If given, specifies the parent interface name or parent connection UUID." + format="string" /> <property name="id" alias="id" - nmcli-description="Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use." /> + nmcli-description="Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use." + format="integer" + values="0 - 16777215" /> <property name="local" alias="local" - nmcli-description="If given, specifies the source IP address to use in outgoing packets." /> + nmcli-description="If given, specifies the source IP address to use in outgoing packets." + format="string" /> <property name="remote" alias="remote" - nmcli-description="Specifies the unicast destination IP address to use in outgoing packets when the destination link layer address is not known in the VXLAN device forwarding database, or the multicast IP address to join." /> + nmcli-description="Specifies the unicast destination IP address to use in outgoing packets when the destination link layer address is not known in the VXLAN device forwarding database, or the multicast IP address to join." + format="string" /> <property name="source-port-min" alias="source-port-min" - nmcli-description="Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint." /> + nmcli-description="Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint." + format="integer" + values="0 - 65535" /> <property name="source-port-max" alias="source-port-max" - nmcli-description="Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint." /> + nmcli-description="Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint." + format="integer" + values="0 - 65535" /> <property name="destination-port" alias="destination-port" - nmcli-description="Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint." /> + nmcli-description="Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint." + format="integer" + values="0 - 65535" /> <property name="tos" - nmcli-description="Specifies the TOS value to use in outgoing packets." /> + nmcli-description="Specifies the TOS value to use in outgoing packets." + format="integer" + values="0 - 255" /> <property name="ttl" - nmcli-description="Specifies the time-to-live value to use in outgoing packets." /> + nmcli-description="Specifies the time-to-live value to use in outgoing packets." + format="integer" + values="0 - 255" /> <property name="ageing" - nmcli-description="Specifies the lifetime in seconds of FDB entries learnt by the kernel." /> + nmcli-description="Specifies the lifetime in seconds of FDB entries learnt by the kernel." + format="integer" + values="0 - 4294967295" /> <property name="limit" - nmcli-description="Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries." /> + nmcli-description="Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries." + format="integer" + values="0 - 4294967295" /> <property name="learning" - nmcli-description="Specifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database." /> + nmcli-description="Specifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="proxy" - nmcli-description="Specifies whether ARP proxy is turned on." /> + nmcli-description="Specifies whether ARP proxy is turned on." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="rsc" - nmcli-description="Specifies whether route short circuit is turned on." /> + nmcli-description="Specifies whether route short circuit is turned on." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="l2-miss" - nmcli-description="Specifies whether netlink LL ADDR miss notifications are generated." /> + nmcli-description="Specifies whether netlink LL ADDR miss notifications are generated." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="l3-miss" - nmcli-description="Specifies whether netlink IP ADDR miss notifications are generated." /> + nmcli-description="Specifies whether netlink IP ADDR miss notifications are generated." + format="boolean" + values="true/yes/on, false/no/off" /> </setting> <setting name="wifi-p2p" > <property name="peer" alias="peer" - nmcli-description="The P2P device that should be connected to. Currently, this is the only way to create or join a group." /> + nmcli-description="The P2P device that should be connected to. Currently, this is the only way to create or join a group." + format="MAC address" /> <property name="wps-method" - nmcli-description="Flags indicating which mode of WPS is to be used. There's little point in changing the default setting as NetworkManager will automatically determine the best method to use." /> + nmcli-description="Flags indicating which mode of WPS is to be used. There's little point in changing the default setting as NetworkManager will automatically determine the best method to use." + format="flags (NMSettingWirelessSecurityWpsMethod)" + values="default (0x0), disabled (0x1), auto (0x2), pbc (0x4), pin (0x8)" /> <property name="wfd-ies" - nmcli-description="The Wi-Fi Display (WFD) Information Elements (IEs) to set. Wi-Fi Display requires a protocol specific information element to be set in certain Wi-Fi frames. These can be specified here for the purpose of establishing a connection. This setting is only useful when implementing a Wi-Fi Display client." /> + nmcli-description="The Wi-Fi Display (WFD) Information Elements (IEs) to set. Wi-Fi Display requires a protocol specific information element to be set in certain Wi-Fi frames. These can be specified here for the purpose of establishing a connection. This setting is only useful when implementing a Wi-Fi Display client." + format="bytes" /> </setting> <setting name="wimax" > <property name="mac-address" alias="mac" - nmcli-description="If specified, this connection will only apply to the WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing)." /> + nmcli-description="If specified, this connection will only apply to the WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing)." + format="string" /> <property name="network-name" alias="nsp" - nmcli-description="Network Service Provider (NSP) name of the WiMAX network this connection should use." /> + nmcli-description="Network Service Provider (NSP) name of the WiMAX network this connection should use." + format="MAC address" /> </setting> <setting name="wireguard" > <property name="private-key" - nmcli-description="The 256 bit private-key in base64 encoding." /> + nmcli-description="The 256 bit private-key in base64 encoding." + format="string" /> <property name="private-key-flags" - nmcli-description="Flags indicating how to handle the "private-key" property." /> + nmcli-description="Flags indicating how to handle the "private-key" property." + format="flags (NMSettingSecretFlags)" + values="none (0x0), agent-owned (0x1), not-saved (0x2), not-required (0x4)" /> <property name="listen-port" - nmcli-description="The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up." /> + nmcli-description="The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up." + format="integer" + values="0 - 65535" /> <property name="fwmark" - nmcli-description="The use of fwmark is optional and is by default off. Setting it to 0 disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note that "ip4-auto-default-route" or "ip6-auto-default-route" enabled, implies to automatically choose a fwmark." /> + nmcli-description="The use of fwmark is optional and is by default off. Setting it to 0 disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note that "ip4-auto-default-route" or "ip6-auto-default-route" enabled, implies to automatically choose a fwmark." + format="integer" + values="0 - 4294967295" /> <property name="peer-routes" - nmcli-description="Whether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is "0.0.0.0/0" or "::/0" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically." /> + nmcli-description="Whether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is "0.0.0.0/0" or "::/0" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically." + format="boolean" + values="true/yes/on, false/no/off" /> <property name="mtu" - nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments. If zero a default MTU is used. Note that contrary to wg-quick's MTU setting, this does not take into account the current routes at the time of activation." /> + nmcli-description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments. If zero a default MTU is used. Note that contrary to wg-quick's MTU setting, this does not take into account the current routes at the time of activation." + format="integer" + special-values="auto" /> <property name="ip4-auto-default-route" - nmcli-description="Whether to enable special handling of the IPv4 default route. If enabled, the IPv4 default route from wireguard.peer-routes will be placed to a dedicated routing-table and two policy routing rules will be added. The fwmark number is also used as routing-table for the default-route, and if fwmark is zero, an unused fwmark/table is chosen automatically. This corresponds to what wg-quick does with Table=auto and what WireGuard calls "Improved Rule-based Routing". Note that for this automatism to work, you usually don't want to set ipv4.gateway, because that will result in a conflicting default route. Leaving this at the default will enable this option automatically if ipv4.never-default is not set and there are any peers that use a default-route as allowed-ips. Since this automatism only makes sense if you also have a peer with an /0 allowed-ips, it is usually not necessary to enable this explicitly. However, you can disable it if you want to configure your own routing and rules." /> + nmcli-description="Whether to enable special handling of the IPv4 default route. If enabled, the IPv4 default route from wireguard.peer-routes will be placed to a dedicated routing-table and two policy routing rules will be added. The fwmark number is also used as routing-table for the default-route, and if fwmark is zero, an unused fwmark/table is chosen automatically. This corresponds to what wg-quick does with Table=auto and what WireGuard calls "Improved Rule-based Routing". Note that for this automatism to work, you usually don't want to set ipv4.gateway, because that will result in a conflicting default route. Leaving this at the default will enable this option automatically if ipv4.never-default is not set and there are any peers that use a default-route as allowed-ips. Since this automatism only makes sense if you also have a peer with an /0 allowed-ips, it is usually not necessary to enable this explicitly. However, you can disable it if you want to configure your own routing and rules." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> <property name="ip6-auto-default-route" - nmcli-description="Like ip4-auto-default-route, but for the IPv6 default route." /> + nmcli-description="Like ip4-auto-default-route, but for the IPv6 default route." + format="ternary" + values="true/yes/on, false/no/off, default/unknown" /> </setting> <setting name="wpan" > <property name="mac-address" alias="mac" - nmcli-description="If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches." /> + nmcli-description="If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches." + format="WPAN MAC address" /> <property name="short-address" alias="short-addr" - nmcli-description="Short IEEE 802.15.4 address to be used within a restricted environment." /> + nmcli-description="Short IEEE 802.15.4 address to be used within a restricted environment." + format="integer" + values="0 - 65535" + special-values="unset (0xffff)" /> <property name="pan-id" alias="pan-id" - nmcli-description="IEEE 802.15.4 Personal Area Network (PAN) identifier." /> + nmcli-description="IEEE 802.15.4 Personal Area Network (PAN) identifier." + format="integer" + values="0 - 65535" + special-values="unset (0xffff)" /> <property name="page" alias="page" - nmcli-description="IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to"." /> + nmcli-description="IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to"." + format="integer" + values="-32768 - 32767" + special-values="default (-1)" /> <property name="channel" alias="channel" - nmcli-description="IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to"." /> + nmcli-description="IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to"." + format="integer" + values="-32768 - 32767" + special-values="default (-1)" /> </setting> </nm-setting-docs> diff --git a/src/nmcli/general.c b/src/nmcli/general.c index 0d8ddc47..6fc8184c 100644 --- a/src/nmcli/general.c +++ b/src/nmcli/general.c @@ -1411,58 +1411,57 @@ device_overview(NmCli *nmc, NMDevice *device) static void ac_overview(NmCli *nmc, NMActiveConnection *ac) { - GString *outbuf = g_string_sized_new(80); - NMIPConfig *ip; - nm_auto_str_buf NMStrBuf str = NM_STR_BUF_INIT(NM_UTILS_GET_NEXT_REALLOC_SIZE_104, FALSE); + nm_auto_str_buf NMStrBuf str = NM_STR_BUF_INIT_A(NM_UTILS_GET_NEXT_REALLOC_SIZE_488, FALSE); + const guint MAX_ADDRESSES = 10; + const guint MAX_ROUTES = 10; + int IS_IPv4; if (nm_active_connection_get_controller(ac)) { - g_string_append_printf(outbuf, - "%s %s, ", - _("master"), - nm_device_get_iface(nm_active_connection_get_controller(ac))); + nm_str_buf_append_printf(&str, + "%s %s, ", + _("master"), + nm_device_get_iface(nm_active_connection_get_controller(ac))); } if (nm_active_connection_get_vpn(ac)) - g_string_append_printf(outbuf, "%s, ", _("VPN")); + nm_str_buf_append_printf(&str, "%s, ", _("VPN")); if (nm_active_connection_get_default(ac)) - g_string_append_printf(outbuf, "%s, ", _("ip4 default")); + nm_str_buf_append_printf(&str, "%s, ", _("ip4 default")); if (nm_active_connection_get_default6(ac)) - g_string_append_printf(outbuf, "%s, ", _("ip6 default")); - if (outbuf->len >= 2) { - g_string_truncate(outbuf, outbuf->len - 2); - nmc_print("\t%s\n", outbuf->str); + nm_str_buf_append_printf(&str, "%s, ", _("ip6 default")); + if (str.len >= 2) { + nm_str_buf_set_size(&str, str.len - 2u, TRUE, FALSE); + nmc_print("\t%s\n", nm_str_buf_get_str(&str)); } - ip = nm_active_connection_get_ip4_config(ac); - if (ip) { - const GPtrArray *p; - int i; - - p = nm_ip_config_get_addresses(ip); - for (i = 0; i < p->len; i++) { - NMIPAddress *a = p->pdata[i]; - nmc_print("\tinet4 %s/%d\n", nm_ip_address_get_address(a), nm_ip_address_get_prefix(a)); - } - - p = nm_ip_config_get_routes(ip); - for (i = 0; i < p->len; i++) { - NMIPRoute *a = p->pdata[i]; + nm_str_buf_reset(&str); - nm_str_buf_reset(&str); - _nm_ip_route_to_string(a, &str); - - nmc_print("\troute4 %s\n", nm_str_buf_get_str(&str)); - } - } - - ip = nm_active_connection_get_ip6_config(ac); - if (ip) { + for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { + NMIPConfig *ip; const GPtrArray *p; - int i; + guint i; + + ip = IS_IPv4 ? nm_active_connection_get_ip4_config(ac) + : nm_active_connection_get_ip6_config(ac); + if (!ip) + continue; p = nm_ip_config_get_addresses(ip); for (i = 0; i < p->len; i++) { NMIPAddress *a = p->pdata[i]; - nmc_print("\tinet6 %s/%d\n", nm_ip_address_get_address(a), nm_ip_address_get_prefix(a)); + + nmc_print("\tinet%c %s/%d\n", + IS_IPv4 ? '4' : '6', + nm_ip_address_get_address(a), + nm_ip_address_get_prefix(a)); + + if (i >= MAX_ADDRESSES - 1u && p->len - i > 2u) { + /* Print always at least MAX_ADDRESSES fully. + * If there are MAX_ADDRESSES+1 addresses, print them all fully. + * If there are more addresses, print MAX_ADDRESSES fully, and a + * "more" line. */ + nmc_print("\tinet%c ... more\n", IS_IPv4 ? '4' : '6'); + break; + } } p = nm_ip_config_get_routes(ip); @@ -1472,11 +1471,14 @@ ac_overview(NmCli *nmc, NMActiveConnection *ac) nm_str_buf_reset(&str); _nm_ip_route_to_string(a, &str); - nmc_print("\troute6 %s\n", nm_str_buf_get_str(&str)); + nmc_print("\troute%c %s\n", IS_IPv4 ? '4' : '6', nm_str_buf_get_str(&str)); + + if (i >= MAX_ROUTES - 1u && p->len - i > 2u) { + nmc_print("\troute%c ... more\n", IS_IPv4 ? '4' : '6'); + break; + } } } - - g_string_free(outbuf, TRUE); } void diff --git a/src/nmcli/settings.c b/src/nmcli/settings.c index 5b818edb..d6691125 100644 --- a/src/nmcli/settings.c +++ b/src/nmcli/settings.c @@ -342,7 +342,7 @@ nmc_setting_connection_connect_handlers(NMSettingConnection *setting, NMConnecti g_return_if_fail(NM_IS_SETTING_CONNECTION(setting)); g_signal_connect(setting, - "notify::" NM_SETTING_CONNECTION_MASTER, + "notify::" NM_SETTING_CONNECTION_CONTROLLER, G_CALLBACK(connection_controller_changed_cb), connection); } diff --git a/src/nmcli/utils.c b/src/nmcli/utils.c index 29e84cc2..c65a5486 100644 --- a/src/nmcli/utils.c +++ b/src/nmcli/utils.c @@ -497,7 +497,7 @@ nmc_string_to_arg_array(const char *line, arr0 = nm_strsplit_set(line ?: "", delim ?: " \t"); if (!arr0) - arr = g_new0(char *, 1); + arr = nm_strv_empty_new(); else arr = g_strdupv((char **) arr0); @@ -1830,6 +1830,9 @@ nmc_warn_if_version_mismatch(NMClient *client) g_return_if_fail(client != NULL); + if (!nm_client_get_nm_running(client)) + return; + nm_ver = nm_client_get_version(client); if (!nm_streq0(nm_ver, VERSION)) { g_printerr(_("Warning: nmcli (%s) and NetworkManager (%s) versions don't match. " diff --git a/src/nmcli/utils.h b/src/nmcli/utils.h index 0960c45c..2f7617b9 100644 --- a/src/nmcli/utils.h +++ b/src/nmcli/utils.h @@ -227,6 +227,7 @@ typedef enum { NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_ADHOC, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_2GHZ, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_5GHZ, + NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN, _NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_NUM, diff --git a/src/nmtui/nm-editor-utils.c b/src/nmtui/nm-editor-utils.c index 718c0aef..73fad6d1 100644 --- a/src/nmtui/nm-editor-utils.c +++ b/src/nmtui/nm-editor-utils.c @@ -447,9 +447,9 @@ nm_editor_utils_create_connection(GType type, NMConnection *controller, NMClient nm_setting_get_name(s_hw), NM_SETTING_CONNECTION_AUTOCONNECT, !type_data->no_autoconnect, - NM_SETTING_CONNECTION_MASTER, + NM_SETTING_CONNECTION_CONTROLLER, controller_uuid, - NM_SETTING_CONNECTION_SLAVE_TYPE, + NM_SETTING_CONNECTION_PORT_TYPE, controller_setting_type, NM_SETTING_CONNECTION_INTERFACE_NAME, ifname, diff --git a/src/nmtui/nmt-8021x-fields.c b/src/nmtui/nmt-8021x-fields.c index 3a2185cf..a323be62 100644 --- a/src/nmtui/nmt-8021x-fields.c +++ b/src/nmtui/nmt-8021x-fields.c @@ -552,7 +552,7 @@ nmt_8021x_fields_constructed(GObject *object) entry.id = (char *) eap_method_descs[i].id; g_array_append_val(entries, entry); } - priv->authentication = nmt_newt_popup_new(nm_g_array_index_p(entries, NmtNewtPopupEntry, 0)); + priv->authentication = nmt_newt_popup_new(nm_g_array_first_p(entries, NmtNewtPopupEntry)); nmt_editor_grid_append(grid, "Authentication", NMT_NEWT_WIDGET(priv->authentication), NULL); widget = nmt_newt_stack_new(); diff --git a/src/nmtui/nmt-address-list.c b/src/nmtui/nmt-address-list.c index dba8e790..ff4bf1a4 100644 --- a/src/nmtui/nmt-address-list.c +++ b/src/nmtui/nmt-address-list.c @@ -194,7 +194,7 @@ nmt_address_list_set_property(GObject *object, g_strfreev(priv->strings); priv->strings = g_value_dup_boxed(value); if (!priv->strings) - priv->strings = g_new0(char *, 1); + priv->strings = nm_strv_empty_new(); nmt_widget_list_set_length(NMT_WIDGET_LIST(object), g_strv_length(priv->strings)); break; default: diff --git a/src/nmtui/nmt-connect-connection-list.c b/src/nmtui/nmt-connect-connection-list.c index 5d771b61..329494cc 100644 --- a/src/nmtui/nmt-connect-connection-list.c +++ b/src/nmtui/nmt-connect-connection-list.c @@ -480,7 +480,7 @@ nmt_connect_connection_list_rebuild(NmtConnectConnectionList *list) for (citer = nmtdev->conns; citer; citer = citer->next) { nmtconn = citer->data; - max_width = MAX(max_width, nmt_newt_text_width(nmtconn->name)); + max_width = NM_MAX(max_width, nmt_newt_text_width(nmtconn->name)); } } diff --git a/src/nmtui/nmt-editor-grid.c b/src/nmtui/nmt-editor-grid.c index 9b76e3fe..bdcc02e2 100644 --- a/src/nmtui/nmt-editor-grid.c +++ b/src/nmtui/nmt-editor-grid.c @@ -326,10 +326,10 @@ nmt_editor_grid_size_request(NmtNewtWidget *widget, int *width, int *height) if (rows[i].label) { nmt_newt_widget_size_request(rows[i].label, &lwidth, &lheight); lwidth += priv->indent; - state->col_widths[0] = MAX(state->col_widths[0], lwidth); + state->col_widths[0] = NM_MAX(state->col_widths[0], lwidth); nmt_newt_widget_size_request(rows[i].widget, &wwidth, &wheight); - state->col_widths[1] = MAX(state->col_widths[1], wwidth); + state->col_widths[1] = NM_MAX(state->col_widths[1], wwidth); priv->row_heights[i] = wheight; add_padding = TRUE; @@ -340,8 +340,8 @@ nmt_editor_grid_size_request(NmtNewtWidget *widget, int *width, int *height) if (rows[i].extra) { nmt_newt_widget_size_request(rows[i].extra, &ewidth, &eheight); - state->col_widths[2] = MAX(state->col_widths[2], ewidth); - priv->row_heights[i] = MAX(priv->row_heights[i], eheight); + state->col_widths[2] = NM_MAX(state->col_widths[2], ewidth); + priv->row_heights[i] = NM_MAX(priv->row_heights[i], eheight); } *height += priv->row_heights[i]; diff --git a/src/nmtui/nmt-editor.c b/src/nmtui/nmt-editor.c index ad8803b6..6e502778 100644 --- a/src/nmtui/nmt-editor.c +++ b/src/nmtui/nmt-editor.c @@ -385,7 +385,7 @@ nmt_editor_constructed(GObject *object) add_sections_for_page(editor, grid, page); nmt_editor_grid_append(grid, NULL, nmt_newt_separator_new(), NULL); - port_type = nm_setting_connection_get_slave_type(s_con); + port_type = nm_setting_connection_get_port_type(s_con); if (port_type) { if (!strcmp(port_type, NM_SETTING_BRIDGE_SETTING_NAME)) add_sections_for_page(editor, grid, nmt_page_bridge_port_new(priv->edit_connection)); diff --git a/src/nmtui/nmt-mac-entry.c b/src/nmtui/nmt-mac-entry.c index 11ceecf9..6cecf0e9 100644 --- a/src/nmtui/nmt-mac-entry.c +++ b/src/nmtui/nmt-mac-entry.c @@ -90,8 +90,10 @@ mac_validator(NmtNewtEntry *entry, const char *text, gpointer user_data) if (!*text) return TRUE; - if (priv->entry_type == NMT_MAC_ENTRY_TYPE_CLONED) { - if (NM_CLONED_MAC_IS_SPECIAL(text)) + if (NM_IN_SET(priv->entry_type, + NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET, + NMT_MAC_ENTRY_TYPE_CLONED_WIFI)) { + if (NM_CLONED_MAC_IS_SPECIAL(text, priv->entry_type == NMT_MAC_ENTRY_TYPE_CLONED_WIFI)) return TRUE; } @@ -237,7 +239,7 @@ nmt_mac_entry_class_init(NmtMacEntryClass *entry_class) "", "", NMT_MAC_ENTRY_TYPE_MAC, - NMT_MAC_ENTRY_TYPE_CLONED, + NMT_MAC_ENTRY_TYPE_CLONED_WIFI, NMT_MAC_ENTRY_TYPE_MAC, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); } diff --git a/src/nmtui/nmt-mac-entry.h b/src/nmtui/nmt-mac-entry.h index 6b5b2896..c5acd35a 100644 --- a/src/nmtui/nmt-mac-entry.h +++ b/src/nmtui/nmt-mac-entry.h @@ -11,7 +11,8 @@ typedef enum { NMT_MAC_ENTRY_TYPE_MAC, - NMT_MAC_ENTRY_TYPE_CLONED, + NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET, + NMT_MAC_ENTRY_TYPE_CLONED_WIFI, } NmtMacEntryType; #define NMT_TYPE_MAC_ENTRY (nmt_mac_entry_get_type()) diff --git a/src/nmtui/nmt-page-bond.c b/src/nmtui/nmt-page-bond.c index 5a64590c..c7483150 100644 --- a/src/nmtui/nmt-page-bond.c +++ b/src/nmtui/nmt-page-bond.c @@ -395,7 +395,7 @@ nmt_page_bond_constructed(GObject *object) nmt_editor_grid_append(grid, _("ARP targets"), widget, NULL); priv->arp_ip_target = NMT_ADDRESS_LIST(widget); - widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED); + widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET); g_object_bind_property(s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, widget, diff --git a/src/nmtui/nmt-page-ethernet.c b/src/nmtui/nmt-page-ethernet.c index 77abbb40..652a2603 100644 --- a/src/nmtui/nmt-page-ethernet.c +++ b/src/nmtui/nmt-page-ethernet.c @@ -107,7 +107,7 @@ nmt_page_ethernet_constructed(GObject *object) section = nmt_editor_section_new(_("ETHERNET"), NULL, FALSE); grid = nmt_editor_section_get_body(section); - widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED); + widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET); g_object_bind_property(s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, widget, diff --git a/src/nmtui/nmt-page-vlan.c b/src/nmtui/nmt-page-vlan.c index 1956d3d6..238dbafb 100644 --- a/src/nmtui/nmt-page-vlan.c +++ b/src/nmtui/nmt-page-vlan.c @@ -83,7 +83,7 @@ nmt_page_vlan_constructed(GObject *object) nmt_editor_grid_append(grid, NULL, nmt_newt_separator_new(), NULL); - widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED); + widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET); g_object_bind_property(s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, widget, diff --git a/src/nmtui/nmt-page-wifi.c b/src/nmtui/nmt-page-wifi.c index 55feaee2..9767597b 100644 --- a/src/nmtui/nmt-page-wifi.c +++ b/src/nmtui/nmt-page-wifi.c @@ -378,7 +378,7 @@ nmt_page_wifi_constructed(GObject *object) G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); nmt_editor_grid_append(grid, _("BSSID"), widget, NULL); - widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED); + widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_WIFI); g_object_bind_property(s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, widget, diff --git a/src/nmtui/nmt-port-list.c b/src/nmtui/nmt-port-list.c index 9f964c73..9e4dd8a6 100644 --- a/src/nmtui/nmt-port-list.c +++ b/src/nmtui/nmt-port-list.c @@ -103,7 +103,7 @@ nmt_port_list_connection_filter(NmtEditConnectionList *list, s_con = nm_connection_get_setting_connection(connection); g_return_val_if_fail(s_con != NULL, FALSE); - port_type = nm_setting_connection_get_slave_type(s_con); + port_type = nm_setting_connection_get_port_type(s_con); if (g_strcmp0(port_type, priv->controller_type) != 0) return FALSE; diff --git a/src/nmtui/nmt-route-table.c b/src/nmtui/nmt-route-table.c index 4dc28d7c..04c37f3a 100644 --- a/src/nmtui/nmt-route-table.c +++ b/src/nmtui/nmt-route-table.c @@ -185,8 +185,8 @@ nmt_route_table_init(NmtRouteTable *table) metric_width = nmt_newt_text_width(text); nmt_newt_grid_add(NMT_NEWT_GRID(header), metric_label, 2, 0); - priv->ip_entry_width = MAX(20, MAX(dest_prefix_width, next_hop_width)); - priv->metric_entry_width = MAX(7, metric_width); + priv->ip_entry_width = NM_MAX(20, NM_MAX(dest_prefix_width, next_hop_width)); + priv->metric_entry_width = NM_MAX(7, metric_width); nmt_newt_widget_set_padding(dest_prefix_label, 0, diff --git a/src/nmtui/nmtui-connect.c b/src/nmtui/nmtui-connect.c index 0dfbf6ac..4f90adf3 100644 --- a/src/nmtui/nmtui-connect.c +++ b/src/nmtui/nmtui-connect.c @@ -326,8 +326,8 @@ listbox_active_changed(GObject *object, GParamSpec *pspec, gpointer button) deactivate = _("Deactivate"); deactivate_width = nmt_newt_text_width(deactivate); - activate_padding = MAX(0, deactivate_width - activate_width); - deactivate_padding = MAX(0, activate_width - deactivate_width); + activate_padding = NM_MAX(0, deactivate_width - activate_width); + deactivate_padding = NM_MAX(0, activate_width - deactivate_width); } has_selection = nmt_connect_connection_list_get_selection(list, NULL, NULL, NULL, &ac); diff --git a/src/nmtui/nmtui-edit.c b/src/nmtui/nmtui-edit.c index 3cedf197..723cfea9 100644 --- a/src/nmtui/nmtui-edit.c +++ b/src/nmtui/nmtui-edit.c @@ -61,7 +61,7 @@ edit_connection_list_filter(NmtEditConnectionList *list, controller = nm_setting_connection_get_master(s_con); if (!controller) return TRUE; - port_type = nm_setting_connection_get_slave_type(s_con); + port_type = nm_setting_connection_get_port_type(s_con); if (g_strcmp0(port_type, NM_SETTING_BOND_SETTING_NAME) != 0 && g_strcmp0(port_type, NM_SETTING_TEAM_SETTING_NAME) != 0 && g_strcmp0(port_type, NM_SETTING_BRIDGE_SETTING_NAME) != 0) @@ -511,7 +511,7 @@ nmt_remove_connection(NMRemoteConnection *connection) _("Delete"), _("Are you sure you want to delete the connection '%s'?"), nm_connection_get_id(NM_CONNECTION(connection))); - if (choice == 1) + if (choice != 2) return; g_object_ref(connection); diff --git a/src/tests/client/test-client.check-on-disk/test_002.expected b/src/tests/client/test-client.check-on-disk/test_002.expected index 3bfc3529..ec2943a5 100644 --- a/src/tests/client/test-client.check-on-disk/test_002.expected +++ b/src/tests/client/test-client.check-on-disk/test_002.expected @@ -444,40 +444,40 @@ AP[2]: :90\:B1\:5F\:9E\:E0\:E3:wlan0-ap-1:Infrastruktura:1:54 Mb/s:44:** :WPA AP[3]: :61\:66\:D2\:E7\:44\:A2:wlan0-ap-2:Infrastruktura:1:54 Mb/s:34:** :WPA1 WPA2 <<< -size: 1972 +size: 2049 location: src/tests/client/test-client.py:test_002()/19 cmd: $NMCLI -f ALL d wifi lang: C returncode: 0 -stdout: 1840 bytes +stdout: 1917 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-3 776C616E302D61702D33 60:B3:25:25:E2:C8 Infra 1 2412 MHz 54 Mbit/s 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 -AP[2] wlan0-ap-1 776C616E302D61702D31 90:B1:5F:9E:E0:E3 Infra 1 2412 MHz 54 Mbit/s 44 ** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-2 776C616E302D61702D32 61:66:D2:E7:44:A2 Infra 1 2412 MHz 54 Mbit/s 34 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-3 776C616E302D61702D33 60:B3:25:25:E2:C8 Infra 1 2412 MHz 54 Mbit/s 40 MHz 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 +AP[2] wlan0-ap-1 776C616E302D61702D31 90:B1:5F:9E:E0:E3 Infra 1 2412 MHz 54 Mbit/s 40 MHz 44 ** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-2 776C616E302D61702D32 61:66:D2:E7:44:A2 Infra 1 2412 MHz 54 Mbit/s 40 MHz 34 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan1-ap-4 776C616E312D61702D34 EE:52:8B:49:A1:96 Infra 1 2412 MHz 54 Mbit/s 38 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan1-ap-4 776C616E312D61702D34 EE:52:8B:49:A1:96 Infra 1 2412 MHz 54 Mbit/s 40 MHz 38 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 2040 +size: 2125 location: src/tests/client/test-client.py:test_002()/20 cmd: $NMCLI -f ALL d wifi lang: pl_PL.UTF-8 returncode: 0 -stdout: 1898 bytes +stdout: 1983 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-3 776C616E302D61702D33 60:B3:25:25:E2:C8 Infrastruktura 1 2412 MHz 54 Mb/s 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 -AP[2] wlan0-ap-1 776C616E302D61702D31 90:B1:5F:9E:E0:E3 Infrastruktura 1 2412 MHz 54 Mb/s 44 ** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-2 776C616E302D61702D32 61:66:D2:E7:44:A2 Infrastruktura 1 2412 MHz 54 Mb/s 34 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-3 776C616E302D61702D33 60:B3:25:25:E2:C8 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 +AP[2] wlan0-ap-1 776C616E302D61702D31 90:B1:5F:9E:E0:E3 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 44 ** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-2 776C616E302D61702D32 61:66:D2:E7:44:A2 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 34 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan1-ap-4 776C616E312D61702D34 EE:52:8B:49:A1:96 Infrastruktura 1 2412 MHz 54 Mb/s 38 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan1-ap-4 776C616E312D61702D34 EE:52:8B:49:A1:96 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 38 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< size: 245 @@ -502,12 +502,12 @@ NAME UUID TYPE DEVICE con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet -- <<< -size: 1373 +size: 1459 location: src/tests/client/test-client.py:test_002()/23 cmd: $NMCLI c s con-1 lang: C returncode: 0 -stdout: 1245 bytes +stdout: 1331 bytes >>> connection.id: con-1 connection.uuid: 5fcfd6d7-1e63-3332-8826-a7eda103792d @@ -522,8 +522,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -537,12 +539,12 @@ connection.wait-device-timeout: -1 connection.wait-activation-delay: -1 <<< -size: 1384 +size: 1470 location: src/tests/client/test-client.py:test_002()/24 cmd: $NMCLI c s con-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1246 bytes +stdout: 1332 bytes >>> connection.id: con-1 connection.uuid: 5fcfd6d7-1e63-3332-8826-a7eda103792d @@ -557,8 +559,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 diff --git a/src/tests/client/test-client.check-on-disk/test_003.expected b/src/tests/client/test-client.check-on-disk/test_003.expected index 38add2ca..a78ace9d 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: 5182 +size: 5268 location: src/tests/client/test-client.py:test_003()/14 cmd: $NMCLI con s con-gsm1 lang: C returncode: 0 -stdout: 5049 bytes +stdout: 5135 bytes >>> connection.id: con-gsm1 connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL @@ -202,8 +202,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -301,12 +303,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 5220 +size: 5306 location: src/tests/client/test-client.py:test_003()/15 cmd: $NMCLI con s con-gsm1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5077 bytes +stdout: 5163 bytes >>> connection.id: con-gsm1 connection.uuid: UUID-con-gsm1-REPLACED-REPLACED-REPL @@ -321,8 +323,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -420,14 +424,14 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 507 +size: 509 location: src/tests/client/test-client.py:test_003()/16 cmd: $NMCLI -g all con s con-gsm1 lang: C returncode: 0 -stdout: 368 bytes +stdout: 370 bytes >>> -connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: serial:5:8:even:1:100 @@ -435,14 +439,14 @@ gsm:no:::<hidden>:0:xyz.con-gsm1::<hidden>:0:no::::auto:no: proxy:none:no:: <<< -size: 517 +size: 519 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: 368 bytes +stdout: 370 bytes >>> -connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-gsm1:UUID-con-gsm1-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: serial:5:8:even:1:100 @@ -450,12 +454,12 @@ gsm:no:::<hidden>:0:xyz.con-gsm1::<hidden>:0:no::::auto:no: proxy:none:no:: <<< -size: 5170 +size: 5256 location: src/tests/client/test-client.py:test_003()/18 cmd: $NMCLI con s con-gsm2 lang: C returncode: 0 -stdout: 5037 bytes +stdout: 5123 bytes >>> connection.id: con-gsm2 connection.uuid: UUID-con-gsm2-REPLACED-REPLACED-REPL @@ -470,8 +474,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -569,12 +575,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 5208 +size: 5294 location: src/tests/client/test-client.py:test_003()/19 cmd: $NMCLI con s con-gsm2 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5065 bytes +stdout: 5151 bytes >>> connection.id: con-gsm2 connection.uuid: UUID-con-gsm2-REPLACED-REPLACED-REPL @@ -589,8 +595,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -688,14 +696,14 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 495 +size: 497 location: src/tests/client/test-client.py:test_003()/20 cmd: $NMCLI -g all con s con-gsm2 lang: C returncode: 0 -stdout: 356 bytes +stdout: 358 bytes >>> -connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: serial:5:8:even:1:100 @@ -703,14 +711,14 @@ gsm:no:::<hidden>:0:::<hidden>:0:no::::auto:no: proxy:none:no:: <<< -size: 505 +size: 507 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: 356 bytes +stdout: 358 bytes >>> -connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-gsm2:UUID-con-gsm2-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: serial:5:8:even:1:100 @@ -718,12 +726,12 @@ gsm:no:::<hidden>:0:::<hidden>:0:no::::auto:no: proxy:none:no:: <<< -size: 5170 +size: 5256 location: src/tests/client/test-client.py:test_003()/22 cmd: $NMCLI con s con-gsm3 lang: C returncode: 0 -stdout: 5037 bytes +stdout: 5123 bytes >>> connection.id: con-gsm3 connection.uuid: UUID-con-gsm3-REPLACED-REPLACED-REPL @@ -738,8 +746,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -837,12 +847,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 5208 +size: 5294 location: src/tests/client/test-client.py:test_003()/23 cmd: $NMCLI con s con-gsm3 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5065 bytes +stdout: 5151 bytes >>> connection.id: con-gsm3 connection.uuid: UUID-con-gsm3-REPLACED-REPLACED-REPL @@ -857,8 +867,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -956,14 +968,14 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 496 +size: 498 location: src/tests/client/test-client.py:test_003()/24 cmd: $NMCLI -g all con s con-gsm3 lang: C returncode: 0 -stdout: 357 bytes +stdout: 359 bytes >>> -connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: serial:5:8:even:1:100 @@ -971,14 +983,14 @@ gsm:no:::<hidden>:0: ::<hidden>:0:no::::auto:no: proxy:none:no:: <<< -size: 506 +size: 508 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: 357 bytes +stdout: 359 bytes >>> -connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-gsm3:UUID-con-gsm3-REPLACED-REPLACED-REPL::gsm::no:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::: :0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: serial:5:8:even:1:100 @@ -1126,12 +1138,12 @@ UUID NAME UUID-ethernet-REPLACED-REPLACED-REPL ethernet <<< -size: 4922 +size: 5008 location: src/tests/client/test-client.py:test_003()/37 cmd: $NMCLI -f ALL con s ethernet lang: C returncode: 0 -stdout: 4782 bytes +stdout: 4868 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1146,8 +1158,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1239,12 +1253,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4957 +size: 5043 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: 4807 bytes +stdout: 4893 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1259,8 +1273,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1372,12 +1388,12 @@ stdout: 51 bytes GENERAL.STATE: aktywowano <<< -size: 5624 +size: 5710 location: src/tests/client/test-client.py:test_003()/41 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 5491 bytes +stdout: 5577 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1392,8 +1408,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1498,12 +1516,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5663 +size: 5749 location: src/tests/client/test-client.py:test_003()/42 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5520 bytes +stdout: 5606 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1518,8 +1536,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -2110,12 +2130,12 @@ UUID NAME UUID-ethernet-REPLACED-REPLACED-REPL ethernet <<< -size: 4922 +size: 5008 location: src/tests/client/test-client.py:test_003()/62 cmd: $NMCLI -f ALL con s ethernet lang: C returncode: 0 -stdout: 4782 bytes +stdout: 4868 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2130,8 +2150,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -2223,12 +2245,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4957 +size: 5043 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: 4807 bytes +stdout: 4893 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2243,8 +2265,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -2360,12 +2384,12 @@ GENERAL.STATE: aktywowano GENERAL.STATE: aktywowano <<< -size: 6334 +size: 6420 location: src/tests/client/test-client.py:test_003()/66 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 6201 bytes +stdout: 6287 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2380,8 +2404,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -2500,12 +2526,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6377 +size: 6463 location: src/tests/client/test-client.py:test_003()/67 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6234 bytes +stdout: 6320 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2520,8 +2546,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -2978,21 +3006,51 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 759 +size: 1399 location: src/tests/client/test-client.py:test_003()/76 +cmd: $NMCLI -f all d +lang: C +returncode: 0 +stdout: 1272 bytes +>>> +DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH +eth1 ethernet connected unknown unknown /org/freedesktop/NetworkManager/Devices/2 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/2 +eth0 ethernet connected unknown unknown /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 +wlan0 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/3 -- -- -- +wlan1 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/4 -- -- -- +wlan1 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/5 -- -- -- + +<<< +size: 1416 +location: src/tests/client/test-client.py:test_003()/77 +cmd: $NMCLI -f all d +lang: pl_PL.UTF-8 +returncode: 0 +stdout: 1279 bytes +>>> +DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH +eth1 ethernet połączono nieznane nieznane /org/freedesktop/NetworkManager/Devices/2 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/2 +eth0 ethernet połączono nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 +wlan0 wifi niedostępne nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 -- -- -- +wlan1 wifi niedostępne nieznane nieznane /org/freedesktop/NetworkManager/Devices/4 -- -- -- +wlan1 wifi niedostępne nieznane nieznane /org/freedesktop/NetworkManager/Devices/5 -- -- -- + +<<< +size: 759 +location: src/tests/client/test-client.py:test_003()/78 cmd: $NMCLI lang: C returncode: 0 stdout: 641 bytes >>> -eth0: connected to ethernet - "eth0" - ethernet (virtual), C0:61:AE:26:4D:D7, hw - eth1: connected to ethernet "eth1" ethernet (virtual), 33:9A:18:81:EB:DC, hw +eth0: connected to ethernet + "eth0" + ethernet (virtual), C0:61:AE:26:4D:D7, hw + wlan0: unavailable "wlan0" wifi (virtual), DC:39:87:BA:3E:5D, hw @@ -3015,20 +3073,20 @@ Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage details. <<< size: 834 -location: src/tests/client/test-client.py:test_003()/77 +location: src/tests/client/test-client.py:test_003()/79 cmd: $NMCLI lang: pl_PL.UTF-8 returncode: 0 stdout: 706 bytes >>> -eth0: połączono do ethernet - "eth0" - ethernet (virtual), C0:61:AE:26:4D:D7, sprzęt - eth1: połączono do ethernet "eth1" ethernet (virtual), 33:9A:18:81:EB:DC, sprzęt +eth0: połączono do ethernet + "eth0" + ethernet (virtual), C0:61:AE:26:4D:D7, sprzęt + wlan0: niedostępne "wlan0" wifi (virtual), DC:39:87:BA:3E:5D, sprzęt @@ -3053,7 +3111,7 @@ o użyciu. <<< size: 2713 -location: src/tests/client/test-client.py:test_003()/78 +location: src/tests/client/test-client.py:test_003()/80 cmd: $NMCLI -f ALL con lang: C returncode: 0 @@ -3070,7 +3128,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 2739 -location: src/tests/client/test-client.py:test_003()/79 +location: src/tests/client/test-client.py:test_003()/81 cmd: $NMCLI -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -3087,7 +3145,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 470 -location: src/tests/client/test-client.py:test_003()/80 +location: src/tests/client/test-client.py:test_003()/82 cmd: $NMCLI -f UUID,TYPE con lang: C returncode: 0 @@ -3103,7 +3161,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 480 -location: src/tests/client/test-client.py:test_003()/81 +location: src/tests/client/test-client.py:test_003()/83 cmd: $NMCLI -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -3118,12 +3176,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6337 -location: src/tests/client/test-client.py:test_003()/82 +size: 6423 +location: src/tests/client/test-client.py:test_003()/84 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 6204 bytes +stdout: 6290 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3138,8 +3196,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -3258,12 +3318,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6381 -location: src/tests/client/test-client.py:test_003()/83 +size: 6467 +location: src/tests/client/test-client.py:test_003()/85 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6238 bytes +stdout: 6324 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3278,8 +3338,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -3398,12 +3460,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5667 -location: src/tests/client/test-client.py:test_003()/84 +size: 5753 +location: src/tests/client/test-client.py:test_003()/86 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5494 bytes +stdout: 5580 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3418,8 +3480,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -3524,12 +3588,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5707 -location: src/tests/client/test-client.py:test_003()/85 +size: 5793 +location: src/tests/client/test-client.py:test_003()/87 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5524 bytes +stdout: 5610 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3544,8 +3608,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -3651,7 +3717,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3792 -location: src/tests/client/test-client.py:test_003()/86 +location: src/tests/client/test-client.py:test_003()/88 cmd: $NMCLI -f all dev show eth0 lang: C returncode: 0 @@ -3723,7 +3789,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 3830 -location: src/tests/client/test-client.py:test_003()/87 +location: src/tests/client/test-client.py:test_003()/89 cmd: $NMCLI -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -3795,7 +3861,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 2995 -location: src/tests/client/test-client.py:test_003()/88 +location: src/tests/client/test-client.py:test_003()/90 cmd: $NMCLI --color yes -f ALL con lang: C returncode: 0 @@ -3812,7 +3878,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3021 -location: src/tests/client/test-client.py:test_003()/89 +location: src/tests/client/test-client.py:test_003()/91 cmd: $NMCLI --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -3829,7 +3895,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 500 -location: src/tests/client/test-client.py:test_003()/90 +location: src/tests/client/test-client.py:test_003()/92 cmd: $NMCLI --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -3845,7 +3911,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 510 -location: src/tests/client/test-client.py:test_003()/91 +location: src/tests/client/test-client.py:test_003()/93 cmd: $NMCLI --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -3860,12 +3926,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6349 -location: src/tests/client/test-client.py:test_003()/92 +size: 6435 +location: src/tests/client/test-client.py:test_003()/94 cmd: $NMCLI --color yes con s ethernet lang: C returncode: 0 -stdout: 6204 bytes +stdout: 6290 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3880,8 +3946,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4000,12 +4068,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6393 -location: src/tests/client/test-client.py:test_003()/93 +size: 6479 +location: src/tests/client/test-client.py:test_003()/95 cmd: $NMCLI --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6238 bytes +stdout: 6324 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -4020,8 +4088,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4140,12 +4210,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5679 -location: src/tests/client/test-client.py:test_003()/94 +size: 5765 +location: src/tests/client/test-client.py:test_003()/96 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5494 bytes +stdout: 5580 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -4160,8 +4230,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4266,12 +4338,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5719 -location: src/tests/client/test-client.py:test_003()/95 +size: 5805 +location: src/tests/client/test-client.py:test_003()/97 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5524 bytes +stdout: 5610 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -4286,8 +4358,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4393,7 +4467,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3804 -location: src/tests/client/test-client.py:test_003()/96 +location: src/tests/client/test-client.py:test_003()/98 cmd: $NMCLI --color yes -f all dev show eth0 lang: C returncode: 0 @@ -4465,7 +4539,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 3842 -location: src/tests/client/test-client.py:test_003()/97 +location: src/tests/client/test-client.py:test_003()/99 cmd: $NMCLI --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -4536,8 +4610,8 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3199 -location: src/tests/client/test-client.py:test_003()/98 +size: 3200 +location: src/tests/client/test-client.py:test_003()/100 cmd: $NMCLI --pretty -f ALL con lang: C returncode: 0 @@ -4557,8 +4631,8 @@ con-gsm3 UUID-con-gsm3-REPLACED-REPLACED-REPL gsm 0 never con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/2 no -- -- -- -- /etc/NetworkManager/system-connections/con-xx1 <<< -size: 3247 -location: src/tests/client/test-client.py:test_003()/99 +size: 3248 +location: src/tests/client/test-client.py:test_003()/101 cmd: $NMCLI --pretty -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -4579,7 +4653,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 682 -location: src/tests/client/test-client.py:test_003()/100 +location: src/tests/client/test-client.py:test_003()/102 cmd: $NMCLI --pretty -f UUID,TYPE con lang: C returncode: 0 @@ -4599,7 +4673,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 712 -location: src/tests/client/test-client.py:test_003()/101 +location: src/tests/client/test-client.py:test_003()/103 cmd: $NMCLI --pretty -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -4618,12 +4692,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 7590 -location: src/tests/client/test-client.py:test_003()/102 +size: 7676 +location: src/tests/client/test-client.py:test_003()/104 cmd: $NMCLI --pretty con s ethernet lang: C returncode: 0 -stdout: 7447 bytes +stdout: 7533 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4641,8 +4715,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4774,12 +4850,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7655 -location: src/tests/client/test-client.py:test_003()/103 +size: 7741 +location: src/tests/client/test-client.py:test_003()/105 cmd: $NMCLI --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7502 bytes +stdout: 7588 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -4797,8 +4873,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4930,12 +5008,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6608 -location: src/tests/client/test-client.py:test_003()/104 +size: 6694 +location: src/tests/client/test-client.py:test_003()/106 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6425 bytes +stdout: 6511 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4953,8 +5031,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -5068,12 +5148,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6661 -location: src/tests/client/test-client.py:test_003()/105 +size: 6747 +location: src/tests/client/test-client.py:test_003()/107 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6468 bytes +stdout: 6554 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -5091,8 +5171,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -5207,7 +5289,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4733 -location: src/tests/client/test-client.py:test_003()/106 +location: src/tests/client/test-client.py:test_003()/108 cmd: $NMCLI --pretty -f all dev show eth0 lang: C returncode: 0 @@ -5291,7 +5373,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 4777 -location: src/tests/client/test-client.py:test_003()/107 +location: src/tests/client/test-client.py:test_003()/109 cmd: $NMCLI --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -5375,7 +5457,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 3482 -location: src/tests/client/test-client.py:test_003()/108 +location: src/tests/client/test-client.py:test_003()/110 cmd: $NMCLI --pretty --color yes -f ALL con lang: C returncode: 0 @@ -5396,7 +5478,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3530 -location: src/tests/client/test-client.py:test_003()/109 +location: src/tests/client/test-client.py:test_003()/111 cmd: $NMCLI --pretty --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -5417,7 +5499,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 712 -location: src/tests/client/test-client.py:test_003()/110 +location: src/tests/client/test-client.py:test_003()/112 cmd: $NMCLI --pretty --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -5437,7 +5519,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 742 -location: src/tests/client/test-client.py:test_003()/111 +location: src/tests/client/test-client.py:test_003()/113 cmd: $NMCLI --pretty --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -5456,12 +5538,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 7602 -location: src/tests/client/test-client.py:test_003()/112 +size: 7688 +location: src/tests/client/test-client.py:test_003()/114 cmd: $NMCLI --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 7447 bytes +stdout: 7533 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -5479,8 +5561,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -5612,12 +5696,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7667 -location: src/tests/client/test-client.py:test_003()/113 +size: 7753 +location: src/tests/client/test-client.py:test_003()/115 cmd: $NMCLI --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7502 bytes +stdout: 7588 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -5635,8 +5719,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -5768,12 +5854,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6620 -location: src/tests/client/test-client.py:test_003()/114 +size: 6706 +location: src/tests/client/test-client.py:test_003()/116 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6425 bytes +stdout: 6511 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -5791,8 +5877,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -5906,12 +5994,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6673 -location: src/tests/client/test-client.py:test_003()/115 +size: 6759 +location: src/tests/client/test-client.py:test_003()/117 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6468 bytes +stdout: 6554 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -5929,8 +6017,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -6045,7 +6135,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4745 -location: src/tests/client/test-client.py:test_003()/116 +location: src/tests/client/test-client.py:test_003()/118 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: C returncode: 0 @@ -6129,7 +6219,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 4789 -location: src/tests/client/test-client.py:test_003()/117 +location: src/tests/client/test-client.py:test_003()/119 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -6213,7 +6303,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 1534 -location: src/tests/client/test-client.py:test_003()/118 +location: src/tests/client/test-client.py:test_003()/120 cmd: $NMCLI --terse -f ALL con lang: C returncode: 0 @@ -6229,7 +6319,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1544 -location: src/tests/client/test-client.py:test_003()/119 +location: src/tests/client/test-client.py:test_003()/121 cmd: $NMCLI --terse -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -6245,7 +6335,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 422 -location: src/tests/client/test-client.py:test_003()/120 +location: src/tests/client/test-client.py:test_003()/122 cmd: $NMCLI --terse -f UUID,TYPE con lang: C returncode: 0 @@ -6260,7 +6350,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 432 -location: src/tests/client/test-client.py:test_003()/121 +location: src/tests/client/test-client.py:test_003()/123 cmd: $NMCLI --terse -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -6274,12 +6364,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 3382 -location: src/tests/client/test-client.py:test_003()/122 +size: 3427 +location: src/tests/client/test-client.py:test_003()/124 cmd: $NMCLI --terse con s ethernet lang: C returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6294,8 +6384,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -6414,12 +6506,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3392 -location: src/tests/client/test-client.py:test_003()/123 +size: 3437 +location: src/tests/client/test-client.py:test_003()/125 cmd: $NMCLI --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6434,8 +6526,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -6554,12 +6648,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3032 -location: src/tests/client/test-client.py:test_003()/124 +size: 3077 +location: src/tests/client/test-client.py:test_003()/126 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6574,8 +6668,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -6680,12 +6776,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3042 -location: src/tests/client/test-client.py:test_003()/125 +size: 3087 +location: src/tests/client/test-client.py:test_003()/127 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6700,8 +6796,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -6807,7 +6905,7 @@ GENERAL.MASTER-PATH: <<< size: 2426 -location: src/tests/client/test-client.py:test_003()/126 +location: src/tests/client/test-client.py:test_003()/128 cmd: $NMCLI --terse -f all dev show eth0 lang: C returncode: 0 @@ -6879,7 +6977,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2436 -location: src/tests/client/test-client.py:test_003()/127 +location: src/tests/client/test-client.py:test_003()/129 cmd: $NMCLI --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -6951,7 +7049,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 1816 -location: src/tests/client/test-client.py:test_003()/128 +location: src/tests/client/test-client.py:test_003()/130 cmd: $NMCLI --terse --color yes -f ALL con lang: C returncode: 0 @@ -6967,7 +7065,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1826 -location: src/tests/client/test-client.py:test_003()/129 +location: src/tests/client/test-client.py:test_003()/131 cmd: $NMCLI --terse --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -6983,7 +7081,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 452 -location: src/tests/client/test-client.py:test_003()/130 +location: src/tests/client/test-client.py:test_003()/132 cmd: $NMCLI --terse --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -6998,7 +7096,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 462 -location: src/tests/client/test-client.py:test_003()/131 +location: src/tests/client/test-client.py:test_003()/133 cmd: $NMCLI --terse --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -7012,12 +7110,12 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 3394 -location: src/tests/client/test-client.py:test_003()/132 +size: 3439 +location: src/tests/client/test-client.py:test_003()/134 cmd: $NMCLI --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -7032,8 +7130,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -7152,12 +7252,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3404 -location: src/tests/client/test-client.py:test_003()/133 +size: 3449 +location: src/tests/client/test-client.py:test_003()/135 cmd: $NMCLI --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -7172,8 +7272,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -7292,12 +7394,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3044 -location: src/tests/client/test-client.py:test_003()/134 +size: 3089 +location: src/tests/client/test-client.py:test_003()/136 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -7312,8 +7414,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -7418,12 +7522,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3054 -location: src/tests/client/test-client.py:test_003()/135 +size: 3099 +location: src/tests/client/test-client.py:test_003()/137 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -7438,8 +7542,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -7545,7 +7651,7 @@ GENERAL.MASTER-PATH: <<< size: 2438 -location: src/tests/client/test-client.py:test_003()/136 +location: src/tests/client/test-client.py:test_003()/138 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: C returncode: 0 @@ -7617,7 +7723,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2448 -location: src/tests/client/test-client.py:test_003()/137 +location: src/tests/client/test-client.py:test_003()/139 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -7689,7 +7795,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2729 -location: src/tests/client/test-client.py:test_003()/138 +location: src/tests/client/test-client.py:test_003()/140 cmd: $NMCLI --mode tabular -f ALL con lang: C returncode: 0 @@ -7706,7 +7812,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 2755 -location: src/tests/client/test-client.py:test_003()/139 +location: src/tests/client/test-client.py:test_003()/141 cmd: $NMCLI --mode tabular -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -7723,7 +7829,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 486 -location: src/tests/client/test-client.py:test_003()/140 +location: src/tests/client/test-client.py:test_003()/142 cmd: $NMCLI --mode tabular -f UUID,TYPE con lang: C returncode: 0 @@ -7739,7 +7845,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 496 -location: src/tests/client/test-client.py:test_003()/141 +location: src/tests/client/test-client.py:test_003()/143 cmd: $NMCLI --mode tabular -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -7754,15 +7860,15 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 4267 -location: src/tests/client/test-client.py:test_003()/142 +size: 4313 +location: src/tests/client/test-client.py:test_003()/144 cmd: $NMCLI --mode tabular con s ethernet lang: C returncode: 0 -stdout: 4118 bytes +stdout: 4164 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -7785,15 +7891,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 4317 -location: src/tests/client/test-client.py:test_003()/143 +size: 4363 +location: src/tests/client/test-client.py:test_003()/145 cmd: $NMCLI --mode tabular con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 4158 bytes +stdout: 4204 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -7816,15 +7922,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3805 -location: src/tests/client/test-client.py:test_003()/144 +size: 3851 +location: src/tests/client/test-client.py:test_003()/146 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 3616 bytes +stdout: 3662 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -7843,15 +7949,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 3853 -location: src/tests/client/test-client.py:test_003()/145 +size: 3899 +location: src/tests/client/test-client.py:test_003()/147 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3654 bytes +stdout: 3700 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -7871,7 +7977,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 3207 -location: src/tests/client/test-client.py:test_003()/146 +location: src/tests/client/test-client.py:test_003()/148 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: C returncode: 0 @@ -7906,7 +8012,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3237 -location: src/tests/client/test-client.py:test_003()/147 +location: src/tests/client/test-client.py:test_003()/149 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -7941,7 +8047,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3011 -location: src/tests/client/test-client.py:test_003()/148 +location: src/tests/client/test-client.py:test_003()/150 cmd: $NMCLI --mode tabular --color yes -f ALL con lang: C returncode: 0 @@ -7958,7 +8064,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3037 -location: src/tests/client/test-client.py:test_003()/149 +location: src/tests/client/test-client.py:test_003()/151 cmd: $NMCLI --mode tabular --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -7975,7 +8081,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 516 -location: src/tests/client/test-client.py:test_003()/150 +location: src/tests/client/test-client.py:test_003()/152 cmd: $NMCLI --mode tabular --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -7991,7 +8097,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 526 -location: src/tests/client/test-client.py:test_003()/151 +location: src/tests/client/test-client.py:test_003()/153 cmd: $NMCLI --mode tabular --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -8006,15 +8112,15 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 4279 -location: src/tests/client/test-client.py:test_003()/152 +size: 4325 +location: src/tests/client/test-client.py:test_003()/154 cmd: $NMCLI --mode tabular --color yes con s ethernet lang: C returncode: 0 -stdout: 4118 bytes +stdout: 4164 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -8037,15 +8143,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 4329 -location: src/tests/client/test-client.py:test_003()/153 +size: 4375 +location: src/tests/client/test-client.py:test_003()/155 cmd: $NMCLI --mode tabular --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 4158 bytes +stdout: 4204 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -8068,15 +8174,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 3817 -location: src/tests/client/test-client.py:test_003()/154 +size: 3863 +location: src/tests/client/test-client.py:test_003()/156 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 3616 bytes +stdout: 3662 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -8095,15 +8201,15 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 3865 -location: src/tests/client/test-client.py:test_003()/155 +size: 3911 +location: src/tests/client/test-client.py:test_003()/157 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3654 bytes +stdout: 3700 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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) @@ -8123,7 +8229,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 3219 -location: src/tests/client/test-client.py:test_003()/156 +location: src/tests/client/test-client.py:test_003()/158 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: C returncode: 0 @@ -8158,7 +8264,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3249 -location: src/tests/client/test-client.py:test_003()/157 +location: src/tests/client/test-client.py:test_003()/159 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -8193,7 +8299,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3215 -location: src/tests/client/test-client.py:test_003()/158 +location: src/tests/client/test-client.py:test_003()/160 cmd: $NMCLI --mode tabular --pretty -f ALL con lang: C returncode: 0 @@ -8214,7 +8320,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3263 -location: src/tests/client/test-client.py:test_003()/159 +location: src/tests/client/test-client.py:test_003()/161 cmd: $NMCLI --mode tabular --pretty -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -8235,7 +8341,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 697 -location: src/tests/client/test-client.py:test_003()/160 +location: src/tests/client/test-client.py:test_003()/162 cmd: $NMCLI --mode tabular --pretty -f UUID,TYPE con lang: C returncode: 0 @@ -8255,7 +8361,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 727 -location: src/tests/client/test-client.py:test_003()/161 +location: src/tests/client/test-client.py:test_003()/163 cmd: $NMCLI --mode tabular --pretty -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -8274,19 +8380,19 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6872 -location: src/tests/client/test-client.py:test_003()/162 +size: 6941 +location: src/tests/client/test-client.py:test_003()/164 cmd: $NMCLI --mode tabular --pretty con s ethernet lang: C returncode: 0 -stdout: 6714 bytes +stdout: 6783 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8321,19 +8427,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 7002 -location: src/tests/client/test-client.py:test_003()/163 +size: 7071 +location: src/tests/client/test-client.py:test_003()/165 cmd: $NMCLI --mode tabular --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6834 bytes +stdout: 6903 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8368,19 +8474,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 5954 -location: src/tests/client/test-client.py:test_003()/164 +size: 6023 +location: src/tests/client/test-client.py:test_003()/166 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5756 bytes +stdout: 5825 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8407,19 +8513,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 6056 -location: src/tests/client/test-client.py:test_003()/165 +size: 6125 +location: src/tests/client/test-client.py:test_003()/167 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5848 bytes +stdout: 5917 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8447,7 +8553,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 4823 -location: src/tests/client/test-client.py:test_003()/166 +location: src/tests/client/test-client.py:test_003()/168 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: C returncode: 0 @@ -8494,7 +8600,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 4889 -location: src/tests/client/test-client.py:test_003()/167 +location: src/tests/client/test-client.py:test_003()/169 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -8541,7 +8647,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3497 -location: src/tests/client/test-client.py:test_003()/168 +location: src/tests/client/test-client.py:test_003()/170 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con lang: C returncode: 0 @@ -8562,7 +8668,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3545 -location: src/tests/client/test-client.py:test_003()/169 +location: src/tests/client/test-client.py:test_003()/171 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -8583,7 +8689,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 727 -location: src/tests/client/test-client.py:test_003()/170 +location: src/tests/client/test-client.py:test_003()/172 cmd: $NMCLI --mode tabular --pretty --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -8603,7 +8709,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 757 -location: src/tests/client/test-client.py:test_003()/171 +location: src/tests/client/test-client.py:test_003()/173 cmd: $NMCLI --mode tabular --pretty --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -8622,19 +8728,19 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6884 -location: src/tests/client/test-client.py:test_003()/172 +size: 6953 +location: src/tests/client/test-client.py:test_003()/174 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 6714 bytes +stdout: 6783 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8669,19 +8775,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 7014 -location: src/tests/client/test-client.py:test_003()/173 +size: 7083 +location: src/tests/client/test-client.py:test_003()/175 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6834 bytes +stdout: 6903 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8716,19 +8822,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< -size: 5966 -location: src/tests/client/test-client.py:test_003()/174 +size: 6035 +location: src/tests/client/test-client.py:test_003()/176 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5756 bytes +stdout: 5825 bytes >>> ========================================= Connection profile details (ethernet) ========================================= -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8755,19 +8861,19 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< -size: 6068 -location: src/tests/client/test-client.py:test_003()/175 +size: 6137 +location: src/tests/client/test-client.py:test_003()/177 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5848 bytes +stdout: 5917 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -8795,7 +8901,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 4835 -location: src/tests/client/test-client.py:test_003()/176 +location: src/tests/client/test-client.py:test_003()/178 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: C returncode: 0 @@ -8842,7 +8948,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 4901 -location: src/tests/client/test-client.py:test_003()/177 +location: src/tests/client/test-client.py:test_003()/179 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -8889,7 +8995,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 1549 -location: src/tests/client/test-client.py:test_003()/178 +location: src/tests/client/test-client.py:test_003()/180 cmd: $NMCLI --mode tabular --terse -f ALL con lang: C returncode: 0 @@ -8905,7 +9011,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1559 -location: src/tests/client/test-client.py:test_003()/179 +location: src/tests/client/test-client.py:test_003()/181 cmd: $NMCLI --mode tabular --terse -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -8921,7 +9027,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 437 -location: src/tests/client/test-client.py:test_003()/180 +location: src/tests/client/test-client.py:test_003()/182 cmd: $NMCLI --mode tabular --terse -f UUID,TYPE con lang: C returncode: 0 @@ -8936,7 +9042,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 447 -location: src/tests/client/test-client.py:test_003()/181 +location: src/tests/client/test-client.py:test_003()/183 cmd: $NMCLI --mode tabular --terse -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -8950,14 +9056,14 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 885 -location: src/tests/client/test-client.py:test_003()/182 +size: 887 +location: src/tests/client/test-client.py:test_003()/184 cmd: $NMCLI --mode tabular --terse con s ethernet lang: C returncode: 0 -stdout: 729 bytes +stdout: 731 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -8967,14 +9073,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: 895 -location: src/tests/client/test-client.py:test_003()/183 +size: 897 +location: src/tests/client/test-client.py:test_003()/185 cmd: $NMCLI --mode tabular --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 729 bytes +stdout: 731 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -8984,14 +9090,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: 733 -location: src/tests/client/test-client.py:test_003()/184 +size: 735 +location: src/tests/client/test-client.py:test_003()/186 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 537 bytes +stdout: 539 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -8999,14 +9105,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: 743 -location: src/tests/client/test-client.py:test_003()/185 +size: 745 +location: src/tests/client/test-client.py:test_003()/187 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 537 bytes +stdout: 539 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -9015,7 +9121,7 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no: <<< size: 1451 -location: src/tests/client/test-client.py:test_003()/186 +location: src/tests/client/test-client.py:test_003()/188 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: C returncode: 0 @@ -9033,7 +9139,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 1461 -location: src/tests/client/test-client.py:test_003()/187 +location: src/tests/client/test-client.py:test_003()/189 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -9051,7 +9157,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 1831 -location: src/tests/client/test-client.py:test_003()/188 +location: src/tests/client/test-client.py:test_003()/190 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con lang: C returncode: 0 @@ -9067,7 +9173,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1841 -location: src/tests/client/test-client.py:test_003()/189 +location: src/tests/client/test-client.py:test_003()/191 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -9083,7 +9189,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 467 -location: src/tests/client/test-client.py:test_003()/190 +location: src/tests/client/test-client.py:test_003()/192 cmd: $NMCLI --mode tabular --terse --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -9098,7 +9204,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 477 -location: src/tests/client/test-client.py:test_003()/191 +location: src/tests/client/test-client.py:test_003()/193 cmd: $NMCLI --mode tabular --terse --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -9112,14 +9218,14 @@ UUID-con-gsm3-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 897 -location: src/tests/client/test-client.py:test_003()/192 +size: 899 +location: src/tests/client/test-client.py:test_003()/194 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 729 bytes +stdout: 731 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -9129,14 +9235,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: 907 -location: src/tests/client/test-client.py:test_003()/193 +size: 909 +location: src/tests/client/test-client.py:test_003()/195 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 729 bytes +stdout: 731 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -9146,14 +9252,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: 745 -location: src/tests/client/test-client.py:test_003()/194 +size: 747 +location: src/tests/client/test-client.py:test_003()/196 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 537 bytes +stdout: 539 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -9161,14 +9267,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: 755 -location: src/tests/client/test-client.py:test_003()/195 +size: 757 +location: src/tests/client/test-client.py:test_003()/197 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 537 bytes +stdout: 539 bytes >>> -connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 802-3-ethernet::0::no:::::auto::::default::-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: @@ -9177,7 +9283,7 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no: <<< size: 1463 -location: src/tests/client/test-client.py:test_003()/196 +location: src/tests/client/test-client.py:test_003()/198 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: C returncode: 0 @@ -9195,7 +9301,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 1473 -location: src/tests/client/test-client.py:test_003()/197 +location: src/tests/client/test-client.py:test_003()/199 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -9213,7 +9319,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 5763 -location: src/tests/client/test-client.py:test_003()/198 +location: src/tests/client/test-client.py:test_003()/200 cmd: $NMCLI --mode multiline -f ALL con lang: C returncode: 0 @@ -9327,7 +9433,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 5791 -location: src/tests/client/test-client.py:test_003()/199 +location: src/tests/client/test-client.py:test_003()/201 cmd: $NMCLI --mode multiline -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -9441,7 +9547,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 893 -location: src/tests/client/test-client.py:test_003()/200 +location: src/tests/client/test-client.py:test_003()/202 cmd: $NMCLI --mode multiline -f UUID,TYPE con lang: C returncode: 0 @@ -9462,7 +9568,7 @@ TYPE: ethernet <<< size: 903 -location: src/tests/client/test-client.py:test_003()/201 +location: src/tests/client/test-client.py:test_003()/203 cmd: $NMCLI --mode multiline -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -9482,12 +9588,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE: ethernet <<< -size: 6355 -location: src/tests/client/test-client.py:test_003()/202 +size: 6441 +location: src/tests/client/test-client.py:test_003()/204 cmd: $NMCLI --mode multiline con s ethernet lang: C returncode: 0 -stdout: 6204 bytes +stdout: 6290 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9502,8 +9608,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -9622,12 +9730,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6399 -location: src/tests/client/test-client.py:test_003()/203 +size: 6485 +location: src/tests/client/test-client.py:test_003()/205 cmd: $NMCLI --mode multiline con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6238 bytes +stdout: 6324 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9642,8 +9750,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -9762,12 +9872,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5685 -location: src/tests/client/test-client.py:test_003()/204 +size: 5771 +location: src/tests/client/test-client.py:test_003()/206 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5494 bytes +stdout: 5580 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9782,8 +9892,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -9888,12 +10000,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5725 -location: src/tests/client/test-client.py:test_003()/205 +size: 5811 +location: src/tests/client/test-client.py:test_003()/207 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5524 bytes +stdout: 5610 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9908,8 +10020,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -10015,7 +10129,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3810 -location: src/tests/client/test-client.py:test_003()/206 +location: src/tests/client/test-client.py:test_003()/208 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: C returncode: 0 @@ -10087,7 +10201,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 3848 -location: src/tests/client/test-client.py:test_003()/207 +location: src/tests/client/test-client.py:test_003()/209 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -10159,7 +10273,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 6045 -location: src/tests/client/test-client.py:test_003()/208 +location: src/tests/client/test-client.py:test_003()/210 cmd: $NMCLI --mode multiline --color yes -f ALL con lang: C returncode: 0 @@ -10273,7 +10387,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 6073 -location: src/tests/client/test-client.py:test_003()/209 +location: src/tests/client/test-client.py:test_003()/211 cmd: $NMCLI --mode multiline --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -10387,7 +10501,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 923 -location: src/tests/client/test-client.py:test_003()/210 +location: src/tests/client/test-client.py:test_003()/212 cmd: $NMCLI --mode multiline --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -10408,7 +10522,7 @@ TYPE: ethernet <<< size: 933 -location: src/tests/client/test-client.py:test_003()/211 +location: src/tests/client/test-client.py:test_003()/213 cmd: $NMCLI --mode multiline --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -10428,12 +10542,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE: ethernet <<< -size: 6367 -location: src/tests/client/test-client.py:test_003()/212 +size: 6453 +location: src/tests/client/test-client.py:test_003()/214 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: C returncode: 0 -stdout: 6204 bytes +stdout: 6290 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10448,8 +10562,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -10568,12 +10684,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 6411 -location: src/tests/client/test-client.py:test_003()/213 +size: 6497 +location: src/tests/client/test-client.py:test_003()/215 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6238 bytes +stdout: 6324 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10588,8 +10704,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -10708,12 +10826,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5697 -location: src/tests/client/test-client.py:test_003()/214 +size: 5783 +location: src/tests/client/test-client.py:test_003()/216 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5494 bytes +stdout: 5580 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10728,8 +10846,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -10834,12 +10954,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5737 -location: src/tests/client/test-client.py:test_003()/215 +size: 5823 +location: src/tests/client/test-client.py:test_003()/217 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5524 bytes +stdout: 5610 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -10854,8 +10974,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -10961,7 +11083,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3822 -location: src/tests/client/test-client.py:test_003()/216 +location: src/tests/client/test-client.py:test_003()/218 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: C returncode: 0 @@ -11033,7 +11155,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 3860 -location: src/tests/client/test-client.py:test_003()/217 +location: src/tests/client/test-client.py:test_003()/219 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -11105,7 +11227,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 6549 -location: src/tests/client/test-client.py:test_003()/218 +location: src/tests/client/test-client.py:test_003()/220 cmd: $NMCLI --mode multiline --pretty -f ALL con lang: C returncode: 0 @@ -11229,7 +11351,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 6583 -location: src/tests/client/test-client.py:test_003()/219 +location: src/tests/client/test-client.py:test_003()/221 cmd: $NMCLI --mode multiline --pretty -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -11353,7 +11475,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 1600 -location: src/tests/client/test-client.py:test_003()/220 +location: src/tests/client/test-client.py:test_003()/222 cmd: $NMCLI --mode multiline --pretty -f UUID,TYPE con lang: C returncode: 0 @@ -11383,7 +11505,7 @@ TYPE: ethernet <<< size: 1616 -location: src/tests/client/test-client.py:test_003()/221 +location: src/tests/client/test-client.py:test_003()/223 cmd: $NMCLI --mode multiline --pretty -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -11412,12 +11534,12 @@ TYPE: ethernet ------------------------------------------------------------------------------- <<< -size: 7607 -location: src/tests/client/test-client.py:test_003()/222 +size: 7693 +location: src/tests/client/test-client.py:test_003()/224 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: C returncode: 0 -stdout: 7447 bytes +stdout: 7533 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -11435,8 +11557,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -11568,12 +11692,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7672 -location: src/tests/client/test-client.py:test_003()/223 +size: 7758 +location: src/tests/client/test-client.py:test_003()/225 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7502 bytes +stdout: 7588 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -11591,8 +11715,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -11724,12 +11850,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6625 -location: src/tests/client/test-client.py:test_003()/224 +size: 6711 +location: src/tests/client/test-client.py:test_003()/226 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6425 bytes +stdout: 6511 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -11747,8 +11873,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -11862,12 +11990,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6678 -location: src/tests/client/test-client.py:test_003()/225 +size: 6764 +location: src/tests/client/test-client.py:test_003()/227 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6468 bytes +stdout: 6554 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -11885,8 +12013,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12001,7 +12131,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4750 -location: src/tests/client/test-client.py:test_003()/226 +location: src/tests/client/test-client.py:test_003()/228 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: C returncode: 0 @@ -12085,7 +12215,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 4794 -location: src/tests/client/test-client.py:test_003()/227 +location: src/tests/client/test-client.py:test_003()/229 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -12169,7 +12299,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 6831 -location: src/tests/client/test-client.py:test_003()/228 +location: src/tests/client/test-client.py:test_003()/230 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con lang: C returncode: 0 @@ -12293,7 +12423,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 6865 -location: src/tests/client/test-client.py:test_003()/229 +location: src/tests/client/test-client.py:test_003()/231 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -12417,7 +12547,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 1630 -location: src/tests/client/test-client.py:test_003()/230 +location: src/tests/client/test-client.py:test_003()/232 cmd: $NMCLI --mode multiline --pretty --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -12447,7 +12577,7 @@ TYPE: ethernet <<< size: 1646 -location: src/tests/client/test-client.py:test_003()/231 +location: src/tests/client/test-client.py:test_003()/233 cmd: $NMCLI --mode multiline --pretty --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -12476,12 +12606,12 @@ TYPE: ethernet ------------------------------------------------------------------------------- <<< -size: 7619 -location: src/tests/client/test-client.py:test_003()/232 +size: 7705 +location: src/tests/client/test-client.py:test_003()/234 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 7447 bytes +stdout: 7533 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -12499,8 +12629,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12632,12 +12764,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7684 -location: src/tests/client/test-client.py:test_003()/233 +size: 7770 +location: src/tests/client/test-client.py:test_003()/235 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 7502 bytes +stdout: 7588 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -12655,8 +12787,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12788,12 +12922,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6637 -location: src/tests/client/test-client.py:test_003()/234 +size: 6723 +location: src/tests/client/test-client.py:test_003()/236 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 6425 bytes +stdout: 6511 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -12811,8 +12945,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12926,12 +13062,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6690 -location: src/tests/client/test-client.py:test_003()/235 +size: 6776 +location: src/tests/client/test-client.py:test_003()/237 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6468 bytes +stdout: 6554 bytes >>> =============================================================================== Szczegóły profilu połączenia (ethernet) @@ -12949,8 +13085,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -13065,7 +13203,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4762 -location: src/tests/client/test-client.py:test_003()/236 +location: src/tests/client/test-client.py:test_003()/238 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: C returncode: 0 @@ -13149,7 +13287,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 4806 -location: src/tests/client/test-client.py:test_003()/237 +location: src/tests/client/test-client.py:test_003()/239 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -13233,7 +13371,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e <<< size: 2524 -location: src/tests/client/test-client.py:test_003()/238 +location: src/tests/client/test-client.py:test_003()/240 cmd: $NMCLI --mode multiline --terse -f ALL con lang: C returncode: 0 @@ -13347,7 +13485,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 2534 -location: src/tests/client/test-client.py:test_003()/239 +location: src/tests/client/test-client.py:test_003()/241 cmd: $NMCLI --mode multiline --terse -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -13461,7 +13599,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 499 -location: src/tests/client/test-client.py:test_003()/240 +location: src/tests/client/test-client.py:test_003()/242 cmd: $NMCLI --mode multiline --terse -f UUID,TYPE con lang: C returncode: 0 @@ -13482,7 +13620,7 @@ TYPE:802-3-ethernet <<< size: 509 -location: src/tests/client/test-client.py:test_003()/241 +location: src/tests/client/test-client.py:test_003()/243 cmd: $NMCLI --mode multiline --terse -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -13502,12 +13640,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 3399 -location: src/tests/client/test-client.py:test_003()/242 +size: 3444 +location: src/tests/client/test-client.py:test_003()/244 cmd: $NMCLI --mode multiline --terse con s ethernet lang: C returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13522,8 +13660,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -13642,12 +13782,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3409 -location: src/tests/client/test-client.py:test_003()/243 +size: 3454 +location: src/tests/client/test-client.py:test_003()/245 cmd: $NMCLI --mode multiline --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13662,8 +13802,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -13782,12 +13924,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3049 -location: src/tests/client/test-client.py:test_003()/244 +size: 3094 +location: src/tests/client/test-client.py:test_003()/246 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13802,8 +13944,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -13908,12 +14052,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3059 -location: src/tests/client/test-client.py:test_003()/245 +size: 3104 +location: src/tests/client/test-client.py:test_003()/247 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13928,8 +14072,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -14035,7 +14181,7 @@ GENERAL.MASTER-PATH: <<< size: 2443 -location: src/tests/client/test-client.py:test_003()/246 +location: src/tests/client/test-client.py:test_003()/248 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: C returncode: 0 @@ -14107,7 +14253,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2453 -location: src/tests/client/test-client.py:test_003()/247 +location: src/tests/client/test-client.py:test_003()/249 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -14179,7 +14325,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2806 -location: src/tests/client/test-client.py:test_003()/248 +location: src/tests/client/test-client.py:test_003()/250 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con lang: C returncode: 0 @@ -14293,7 +14439,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 2816 -location: src/tests/client/test-client.py:test_003()/249 +location: src/tests/client/test-client.py:test_003()/251 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -14407,7 +14553,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 529 -location: src/tests/client/test-client.py:test_003()/250 +location: src/tests/client/test-client.py:test_003()/252 cmd: $NMCLI --mode multiline --terse --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -14428,7 +14574,7 @@ TYPE:802-3-ethernet <<< size: 539 -location: src/tests/client/test-client.py:test_003()/251 +location: src/tests/client/test-client.py:test_003()/253 cmd: $NMCLI --mode multiline --terse --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -14448,12 +14594,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 3411 -location: src/tests/client/test-client.py:test_003()/252 +size: 3456 +location: src/tests/client/test-client.py:test_003()/254 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14468,8 +14614,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -14588,12 +14736,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3421 -location: src/tests/client/test-client.py:test_003()/253 +size: 3466 +location: src/tests/client/test-client.py:test_003()/255 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 3240 bytes +stdout: 3285 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14608,8 +14756,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -14728,12 +14878,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3061 -location: src/tests/client/test-client.py:test_003()/254 +size: 3106 +location: src/tests/client/test-client.py:test_003()/256 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14748,8 +14898,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -14854,12 +15006,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3071 -location: src/tests/client/test-client.py:test_003()/255 +size: 3116 +location: src/tests/client/test-client.py:test_003()/257 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2850 bytes +stdout: 2895 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -14874,8 +15026,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -14981,7 +15135,7 @@ GENERAL.MASTER-PATH: <<< size: 2455 -location: src/tests/client/test-client.py:test_003()/256 +location: src/tests/client/test-client.py:test_003()/258 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: C returncode: 0 @@ -15053,7 +15207,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2465 -location: src/tests/client/test-client.py:test_003()/257 +location: src/tests/client/test-client.py:test_003()/259 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -15125,7 +15279,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethe <<< size: 2714 -location: src/tests/client/test-client.py:test_003()/258 +location: src/tests/client/test-client.py:test_003()/260 cmd: $NMCLI -f ALL con lang: C returncode: 0 @@ -15142,7 +15296,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 2740 -location: src/tests/client/test-client.py:test_003()/259 +location: src/tests/client/test-client.py:test_003()/261 cmd: $NMCLI -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -15159,7 +15313,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 423 -location: src/tests/client/test-client.py:test_003()/260 +location: src/tests/client/test-client.py:test_003()/262 cmd: $NMCLI -f UUID,TYPE con lang: C returncode: 0 @@ -15174,7 +15328,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 433 -location: src/tests/client/test-client.py:test_003()/261 +location: src/tests/client/test-client.py:test_003()/263 cmd: $NMCLI -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -15189,7 +15343,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 179 -location: src/tests/client/test-client.py:test_003()/262 +location: src/tests/client/test-client.py:test_003()/264 cmd: $NMCLI con s ethernet lang: C returncode: 10 @@ -15199,7 +15353,7 @@ Error: ethernet - no such connection profile. <<< size: 201 -location: src/tests/client/test-client.py:test_003()/263 +location: src/tests/client/test-client.py:test_003()/265 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -15209,7 +15363,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 885 -location: src/tests/client/test-client.py:test_003()/264 +location: src/tests/client/test-client.py:test_003()/266 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -15231,7 +15385,7 @@ GENERAL.MASTER-PATH: -- <<< size: 900 -location: src/tests/client/test-client.py:test_003()/265 +location: src/tests/client/test-client.py:test_003()/267 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -15253,7 +15407,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3813 -location: src/tests/client/test-client.py:test_003()/266 +location: src/tests/client/test-client.py:test_003()/268 cmd: $NMCLI -f all dev show eth0 lang: C returncode: 0 @@ -15325,7 +15479,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 3853 -location: src/tests/client/test-client.py:test_003()/267 +location: src/tests/client/test-client.py:test_003()/269 cmd: $NMCLI -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -15397,7 +15551,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 2996 -location: src/tests/client/test-client.py:test_003()/268 +location: src/tests/client/test-client.py:test_003()/270 cmd: $NMCLI --color yes -f ALL con lang: C returncode: 0 @@ -15414,7 +15568,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3022 -location: src/tests/client/test-client.py:test_003()/269 +location: src/tests/client/test-client.py:test_003()/271 cmd: $NMCLI --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -15431,7 +15585,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 435 -location: src/tests/client/test-client.py:test_003()/270 +location: src/tests/client/test-client.py:test_003()/272 cmd: $NMCLI --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -15446,7 +15600,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 445 -location: src/tests/client/test-client.py:test_003()/271 +location: src/tests/client/test-client.py:test_003()/273 cmd: $NMCLI --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -15461,7 +15615,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 191 -location: src/tests/client/test-client.py:test_003()/272 +location: src/tests/client/test-client.py:test_003()/274 cmd: $NMCLI --color yes con s ethernet lang: C returncode: 10 @@ -15471,7 +15625,7 @@ Error: ethernet - no such connection profile. <<< size: 213 -location: src/tests/client/test-client.py:test_003()/273 +location: src/tests/client/test-client.py:test_003()/275 cmd: $NMCLI --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -15481,7 +15635,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 897 -location: src/tests/client/test-client.py:test_003()/274 +location: src/tests/client/test-client.py:test_003()/276 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -15503,7 +15657,7 @@ GENERAL.MASTER-PATH: -- <<< size: 912 -location: src/tests/client/test-client.py:test_003()/275 +location: src/tests/client/test-client.py:test_003()/277 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -15525,7 +15679,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3825 -location: src/tests/client/test-client.py:test_003()/276 +location: src/tests/client/test-client.py:test_003()/278 cmd: $NMCLI --color yes -f all dev show eth0 lang: C returncode: 0 @@ -15597,7 +15751,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 3865 -location: src/tests/client/test-client.py:test_003()/277 +location: src/tests/client/test-client.py:test_003()/279 cmd: $NMCLI --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -15669,7 +15823,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 3200 -location: src/tests/client/test-client.py:test_003()/278 +location: src/tests/client/test-client.py:test_003()/280 cmd: $NMCLI --pretty -f ALL con lang: C returncode: 0 @@ -15690,7 +15844,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3248 -location: src/tests/client/test-client.py:test_003()/279 +location: src/tests/client/test-client.py:test_003()/281 cmd: $NMCLI --pretty -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -15711,7 +15865,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 634 -location: src/tests/client/test-client.py:test_003()/280 +location: src/tests/client/test-client.py:test_003()/282 cmd: $NMCLI --pretty -f UUID,TYPE con lang: C returncode: 0 @@ -15730,7 +15884,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 664 -location: src/tests/client/test-client.py:test_003()/281 +location: src/tests/client/test-client.py:test_003()/283 cmd: $NMCLI --pretty -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -15749,7 +15903,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 188 -location: src/tests/client/test-client.py:test_003()/282 +location: src/tests/client/test-client.py:test_003()/284 cmd: $NMCLI --pretty con s ethernet lang: C returncode: 10 @@ -15759,7 +15913,7 @@ Error: ethernet - no such connection profile. <<< size: 210 -location: src/tests/client/test-client.py:test_003()/283 +location: src/tests/client/test-client.py:test_003()/285 cmd: $NMCLI --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -15769,7 +15923,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 1420 -location: src/tests/client/test-client.py:test_003()/284 +location: src/tests/client/test-client.py:test_003()/286 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -15798,7 +15952,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1448 -location: src/tests/client/test-client.py:test_003()/285 +location: src/tests/client/test-client.py:test_003()/287 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -15827,7 +15981,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4753 -location: src/tests/client/test-client.py:test_003()/286 +location: src/tests/client/test-client.py:test_003()/288 cmd: $NMCLI --pretty -f all dev show eth0 lang: C returncode: 0 @@ -15911,7 +16065,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 4799 -location: src/tests/client/test-client.py:test_003()/287 +location: src/tests/client/test-client.py:test_003()/289 cmd: $NMCLI --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -15995,7 +16149,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 3482 -location: src/tests/client/test-client.py:test_003()/288 +location: src/tests/client/test-client.py:test_003()/290 cmd: $NMCLI --pretty --color yes -f ALL con lang: C returncode: 0 @@ -16016,7 +16170,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3530 -location: src/tests/client/test-client.py:test_003()/289 +location: src/tests/client/test-client.py:test_003()/291 cmd: $NMCLI --pretty --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -16037,7 +16191,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 646 -location: src/tests/client/test-client.py:test_003()/290 +location: src/tests/client/test-client.py:test_003()/292 cmd: $NMCLI --pretty --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -16056,7 +16210,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 676 -location: src/tests/client/test-client.py:test_003()/291 +location: src/tests/client/test-client.py:test_003()/293 cmd: $NMCLI --pretty --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -16075,7 +16229,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 200 -location: src/tests/client/test-client.py:test_003()/292 +location: src/tests/client/test-client.py:test_003()/294 cmd: $NMCLI --pretty --color yes con s ethernet lang: C returncode: 10 @@ -16085,7 +16239,7 @@ Error: ethernet - no such connection profile. <<< size: 222 -location: src/tests/client/test-client.py:test_003()/293 +location: src/tests/client/test-client.py:test_003()/295 cmd: $NMCLI --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -16095,7 +16249,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 1432 -location: src/tests/client/test-client.py:test_003()/294 +location: src/tests/client/test-client.py:test_003()/296 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -16124,7 +16278,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1460 -location: src/tests/client/test-client.py:test_003()/295 +location: src/tests/client/test-client.py:test_003()/297 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -16153,7 +16307,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4765 -location: src/tests/client/test-client.py:test_003()/296 +location: src/tests/client/test-client.py:test_003()/298 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: C returncode: 0 @@ -16237,7 +16391,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 4811 -location: src/tests/client/test-client.py:test_003()/297 +location: src/tests/client/test-client.py:test_003()/299 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -16321,7 +16475,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 1510 -location: src/tests/client/test-client.py:test_003()/298 +location: src/tests/client/test-client.py:test_003()/300 cmd: $NMCLI --terse -f ALL con lang: C returncode: 0 @@ -16337,7 +16491,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1520 -location: src/tests/client/test-client.py:test_003()/299 +location: src/tests/client/test-client.py:test_003()/301 cmd: $NMCLI --terse -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -16353,7 +16507,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 370 -location: src/tests/client/test-client.py:test_003()/300 +location: src/tests/client/test-client.py:test_003()/302 cmd: $NMCLI --terse -f UUID,TYPE con lang: C returncode: 0 @@ -16367,7 +16521,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 380 -location: src/tests/client/test-client.py:test_003()/301 +location: src/tests/client/test-client.py:test_003()/303 cmd: $NMCLI --terse -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -16381,7 +16535,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 187 -location: src/tests/client/test-client.py:test_003()/302 +location: src/tests/client/test-client.py:test_003()/304 cmd: $NMCLI --terse con s ethernet lang: C returncode: 10 @@ -16391,7 +16545,7 @@ Error: ethernet - no such connection profile. <<< size: 209 -location: src/tests/client/test-client.py:test_003()/303 +location: src/tests/client/test-client.py:test_003()/305 cmd: $NMCLI --terse con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -16401,7 +16555,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 573 -location: src/tests/client/test-client.py:test_003()/304 +location: src/tests/client/test-client.py:test_003()/306 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -16423,7 +16577,7 @@ GENERAL.MASTER-PATH: <<< size: 583 -location: src/tests/client/test-client.py:test_003()/305 +location: src/tests/client/test-client.py:test_003()/307 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -16445,7 +16599,7 @@ GENERAL.MASTER-PATH: <<< size: 2446 -location: src/tests/client/test-client.py:test_003()/306 +location: src/tests/client/test-client.py:test_003()/308 cmd: $NMCLI --terse -f all dev show eth0 lang: C returncode: 0 @@ -16517,7 +16671,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 2456 -location: src/tests/client/test-client.py:test_003()/307 +location: src/tests/client/test-client.py:test_003()/309 cmd: $NMCLI --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -16589,7 +16743,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 1792 -location: src/tests/client/test-client.py:test_003()/308 +location: src/tests/client/test-client.py:test_003()/310 cmd: $NMCLI --terse --color yes -f ALL con lang: C returncode: 0 @@ -16605,7 +16759,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1802 -location: src/tests/client/test-client.py:test_003()/309 +location: src/tests/client/test-client.py:test_003()/311 cmd: $NMCLI --terse --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -16621,7 +16775,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 382 -location: src/tests/client/test-client.py:test_003()/310 +location: src/tests/client/test-client.py:test_003()/312 cmd: $NMCLI --terse --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -16635,7 +16789,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 392 -location: src/tests/client/test-client.py:test_003()/311 +location: src/tests/client/test-client.py:test_003()/313 cmd: $NMCLI --terse --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -16649,7 +16803,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 199 -location: src/tests/client/test-client.py:test_003()/312 +location: src/tests/client/test-client.py:test_003()/314 cmd: $NMCLI --terse --color yes con s ethernet lang: C returncode: 10 @@ -16659,7 +16813,7 @@ Error: ethernet - no such connection profile. <<< size: 221 -location: src/tests/client/test-client.py:test_003()/313 +location: src/tests/client/test-client.py:test_003()/315 cmd: $NMCLI --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -16669,7 +16823,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 585 -location: src/tests/client/test-client.py:test_003()/314 +location: src/tests/client/test-client.py:test_003()/316 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -16691,7 +16845,7 @@ GENERAL.MASTER-PATH: <<< size: 595 -location: src/tests/client/test-client.py:test_003()/315 +location: src/tests/client/test-client.py:test_003()/317 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -16713,7 +16867,7 @@ GENERAL.MASTER-PATH: <<< size: 2458 -location: src/tests/client/test-client.py:test_003()/316 +location: src/tests/client/test-client.py:test_003()/318 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: C returncode: 0 @@ -16785,7 +16939,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 2468 -location: src/tests/client/test-client.py:test_003()/317 +location: src/tests/client/test-client.py:test_003()/319 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -16857,7 +17011,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 2729 -location: src/tests/client/test-client.py:test_003()/318 +location: src/tests/client/test-client.py:test_003()/320 cmd: $NMCLI --mode tabular -f ALL con lang: C returncode: 0 @@ -16874,7 +17028,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 2755 -location: src/tests/client/test-client.py:test_003()/319 +location: src/tests/client/test-client.py:test_003()/321 cmd: $NMCLI --mode tabular -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -16891,7 +17045,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 438 -location: src/tests/client/test-client.py:test_003()/320 +location: src/tests/client/test-client.py:test_003()/322 cmd: $NMCLI --mode tabular -f UUID,TYPE con lang: C returncode: 0 @@ -16906,7 +17060,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 448 -location: src/tests/client/test-client.py:test_003()/321 +location: src/tests/client/test-client.py:test_003()/323 cmd: $NMCLI --mode tabular -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -16921,7 +17075,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 194 -location: src/tests/client/test-client.py:test_003()/322 +location: src/tests/client/test-client.py:test_003()/324 cmd: $NMCLI --mode tabular con s ethernet lang: C returncode: 10 @@ -16931,7 +17085,7 @@ Error: ethernet - no such connection profile. <<< size: 216 -location: src/tests/client/test-client.py:test_003()/323 +location: src/tests/client/test-client.py:test_003()/325 cmd: $NMCLI --mode tabular con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -16941,7 +17095,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 695 -location: src/tests/client/test-client.py:test_003()/324 +location: src/tests/client/test-client.py:test_003()/326 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -16953,7 +17107,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< size: 709 -location: src/tests/client/test-client.py:test_003()/325 +location: src/tests/client/test-client.py:test_003()/327 cmd: $NMCLI --mode tabular c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -16965,7 +17119,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 3247 -location: src/tests/client/test-client.py:test_003()/326 +location: src/tests/client/test-client.py:test_003()/328 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: C returncode: 0 @@ -17000,7 +17154,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3281 -location: src/tests/client/test-client.py:test_003()/327 +location: src/tests/client/test-client.py:test_003()/329 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -17035,7 +17189,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3011 -location: src/tests/client/test-client.py:test_003()/328 +location: src/tests/client/test-client.py:test_003()/330 cmd: $NMCLI --mode tabular --color yes -f ALL con lang: C returncode: 0 @@ -17052,7 +17206,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3037 -location: src/tests/client/test-client.py:test_003()/329 +location: src/tests/client/test-client.py:test_003()/331 cmd: $NMCLI --mode tabular --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -17069,7 +17223,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 450 -location: src/tests/client/test-client.py:test_003()/330 +location: src/tests/client/test-client.py:test_003()/332 cmd: $NMCLI --mode tabular --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -17084,7 +17238,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 460 -location: src/tests/client/test-client.py:test_003()/331 +location: src/tests/client/test-client.py:test_003()/333 cmd: $NMCLI --mode tabular --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -17099,7 +17253,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 206 -location: src/tests/client/test-client.py:test_003()/332 +location: src/tests/client/test-client.py:test_003()/334 cmd: $NMCLI --mode tabular --color yes con s ethernet lang: C returncode: 10 @@ -17109,7 +17263,7 @@ Error: ethernet - no such connection profile. <<< size: 228 -location: src/tests/client/test-client.py:test_003()/333 +location: src/tests/client/test-client.py:test_003()/335 cmd: $NMCLI --mode tabular --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -17119,7 +17273,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 707 -location: src/tests/client/test-client.py:test_003()/334 +location: src/tests/client/test-client.py:test_003()/336 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -17131,7 +17285,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< size: 721 -location: src/tests/client/test-client.py:test_003()/335 +location: src/tests/client/test-client.py:test_003()/337 cmd: $NMCLI --mode tabular --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -17143,7 +17297,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 3259 -location: src/tests/client/test-client.py:test_003()/336 +location: src/tests/client/test-client.py:test_003()/338 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: C returncode: 0 @@ -17178,7 +17332,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3293 -location: src/tests/client/test-client.py:test_003()/337 +location: src/tests/client/test-client.py:test_003()/339 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -17213,7 +17367,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3215 -location: src/tests/client/test-client.py:test_003()/338 +location: src/tests/client/test-client.py:test_003()/340 cmd: $NMCLI --mode tabular --pretty -f ALL con lang: C returncode: 0 @@ -17234,7 +17388,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3263 -location: src/tests/client/test-client.py:test_003()/339 +location: src/tests/client/test-client.py:test_003()/341 cmd: $NMCLI --mode tabular --pretty -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -17255,7 +17409,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 649 -location: src/tests/client/test-client.py:test_003()/340 +location: src/tests/client/test-client.py:test_003()/342 cmd: $NMCLI --mode tabular --pretty -f UUID,TYPE con lang: C returncode: 0 @@ -17274,7 +17428,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 679 -location: src/tests/client/test-client.py:test_003()/341 +location: src/tests/client/test-client.py:test_003()/343 cmd: $NMCLI --mode tabular --pretty -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -17293,7 +17447,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 203 -location: src/tests/client/test-client.py:test_003()/342 +location: src/tests/client/test-client.py:test_003()/344 cmd: $NMCLI --mode tabular --pretty con s ethernet lang: C returncode: 10 @@ -17303,7 +17457,7 @@ Error: ethernet - no such connection profile. <<< size: 225 -location: src/tests/client/test-client.py:test_003()/343 +location: src/tests/client/test-client.py:test_003()/345 cmd: $NMCLI --mode tabular --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -17313,7 +17467,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 1255 -location: src/tests/client/test-client.py:test_003()/344 +location: src/tests/client/test-client.py:test_003()/346 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -17332,7 +17486,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< size: 1306 -location: src/tests/client/test-client.py:test_003()/345 +location: src/tests/client/test-client.py:test_003()/347 cmd: $NMCLI --mode tabular --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -17351,7 +17505,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 4883 -location: src/tests/client/test-client.py:test_003()/346 +location: src/tests/client/test-client.py:test_003()/348 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: C returncode: 0 @@ -17398,7 +17552,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 4955 -location: src/tests/client/test-client.py:test_003()/347 +location: src/tests/client/test-client.py:test_003()/349 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -17445,7 +17599,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 3497 -location: src/tests/client/test-client.py:test_003()/348 +location: src/tests/client/test-client.py:test_003()/350 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con lang: C returncode: 0 @@ -17466,7 +17620,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 never <<< size: 3545 -location: src/tests/client/test-client.py:test_003()/349 +location: src/tests/client/test-client.py:test_003()/351 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -17487,7 +17641,7 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet 0 nigdy <<< size: 661 -location: src/tests/client/test-client.py:test_003()/350 +location: src/tests/client/test-client.py:test_003()/352 cmd: $NMCLI --mode tabular --pretty --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -17506,7 +17660,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 691 -location: src/tests/client/test-client.py:test_003()/351 +location: src/tests/client/test-client.py:test_003()/353 cmd: $NMCLI --mode tabular --pretty --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -17525,7 +17679,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< size: 215 -location: src/tests/client/test-client.py:test_003()/352 +location: src/tests/client/test-client.py:test_003()/354 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet lang: C returncode: 10 @@ -17535,7 +17689,7 @@ Error: ethernet - no such connection profile. <<< size: 237 -location: src/tests/client/test-client.py:test_003()/353 +location: src/tests/client/test-client.py:test_003()/355 cmd: $NMCLI --mode tabular --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -17545,7 +17699,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 1267 -location: src/tests/client/test-client.py:test_003()/354 +location: src/tests/client/test-client.py:test_003()/356 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -17564,7 +17718,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deac <<< size: 1318 -location: src/tests/client/test-client.py:test_003()/355 +location: src/tests/client/test-client.py:test_003()/357 cmd: $NMCLI --mode tabular --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -17583,7 +17737,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deza <<< size: 4895 -location: src/tests/client/test-client.py:test_003()/356 +location: src/tests/client/test-client.py:test_003()/358 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: C returncode: 0 @@ -17630,7 +17784,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 4967 -location: src/tests/client/test-client.py:test_003()/357 +location: src/tests/client/test-client.py:test_003()/359 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -17677,7 +17831,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,6} 5fcfd6 <<< size: 1525 -location: src/tests/client/test-client.py:test_003()/358 +location: src/tests/client/test-client.py:test_003()/360 cmd: $NMCLI --mode tabular --terse -f ALL con lang: C returncode: 0 @@ -17693,7 +17847,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1535 -location: src/tests/client/test-client.py:test_003()/359 +location: src/tests/client/test-client.py:test_003()/361 cmd: $NMCLI --mode tabular --terse -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -17709,7 +17863,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 385 -location: src/tests/client/test-client.py:test_003()/360 +location: src/tests/client/test-client.py:test_003()/362 cmd: $NMCLI --mode tabular --terse -f UUID,TYPE con lang: C returncode: 0 @@ -17723,7 +17877,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 395 -location: src/tests/client/test-client.py:test_003()/361 +location: src/tests/client/test-client.py:test_003()/363 cmd: $NMCLI --mode tabular --terse -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -17737,7 +17891,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 202 -location: src/tests/client/test-client.py:test_003()/362 +location: src/tests/client/test-client.py:test_003()/364 cmd: $NMCLI --mode tabular --terse con s ethernet lang: C returncode: 10 @@ -17747,7 +17901,7 @@ Error: ethernet - no such connection profile. <<< size: 224 -location: src/tests/client/test-client.py:test_003()/363 +location: src/tests/client/test-client.py:test_003()/365 cmd: $NMCLI --mode tabular --terse con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -17757,7 +17911,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 390 -location: src/tests/client/test-client.py:test_003()/364 +location: src/tests/client/test-client.py:test_003()/366 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -17767,7 +17921,7 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no: <<< size: 400 -location: src/tests/client/test-client.py:test_003()/365 +location: src/tests/client/test-client.py:test_003()/367 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -17777,7 +17931,7 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no: <<< size: 1471 -location: src/tests/client/test-client.py:test_003()/366 +location: src/tests/client/test-client.py:test_003()/368 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: C returncode: 0 @@ -17795,7 +17949,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 1481 -location: src/tests/client/test-client.py:test_003()/367 +location: src/tests/client/test-client.py:test_003()/369 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -17813,7 +17967,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 1807 -location: src/tests/client/test-client.py:test_003()/368 +location: src/tests/client/test-client.py:test_003()/370 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con lang: C returncode: 0 @@ -17829,7 +17983,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 1817 -location: src/tests/client/test-client.py:test_003()/369 +location: src/tests/client/test-client.py:test_003()/371 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -17845,7 +17999,7 @@ con-xx1:UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet:0:never:yes:0:no:/or <<< size: 397 -location: src/tests/client/test-client.py:test_003()/370 +location: src/tests/client/test-client.py:test_003()/372 cmd: $NMCLI --mode tabular --terse --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -17859,7 +18013,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 407 -location: src/tests/client/test-client.py:test_003()/371 +location: src/tests/client/test-client.py:test_003()/373 cmd: $NMCLI --mode tabular --terse --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -17873,7 +18027,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< size: 214 -location: src/tests/client/test-client.py:test_003()/372 +location: src/tests/client/test-client.py:test_003()/374 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: C returncode: 10 @@ -17883,7 +18037,7 @@ Error: ethernet - no such connection profile. <<< size: 236 -location: src/tests/client/test-client.py:test_003()/373 +location: src/tests/client/test-client.py:test_003()/375 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -17893,7 +18047,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 402 -location: src/tests/client/test-client.py:test_003()/374 +location: src/tests/client/test-client.py:test_003()/376 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -17903,7 +18057,7 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no: <<< size: 412 -location: src/tests/client/test-client.py:test_003()/375 +location: src/tests/client/test-client.py:test_003()/377 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -17913,7 +18067,7 @@ GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no: <<< size: 1483 -location: src/tests/client/test-client.py:test_003()/376 +location: src/tests/client/test-client.py:test_003()/378 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: C returncode: 0 @@ -17931,7 +18085,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 1493 -location: src/tests/client/test-client.py:test_003()/377 +location: src/tests/client/test-client.py:test_003()/379 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -17949,7 +18103,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,6}:5fcfd6d7 <<< size: 5759 -location: src/tests/client/test-client.py:test_003()/378 +location: src/tests/client/test-client.py:test_003()/380 cmd: $NMCLI --mode multiline -f ALL con lang: C returncode: 0 @@ -18063,7 +18217,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 5785 -location: src/tests/client/test-client.py:test_003()/379 +location: src/tests/client/test-client.py:test_003()/381 cmd: $NMCLI --mode multiline -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -18177,7 +18331,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 767 -location: src/tests/client/test-client.py:test_003()/380 +location: src/tests/client/test-client.py:test_003()/382 cmd: $NMCLI --mode multiline -f UUID,TYPE con lang: C returncode: 0 @@ -18196,7 +18350,7 @@ TYPE: ethernet <<< size: 777 -location: src/tests/client/test-client.py:test_003()/381 +location: src/tests/client/test-client.py:test_003()/383 cmd: $NMCLI --mode multiline -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -18215,7 +18369,7 @@ TYPE: ethernet <<< size: 196 -location: src/tests/client/test-client.py:test_003()/382 +location: src/tests/client/test-client.py:test_003()/384 cmd: $NMCLI --mode multiline con s ethernet lang: C returncode: 10 @@ -18225,7 +18379,7 @@ Error: ethernet - no such connection profile. <<< size: 218 -location: src/tests/client/test-client.py:test_003()/383 +location: src/tests/client/test-client.py:test_003()/385 cmd: $NMCLI --mode multiline con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -18235,7 +18389,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 902 -location: src/tests/client/test-client.py:test_003()/384 +location: src/tests/client/test-client.py:test_003()/386 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -18257,7 +18411,7 @@ GENERAL.MASTER-PATH: -- <<< size: 917 -location: src/tests/client/test-client.py:test_003()/385 +location: src/tests/client/test-client.py:test_003()/387 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -18279,7 +18433,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3830 -location: src/tests/client/test-client.py:test_003()/386 +location: src/tests/client/test-client.py:test_003()/388 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: C returncode: 0 @@ -18351,7 +18505,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 3870 -location: src/tests/client/test-client.py:test_003()/387 +location: src/tests/client/test-client.py:test_003()/389 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -18423,7 +18577,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 6041 -location: src/tests/client/test-client.py:test_003()/388 +location: src/tests/client/test-client.py:test_003()/390 cmd: $NMCLI --mode multiline --color yes -f ALL con lang: C returncode: 0 @@ -18537,7 +18691,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 6067 -location: src/tests/client/test-client.py:test_003()/389 +location: src/tests/client/test-client.py:test_003()/391 cmd: $NMCLI --mode multiline --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -18651,7 +18805,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 779 -location: src/tests/client/test-client.py:test_003()/390 +location: src/tests/client/test-client.py:test_003()/392 cmd: $NMCLI --mode multiline --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -18670,7 +18824,7 @@ TYPE: ethernet <<< size: 789 -location: src/tests/client/test-client.py:test_003()/391 +location: src/tests/client/test-client.py:test_003()/393 cmd: $NMCLI --mode multiline --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -18689,7 +18843,7 @@ TYPE: ethernet <<< size: 208 -location: src/tests/client/test-client.py:test_003()/392 +location: src/tests/client/test-client.py:test_003()/394 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: C returncode: 10 @@ -18699,7 +18853,7 @@ Error: ethernet - no such connection profile. <<< size: 230 -location: src/tests/client/test-client.py:test_003()/393 +location: src/tests/client/test-client.py:test_003()/395 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -18709,7 +18863,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 914 -location: src/tests/client/test-client.py:test_003()/394 +location: src/tests/client/test-client.py:test_003()/396 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -18731,7 +18885,7 @@ GENERAL.MASTER-PATH: -- <<< size: 929 -location: src/tests/client/test-client.py:test_003()/395 +location: src/tests/client/test-client.py:test_003()/397 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -18753,7 +18907,7 @@ GENERAL.MASTER-PATH: -- <<< size: 3842 -location: src/tests/client/test-client.py:test_003()/396 +location: src/tests/client/test-client.py:test_003()/398 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: C returncode: 0 @@ -18825,7 +18979,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 3882 -location: src/tests/client/test-client.py:test_003()/397 +location: src/tests/client/test-client.py:test_003()/399 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -18897,7 +19051,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 6545 -location: src/tests/client/test-client.py:test_003()/398 +location: src/tests/client/test-client.py:test_003()/400 cmd: $NMCLI --mode multiline --pretty -f ALL con lang: C returncode: 0 @@ -19021,7 +19175,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 6577 -location: src/tests/client/test-client.py:test_003()/399 +location: src/tests/client/test-client.py:test_003()/401 cmd: $NMCLI --mode multiline --pretty -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -19145,7 +19299,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 1394 -location: src/tests/client/test-client.py:test_003()/400 +location: src/tests/client/test-client.py:test_003()/402 cmd: $NMCLI --mode multiline --pretty -f UUID,TYPE con lang: C returncode: 0 @@ -19172,7 +19326,7 @@ TYPE: ethernet <<< size: 1410 -location: src/tests/client/test-client.py:test_003()/401 +location: src/tests/client/test-client.py:test_003()/403 cmd: $NMCLI --mode multiline --pretty -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -19199,7 +19353,7 @@ TYPE: ethernet <<< size: 205 -location: src/tests/client/test-client.py:test_003()/402 +location: src/tests/client/test-client.py:test_003()/404 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: C returncode: 10 @@ -19209,7 +19363,7 @@ Error: ethernet - no such connection profile. <<< size: 227 -location: src/tests/client/test-client.py:test_003()/403 +location: src/tests/client/test-client.py:test_003()/405 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -19219,7 +19373,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 1437 -location: src/tests/client/test-client.py:test_003()/404 +location: src/tests/client/test-client.py:test_003()/406 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -19248,7 +19402,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1465 -location: src/tests/client/test-client.py:test_003()/405 +location: src/tests/client/test-client.py:test_003()/407 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -19277,7 +19431,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4770 -location: src/tests/client/test-client.py:test_003()/406 +location: src/tests/client/test-client.py:test_003()/408 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: C returncode: 0 @@ -19361,7 +19515,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 4816 -location: src/tests/client/test-client.py:test_003()/407 +location: src/tests/client/test-client.py:test_003()/409 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -19445,7 +19599,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 6827 -location: src/tests/client/test-client.py:test_003()/408 +location: src/tests/client/test-client.py:test_003()/410 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con lang: C returncode: 0 @@ -19569,7 +19723,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 6859 -location: src/tests/client/test-client.py:test_003()/409 +location: src/tests/client/test-client.py:test_003()/411 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -19693,7 +19847,7 @@ FILENAME: /etc/NetworkManager/system-connections/c <<< size: 1406 -location: src/tests/client/test-client.py:test_003()/410 +location: src/tests/client/test-client.py:test_003()/412 cmd: $NMCLI --mode multiline --pretty --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -19720,7 +19874,7 @@ TYPE: ethernet <<< size: 1422 -location: src/tests/client/test-client.py:test_003()/411 +location: src/tests/client/test-client.py:test_003()/413 cmd: $NMCLI --mode multiline --pretty --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -19747,7 +19901,7 @@ TYPE: ethernet <<< size: 217 -location: src/tests/client/test-client.py:test_003()/412 +location: src/tests/client/test-client.py:test_003()/414 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: C returncode: 10 @@ -19757,7 +19911,7 @@ Error: ethernet - no such connection profile. <<< size: 239 -location: src/tests/client/test-client.py:test_003()/413 +location: src/tests/client/test-client.py:test_003()/415 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -19767,7 +19921,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 1449 -location: src/tests/client/test-client.py:test_003()/414 +location: src/tests/client/test-client.py:test_003()/416 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -19796,7 +19950,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1477 -location: src/tests/client/test-client.py:test_003()/415 +location: src/tests/client/test-client.py:test_003()/417 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -19825,7 +19979,7 @@ GENERAL.MASTER-PATH: -- <<< size: 4782 -location: src/tests/client/test-client.py:test_003()/416 +location: src/tests/client/test-client.py:test_003()/418 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: C returncode: 0 @@ -19909,7 +20063,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa <<< size: 4828 -location: src/tests/client/test-client.py:test_003()/417 +location: src/tests/client/test-client.py:test_003()/419 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -19993,7 +20147,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <niewidoczne> | /org/freedesktop/Network <<< size: 2500 -location: src/tests/client/test-client.py:test_003()/418 +location: src/tests/client/test-client.py:test_003()/420 cmd: $NMCLI --mode multiline --terse -f ALL con lang: C returncode: 0 @@ -20107,7 +20261,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 2510 -location: src/tests/client/test-client.py:test_003()/419 +location: src/tests/client/test-client.py:test_003()/421 cmd: $NMCLI --mode multiline --terse -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -20221,7 +20375,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 437 -location: src/tests/client/test-client.py:test_003()/420 +location: src/tests/client/test-client.py:test_003()/422 cmd: $NMCLI --mode multiline --terse -f UUID,TYPE con lang: C returncode: 0 @@ -20240,7 +20394,7 @@ TYPE:802-3-ethernet <<< size: 447 -location: src/tests/client/test-client.py:test_003()/421 +location: src/tests/client/test-client.py:test_003()/423 cmd: $NMCLI --mode multiline --terse -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -20259,7 +20413,7 @@ TYPE:802-3-ethernet <<< size: 204 -location: src/tests/client/test-client.py:test_003()/422 +location: src/tests/client/test-client.py:test_003()/424 cmd: $NMCLI --mode multiline --terse con s ethernet lang: C returncode: 10 @@ -20269,7 +20423,7 @@ Error: ethernet - no such connection profile. <<< size: 226 -location: src/tests/client/test-client.py:test_003()/423 +location: src/tests/client/test-client.py:test_003()/425 cmd: $NMCLI --mode multiline --terse con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -20279,7 +20433,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 590 -location: src/tests/client/test-client.py:test_003()/424 +location: src/tests/client/test-client.py:test_003()/426 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -20301,7 +20455,7 @@ GENERAL.MASTER-PATH: <<< size: 600 -location: src/tests/client/test-client.py:test_003()/425 +location: src/tests/client/test-client.py:test_003()/427 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -20323,7 +20477,7 @@ GENERAL.MASTER-PATH: <<< size: 2463 -location: src/tests/client/test-client.py:test_003()/426 +location: src/tests/client/test-client.py:test_003()/428 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: C returncode: 0 @@ -20395,7 +20549,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 2473 -location: src/tests/client/test-client.py:test_003()/427 +location: src/tests/client/test-client.py:test_003()/429 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -20467,7 +20621,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 2782 -location: src/tests/client/test-client.py:test_003()/428 +location: src/tests/client/test-client.py:test_003()/430 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con lang: C returncode: 0 @@ -20581,7 +20735,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 2792 -location: src/tests/client/test-client.py:test_003()/429 +location: src/tests/client/test-client.py:test_003()/431 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con lang: pl_PL.UTF-8 returncode: 0 @@ -20695,7 +20849,7 @@ FILENAME:/etc/NetworkManager/system-connections/con-xx1 <<< size: 449 -location: src/tests/client/test-client.py:test_003()/430 +location: src/tests/client/test-client.py:test_003()/432 cmd: $NMCLI --mode multiline --terse --color yes -f UUID,TYPE con lang: C returncode: 0 @@ -20714,7 +20868,7 @@ TYPE:802-3-ethernet <<< size: 459 -location: src/tests/client/test-client.py:test_003()/431 +location: src/tests/client/test-client.py:test_003()/433 cmd: $NMCLI --mode multiline --terse --color yes -f UUID,TYPE con lang: pl_PL.UTF-8 returncode: 0 @@ -20733,7 +20887,7 @@ TYPE:802-3-ethernet <<< size: 216 -location: src/tests/client/test-client.py:test_003()/432 +location: src/tests/client/test-client.py:test_003()/434 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: C returncode: 10 @@ -20743,7 +20897,7 @@ Error: ethernet - no such connection profile. <<< size: 238 -location: src/tests/client/test-client.py:test_003()/433 +location: src/tests/client/test-client.py:test_003()/435 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 10 @@ -20753,7 +20907,7 @@ Błąd: ethernet — nie ma takiego profilu połączenia. <<< size: 602 -location: src/tests/client/test-client.py:test_003()/434 +location: src/tests/client/test-client.py:test_003()/436 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 @@ -20775,7 +20929,7 @@ GENERAL.MASTER-PATH: <<< size: 612 -location: src/tests/client/test-client.py:test_003()/435 +location: src/tests/client/test-client.py:test_003()/437 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 @@ -20797,7 +20951,7 @@ GENERAL.MASTER-PATH: <<< size: 2475 -location: src/tests/client/test-client.py:test_003()/436 +location: src/tests/client/test-client.py:test_003()/438 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: C returncode: 0 @@ -20869,7 +21023,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManag <<< size: 2485 -location: src/tests/client/test-client.py:test_003()/437 +location: src/tests/client/test-client.py:test_003()/439 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 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 cbc11750..6486a8a2 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: 5080 +size: 5166 location: src/tests/client/test-client.py:test_004()/8 cmd: $NMCLI con s con-xx1 lang: C returncode: 0 -stdout: 4949 bytes +stdout: 5035 bytes >>> connection.id: con-xx1 connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA @@ -78,8 +78,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -172,12 +174,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 5115 +size: 5201 location: src/tests/client/test-client.py:test_004()/9 cmd: $NMCLI con s con-xx1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4974 bytes +stdout: 5060 bytes >>> connection.id: con-xx1 connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA @@ -192,8 +194,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -322,12 +326,12 @@ con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn -- con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi -- <<< -size: 4578 +size: 4664 location: src/tests/client/test-client.py:test_004()/13 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 4444 bytes +stdout: 4530 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -342,8 +346,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -426,12 +432,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4605 +size: 4691 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: 4461 bytes +stdout: 4547 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -446,8 +452,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -602,12 +610,12 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0 con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet -- <<< -size: 5706 +size: 5792 location: src/tests/client/test-client.py:test_004()/21 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5572 bytes +stdout: 5658 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -622,8 +630,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -727,12 +737,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5739 +size: 5825 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: 5595 bytes +stdout: 5681 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -747,8 +757,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -934,12 +946,38 @@ Strony podręcznika nmcli(1) i nmcli-examples(7) zawierają pełne informacje o użyciu. <<< -size: 5712 +size: 1448 location: src/tests/client/test-client.py:test_004()/25 +cmd: $NMCLI -f all connection show --order na:-active +lang: C +returncode: 0 +stdout: 1288 bytes +>>> +NAME UUID TYPE TIMESTAMP TIMESTAMP-REAL AUTOCONNECT AUTOCONNECT-PRIORITY READONLY DBUS-PATH ACTIVE DEVICE STATE ACTIVE-PATH SLAVE FILENAME +con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/1 no -- -- -- -- /etc/NetworkManager/system-connections/con-1 +con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/3 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/2 -- /etc/NetworkManager/system-connections/con-vpn-1 +con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/2 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/1 -- /etc/NetworkManager/system-connections/con-xx1 + +<<< +size: 1448 +location: src/tests/client/test-client.py:test_004()/26 +cmd: $NMCLI -f all connection show --order active:-na +lang: C +returncode: 0 +stdout: 1288 bytes +>>> +NAME UUID TYPE TIMESTAMP TIMESTAMP-REAL AUTOCONNECT AUTOCONNECT-PRIORITY READONLY DBUS-PATH ACTIVE DEVICE STATE ACTIVE-PATH SLAVE FILENAME +con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/3 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/2 -- /etc/NetworkManager/system-connections/con-vpn-1 +con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/2 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/1 -- /etc/NetworkManager/system-connections/con-xx1 +con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/1 no -- -- -- -- /etc/NetworkManager/system-connections/con-1 + +<<< +size: 5798 +location: src/tests/client/test-client.py:test_004()/27 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -954,8 +992,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1059,12 +1099,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5749 -location: src/tests/client/test-client.py:test_004()/26 +size: 5835 +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: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1079,8 +1119,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1184,12 +1226,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5712 -location: src/tests/client/test-client.py:test_004()/27 +size: 5798 +location: src/tests/client/test-client.py:test_004()/29 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1204,8 +1246,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1309,12 +1353,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5749 -location: src/tests/client/test-client.py:test_004()/28 +size: 5835 +location: src/tests/client/test-client.py:test_004()/30 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1329,8 +1373,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1434,12 +1480,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4585 -location: src/tests/client/test-client.py:test_004()/29 +size: 4671 +location: src/tests/client/test-client.py:test_004()/31 cmd: $NMCLI -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4444 bytes +stdout: 4530 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1454,8 +1500,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1538,12 +1586,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4612 -location: src/tests/client/test-client.py:test_004()/30 +size: 4698 +location: src/tests/client/test-client.py:test_004()/32 cmd: $NMCLI -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4461 bytes +stdout: 4547 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1558,8 +1606,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -1643,7 +1693,7 @@ proxy.pac-script: -- <<< size: 474 -location: src/tests/client/test-client.py:test_004()/31 +location: src/tests/client/test-client.py:test_004()/33 cmd: $NMCLI -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -1658,7 +1708,7 @@ vpn.timeout: 0 <<< size: 485 -location: src/tests/client/test-client.py:test_004()/32 +location: src/tests/client/test-client.py:test_004()/34 cmd: $NMCLI -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -1673,7 +1723,7 @@ vpn.timeout: 0 <<< size: 857 -location: src/tests/client/test-client.py:test_004()/33 +location: src/tests/client/test-client.py:test_004()/35 cmd: $NMCLI -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -1695,7 +1745,7 @@ GENERAL.MASTER-PATH: -- <<< size: 870 -location: src/tests/client/test-client.py:test_004()/34 +location: src/tests/client/test-client.py:test_004()/36 cmd: $NMCLI -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -1717,7 +1767,7 @@ GENERAL.MASTER-PATH: -- <<< size: 381 -location: src/tests/client/test-client.py:test_004()/35 +location: src/tests/client/test-client.py:test_004()/37 cmd: $NMCLI dev s lang: C returncode: 0 @@ -1732,7 +1782,7 @@ wlan1 wifi unavailable -- <<< size: 397 -location: src/tests/client/test-client.py:test_004()/36 +location: src/tests/client/test-client.py:test_004()/38 cmd: $NMCLI dev s lang: pl_PL.UTF-8 returncode: 0 @@ -1747,7 +1797,7 @@ wlan1 wifi niedostępne -- <<< size: 1408 -location: src/tests/client/test-client.py:test_004()/37 +location: src/tests/client/test-client.py:test_004()/39 cmd: $NMCLI -f all dev status lang: C returncode: 0 @@ -1762,7 +1812,7 @@ wlan1 wifi unavailable unknown unknown /org/freedesk <<< size: 1424 -location: src/tests/client/test-client.py:test_004()/38 +location: src/tests/client/test-client.py:test_004()/40 cmd: $NMCLI -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -1777,7 +1827,7 @@ wlan1 wifi niedostępne nieznane nieznane /org/freedes <<< size: 8042 -location: src/tests/client/test-client.py:test_004()/39 +location: src/tests/client/test-client.py:test_004()/41 cmd: $NMCLI dev show lang: C returncode: 0 @@ -1923,7 +1973,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 8074 -location: src/tests/client/test-client.py:test_004()/40 +location: src/tests/client/test-client.py:test_004()/42 cmd: $NMCLI dev show lang: pl_PL.UTF-8 returncode: 0 @@ -2068,12 +2118,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22653 -location: src/tests/client/test-client.py:test_004()/41 +size: 22797 +location: src/tests/client/test-client.py:test_004()/43 cmd: $NMCLI -f all dev show lang: C returncode: 0 -stdout: 22518 bytes +stdout: 22662 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -2120,6 +2170,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -2368,6 +2419,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -2465,6 +2517,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no IP4.ADDRESS[1]: 192.168.97.124/29 @@ -2497,12 +2550,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 22821 -location: src/tests/client/test-client.py:test_004()/42 +size: 22968 +location: src/tests/client/test-client.py:test_004()/44 cmd: $NMCLI -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 22676 bytes +stdout: 22823 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -2549,6 +2602,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -2797,6 +2851,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -2894,6 +2949,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie IP4.ADDRESS[1]: 192.168.97.124/29 @@ -2927,7 +2983,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1495 -location: src/tests/client/test-client.py:test_004()/43 +location: src/tests/client/test-client.py:test_004()/45 cmd: $NMCLI dev show wlan0 lang: C returncode: 0 @@ -2960,7 +3016,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1507 -location: src/tests/client/test-client.py:test_004()/44 +location: src/tests/client/test-client.py:test_004()/46 cmd: $NMCLI dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -2992,12 +3048,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5406 -location: src/tests/client/test-client.py:test_004()/45 +size: 5454 +location: src/tests/client/test-client.py:test_004()/47 cmd: $NMCLI -f all dev show wlan0 lang: C returncode: 0 -stdout: 5266 bytes +stdout: 5314 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3044,6 +3100,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -3103,12 +3160,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5467 -location: src/tests/client/test-client.py:test_004()/46 +size: 5516 +location: src/tests/client/test-client.py:test_004()/48 cmd: $NMCLI -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5317 bytes +stdout: 5366 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3155,6 +3212,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -3214,12 +3272,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2171 -location: src/tests/client/test-client.py:test_004()/47 +size: 2219 +location: src/tests/client/test-client.py:test_004()/49 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3259,16 +3317,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2198 -location: src/tests/client/test-client.py:test_004()/48 +size: 2247 +location: src/tests/client/test-client.py:test_004()/50 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3308,16 +3367,17 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2171 -location: src/tests/client/test-client.py:test_004()/49 +size: 2219 +location: src/tests/client/test-client.py:test_004()/51 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3357,16 +3417,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2198 -location: src/tests/client/test-client.py:test_004()/50 +size: 2247 +location: src/tests/client/test-client.py:test_004()/52 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3406,12 +3467,13 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< size: 512 -location: src/tests/client/test-client.py:test_004()/51 +location: src/tests/client/test-client.py:test_004()/53 cmd: $NMCLI -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -3426,7 +3488,7 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< size: 522 -location: src/tests/client/test-client.py:test_004()/52 +location: src/tests/client/test-client.py:test_004()/54 cmd: $NMCLI -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -3440,44 +3502,44 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/4 wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< -size: 1982 -location: src/tests/client/test-client.py:test_004()/53 +size: 2059 +location: src/tests/client/test-client.py:test_004()/55 cmd: $NMCLI -f ALL device wifi list lang: C returncode: 0 -stdout: 1840 bytes +stdout: 1917 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 40 MHz 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 2050 -location: src/tests/client/test-client.py:test_004()/54 +size: 2135 +location: src/tests/client/test-client.py:test_004()/56 cmd: $NMCLI -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 1898 bytes +stdout: 1983 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< size: 737 -location: src/tests/client/test-client.py:test_004()/55 +location: src/tests/client/test-client.py:test_004()/57 cmd: $NMCLI -f COMMON device wifi list lang: C returncode: 0 @@ -3495,7 +3557,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 797 -location: src/tests/client/test-client.py:test_004()/56 +location: src/tests/client/test-client.py:test_004()/58 cmd: $NMCLI -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -3513,7 +3575,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 2095 -location: src/tests/client/test-client.py:test_004()/57 +location: src/tests/client/test-client.py:test_004()/59 cmd: $NMCLI -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -3531,7 +3593,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 2163 -location: src/tests/client/test-client.py:test_004()/58 +location: src/tests/client/test-client.py:test_004()/60 cmd: $NMCLI -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -3548,34 +3610,34 @@ AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 735 -location: src/tests/client/test-client.py:test_004()/59 +size: 757 +location: src/tests/client/test-client.py:test_004()/61 cmd: $NMCLI -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 570 bytes +stdout: 592 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 763 -location: src/tests/client/test-client.py:test_004()/60 +size: 787 +location: src/tests/client/test-client.py:test_004()/62 cmd: $NMCLI -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 588 bytes +stdout: 612 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 346 -location: src/tests/client/test-client.py:test_004()/61 +location: src/tests/client/test-client.py:test_004()/63 cmd: $NMCLI -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -3588,7 +3650,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 372 -location: src/tests/client/test-client.py:test_004()/62 +location: src/tests/client/test-client.py:test_004()/64 cmd: $NMCLI -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -3601,7 +3663,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 848 -location: src/tests/client/test-client.py:test_004()/63 +location: src/tests/client/test-client.py:test_004()/65 cmd: $NMCLI -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -3614,7 +3676,7 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MH <<< size: 876 -location: src/tests/client/test-client.py:test_004()/64 +location: src/tests/client/test-client.py:test_004()/66 cmd: $NMCLI -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -3626,12 +3688,12 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 5409 -location: src/tests/client/test-client.py:test_004()/65 +size: 5457 +location: src/tests/client/test-client.py:test_004()/67 cmd: $NMCLI -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5266 bytes +stdout: 5314 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3678,6 +3740,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -3737,12 +3800,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5470 -location: src/tests/client/test-client.py:test_004()/66 +size: 5519 +location: src/tests/client/test-client.py:test_004()/68 cmd: $NMCLI -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5317 bytes +stdout: 5366 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3789,6 +3852,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -3849,7 +3913,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1508 -location: src/tests/client/test-client.py:test_004()/67 +location: src/tests/client/test-client.py:test_004()/69 cmd: $NMCLI -f COMMON device show wlan0 lang: C returncode: 0 @@ -3882,7 +3946,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1520 -location: src/tests/client/test-client.py:test_004()/68 +location: src/tests/client/test-client.py:test_004()/70 cmd: $NMCLI -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -3914,12 +3978,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5373 -location: src/tests/client/test-client.py:test_004()/69 +size: 5421 +location: src/tests/client/test-client.py:test_004()/71 cmd: $NMCLI -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 5092 bytes +stdout: 5140 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3962,6 +4026,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -4021,12 +4086,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5432 -location: src/tests/client/test-client.py:test_004()/70 +size: 5481 +location: src/tests/client/test-client.py:test_004()/72 cmd: $NMCLI -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5141 bytes +stdout: 5190 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -4069,6 +4134,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -4129,7 +4195,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1432 -location: src/tests/client/test-client.py:test_004()/71 +location: src/tests/client/test-client.py:test_004()/73 cmd: $NMCLI dev lldp list ifname eth0 lang: C returncode: 0 @@ -4159,7 +4225,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1442 -location: src/tests/client/test-client.py:test_004()/72 +location: src/tests/client/test-client.py:test_004()/74 cmd: $NMCLI dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -4189,7 +4255,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1064 -location: src/tests/client/test-client.py:test_004()/73 +location: src/tests/client/test-client.py:test_004()/75 cmd: $NMCLI -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -4213,7 +4279,7 @@ connection.interface-name: -- <<< size: 1074 -location: src/tests/client/test-client.py:test_004()/74 +location: src/tests/client/test-client.py:test_004()/76 cmd: $NMCLI -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -4236,12 +4302,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 5724 -location: src/tests/client/test-client.py:test_004()/75 +size: 5810 +location: src/tests/client/test-client.py:test_004()/77 cmd: $NMCLI --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4256,8 +4322,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4361,12 +4429,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5761 -location: src/tests/client/test-client.py:test_004()/76 +size: 5847 +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: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4381,8 +4449,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4486,12 +4556,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5724 -location: src/tests/client/test-client.py:test_004()/77 +size: 5810 +location: src/tests/client/test-client.py:test_004()/79 cmd: $NMCLI --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4506,8 +4576,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4611,12 +4683,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5761 -location: src/tests/client/test-client.py:test_004()/78 +size: 5847 +location: src/tests/client/test-client.py:test_004()/80 cmd: $NMCLI --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4631,8 +4703,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4736,12 +4810,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4597 -location: src/tests/client/test-client.py:test_004()/79 +size: 4683 +location: src/tests/client/test-client.py:test_004()/81 cmd: $NMCLI --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4444 bytes +stdout: 4530 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4756,8 +4830,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4840,12 +4916,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4624 -location: src/tests/client/test-client.py:test_004()/80 +size: 4710 +location: src/tests/client/test-client.py:test_004()/82 cmd: $NMCLI --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4461 bytes +stdout: 4547 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4860,8 +4936,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -4945,7 +5023,7 @@ proxy.pac-script: -- <<< size: 486 -location: src/tests/client/test-client.py:test_004()/81 +location: src/tests/client/test-client.py:test_004()/83 cmd: $NMCLI --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -4960,7 +5038,7 @@ vpn.timeout: 0 <<< size: 497 -location: src/tests/client/test-client.py:test_004()/82 +location: src/tests/client/test-client.py:test_004()/84 cmd: $NMCLI --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -4975,7 +5053,7 @@ vpn.timeout: 0 <<< size: 869 -location: src/tests/client/test-client.py:test_004()/83 +location: src/tests/client/test-client.py:test_004()/85 cmd: $NMCLI --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -4997,7 +5075,7 @@ GENERAL.MASTER-PATH: -- <<< size: 882 -location: src/tests/client/test-client.py:test_004()/84 +location: src/tests/client/test-client.py:test_004()/86 cmd: $NMCLI --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -5019,7 +5097,7 @@ GENERAL.MASTER-PATH: -- <<< size: 557 -location: src/tests/client/test-client.py:test_004()/85 +location: src/tests/client/test-client.py:test_004()/87 cmd: $NMCLI --color yes dev s lang: C returncode: 0 @@ -5034,7 +5112,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 573 -location: src/tests/client/test-client.py:test_004()/86 +location: src/tests/client/test-client.py:test_004()/88 cmd: $NMCLI --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -5049,7 +5127,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 1789 -location: src/tests/client/test-client.py:test_004()/87 +location: src/tests/client/test-client.py:test_004()/89 cmd: $NMCLI --color yes -f all dev status lang: C returncode: 0 @@ -5064,7 +5142,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 1805 -location: src/tests/client/test-client.py:test_004()/88 +location: src/tests/client/test-client.py:test_004()/90 cmd: $NMCLI --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -5079,7 +5157,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 8054 -location: src/tests/client/test-client.py:test_004()/89 +location: src/tests/client/test-client.py:test_004()/91 cmd: $NMCLI --color yes dev show lang: C returncode: 0 @@ -5225,7 +5303,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 8086 -location: src/tests/client/test-client.py:test_004()/90 +location: src/tests/client/test-client.py:test_004()/92 cmd: $NMCLI --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -5370,12 +5448,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22989 -location: src/tests/client/test-client.py:test_004()/91 +size: 23133 +location: src/tests/client/test-client.py:test_004()/93 cmd: $NMCLI --color yes -f all dev show lang: C returncode: 0 -stdout: 22842 bytes +stdout: 22986 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -5422,6 +5500,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -5670,6 +5749,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [35m [0m @@ -5767,6 +5847,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no IP4.ADDRESS[1]: 192.168.97.124/29 @@ -5799,12 +5880,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 23157 -location: src/tests/client/test-client.py:test_004()/92 +size: 23304 +location: src/tests/client/test-client.py:test_004()/94 cmd: $NMCLI --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 23000 bytes +stdout: 23147 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -5851,6 +5932,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -6099,6 +6181,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [35m [0m @@ -6196,6 +6279,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie IP4.ADDRESS[1]: 192.168.97.124/29 @@ -6229,7 +6313,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1507 -location: src/tests/client/test-client.py:test_004()/93 +location: src/tests/client/test-client.py:test_004()/95 cmd: $NMCLI --color yes dev show wlan0 lang: C returncode: 0 @@ -6262,7 +6346,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1519 -location: src/tests/client/test-client.py:test_004()/94 +location: src/tests/client/test-client.py:test_004()/96 cmd: $NMCLI --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -6294,12 +6378,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5661 -location: src/tests/client/test-client.py:test_004()/95 +size: 5709 +location: src/tests/client/test-client.py:test_004()/97 cmd: $NMCLI --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 5509 bytes +stdout: 5557 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6346,6 +6430,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -6405,12 +6490,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5722 -location: src/tests/client/test-client.py:test_004()/96 +size: 5771 +location: src/tests/client/test-client.py:test_004()/98 cmd: $NMCLI --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5560 bytes +stdout: 5609 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6457,6 +6542,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -6516,12 +6602,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2183 -location: src/tests/client/test-client.py:test_004()/97 +size: 2231 +location: src/tests/client/test-client.py:test_004()/99 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6561,16 +6647,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2210 -location: src/tests/client/test-client.py:test_004()/98 +size: 2260 +location: src/tests/client/test-client.py:test_004()/100 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6610,16 +6697,17 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2183 -location: src/tests/client/test-client.py:test_004()/99 +size: 2232 +location: src/tests/client/test-client.py:test_004()/101 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6659,16 +6747,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2211 -location: src/tests/client/test-client.py:test_004()/100 +size: 2260 +location: src/tests/client/test-client.py:test_004()/102 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6708,12 +6797,13 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< size: 648 -location: src/tests/client/test-client.py:test_004()/101 +location: src/tests/client/test-client.py:test_004()/103 cmd: $NMCLI --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -6728,7 +6818,7 @@ DEVICE TYPE DBUS-PATH <<< size: 658 -location: src/tests/client/test-client.py:test_004()/102 +location: src/tests/client/test-client.py:test_004()/104 cmd: $NMCLI --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -6742,44 +6832,44 @@ DEVICE TYPE DBUS-PATH [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 2607 -location: src/tests/client/test-client.py:test_004()/103 +size: 2720 +location: src/tests/client/test-client.py:test_004()/105 cmd: $NMCLI --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 2452 bytes +stdout: 2565 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 2675 -location: src/tests/client/test-client.py:test_004()/104 +size: 2796 +location: src/tests/client/test-client.py:test_004()/106 cmd: $NMCLI --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 2510 bytes +stdout: 2631 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< size: 1074 -location: src/tests/client/test-client.py:test_004()/105 +location: src/tests/client/test-client.py:test_004()/107 cmd: $NMCLI --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -6797,7 +6887,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 1134 -location: src/tests/client/test-client.py:test_004()/106 +location: src/tests/client/test-client.py:test_004()/108 cmd: $NMCLI --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -6815,7 +6905,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 2720 -location: src/tests/client/test-client.py:test_004()/107 +location: src/tests/client/test-client.py:test_004()/109 cmd: $NMCLI --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -6833,7 +6923,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 2788 -location: src/tests/client/test-client.py:test_004()/108 +location: src/tests/client/test-client.py:test_004()/110 cmd: $NMCLI --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -6850,34 +6940,34 @@ NAME SSID SSID-HEX BSSID MODE CHAN NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 901 -location: src/tests/client/test-client.py:test_004()/109 +size: 932 +location: src/tests/client/test-client.py:test_004()/111 cmd: $NMCLI --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 723 bytes +stdout: 754 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 929 -location: src/tests/client/test-client.py:test_004()/110 +size: 962 +location: src/tests/client/test-client.py:test_004()/112 cmd: $NMCLI --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 741 bytes +stdout: 774 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 440 -location: src/tests/client/test-client.py:test_004()/111 +location: src/tests/client/test-client.py:test_004()/113 cmd: $NMCLI --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -6890,7 +6980,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 466 -location: src/tests/client/test-client.py:test_004()/112 +location: src/tests/client/test-client.py:test_004()/114 cmd: $NMCLI --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -6903,7 +6993,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 1014 -location: src/tests/client/test-client.py:test_004()/113 +location: src/tests/client/test-client.py:test_004()/115 cmd: $NMCLI --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -6916,7 +7006,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ <<< size: 1042 -location: src/tests/client/test-client.py:test_004()/114 +location: src/tests/client/test-client.py:test_004()/116 cmd: $NMCLI --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -6928,12 +7018,12 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 5665 -location: src/tests/client/test-client.py:test_004()/115 +size: 5713 +location: src/tests/client/test-client.py:test_004()/117 cmd: $NMCLI --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5509 bytes +stdout: 5557 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6980,6 +7070,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -7039,12 +7130,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5726 -location: src/tests/client/test-client.py:test_004()/116 +size: 5775 +location: src/tests/client/test-client.py:test_004()/118 cmd: $NMCLI --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5560 bytes +stdout: 5609 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -7091,6 +7182,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -7151,7 +7243,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1521 -location: src/tests/client/test-client.py:test_004()/117 +location: src/tests/client/test-client.py:test_004()/119 cmd: $NMCLI --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -7184,7 +7276,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1533 -location: src/tests/client/test-client.py:test_004()/118 +location: src/tests/client/test-client.py:test_004()/120 cmd: $NMCLI --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -7216,12 +7308,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5629 -location: src/tests/client/test-client.py:test_004()/119 +size: 5677 +location: src/tests/client/test-client.py:test_004()/121 cmd: $NMCLI --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 5335 bytes +stdout: 5383 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -7264,6 +7356,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -7323,12 +7416,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5688 -location: src/tests/client/test-client.py:test_004()/120 +size: 5737 +location: src/tests/client/test-client.py:test_004()/122 cmd: $NMCLI --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5384 bytes +stdout: 5433 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -7371,6 +7464,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -7431,7 +7525,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1445 -location: src/tests/client/test-client.py:test_004()/121 +location: src/tests/client/test-client.py:test_004()/123 cmd: $NMCLI --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -7461,7 +7555,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1455 -location: src/tests/client/test-client.py:test_004()/122 +location: src/tests/client/test-client.py:test_004()/124 cmd: $NMCLI --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -7491,7 +7585,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1077 -location: src/tests/client/test-client.py:test_004()/123 +location: src/tests/client/test-client.py:test_004()/125 cmd: $NMCLI --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -7515,7 +7609,7 @@ connection.interface-name: -- <<< size: 1087 -location: src/tests/client/test-client.py:test_004()/124 +location: src/tests/client/test-client.py:test_004()/126 cmd: $NMCLI --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -7538,12 +7632,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 6733 -location: src/tests/client/test-client.py:test_004()/125 +size: 6819 +location: src/tests/client/test-client.py:test_004()/127 cmd: $NMCLI --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -7561,8 +7655,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -7676,12 +7772,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6783 -location: src/tests/client/test-client.py:test_004()/126 +size: 6869 +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: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -7699,8 +7795,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -7814,12 +7912,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6733 -location: src/tests/client/test-client.py:test_004()/127 +size: 6819 +location: src/tests/client/test-client.py:test_004()/129 cmd: $NMCLI --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -7837,8 +7935,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -7952,12 +8052,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6783 -location: src/tests/client/test-client.py:test_004()/128 +size: 6869 +location: src/tests/client/test-client.py:test_004()/130 cmd: $NMCLI --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -7975,8 +8075,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -8090,12 +8192,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 5214 -location: src/tests/client/test-client.py:test_004()/129 +size: 5300 +location: src/tests/client/test-client.py:test_004()/131 cmd: $NMCLI --pretty -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 5063 bytes +stdout: 5149 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -8113,8 +8215,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -8202,12 +8306,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 5246 -location: src/tests/client/test-client.py:test_004()/130 +size: 5332 +location: src/tests/client/test-client.py:test_004()/132 cmd: $NMCLI --pretty -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5085 bytes +stdout: 5171 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -8225,8 +8329,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -8315,7 +8421,7 @@ proxy.pac-script: -- <<< size: 783 -location: src/tests/client/test-client.py:test_004()/131 +location: src/tests/client/test-client.py:test_004()/133 cmd: $NMCLI --pretty -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -8334,7 +8440,7 @@ vpn.timeout: 0 <<< size: 799 -location: src/tests/client/test-client.py:test_004()/132 +location: src/tests/client/test-client.py:test_004()/134 cmd: $NMCLI --pretty -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -8353,7 +8459,7 @@ vpn.timeout: 0 <<< size: 1180 -location: src/tests/client/test-client.py:test_004()/133 +location: src/tests/client/test-client.py:test_004()/135 cmd: $NMCLI --pretty -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -8379,7 +8485,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1201 -location: src/tests/client/test-client.py:test_004()/134 +location: src/tests/client/test-client.py:test_004()/136 cmd: $NMCLI --pretty -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -8405,7 +8511,7 @@ GENERAL.MASTER-PATH: -- <<< size: 520 -location: src/tests/client/test-client.py:test_004()/135 +location: src/tests/client/test-client.py:test_004()/137 cmd: $NMCLI --pretty dev s lang: C returncode: 0 @@ -8424,7 +8530,7 @@ wlan1 wifi unavailable -- <<< size: 529 -location: src/tests/client/test-client.py:test_004()/136 +location: src/tests/client/test-client.py:test_004()/138 cmd: $NMCLI --pretty dev s lang: pl_PL.UTF-8 returncode: 0 @@ -8443,7 +8549,7 @@ wlan1 wifi niedostępne -- <<< size: 1716 -location: src/tests/client/test-client.py:test_004()/137 +location: src/tests/client/test-client.py:test_004()/139 cmd: $NMCLI --pretty -f all dev status lang: C returncode: 0 @@ -8462,7 +8568,7 @@ wlan1 wifi unavailable unknown unknown /org/freedesk <<< size: 1725 -location: src/tests/client/test-client.py:test_004()/138 +location: src/tests/client/test-client.py:test_004()/140 cmd: $NMCLI --pretty -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -8481,7 +8587,7 @@ wlan1 wifi niedostępne nieznane nieznane /org/freedes <<< size: 12868 -location: src/tests/client/test-client.py:test_004()/139 +location: src/tests/client/test-client.py:test_004()/141 cmd: $NMCLI --pretty dev show lang: C returncode: 0 @@ -8689,7 +8795,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 12933 -location: src/tests/client/test-client.py:test_004()/140 +location: src/tests/client/test-client.py:test_004()/142 cmd: $NMCLI --pretty dev show lang: pl_PL.UTF-8 returncode: 0 @@ -8896,12 +9002,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27638 -location: src/tests/client/test-client.py:test_004()/141 +size: 27782 +location: src/tests/client/test-client.py:test_004()/143 cmd: $NMCLI --pretty -f all dev show lang: C returncode: 0 -stdout: 27493 bytes +stdout: 27637 bytes >>> =============================================================================== Device details (wlan0) @@ -8954,6 +9060,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -9241,6 +9348,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -9351,6 +9459,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -9389,12 +9498,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 27839 -location: src/tests/client/test-client.py:test_004()/142 +size: 27986 +location: src/tests/client/test-client.py:test_004()/144 cmd: $NMCLI --pretty -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 27684 bytes +stdout: 27831 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -9447,6 +9556,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -9734,6 +9844,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -9844,6 +9955,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -9883,7 +9995,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2436 -location: src/tests/client/test-client.py:test_004()/143 +location: src/tests/client/test-client.py:test_004()/145 cmd: $NMCLI --pretty dev show wlan0 lang: C returncode: 0 @@ -9928,7 +10040,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2455 -location: src/tests/client/test-client.py:test_004()/144 +location: src/tests/client/test-client.py:test_004()/146 cmd: $NMCLI --pretty dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -9972,12 +10084,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6587 -location: src/tests/client/test-client.py:test_004()/145 +size: 6635 +location: src/tests/client/test-client.py:test_004()/147 cmd: $NMCLI --pretty -f all dev show wlan0 lang: C returncode: 0 -stdout: 6437 bytes +stdout: 6485 bytes >>> =============================================================================== Device details (wlan0) @@ -10030,6 +10142,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -10098,12 +10211,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6655 -location: src/tests/client/test-client.py:test_004()/146 +size: 6704 +location: src/tests/client/test-client.py:test_004()/148 cmd: $NMCLI --pretty -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6495 bytes +stdout: 6544 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -10156,6 +10269,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -10224,12 +10338,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2632 -location: src/tests/client/test-client.py:test_004()/147 +size: 2680 +location: src/tests/client/test-client.py:test_004()/149 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -10274,17 +10388,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2666 -location: src/tests/client/test-client.py:test_004()/148 +size: 2715 +location: src/tests/client/test-client.py:test_004()/150 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -10329,17 +10444,18 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2632 -location: src/tests/client/test-client.py:test_004()/149 +size: 2680 +location: src/tests/client/test-client.py:test_004()/151 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -10384,17 +10500,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2666 -location: src/tests/client/test-client.py:test_004()/150 +size: 2715 +location: src/tests/client/test-client.py:test_004()/152 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -10439,13 +10556,14 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< size: 669 -location: src/tests/client/test-client.py:test_004()/151 +location: src/tests/client/test-client.py:test_004()/153 cmd: $NMCLI --pretty -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -10464,7 +10582,7 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< size: 672 -location: src/tests/client/test-client.py:test_004()/152 +location: src/tests/client/test-client.py:test_004()/154 cmd: $NMCLI --pretty -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -10482,68 +10600,68 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/4 wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< -size: 3024 -location: src/tests/client/test-client.py:test_004()/153 +size: 3134 +location: src/tests/client/test-client.py:test_004()/155 cmd: $NMCLI --pretty -f ALL device wifi list lang: C returncode: 0 -stdout: 2872 bytes +stdout: 2982 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 40 MHz 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------ +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< -size: 3262 -location: src/tests/client/test-client.py:test_004()/154 +size: 3380 +location: src/tests/client/test-client.py:test_004()/156 cmd: $NMCLI --pretty -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 3100 bytes +stdout: 3218 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< size: 1317 -location: src/tests/client/test-client.py:test_004()/155 +location: src/tests/client/test-client.py:test_004()/157 cmd: $NMCLI --pretty -f COMMON device wifi list lang: C returncode: 0 @@ -10573,7 +10691,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 1547 -location: src/tests/client/test-client.py:test_004()/156 +location: src/tests/client/test-client.py:test_004()/158 cmd: $NMCLI --pretty -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -10603,7 +10721,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 3137 -location: src/tests/client/test-client.py:test_004()/157 +location: src/tests/client/test-client.py:test_004()/159 cmd: $NMCLI --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -10633,7 +10751,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 3375 -location: src/tests/client/test-client.py:test_004()/158 +location: src/tests/client/test-client.py:test_004()/160 cmd: $NMCLI --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -10662,42 +10780,42 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ <<< -size: 1139 -location: src/tests/client/test-client.py:test_004()/159 +size: 1172 +location: src/tests/client/test-client.py:test_004()/161 cmd: $NMCLI --pretty -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 964 bytes +stdout: 997 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 1227 -location: src/tests/client/test-client.py:test_004()/160 +size: 1262 +location: src/tests/client/test-client.py:test_004()/162 cmd: $NMCLI --pretty -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1041 bytes +stdout: 1076 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 554 -location: src/tests/client/test-client.py:test_004()/161 +location: src/tests/client/test-client.py:test_004()/163 cmd: $NMCLI --pretty -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -10714,7 +10832,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 639 -location: src/tests/client/test-client.py:test_004()/162 +location: src/tests/client/test-client.py:test_004()/164 cmd: $NMCLI --pretty -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -10731,7 +10849,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 1252 -location: src/tests/client/test-client.py:test_004()/163 +location: src/tests/client/test-client.py:test_004()/165 cmd: $NMCLI --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -10748,7 +10866,7 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MH <<< size: 1340 -location: src/tests/client/test-client.py:test_004()/164 +location: src/tests/client/test-client.py:test_004()/166 cmd: $NMCLI --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -10764,12 +10882,12 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 6590 -location: src/tests/client/test-client.py:test_004()/165 +size: 6638 +location: src/tests/client/test-client.py:test_004()/167 cmd: $NMCLI --pretty -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6437 bytes +stdout: 6485 bytes >>> =============================================================================== Device details (wlan0) @@ -10822,6 +10940,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -10890,12 +11009,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6658 -location: src/tests/client/test-client.py:test_004()/166 +size: 6707 +location: src/tests/client/test-client.py:test_004()/168 cmd: $NMCLI --pretty -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6495 bytes +stdout: 6544 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -10948,6 +11067,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -11017,7 +11137,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2449 -location: src/tests/client/test-client.py:test_004()/167 +location: src/tests/client/test-client.py:test_004()/169 cmd: $NMCLI --pretty -f COMMON device show wlan0 lang: C returncode: 0 @@ -11062,7 +11182,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2468 -location: src/tests/client/test-client.py:test_004()/168 +location: src/tests/client/test-client.py:test_004()/170 cmd: $NMCLI --pretty -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -11106,12 +11226,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6474 -location: src/tests/client/test-client.py:test_004()/169 +size: 6522 +location: src/tests/client/test-client.py:test_004()/171 cmd: $NMCLI --pretty -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 6183 bytes +stdout: 6231 bytes >>> =============================================================================== Device details (wlan0) @@ -11159,6 +11279,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -11227,12 +11348,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6540 -location: src/tests/client/test-client.py:test_004()/170 +size: 6589 +location: src/tests/client/test-client.py:test_004()/172 cmd: $NMCLI --pretty -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6239 bytes +stdout: 6288 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -11280,6 +11401,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -11349,7 +11471,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1896 -location: src/tests/client/test-client.py:test_004()/171 +location: src/tests/client/test-client.py:test_004()/173 cmd: $NMCLI --pretty dev lldp list ifname eth0 lang: C returncode: 0 @@ -11385,7 +11507,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1910 -location: src/tests/client/test-client.py:test_004()/172 +location: src/tests/client/test-client.py:test_004()/174 cmd: $NMCLI --pretty dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -11421,7 +11543,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 2769 -location: src/tests/client/test-client.py:test_004()/173 +location: src/tests/client/test-client.py:test_004()/175 cmd: $NMCLI --pretty -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -11467,7 +11589,7 @@ connection.interface-name: -- <<< size: 2794 -location: src/tests/client/test-client.py:test_004()/174 +location: src/tests/client/test-client.py:test_004()/176 cmd: $NMCLI --pretty -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -11512,12 +11634,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 6745 -location: src/tests/client/test-client.py:test_004()/175 +size: 6831 +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: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11535,8 +11657,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -11650,12 +11774,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6795 -location: src/tests/client/test-client.py:test_004()/176 +size: 6881 +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: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -11673,8 +11797,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -11788,12 +11914,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6745 -location: src/tests/client/test-client.py:test_004()/177 +size: 6831 +location: src/tests/client/test-client.py:test_004()/179 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11811,8 +11937,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -11926,12 +12054,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6795 -location: src/tests/client/test-client.py:test_004()/178 +size: 6881 +location: src/tests/client/test-client.py:test_004()/180 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -11949,8 +12077,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12064,12 +12194,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 5226 -location: src/tests/client/test-client.py:test_004()/179 +size: 5312 +location: src/tests/client/test-client.py:test_004()/181 cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 5063 bytes +stdout: 5149 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -12087,8 +12217,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12176,12 +12308,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 5258 -location: src/tests/client/test-client.py:test_004()/180 +size: 5344 +location: src/tests/client/test-client.py:test_004()/182 cmd: $NMCLI --pretty --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5085 bytes +stdout: 5171 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -12199,8 +12331,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -12289,7 +12423,7 @@ proxy.pac-script: -- <<< size: 795 -location: src/tests/client/test-client.py:test_004()/181 +location: src/tests/client/test-client.py:test_004()/183 cmd: $NMCLI --pretty --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -12308,7 +12442,7 @@ vpn.timeout: 0 <<< size: 811 -location: src/tests/client/test-client.py:test_004()/182 +location: src/tests/client/test-client.py:test_004()/184 cmd: $NMCLI --pretty --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -12327,7 +12461,7 @@ vpn.timeout: 0 <<< size: 1192 -location: src/tests/client/test-client.py:test_004()/183 +location: src/tests/client/test-client.py:test_004()/185 cmd: $NMCLI --pretty --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -12353,7 +12487,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1213 -location: src/tests/client/test-client.py:test_004()/184 +location: src/tests/client/test-client.py:test_004()/186 cmd: $NMCLI --pretty --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -12379,7 +12513,7 @@ GENERAL.MASTER-PATH: -- <<< size: 696 -location: src/tests/client/test-client.py:test_004()/185 +location: src/tests/client/test-client.py:test_004()/187 cmd: $NMCLI --pretty --color yes dev s lang: C returncode: 0 @@ -12398,7 +12532,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 705 -location: src/tests/client/test-client.py:test_004()/186 +location: src/tests/client/test-client.py:test_004()/188 cmd: $NMCLI --pretty --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -12417,7 +12551,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 2097 -location: src/tests/client/test-client.py:test_004()/187 +location: src/tests/client/test-client.py:test_004()/189 cmd: $NMCLI --pretty --color yes -f all dev status lang: C returncode: 0 @@ -12436,7 +12570,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 2106 -location: src/tests/client/test-client.py:test_004()/188 +location: src/tests/client/test-client.py:test_004()/190 cmd: $NMCLI --pretty --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -12455,7 +12589,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 12880 -location: src/tests/client/test-client.py:test_004()/189 +location: src/tests/client/test-client.py:test_004()/191 cmd: $NMCLI --pretty --color yes dev show lang: C returncode: 0 @@ -12663,7 +12797,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 12945 -location: src/tests/client/test-client.py:test_004()/190 +location: src/tests/client/test-client.py:test_004()/192 cmd: $NMCLI --pretty --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -12870,12 +13004,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27974 -location: src/tests/client/test-client.py:test_004()/191 +size: 28118 +location: src/tests/client/test-client.py:test_004()/193 cmd: $NMCLI --pretty --color yes -f all dev show lang: C returncode: 0 -stdout: 27817 bytes +stdout: 27961 bytes >>> =============================================================================== Device details (wlan0) @@ -12928,6 +13062,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -13215,6 +13350,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -13325,6 +13461,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -13363,12 +13500,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 28175 -location: src/tests/client/test-client.py:test_004()/192 +size: 28322 +location: src/tests/client/test-client.py:test_004()/194 cmd: $NMCLI --pretty --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 28008 bytes +stdout: 28155 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -13421,6 +13558,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -13708,6 +13846,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -13818,6 +13957,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -13857,7 +13997,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2448 -location: src/tests/client/test-client.py:test_004()/193 +location: src/tests/client/test-client.py:test_004()/195 cmd: $NMCLI --pretty --color yes dev show wlan0 lang: C returncode: 0 @@ -13902,7 +14042,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2467 -location: src/tests/client/test-client.py:test_004()/194 +location: src/tests/client/test-client.py:test_004()/196 cmd: $NMCLI --pretty --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -13946,12 +14086,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6842 -location: src/tests/client/test-client.py:test_004()/195 +size: 6890 +location: src/tests/client/test-client.py:test_004()/197 cmd: $NMCLI --pretty --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 6680 bytes +stdout: 6728 bytes >>> =============================================================================== Device details (wlan0) @@ -14004,6 +14144,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -14072,12 +14213,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6910 -location: src/tests/client/test-client.py:test_004()/196 +size: 6959 +location: src/tests/client/test-client.py:test_004()/198 cmd: $NMCLI --pretty --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6738 bytes +stdout: 6787 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -14130,6 +14271,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -14198,12 +14340,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2644 -location: src/tests/client/test-client.py:test_004()/197 +size: 2692 +location: src/tests/client/test-client.py:test_004()/199 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -14248,17 +14390,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2678 -location: src/tests/client/test-client.py:test_004()/198 +size: 2727 +location: src/tests/client/test-client.py:test_004()/200 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -14303,17 +14446,18 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2644 -location: src/tests/client/test-client.py:test_004()/199 +size: 2692 +location: src/tests/client/test-client.py:test_004()/201 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -14358,17 +14502,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2678 -location: src/tests/client/test-client.py:test_004()/200 +size: 2727 +location: src/tests/client/test-client.py:test_004()/202 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -14413,13 +14558,14 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< size: 804 -location: src/tests/client/test-client.py:test_004()/201 +location: src/tests/client/test-client.py:test_004()/203 cmd: $NMCLI --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -14438,7 +14584,7 @@ DEVICE TYPE DBUS-PATH <<< size: 807 -location: src/tests/client/test-client.py:test_004()/202 +location: src/tests/client/test-client.py:test_004()/204 cmd: $NMCLI --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -14456,68 +14602,68 @@ DEVICE TYPE DBUS-PATH [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 3648 -location: src/tests/client/test-client.py:test_004()/203 +size: 3794 +location: src/tests/client/test-client.py:test_004()/205 cmd: $NMCLI --pretty --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 3484 bytes +stdout: 3630 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------ +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< -size: 3886 -location: src/tests/client/test-client.py:test_004()/204 +size: 4040 +location: src/tests/client/test-client.py:test_004()/206 cmd: $NMCLI --pretty --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 3712 bytes +stdout: 3866 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< size: 1653 -location: src/tests/client/test-client.py:test_004()/205 +location: src/tests/client/test-client.py:test_004()/207 cmd: $NMCLI --pretty --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -14547,7 +14693,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 1883 -location: src/tests/client/test-client.py:test_004()/206 +location: src/tests/client/test-client.py:test_004()/208 cmd: $NMCLI --pretty --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -14577,7 +14723,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 3761 -location: src/tests/client/test-client.py:test_004()/207 +location: src/tests/client/test-client.py:test_004()/209 cmd: $NMCLI --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -14607,7 +14753,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 3999 -location: src/tests/client/test-client.py:test_004()/208 +location: src/tests/client/test-client.py:test_004()/210 cmd: $NMCLI --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -14636,42 +14782,42 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ <<< -size: 1305 -location: src/tests/client/test-client.py:test_004()/209 +size: 1347 +location: src/tests/client/test-client.py:test_004()/211 cmd: $NMCLI --pretty --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 1117 bytes +stdout: 1159 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 1392 -location: src/tests/client/test-client.py:test_004()/210 +size: 1436 +location: src/tests/client/test-client.py:test_004()/212 cmd: $NMCLI --pretty --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1194 bytes +stdout: 1238 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 647 -location: src/tests/client/test-client.py:test_004()/211 +location: src/tests/client/test-client.py:test_004()/213 cmd: $NMCLI --pretty --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -14688,7 +14834,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 732 -location: src/tests/client/test-client.py:test_004()/212 +location: src/tests/client/test-client.py:test_004()/214 cmd: $NMCLI --pretty --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -14705,7 +14851,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 1418 -location: src/tests/client/test-client.py:test_004()/213 +location: src/tests/client/test-client.py:test_004()/215 cmd: $NMCLI --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -14722,7 +14868,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ <<< size: 1505 -location: src/tests/client/test-client.py:test_004()/214 +location: src/tests/client/test-client.py:test_004()/216 cmd: $NMCLI --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -14738,12 +14884,12 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 6845 -location: src/tests/client/test-client.py:test_004()/215 +size: 6893 +location: src/tests/client/test-client.py:test_004()/217 cmd: $NMCLI --pretty --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6680 bytes +stdout: 6728 bytes >>> =============================================================================== Device details (wlan0) @@ -14796,6 +14942,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -14864,12 +15011,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6913 -location: src/tests/client/test-client.py:test_004()/216 +size: 6962 +location: src/tests/client/test-client.py:test_004()/218 cmd: $NMCLI --pretty --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6738 bytes +stdout: 6787 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -14922,6 +15069,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -14991,7 +15139,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2461 -location: src/tests/client/test-client.py:test_004()/217 +location: src/tests/client/test-client.py:test_004()/219 cmd: $NMCLI --pretty --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -15036,7 +15184,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2480 -location: src/tests/client/test-client.py:test_004()/218 +location: src/tests/client/test-client.py:test_004()/220 cmd: $NMCLI --pretty --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -15080,12 +15228,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6729 -location: src/tests/client/test-client.py:test_004()/219 +size: 6777 +location: src/tests/client/test-client.py:test_004()/221 cmd: $NMCLI --pretty --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 6426 bytes +stdout: 6474 bytes >>> =============================================================================== Device details (wlan0) @@ -15133,6 +15281,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -15201,12 +15350,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6795 -location: src/tests/client/test-client.py:test_004()/220 +size: 6844 +location: src/tests/client/test-client.py:test_004()/222 cmd: $NMCLI --pretty --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6482 bytes +stdout: 6531 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -15254,6 +15403,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -15323,7 +15473,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1908 -location: src/tests/client/test-client.py:test_004()/221 +location: src/tests/client/test-client.py:test_004()/223 cmd: $NMCLI --pretty --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -15359,7 +15509,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1922 -location: src/tests/client/test-client.py:test_004()/222 +location: src/tests/client/test-client.py:test_004()/224 cmd: $NMCLI --pretty --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -15395,7 +15545,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 2781 -location: src/tests/client/test-client.py:test_004()/223 +location: src/tests/client/test-client.py:test_004()/225 cmd: $NMCLI --pretty --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -15441,7 +15591,7 @@ connection.interface-name: -- <<< size: 2806 -location: src/tests/client/test-client.py:test_004()/224 +location: src/tests/client/test-client.py:test_004()/226 cmd: $NMCLI --pretty --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -15486,12 +15636,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 2871 -location: src/tests/client/test-client.py:test_004()/225 +size: 2916 +location: src/tests/client/test-client.py:test_004()/227 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15506,8 +15656,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -15611,12 +15763,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2881 -location: src/tests/client/test-client.py:test_004()/226 +size: 2926 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15631,8 +15783,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -15736,12 +15890,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2871 -location: src/tests/client/test-client.py:test_004()/227 +size: 2916 +location: src/tests/client/test-client.py:test_004()/229 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15756,8 +15910,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -15861,12 +16017,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2881 -location: src/tests/client/test-client.py:test_004()/228 +size: 2926 +location: src/tests/client/test-client.py:test_004()/230 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15881,8 +16037,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -15986,12 +16144,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2296 -location: src/tests/client/test-client.py:test_004()/229 +size: 2341 +location: src/tests/client/test-client.py:test_004()/231 cmd: $NMCLI --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -16006,8 +16164,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -16090,12 +16250,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2306 -location: src/tests/client/test-client.py:test_004()/230 +size: 2351 +location: src/tests/client/test-client.py:test_004()/232 cmd: $NMCLI --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -16110,8 +16270,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -16195,7 +16357,7 @@ proxy.pac-script: <<< size: 320 -location: src/tests/client/test-client.py:test_004()/231 +location: src/tests/client/test-client.py:test_004()/233 cmd: $NMCLI --terse -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -16210,7 +16372,7 @@ vpn.timeout:0 <<< size: 330 -location: src/tests/client/test-client.py:test_004()/232 +location: src/tests/client/test-client.py:test_004()/234 cmd: $NMCLI --terse -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -16225,7 +16387,7 @@ vpn.timeout:0 <<< size: 546 -location: src/tests/client/test-client.py:test_004()/233 +location: src/tests/client/test-client.py:test_004()/235 cmd: $NMCLI --terse -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -16247,7 +16409,7 @@ GENERAL.MASTER-PATH: <<< size: 556 -location: src/tests/client/test-client.py:test_004()/234 +location: src/tests/client/test-client.py:test_004()/236 cmd: $NMCLI --terse -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -16269,7 +16431,7 @@ GENERAL.MASTER-PATH: <<< size: 265 -location: src/tests/client/test-client.py:test_004()/235 +location: src/tests/client/test-client.py:test_004()/237 cmd: $NMCLI --terse dev s lang: C returncode: 0 @@ -16283,7 +16445,7 @@ wlan1:wifi:unavailable: <<< size: 275 -location: src/tests/client/test-client.py:test_004()/236 +location: src/tests/client/test-client.py:test_004()/238 cmd: $NMCLI --terse dev s lang: pl_PL.UTF-8 returncode: 0 @@ -16297,7 +16459,7 @@ wlan1:wifi:unavailable: <<< size: 663 -location: src/tests/client/test-client.py:test_004()/237 +location: src/tests/client/test-client.py:test_004()/239 cmd: $NMCLI --terse -f all dev status lang: C returncode: 0 @@ -16311,7 +16473,7 @@ wlan1:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/5 <<< size: 673 -location: src/tests/client/test-client.py:test_004()/238 +location: src/tests/client/test-client.py:test_004()/240 cmd: $NMCLI --terse -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -16325,7 +16487,7 @@ wlan1:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/5 <<< size: 4535 -location: src/tests/client/test-client.py:test_004()/239 +location: src/tests/client/test-client.py:test_004()/241 cmd: $NMCLI --terse dev show lang: C returncode: 0 @@ -16471,7 +16633,7 @@ IP6.DOMAIN[1]:sear6.fo.x.y <<< size: 4545 -location: src/tests/client/test-client.py:test_004()/240 +location: src/tests/client/test-client.py:test_004()/242 cmd: $NMCLI --terse dev show lang: pl_PL.UTF-8 returncode: 0 @@ -16616,12 +16778,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 13121 -location: src/tests/client/test-client.py:test_004()/241 +size: 13208 +location: src/tests/client/test-client.py:test_004()/243 cmd: $NMCLI --terse -f all dev show lang: C returncode: 0 -stdout: 12977 bytes +stdout: 13064 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -16668,6 +16830,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -16916,6 +17079,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -17013,6 +17177,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -17045,12 +17210,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13167 -location: src/tests/client/test-client.py:test_004()/242 +size: 13254 +location: src/tests/client/test-client.py:test_004()/244 cmd: $NMCLI --terse -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 13013 bytes +stdout: 13100 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17097,6 +17262,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -17345,6 +17511,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -17442,6 +17609,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -17475,7 +17643,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 879 -location: src/tests/client/test-client.py:test_004()/243 +location: src/tests/client/test-client.py:test_004()/245 cmd: $NMCLI --terse dev show wlan0 lang: C returncode: 0 @@ -17508,7 +17676,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 889 -location: src/tests/client/test-client.py:test_004()/244 +location: src/tests/client/test-client.py:test_004()/246 cmd: $NMCLI --terse dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -17540,12 +17708,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3017 -location: src/tests/client/test-client.py:test_004()/245 +size: 3046 +location: src/tests/client/test-client.py:test_004()/247 cmd: $NMCLI --terse -f all dev show wlan0 lang: C returncode: 0 -stdout: 2868 bytes +stdout: 2897 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17592,6 +17760,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -17651,12 +17820,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3054 -location: src/tests/client/test-client.py:test_004()/246 +size: 3083 +location: src/tests/client/test-client.py:test_004()/248 cmd: $NMCLI --terse -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2895 bytes +stdout: 2924 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17703,6 +17872,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -17762,12 +17932,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1319 -location: src/tests/client/test-client.py:test_004()/247 +size: 1348 +location: src/tests/client/test-client.py:test_004()/249 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17807,16 +17977,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1329 -location: src/tests/client/test-client.py:test_004()/248 +size: 1358 +location: src/tests/client/test-client.py:test_004()/250 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17856,16 +18027,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1319 -location: src/tests/client/test-client.py:test_004()/249 +size: 1348 +location: src/tests/client/test-client.py:test_004()/251 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17905,16 +18077,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1329 -location: src/tests/client/test-client.py:test_004()/250 +size: 1358 +location: src/tests/client/test-client.py:test_004()/252 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17954,12 +18127,13 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< size: 426 -location: src/tests/client/test-client.py:test_004()/251 +location: src/tests/client/test-client.py:test_004()/253 cmd: $NMCLI --terse -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -17973,7 +18147,7 @@ wlan1:wifi:/org/freedesktop/NetworkManager/Devices/5 <<< size: 436 -location: src/tests/client/test-client.py:test_004()/252 +location: src/tests/client/test-client.py:test_004()/254 cmd: $NMCLI --terse -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -17986,38 +18160,38 @@ wlan1:wifi:/org/freedesktop/NetworkManager/Devices/4 wlan1:wifi:/org/freedesktop/NetworkManager/Devices/5 <<< -size: 1084 -location: src/tests/client/test-client.py:test_004()/253 +size: 1112 +location: src/tests/client/test-client.py:test_004()/255 cmd: $NMCLI --terse -f ALL device wifi list lang: C returncode: 0 -stdout: 934 bytes +stdout: 962 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 -AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infra:1:2412 MHz:54 Mbit/s:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(none):wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/1 -AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infra:1:2412 MHz:54 Mbit/s:55:** :WPA3:(none):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/3 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infra:1:2412 MHz:54 Mbit/s:40 MHz:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(none):wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/1 +AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infra:1:2412 MHz:54 Mbit/s:40 MHz:55:** :WPA3:(none):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/3 -AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infra:1:2412 MHz:54 Mbit/s:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:no: :/org/freedesktop/NetworkManager/AccessPoint/4 +AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infra:1:2412 MHz:54 Mbit/s:40 MHz:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:no: :/org/freedesktop/NetworkManager/AccessPoint/4 <<< -size: 1142 -location: src/tests/client/test-client.py:test_004()/254 +size: 1179 +location: src/tests/client/test-client.py:test_004()/256 cmd: $NMCLI --terse -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 982 bytes +stdout: 1018 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 -AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infrastruktura:1:2412 MHz:54 Mb/s:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(brak):wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/1 -AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infrastruktura:1:2412 MHz:54 Mb/s:55:** :WPA3:(brak):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/3 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(brak):wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/1 +AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:55:** :WPA3:(brak):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/3 -AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infrastruktura:1:2412 MHz:54 Mb/s:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:nie: :/org/freedesktop/NetworkManager/AccessPoint/4 +AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:nie: :/org/freedesktop/NetworkManager/AccessPoint/4 <<< size: 433 -location: src/tests/client/test-client.py:test_004()/255 +location: src/tests/client/test-client.py:test_004()/257 cmd: $NMCLI --terse -f COMMON device wifi list lang: C returncode: 0 @@ -18032,7 +18206,7 @@ stdout: 280 bytes <<< size: 479 -location: src/tests/client/test-client.py:test_004()/256 +location: src/tests/client/test-client.py:test_004()/258 cmd: $NMCLI --terse -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -18047,7 +18221,7 @@ stdout: 316 bytes <<< size: 1197 -location: src/tests/client/test-client.py:test_004()/257 +location: src/tests/client/test-client.py:test_004()/259 cmd: $NMCLI --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -18062,7 +18236,7 @@ AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infra:1:2412 MHz:54 <<< size: 1255 -location: src/tests/client/test-client.py:test_004()/258 +location: src/tests/client/test-client.py:test_004()/260 cmd: $NMCLI --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -18076,32 +18250,32 @@ AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infrastruktura:1:24 <<< -size: 431 -location: src/tests/client/test-client.py:test_004()/259 +size: 438 +location: src/tests/client/test-client.py:test_004()/261 cmd: $NMCLI --terse -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 257 bytes +stdout: 264 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 453 -location: src/tests/client/test-client.py:test_004()/260 +size: 462 +location: src/tests/client/test-client.py:test_004()/262 cmd: $NMCLI --terse -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 269 bytes +stdout: 278 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 250 -location: src/tests/client/test-client.py:test_004()/261 +location: src/tests/client/test-client.py:test_004()/263 cmd: $NMCLI --terse -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -18113,7 +18287,7 @@ stdout: 74 bytes <<< size: 269 -location: src/tests/client/test-client.py:test_004()/262 +location: src/tests/client/test-client.py:test_004()/264 cmd: $NMCLI --terse -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -18125,7 +18299,7 @@ stdout: 83 bytes <<< size: 544 -location: src/tests/client/test-client.py:test_004()/263 +location: src/tests/client/test-client.py:test_004()/265 cmd: $NMCLI --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -18137,7 +18311,7 @@ AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 <<< size: 566 -location: src/tests/client/test-client.py:test_004()/264 +location: src/tests/client/test-client.py:test_004()/266 cmd: $NMCLI --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -18148,12 +18322,12 @@ AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:24 <<< -size: 3020 -location: src/tests/client/test-client.py:test_004()/265 +size: 3049 +location: src/tests/client/test-client.py:test_004()/267 cmd: $NMCLI --terse -f ALL device show wlan0 lang: C returncode: 0 -stdout: 2868 bytes +stdout: 2897 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -18200,6 +18374,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -18259,12 +18434,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3057 -location: src/tests/client/test-client.py:test_004()/266 +size: 3086 +location: src/tests/client/test-client.py:test_004()/268 cmd: $NMCLI --terse -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2895 bytes +stdout: 2924 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -18311,6 +18486,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -18371,7 +18547,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 892 -location: src/tests/client/test-client.py:test_004()/267 +location: src/tests/client/test-client.py:test_004()/269 cmd: $NMCLI --terse -f COMMON device show wlan0 lang: C returncode: 0 @@ -18404,7 +18580,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 902 -location: src/tests/client/test-client.py:test_004()/268 +location: src/tests/client/test-client.py:test_004()/270 cmd: $NMCLI --terse -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -18436,12 +18612,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3052 -location: src/tests/client/test-client.py:test_004()/269 +size: 3081 +location: src/tests/client/test-client.py:test_004()/271 cmd: $NMCLI --terse -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 2762 bytes +stdout: 2791 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -18484,6 +18660,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -18543,12 +18720,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3089 -location: src/tests/client/test-client.py:test_004()/270 +size: 3118 +location: src/tests/client/test-client.py:test_004()/272 cmd: $NMCLI --terse -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2789 bytes +stdout: 2818 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -18591,6 +18768,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -18651,7 +18829,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 1134 -location: src/tests/client/test-client.py:test_004()/271 +location: src/tests/client/test-client.py:test_004()/273 cmd: $NMCLI --terse dev lldp list ifname eth0 lang: C returncode: 0 @@ -18681,7 +18859,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 1144 -location: src/tests/client/test-client.py:test_004()/272 +location: src/tests/client/test-client.py:test_004()/274 cmd: $NMCLI --terse dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -18711,7 +18889,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 775 -location: src/tests/client/test-client.py:test_004()/273 +location: src/tests/client/test-client.py:test_004()/275 cmd: $NMCLI --terse -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -18735,7 +18913,7 @@ connection.interface-name: <<< size: 785 -location: src/tests/client/test-client.py:test_004()/274 +location: src/tests/client/test-client.py:test_004()/276 cmd: $NMCLI --terse -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -18758,12 +18936,12 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 2883 -location: src/tests/client/test-client.py:test_004()/275 +size: 2928 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18778,8 +18956,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -18883,12 +19063,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2893 -location: src/tests/client/test-client.py:test_004()/276 +size: 2938 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18903,8 +19083,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -19008,12 +19190,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2883 -location: src/tests/client/test-client.py:test_004()/277 +size: 2928 +location: src/tests/client/test-client.py:test_004()/279 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -19028,8 +19210,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -19133,12 +19317,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2893 -location: src/tests/client/test-client.py:test_004()/278 +size: 2938 +location: src/tests/client/test-client.py:test_004()/280 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -19153,8 +19337,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -19258,12 +19444,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2308 -location: src/tests/client/test-client.py:test_004()/279 +size: 2353 +location: src/tests/client/test-client.py:test_004()/281 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -19278,8 +19464,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -19362,12 +19550,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2318 -location: src/tests/client/test-client.py:test_004()/280 +size: 2363 +location: src/tests/client/test-client.py:test_004()/282 cmd: $NMCLI --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -19382,8 +19570,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -19467,7 +19657,7 @@ proxy.pac-script: <<< size: 332 -location: src/tests/client/test-client.py:test_004()/281 +location: src/tests/client/test-client.py:test_004()/283 cmd: $NMCLI --terse --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -19482,7 +19672,7 @@ vpn.timeout:0 <<< size: 342 -location: src/tests/client/test-client.py:test_004()/282 +location: src/tests/client/test-client.py:test_004()/284 cmd: $NMCLI --terse --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -19497,7 +19687,7 @@ vpn.timeout:0 <<< size: 558 -location: src/tests/client/test-client.py:test_004()/283 +location: src/tests/client/test-client.py:test_004()/285 cmd: $NMCLI --terse --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -19519,7 +19709,7 @@ GENERAL.MASTER-PATH: <<< size: 568 -location: src/tests/client/test-client.py:test_004()/284 +location: src/tests/client/test-client.py:test_004()/286 cmd: $NMCLI --terse --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -19541,7 +19731,7 @@ GENERAL.MASTER-PATH: <<< size: 441 -location: src/tests/client/test-client.py:test_004()/285 +location: src/tests/client/test-client.py:test_004()/287 cmd: $NMCLI --terse --color yes dev s lang: C returncode: 0 @@ -19555,7 +19745,7 @@ stdout: 297 bytes <<< size: 451 -location: src/tests/client/test-client.py:test_004()/286 +location: src/tests/client/test-client.py:test_004()/288 cmd: $NMCLI --terse --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -19569,7 +19759,7 @@ stdout: 297 bytes <<< size: 1044 -location: src/tests/client/test-client.py:test_004()/287 +location: src/tests/client/test-client.py:test_004()/289 cmd: $NMCLI --terse --color yes -f all dev status lang: C returncode: 0 @@ -19583,7 +19773,7 @@ stdout: 888 bytes <<< size: 1054 -location: src/tests/client/test-client.py:test_004()/288 +location: src/tests/client/test-client.py:test_004()/290 cmd: $NMCLI --terse --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -19597,7 +19787,7 @@ stdout: 888 bytes <<< size: 4547 -location: src/tests/client/test-client.py:test_004()/289 +location: src/tests/client/test-client.py:test_004()/291 cmd: $NMCLI --terse --color yes dev show lang: C returncode: 0 @@ -19743,7 +19933,7 @@ IP6.DOMAIN[1]:sear6.fo.x.y <<< size: 4557 -location: src/tests/client/test-client.py:test_004()/290 +location: src/tests/client/test-client.py:test_004()/292 cmd: $NMCLI --terse --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -19888,12 +20078,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 13457 -location: src/tests/client/test-client.py:test_004()/291 +size: 13544 +location: src/tests/client/test-client.py:test_004()/293 cmd: $NMCLI --terse --color yes -f all dev show lang: C returncode: 0 -stdout: 13301 bytes +stdout: 13388 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -19940,6 +20130,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -20188,6 +20379,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[35m [0m @@ -20285,6 +20477,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -20317,12 +20510,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13503 -location: src/tests/client/test-client.py:test_004()/292 +size: 13590 +location: src/tests/client/test-client.py:test_004()/294 cmd: $NMCLI --terse --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 13337 bytes +stdout: 13424 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20369,6 +20562,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -20617,6 +20811,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[35m [0m @@ -20714,6 +20909,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -20747,7 +20943,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 891 -location: src/tests/client/test-client.py:test_004()/293 +location: src/tests/client/test-client.py:test_004()/295 cmd: $NMCLI --terse --color yes dev show wlan0 lang: C returncode: 0 @@ -20780,7 +20976,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 901 -location: src/tests/client/test-client.py:test_004()/294 +location: src/tests/client/test-client.py:test_004()/296 cmd: $NMCLI --terse --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -20812,12 +21008,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3272 -location: src/tests/client/test-client.py:test_004()/295 +size: 3301 +location: src/tests/client/test-client.py:test_004()/297 cmd: $NMCLI --terse --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 3111 bytes +stdout: 3140 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20864,6 +21060,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -20923,12 +21120,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3309 -location: src/tests/client/test-client.py:test_004()/296 +size: 3338 +location: src/tests/client/test-client.py:test_004()/298 cmd: $NMCLI --terse --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3138 bytes +stdout: 3167 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20975,6 +21172,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -21034,12 +21232,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1331 -location: src/tests/client/test-client.py:test_004()/297 +size: 1360 +location: src/tests/client/test-client.py:test_004()/299 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21079,16 +21277,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1341 -location: src/tests/client/test-client.py:test_004()/298 +size: 1370 +location: src/tests/client/test-client.py:test_004()/300 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21128,16 +21327,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1331 -location: src/tests/client/test-client.py:test_004()/299 +size: 1360 +location: src/tests/client/test-client.py:test_004()/301 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21177,16 +21377,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1341 -location: src/tests/client/test-client.py:test_004()/300 +size: 1370 +location: src/tests/client/test-client.py:test_004()/302 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21226,12 +21427,13 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< size: 561 -location: src/tests/client/test-client.py:test_004()/301 +location: src/tests/client/test-client.py:test_004()/303 cmd: $NMCLI --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -21245,7 +21447,7 @@ stdout: 394 bytes <<< size: 571 -location: src/tests/client/test-client.py:test_004()/302 +location: src/tests/client/test-client.py:test_004()/304 cmd: $NMCLI --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -21258,38 +21460,38 @@ stdout: 394 bytes [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 1709 -location: src/tests/client/test-client.py:test_004()/303 +size: 1773 +location: src/tests/client/test-client.py:test_004()/305 cmd: $NMCLI --terse --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 1546 bytes +stdout: 1610 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(none)[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(none)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m40 MHz[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(none)[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m40 MHz[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(none)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m40 MHz[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< -size: 1767 -location: src/tests/client/test-client.py:test_004()/304 +size: 1839 +location: src/tests/client/test-client.py:test_004()/306 cmd: $NMCLI --terse --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 1594 bytes +stdout: 1666 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(brak)[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(brak)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m40 MHz[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(brak)[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m40 MHz[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(brak)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m40 MHz[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< size: 769 -location: src/tests/client/test-client.py:test_004()/305 +location: src/tests/client/test-client.py:test_004()/307 cmd: $NMCLI --terse --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -21304,7 +21506,7 @@ stdout: 604 bytes <<< size: 815 -location: src/tests/client/test-client.py:test_004()/306 +location: src/tests/client/test-client.py:test_004()/308 cmd: $NMCLI --terse --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -21319,7 +21521,7 @@ stdout: 640 bytes <<< size: 1822 -location: src/tests/client/test-client.py:test_004()/307 +location: src/tests/client/test-client.py:test_004()/309 cmd: $NMCLI --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -21334,7 +21536,7 @@ stdout: 1546 bytes <<< size: 1880 -location: src/tests/client/test-client.py:test_004()/308 +location: src/tests/client/test-client.py:test_004()/310 cmd: $NMCLI --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -21348,32 +21550,32 @@ stdout: 1594 bytes <<< -size: 596 -location: src/tests/client/test-client.py:test_004()/309 +size: 612 +location: src/tests/client/test-client.py:test_004()/311 cmd: $NMCLI --terse --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 410 bytes +stdout: 426 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 618 -location: src/tests/client/test-client.py:test_004()/310 +size: 636 +location: src/tests/client/test-client.py:test_004()/312 cmd: $NMCLI --terse --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 422 bytes +stdout: 440 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 344 -location: src/tests/client/test-client.py:test_004()/311 +location: src/tests/client/test-client.py:test_004()/313 cmd: $NMCLI --terse --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -21385,7 +21587,7 @@ stdout: 155 bytes <<< size: 363 -location: src/tests/client/test-client.py:test_004()/312 +location: src/tests/client/test-client.py:test_004()/314 cmd: $NMCLI --terse --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -21397,7 +21599,7 @@ stdout: 164 bytes <<< size: 709 -location: src/tests/client/test-client.py:test_004()/313 +location: src/tests/client/test-client.py:test_004()/315 cmd: $NMCLI --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -21409,7 +21611,7 @@ stdout: 410 bytes <<< size: 731 -location: src/tests/client/test-client.py:test_004()/314 +location: src/tests/client/test-client.py:test_004()/316 cmd: $NMCLI --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -21420,12 +21622,12 @@ stdout: 422 bytes <<< -size: 3275 -location: src/tests/client/test-client.py:test_004()/315 +size: 3304 +location: src/tests/client/test-client.py:test_004()/317 cmd: $NMCLI --terse --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3111 bytes +stdout: 3140 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21472,6 +21674,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -21531,12 +21734,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3312 -location: src/tests/client/test-client.py:test_004()/316 +size: 3341 +location: src/tests/client/test-client.py:test_004()/318 cmd: $NMCLI --terse --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3138 bytes +stdout: 3167 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21583,6 +21786,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -21643,7 +21847,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 904 -location: src/tests/client/test-client.py:test_004()/317 +location: src/tests/client/test-client.py:test_004()/319 cmd: $NMCLI --terse --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -21676,7 +21880,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 914 -location: src/tests/client/test-client.py:test_004()/318 +location: src/tests/client/test-client.py:test_004()/320 cmd: $NMCLI --terse --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -21708,12 +21912,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3307 -location: src/tests/client/test-client.py:test_004()/319 +size: 3336 +location: src/tests/client/test-client.py:test_004()/321 cmd: $NMCLI --terse --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 3005 bytes +stdout: 3034 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21756,6 +21960,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -21815,12 +22020,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3344 -location: src/tests/client/test-client.py:test_004()/320 +size: 3373 +location: src/tests/client/test-client.py:test_004()/322 cmd: $NMCLI --terse --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3032 bytes +stdout: 3061 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21863,6 +22068,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -21923,7 +22129,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 1146 -location: src/tests/client/test-client.py:test_004()/321 +location: src/tests/client/test-client.py:test_004()/323 cmd: $NMCLI --terse --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -21953,7 +22159,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 1156 -location: src/tests/client/test-client.py:test_004()/322 +location: src/tests/client/test-client.py:test_004()/324 cmd: $NMCLI --terse --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -21983,7 +22189,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 787 -location: src/tests/client/test-client.py:test_004()/323 +location: src/tests/client/test-client.py:test_004()/325 cmd: $NMCLI --terse --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -22007,7 +22213,7 @@ connection.interface-name: <<< size: 797 -location: src/tests/client/test-client.py:test_004()/324 +location: src/tests/client/test-client.py:test_004()/326 cmd: $NMCLI --terse --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -22030,15 +22236,15 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 3756 -location: src/tests/client/test-client.py:test_004()/325 +size: 3802 +location: src/tests/client/test-client.py:test_004()/327 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: C returncode: 0 -stdout: 3606 bytes +stdout: 3652 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -22059,15 +22265,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: 3795 -location: src/tests/client/test-client.py:test_004()/326 +size: 3841 +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: 3635 bytes +stdout: 3681 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -22088,15 +22294,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: 3756 -location: src/tests/client/test-client.py:test_004()/327 +size: 3802 +location: src/tests/client/test-client.py:test_004()/329 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: C returncode: 0 -stdout: 3606 bytes +stdout: 3652 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -22117,15 +22323,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: 3795 -location: src/tests/client/test-client.py:test_004()/328 +size: 3841 +location: src/tests/client/test-client.py:test_004()/330 cmd: $NMCLI --mode tabular con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3635 bytes +stdout: 3681 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -22146,15 +22352,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: 3004 -location: src/tests/client/test-client.py:test_004()/329 +size: 3050 +location: src/tests/client/test-client.py:test_004()/331 cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2847 bytes +stdout: 2893 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -22170,15 +22376,15 @@ proxy none no -- -- <<< -size: 3032 -location: src/tests/client/test-client.py:test_004()/330 +size: 3078 +location: src/tests/client/test-client.py:test_004()/332 cmd: $NMCLI --mode tabular -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2865 bytes +stdout: 2911 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -22195,7 +22401,7 @@ proxy none nie -- -- <<< size: 410 -location: src/tests/client/test-client.py:test_004()/331 +location: src/tests/client/test-client.py:test_004()/333 cmd: $NMCLI --mode tabular -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -22206,7 +22412,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 420 -location: src/tests/client/test-client.py:test_004()/332 +location: src/tests/client/test-client.py:test_004()/334 cmd: $NMCLI --mode tabular -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -22217,7 +22423,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 662 -location: src/tests/client/test-client.py:test_004()/333 +location: src/tests/client/test-client.py:test_004()/335 cmd: $NMCLI --mode tabular -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -22228,7 +22434,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 act <<< size: 674 -location: src/tests/client/test-client.py:test_004()/334 +location: src/tests/client/test-client.py:test_004()/336 cmd: $NMCLI --mode tabular -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -22239,7 +22445,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 akt <<< size: 397 -location: src/tests/client/test-client.py:test_004()/335 +location: src/tests/client/test-client.py:test_004()/337 cmd: $NMCLI --mode tabular dev s lang: C returncode: 0 @@ -22254,7 +22460,7 @@ wlan1 wifi unavailable -- <<< size: 413 -location: src/tests/client/test-client.py:test_004()/336 +location: src/tests/client/test-client.py:test_004()/338 cmd: $NMCLI --mode tabular dev s lang: pl_PL.UTF-8 returncode: 0 @@ -22269,7 +22475,7 @@ wlan1 wifi niedostępne -- <<< size: 1424 -location: src/tests/client/test-client.py:test_004()/337 +location: src/tests/client/test-client.py:test_004()/339 cmd: $NMCLI --mode tabular -f all dev status lang: C returncode: 0 @@ -22284,7 +22490,7 @@ wlan1 wifi unavailable unknown unknown /org/freedesk <<< size: 1440 -location: src/tests/client/test-client.py:test_004()/338 +location: src/tests/client/test-client.py:test_004()/340 cmd: $NMCLI --mode tabular -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -22299,7 +22505,7 @@ wlan1 wifi niedostępne nieznane nieznane /org/freedes <<< size: 6557 -location: src/tests/client/test-client.py:test_004()/339 +location: src/tests/client/test-client.py:test_004()/341 cmd: $NMCLI --mode tabular dev show lang: C returncode: 0 @@ -22448,7 +22654,7 @@ IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0 <<< size: 6581 -location: src/tests/client/test-client.py:test_004()/340 +location: src/tests/client/test-client.py:test_004()/342 cmd: $NMCLI --mode tabular dev show lang: pl_PL.UTF-8 returncode: 0 @@ -22596,12 +22802,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0/85, nh = ::, mt = 2821465568 | dst = 2001:a::a976:2488:f49f:b48/106, nh = 2001:a::62ae:c734:fc7b:e931, mt = 2248613879 | dst = 2001:a::afb7:4449:3787:8bb4/123, nh = :: 2001:a::2934:bd66:550d:ec19 sear6.fo.x.y -- <<< -size: 16269 -location: src/tests/client/test-client.py:test_004()/341 +size: 16323 +location: src/tests/client/test-client.py:test_004()/343 cmd: $NMCLI --mode tabular -f all dev show lang: C returncode: 0 -stdout: 16118 bytes +stdout: 16172 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -22612,8 +22818,8 @@ CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infra 1 54 Mbit/s 92 **** WPA1 WPA2 @@ -22698,8 +22904,8 @@ CAPABILITIES no unknown no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] 94:2B:E8:F6:D2:86 wlan1-ap-4 Infra 1 54 Mbit/s 48 ** WPA1 WPA2 @@ -22728,8 +22934,8 @@ CAPABILITIES no unknown no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY @@ -22749,12 +22955,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 16425 -location: src/tests/client/test-client.py:test_004()/342 +size: 16485 +location: src/tests/client/test-client.py:test_004()/344 cmd: $NMCLI --mode tabular -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 16264 bytes +stdout: 16324 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -22765,8 +22971,8 @@ CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infrastruktura 1 54 Mb/s 92 **** WPA1 WPA2 @@ -22851,8 +23057,8 @@ CAPABILITIES nie nieznane nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] 94:2B:E8:F6:D2:86 wlan1-ap-4 Infrastruktura 1 54 Mb/s 48 ** WPA1 WPA2 @@ -22881,8 +23087,8 @@ CAPABILITIES nie nieznane nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY @@ -22903,7 +23109,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1167 -location: src/tests/client/test-client.py:test_004()/343 +location: src/tests/client/test-client.py:test_004()/345 cmd: $NMCLI --mode tabular dev show wlan0 lang: C returncode: 0 @@ -22938,7 +23144,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1179 -location: src/tests/client/test-client.py:test_004()/344 +location: src/tests/client/test-client.py:test_004()/346 cmd: $NMCLI --mode tabular dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -22972,12 +23178,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 3355 -location: src/tests/client/test-client.py:test_004()/345 +size: 3373 +location: src/tests/client/test-client.py:test_004()/347 cmd: $NMCLI --mode tabular -f all dev show wlan0 lang: C returncode: 0 -stdout: 3199 bytes +stdout: 3217 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -22988,8 +23194,8 @@ CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infra 1 54 Mbit/s 92 **** WPA1 WPA2 @@ -23012,12 +23218,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3419 -location: src/tests/client/test-client.py:test_004()/346 +size: 3439 +location: src/tests/client/test-client.py:test_004()/348 cmd: $NMCLI --mode tabular -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3253 bytes +stdout: 3273 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -23028,8 +23234,8 @@ CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infrastruktura 1 54 Mb/s 92 **** WPA1 WPA2 @@ -23052,12 +23258,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1377 -location: src/tests/client/test-client.py:test_004()/347 +size: 1395 +location: src/tests/client/test-client.py:test_004()/349 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1186 bytes +stdout: 1204 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -23065,16 +23271,16 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 1405 -location: src/tests/client/test-client.py:test_004()/348 +size: 1425 +location: src/tests/client/test-client.py:test_004()/350 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1204 bytes +stdout: 1224 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -23082,16 +23288,16 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< -size: 1377 -location: src/tests/client/test-client.py:test_004()/349 +size: 1395 +location: src/tests/client/test-client.py:test_004()/351 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1186 bytes +stdout: 1204 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -23099,16 +23305,16 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 1405 -location: src/tests/client/test-client.py:test_004()/350 +size: 1425 +location: src/tests/client/test-client.py:test_004()/352 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1204 bytes +stdout: 1224 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -23116,12 +23322,12 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< size: 528 -location: src/tests/client/test-client.py:test_004()/351 +location: src/tests/client/test-client.py:test_004()/353 cmd: $NMCLI --mode tabular -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -23136,7 +23342,7 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< size: 538 -location: src/tests/client/test-client.py:test_004()/352 +location: src/tests/client/test-client.py:test_004()/354 cmd: $NMCLI --mode tabular -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -23150,44 +23356,44 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/4 wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< -size: 1998 -location: src/tests/client/test-client.py:test_004()/353 +size: 2075 +location: src/tests/client/test-client.py:test_004()/355 cmd: $NMCLI --mode tabular -f ALL device wifi list lang: C returncode: 0 -stdout: 1840 bytes +stdout: 1917 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 40 MHz 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 2066 -location: src/tests/client/test-client.py:test_004()/354 +size: 2151 +location: src/tests/client/test-client.py:test_004()/356 cmd: $NMCLI --mode tabular -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 1898 bytes +stdout: 1983 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< size: 753 -location: src/tests/client/test-client.py:test_004()/355 +location: src/tests/client/test-client.py:test_004()/357 cmd: $NMCLI --mode tabular -f COMMON device wifi list lang: C returncode: 0 @@ -23205,7 +23411,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 813 -location: src/tests/client/test-client.py:test_004()/356 +location: src/tests/client/test-client.py:test_004()/358 cmd: $NMCLI --mode tabular -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -23223,7 +23429,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 2111 -location: src/tests/client/test-client.py:test_004()/357 +location: src/tests/client/test-client.py:test_004()/359 cmd: $NMCLI --mode tabular -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -23241,7 +23447,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 2179 -location: src/tests/client/test-client.py:test_004()/358 +location: src/tests/client/test-client.py:test_004()/360 cmd: $NMCLI --mode tabular -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -23258,34 +23464,34 @@ AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 751 -location: src/tests/client/test-client.py:test_004()/359 +size: 773 +location: src/tests/client/test-client.py:test_004()/361 cmd: $NMCLI --mode tabular -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 570 bytes +stdout: 592 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 779 -location: src/tests/client/test-client.py:test_004()/360 +size: 803 +location: src/tests/client/test-client.py:test_004()/362 cmd: $NMCLI --mode tabular -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 588 bytes +stdout: 612 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 362 -location: src/tests/client/test-client.py:test_004()/361 +location: src/tests/client/test-client.py:test_004()/363 cmd: $NMCLI --mode tabular -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -23298,7 +23504,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 388 -location: src/tests/client/test-client.py:test_004()/362 +location: src/tests/client/test-client.py:test_004()/364 cmd: $NMCLI --mode tabular -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -23311,7 +23517,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 864 -location: src/tests/client/test-client.py:test_004()/363 +location: src/tests/client/test-client.py:test_004()/365 cmd: $NMCLI --mode tabular -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -23324,7 +23530,7 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MH <<< size: 892 -location: src/tests/client/test-client.py:test_004()/364 +location: src/tests/client/test-client.py:test_004()/366 cmd: $NMCLI --mode tabular -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -23336,12 +23542,12 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 3358 -location: src/tests/client/test-client.py:test_004()/365 +size: 3376 +location: src/tests/client/test-client.py:test_004()/367 cmd: $NMCLI --mode tabular -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3199 bytes +stdout: 3217 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -23352,8 +23558,8 @@ CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infra 1 54 Mbit/s 92 **** WPA1 WPA2 @@ -23376,12 +23582,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3422 -location: src/tests/client/test-client.py:test_004()/366 +size: 3442 +location: src/tests/client/test-client.py:test_004()/368 cmd: $NMCLI --mode tabular -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3253 bytes +stdout: 3273 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -23392,8 +23598,8 @@ CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infrastruktura 1 54 Mb/s 92 **** WPA1 WPA2 @@ -23417,7 +23623,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1180 -location: src/tests/client/test-client.py:test_004()/367 +location: src/tests/client/test-client.py:test_004()/369 cmd: $NMCLI --mode tabular -f COMMON device show wlan0 lang: C returncode: 0 @@ -23452,7 +23658,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1192 -location: src/tests/client/test-client.py:test_004()/368 +location: src/tests/client/test-client.py:test_004()/370 cmd: $NMCLI --mode tabular -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -23486,12 +23692,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 3395 -location: src/tests/client/test-client.py:test_004()/369 +size: 3413 +location: src/tests/client/test-client.py:test_004()/371 cmd: $NMCLI --mode tabular -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 3098 bytes +stdout: 3116 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -23499,8 +23705,8 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 21 Mb/s no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infra 1 54 Mbit/s 92 **** WPA1 WPA2 @@ -23523,12 +23729,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3459 -location: src/tests/client/test-client.py:test_004()/370 +size: 3479 +location: src/tests/client/test-client.py:test_004()/372 cmd: $NMCLI --mode tabular -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3152 bytes +stdout: 3172 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -23536,8 +23742,8 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 21 Mb/s nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY AP[1] C0:E2:BE:E8:EF:B6 wlan0-ap-2 Infrastruktura 1 54 Mb/s 92 **** WPA1 WPA2 @@ -23561,7 +23767,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1143 -location: src/tests/client/test-client.py:test_004()/371 +location: src/tests/client/test-client.py:test_004()/373 cmd: $NMCLI --mode tabular dev lldp list ifname eth0 lang: C returncode: 0 @@ -23574,7 +23780,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 1153 -location: src/tests/client/test-client.py:test_004()/372 +location: src/tests/client/test-client.py:test_004()/374 cmd: $NMCLI --mode tabular dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -23587,7 +23793,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 868 -location: src/tests/client/test-client.py:test_004()/373 +location: src/tests/client/test-client.py:test_004()/375 cmd: $NMCLI --mode tabular -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -23636,7 +23842,7 @@ interface-name <<< size: 878 -location: src/tests/client/test-client.py:test_004()/374 +location: src/tests/client/test-client.py:test_004()/376 cmd: $NMCLI --mode tabular -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -23684,15 +23890,15 @@ interface-name <<< -size: 3768 -location: src/tests/client/test-client.py:test_004()/375 +size: 3814 +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: 3606 bytes +stdout: 3652 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -23713,15 +23919,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: 3807 -location: src/tests/client/test-client.py:test_004()/376 +size: 3853 +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: 3635 bytes +stdout: 3681 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -23742,15 +23948,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: 3768 -location: src/tests/client/test-client.py:test_004()/377 +size: 3814 +location: src/tests/client/test-client.py:test_004()/379 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 3606 bytes +stdout: 3652 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -23771,15 +23977,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: 3807 -location: src/tests/client/test-client.py:test_004()/378 +size: 3853 +location: src/tests/client/test-client.py:test_004()/380 cmd: $NMCLI --mode tabular --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3635 bytes +stdout: 3681 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -23800,15 +24006,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: 3016 -location: src/tests/client/test-client.py:test_004()/379 +size: 3062 +location: src/tests/client/test-client.py:test_004()/381 cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2847 bytes +stdout: 2893 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) no no -- -- 0 (default) yes -- -- 0x0 (none) no yes -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -23824,15 +24030,15 @@ proxy none no -- -- <<< -size: 3044 -location: src/tests/client/test-client.py:test_004()/380 +size: 3090 +location: src/tests/client/test-client.py:test_004()/382 cmd: $NMCLI --mode tabular --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2865 bytes +stdout: 2911 bytes >>> -name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ipv4 auto -- -- -- 0 -- -- -- -1 0 (unspec) -- -1 (default) nie nie -- -- 0 (default) tak -- -- 0x0 (none) nie tak -1 (default) -1 (default) -- 0 (default) -- -1 (default) @@ -23849,7 +24055,7 @@ proxy none nie -- -- <<< size: 422 -location: src/tests/client/test-client.py:test_004()/381 +location: src/tests/client/test-client.py:test_004()/383 cmd: $NMCLI --mode tabular --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -23860,7 +24066,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 432 -location: src/tests/client/test-client.py:test_004()/382 +location: src/tests/client/test-client.py:test_004()/384 cmd: $NMCLI --mode tabular --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -23871,7 +24077,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 674 -location: src/tests/client/test-client.py:test_004()/383 +location: src/tests/client/test-client.py:test_004()/385 cmd: $NMCLI --mode tabular --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -23882,7 +24088,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 act <<< size: 686 -location: src/tests/client/test-client.py:test_004()/384 +location: src/tests/client/test-client.py:test_004()/386 cmd: $NMCLI --mode tabular --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -23893,7 +24099,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 akt <<< size: 573 -location: src/tests/client/test-client.py:test_004()/385 +location: src/tests/client/test-client.py:test_004()/387 cmd: $NMCLI --mode tabular --color yes dev s lang: C returncode: 0 @@ -23908,7 +24114,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 589 -location: src/tests/client/test-client.py:test_004()/386 +location: src/tests/client/test-client.py:test_004()/388 cmd: $NMCLI --mode tabular --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -23923,7 +24129,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 1805 -location: src/tests/client/test-client.py:test_004()/387 +location: src/tests/client/test-client.py:test_004()/389 cmd: $NMCLI --mode tabular --color yes -f all dev status lang: C returncode: 0 @@ -23938,7 +24144,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 1821 -location: src/tests/client/test-client.py:test_004()/388 +location: src/tests/client/test-client.py:test_004()/390 cmd: $NMCLI --mode tabular --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -23953,7 +24159,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 6569 -location: src/tests/client/test-client.py:test_004()/389 +location: src/tests/client/test-client.py:test_004()/391 cmd: $NMCLI --mode tabular --color yes dev show lang: C returncode: 0 @@ -24102,7 +24308,7 @@ IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0 <<< size: 6593 -location: src/tests/client/test-client.py:test_004()/390 +location: src/tests/client/test-client.py:test_004()/392 cmd: $NMCLI --mode tabular --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -24250,12 +24456,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0/85, nh = ::, mt = 2821465568 | dst = 2001:a::a976:2488:f49f:b48/106, nh = 2001:a::62ae:c734:fc7b:e931, mt = 2248613879 | dst = 2001:a::afb7:4449:3787:8bb4/123, nh = :: 2001:a::2934:bd66:550d:ec19 sear6.fo.x.y -- <<< -size: 16641 -location: src/tests/client/test-client.py:test_004()/391 +size: 16695 +location: src/tests/client/test-client.py:test_004()/393 cmd: $NMCLI --mode tabular --color yes -f all dev show lang: C returncode: 0 -stdout: 16478 bytes +stdout: 16532 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -24266,8 +24472,8 @@ CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfra[0m [32m1[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -24352,8 +24558,8 @@ CAPABILITIES no unknown no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [35mAP[1][0m [35m [0m [35m94:2B:E8:F6:D2:86[0m [35mwlan1-ap-4[0m [35mInfra[0m [35m1[0m [35m54 Mbit/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m @@ -24382,8 +24588,8 @@ CAPABILITIES no unknown no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY @@ -24403,12 +24609,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 16797 -location: src/tests/client/test-client.py:test_004()/392 +size: 16857 +location: src/tests/client/test-client.py:test_004()/394 cmd: $NMCLI --mode tabular --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 16624 bytes +stdout: 16684 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -24419,8 +24625,8 @@ CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfrastruktura[0m [32m1[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -24505,8 +24711,8 @@ CAPABILITIES nie nieznane nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [35mAP[1][0m [35m [0m [35m94:2B:E8:F6:D2:86[0m [35mwlan1-ap-4[0m [35mInfrastruktura[0m [35m1[0m [35m54 Mb/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m @@ -24535,8 +24741,8 @@ CAPABILITIES nie nieznane nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY @@ -24557,7 +24763,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1179 -location: src/tests/client/test-client.py:test_004()/393 +location: src/tests/client/test-client.py:test_004()/395 cmd: $NMCLI --mode tabular --color yes dev show wlan0 lang: C returncode: 0 @@ -24592,7 +24798,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1191 -location: src/tests/client/test-client.py:test_004()/394 +location: src/tests/client/test-client.py:test_004()/396 cmd: $NMCLI --mode tabular --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -24626,12 +24832,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 3637 -location: src/tests/client/test-client.py:test_004()/395 +size: 3655 +location: src/tests/client/test-client.py:test_004()/397 cmd: $NMCLI --mode tabular --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 3469 bytes +stdout: 3487 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -24642,8 +24848,8 @@ CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfra[0m [32m1[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -24666,12 +24872,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3701 -location: src/tests/client/test-client.py:test_004()/396 +size: 3721 +location: src/tests/client/test-client.py:test_004()/398 cmd: $NMCLI --mode tabular --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3523 bytes +stdout: 3543 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -24682,8 +24888,8 @@ CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfrastruktura[0m [32m1[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -24706,12 +24912,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1389 -location: src/tests/client/test-client.py:test_004()/397 +size: 1407 +location: src/tests/client/test-client.py:test_004()/399 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1186 bytes +stdout: 1204 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -24719,16 +24925,16 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 1417 -location: src/tests/client/test-client.py:test_004()/398 +size: 1437 +location: src/tests/client/test-client.py:test_004()/400 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1204 bytes +stdout: 1224 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -24736,16 +24942,16 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< -size: 1389 -location: src/tests/client/test-client.py:test_004()/399 +size: 1407 +location: src/tests/client/test-client.py:test_004()/401 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1186 bytes +stdout: 1204 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -24753,16 +24959,16 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 1417 -location: src/tests/client/test-client.py:test_004()/400 +size: 1437 +location: src/tests/client/test-client.py:test_004()/402 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1204 bytes +stdout: 1224 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -24770,12 +24976,12 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 HWADDR 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< size: 663 -location: src/tests/client/test-client.py:test_004()/401 +location: src/tests/client/test-client.py:test_004()/403 cmd: $NMCLI --mode tabular --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -24790,7 +24996,7 @@ DEVICE TYPE DBUS-PATH <<< size: 673 -location: src/tests/client/test-client.py:test_004()/402 +location: src/tests/client/test-client.py:test_004()/404 cmd: $NMCLI --mode tabular --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -24804,44 +25010,44 @@ DEVICE TYPE DBUS-PATH [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 2622 -location: src/tests/client/test-client.py:test_004()/403 +size: 2735 +location: src/tests/client/test-client.py:test_004()/405 cmd: $NMCLI --mode tabular --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 2452 bytes +stdout: 2565 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 2690 -location: src/tests/client/test-client.py:test_004()/404 +size: 2811 +location: src/tests/client/test-client.py:test_004()/406 cmd: $NMCLI --mode tabular --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 2510 bytes +stdout: 2631 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< size: 1089 -location: src/tests/client/test-client.py:test_004()/405 +location: src/tests/client/test-client.py:test_004()/407 cmd: $NMCLI --mode tabular --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -24859,7 +25065,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 1149 -location: src/tests/client/test-client.py:test_004()/406 +location: src/tests/client/test-client.py:test_004()/408 cmd: $NMCLI --mode tabular --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -24877,7 +25083,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 2735 -location: src/tests/client/test-client.py:test_004()/407 +location: src/tests/client/test-client.py:test_004()/409 cmd: $NMCLI --mode tabular --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -24895,7 +25101,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 2803 -location: src/tests/client/test-client.py:test_004()/408 +location: src/tests/client/test-client.py:test_004()/410 cmd: $NMCLI --mode tabular --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -24912,34 +25118,34 @@ NAME SSID SSID-HEX BSSID MODE CHAN NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH <<< -size: 916 -location: src/tests/client/test-client.py:test_004()/409 +size: 947 +location: src/tests/client/test-client.py:test_004()/411 cmd: $NMCLI --mode tabular --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 723 bytes +stdout: 754 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 944 -location: src/tests/client/test-client.py:test_004()/410 +size: 977 +location: src/tests/client/test-client.py:test_004()/412 cmd: $NMCLI --mode tabular --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 741 bytes +stdout: 774 bytes >>> -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 455 -location: src/tests/client/test-client.py:test_004()/411 +location: src/tests/client/test-client.py:test_004()/413 cmd: $NMCLI --mode tabular --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -24952,7 +25158,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 481 -location: src/tests/client/test-client.py:test_004()/412 +location: src/tests/client/test-client.py:test_004()/414 cmd: $NMCLI --mode tabular --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -24965,7 +25171,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 1029 -location: src/tests/client/test-client.py:test_004()/413 +location: src/tests/client/test-client.py:test_004()/415 cmd: $NMCLI --mode tabular --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -24978,7 +25184,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ <<< size: 1057 -location: src/tests/client/test-client.py:test_004()/414 +location: src/tests/client/test-client.py:test_004()/416 cmd: $NMCLI --mode tabular --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -24990,12 +25196,12 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 3640 -location: src/tests/client/test-client.py:test_004()/415 +size: 3658 +location: src/tests/client/test-client.py:test_004()/417 cmd: $NMCLI --mode tabular --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3469 bytes +stdout: 3487 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -25006,8 +25212,8 @@ CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfra[0m [32m1[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -25030,12 +25236,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3704 -location: src/tests/client/test-client.py:test_004()/416 +size: 3724 +location: src/tests/client/test-client.py:test_004()/418 cmd: $NMCLI --mode tabular --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3523 bytes +stdout: 3543 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -25046,8 +25252,8 @@ CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER PROMISC INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfrastruktura[0m [32m1[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -25071,7 +25277,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1192 -location: src/tests/client/test-client.py:test_004()/417 +location: src/tests/client/test-client.py:test_004()/419 cmd: $NMCLI --mode tabular --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -25106,7 +25312,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1204 -location: src/tests/client/test-client.py:test_004()/418 +location: src/tests/client/test-client.py:test_004()/420 cmd: $NMCLI --mode tabular --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -25140,12 +25346,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 3677 -location: src/tests/client/test-client.py:test_004()/419 +size: 3695 +location: src/tests/client/test-client.py:test_004()/421 cmd: $NMCLI --mode tabular --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 3368 bytes +stdout: 3386 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- wlan0 no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown @@ -25153,8 +25359,8 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 21 Mb/s no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfra[0m [32m1[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -25177,12 +25383,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3741 -location: src/tests/client/test-client.py:test_004()/420 +size: 3761 +location: src/tests/client/test-client.py:test_004()/422 cmd: $NMCLI --mode tabular --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3422 bytes +stdout: 3442 bytes >>> NAME DEVICE TYPE NM-TYPE DBUS-PATH VENDOR PRODUCT DRIVER DRIVER-VERSION FIRMWARE-VERSION HWADDR MTU STATE REASON IP4-CONNECTIVITY IP6-CONNECTIVITY UDI PATH IP-IFACE IS-SOFTWARE NM-MANAGED AUTOCONNECT FIRMWARE-MISSING NM-PLUGIN-MISSING PHYS-PORT-ID CONNECTION CON-UUID CON-PATH METERED GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 -- -- virtual -- -- 13:E0:74:85:7C:D9 0 100 (połączono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- wlan0 nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane @@ -25190,8 +25396,8 @@ GENERAL wlan0 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/3 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 21 Mb/s nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY [32mAP[1][0m [32m [0m [32mC0:E2:BE:E8:EF:B6[0m [32mwlan0-ap-2[0m [32mInfrastruktura[0m [32m1[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m @@ -25215,7 +25421,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1155 -location: src/tests/client/test-client.py:test_004()/421 +location: src/tests/client/test-client.py:test_004()/423 cmd: $NMCLI --mode tabular --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -25228,7 +25434,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 1165 -location: src/tests/client/test-client.py:test_004()/422 +location: src/tests/client/test-client.py:test_004()/424 cmd: $NMCLI --mode tabular --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -25241,7 +25447,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 880 -location: src/tests/client/test-client.py:test_004()/423 +location: src/tests/client/test-client.py:test_004()/425 cmd: $NMCLI --mode tabular --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -25290,7 +25496,7 @@ interface-name <<< size: 890 -location: src/tests/client/test-client.py:test_004()/424 +location: src/tests/client/test-client.py:test_004()/426 cmd: $NMCLI --mode tabular --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -25338,19 +25544,19 @@ interface-name <<< -size: 5904 -location: src/tests/client/test-client.py:test_004()/425 +size: 5973 +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: 5745 bytes +stdout: 5814 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 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25380,19 +25586,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: 5990 -location: src/tests/client/test-client.py:test_004()/426 +size: 6059 +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: 5821 bytes +stdout: 5890 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25422,19 +25628,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: 5904 -location: src/tests/client/test-client.py:test_004()/427 +size: 5973 +location: src/tests/client/test-client.py:test_004()/429 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 5745 bytes +stdout: 5814 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 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25464,19 +25670,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: 5990 -location: src/tests/client/test-client.py:test_004()/428 +size: 6059 +location: src/tests/client/test-client.py:test_004()/430 cmd: $NMCLI --mode tabular --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5821 bytes +stdout: 5890 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25506,19 +25712,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: 4566 -location: src/tests/client/test-client.py:test_004()/429 +size: 4635 +location: src/tests/client/test-client.py:test_004()/431 cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4400 bytes +stdout: 4469 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 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25538,19 +25744,19 @@ proxy none no -- -- <<< -size: 4613 -location: src/tests/client/test-client.py:test_004()/430 +size: 4682 +location: src/tests/client/test-client.py:test_004()/432 cmd: $NMCLI --mode tabular --pretty -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4437 bytes +stdout: 4506 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25571,7 +25777,7 @@ proxy none nie -- -- <<< size: 674 -location: src/tests/client/test-client.py:test_004()/431 +location: src/tests/client/test-client.py:test_004()/433 cmd: $NMCLI --mode tabular --pretty -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -25586,7 +25792,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 694 -location: src/tests/client/test-client.py:test_004()/432 +location: src/tests/client/test-client.py:test_004()/434 cmd: $NMCLI --mode tabular --pretty -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -25601,7 +25807,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 1128 -location: src/tests/client/test-client.py:test_004()/433 +location: src/tests/client/test-client.py:test_004()/435 cmd: $NMCLI --mode tabular --pretty -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -25616,7 +25822,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 act <<< size: 1166 -location: src/tests/client/test-client.py:test_004()/434 +location: src/tests/client/test-client.py:test_004()/436 cmd: $NMCLI --mode tabular --pretty -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -25631,7 +25837,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 akt <<< size: 535 -location: src/tests/client/test-client.py:test_004()/435 +location: src/tests/client/test-client.py:test_004()/437 cmd: $NMCLI --mode tabular --pretty dev s lang: C returncode: 0 @@ -25650,7 +25856,7 @@ wlan1 wifi unavailable -- <<< size: 544 -location: src/tests/client/test-client.py:test_004()/436 +location: src/tests/client/test-client.py:test_004()/438 cmd: $NMCLI --mode tabular --pretty dev s lang: pl_PL.UTF-8 returncode: 0 @@ -25669,7 +25875,7 @@ wlan1 wifi niedostępne -- <<< size: 1731 -location: src/tests/client/test-client.py:test_004()/437 +location: src/tests/client/test-client.py:test_004()/439 cmd: $NMCLI --mode tabular --pretty -f all dev status lang: C returncode: 0 @@ -25688,7 +25894,7 @@ wlan1 wifi unavailable unknown unknown /org/freedesk <<< size: 1740 -location: src/tests/client/test-client.py:test_004()/438 +location: src/tests/client/test-client.py:test_004()/440 cmd: $NMCLI --mode tabular --pretty -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -25707,7 +25913,7 @@ wlan1 wifi niedostępne nieznane nieznane /org/freedes <<< size: 10187 -location: src/tests/client/test-client.py:test_004()/439 +location: src/tests/client/test-client.py:test_004()/441 cmd: $NMCLI --mode tabular --pretty dev show lang: C returncode: 0 @@ -25918,7 +26124,7 @@ IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0 <<< size: 10358 -location: src/tests/client/test-client.py:test_004()/440 +location: src/tests/client/test-client.py:test_004()/442 cmd: $NMCLI --mode tabular --pretty dev show lang: pl_PL.UTF-8 returncode: 0 @@ -26128,12 +26334,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0/85, nh = ::, mt = 2821465568 | dst = 2001:a::a976:2488:f49f:b48/106, nh = 2001:a::62ae:c734:fc7b:e931, mt = 2248613879 | dst = 2001:a::afb7:4449:3787:8bb4/123, nh = :: 2001:a::2934:bd66:550d:ec19 sear6.fo.x.y -- <<< -size: 24690 -location: src/tests/client/test-client.py:test_004()/441 +size: 24771 +location: src/tests/client/test-client.py:test_004()/443 cmd: $NMCLI --mode tabular --pretty -f all dev show lang: C returncode: 0 -stdout: 24530 bytes +stdout: 24611 bytes >>> ========================== Device details (wlan0) @@ -26150,9 +26356,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -26273,9 +26479,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -26316,9 +26522,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY --------------------------------------------------------------------- @@ -26344,12 +26550,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 25045 -location: src/tests/client/test-client.py:test_004()/442 +size: 25135 +location: src/tests/client/test-client.py:test_004()/444 cmd: $NMCLI --mode tabular --pretty -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 24875 bytes +stdout: 24965 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -26366,9 +26572,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -26489,9 +26695,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -26532,9 +26738,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY --------------------------------------------------------------------- @@ -26561,7 +26767,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1769 -location: src/tests/client/test-client.py:test_004()/443 +location: src/tests/client/test-client.py:test_004()/445 cmd: $NMCLI --mode tabular --pretty dev show wlan0 lang: C returncode: 0 @@ -26608,7 +26814,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1810 -location: src/tests/client/test-client.py:test_004()/444 +location: src/tests/client/test-client.py:test_004()/446 cmd: $NMCLI --mode tabular --pretty dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -26654,12 +26860,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 4953 -location: src/tests/client/test-client.py:test_004()/445 +size: 4980 +location: src/tests/client/test-client.py:test_004()/447 cmd: $NMCLI --mode tabular --pretty -f all dev show wlan0 lang: C returncode: 0 -stdout: 4788 bytes +stdout: 4815 bytes >>> ========================== Device details (wlan0) @@ -26676,9 +26882,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -26707,12 +26913,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5061 -location: src/tests/client/test-client.py:test_004()/446 +size: 5091 +location: src/tests/client/test-client.py:test_004()/448 cmd: $NMCLI --mode tabular --pretty -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4886 bytes +stdout: 4916 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -26729,9 +26935,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -26760,12 +26966,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2060 -location: src/tests/client/test-client.py:test_004()/447 +size: 2087 +location: src/tests/client/test-client.py:test_004()/449 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1860 bytes +stdout: 1887 bytes >>> ========================== Device details (wlan0) @@ -26778,17 +26984,17 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 2125 -location: src/tests/client/test-client.py:test_004()/448 +size: 2155 +location: src/tests/client/test-client.py:test_004()/450 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1915 bytes +stdout: 1945 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -26801,17 +27007,17 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< -size: 2060 -location: src/tests/client/test-client.py:test_004()/449 +size: 2087 +location: src/tests/client/test-client.py:test_004()/451 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1860 bytes +stdout: 1887 bytes >>> ========================== Device details (wlan0) @@ -26824,17 +27030,17 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 2125 -location: src/tests/client/test-client.py:test_004()/450 +size: 2155 +location: src/tests/client/test-client.py:test_004()/452 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1915 bytes +stdout: 1945 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -26847,13 +27053,13 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< size: 684 -location: src/tests/client/test-client.py:test_004()/451 +location: src/tests/client/test-client.py:test_004()/453 cmd: $NMCLI --mode tabular --pretty -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -26872,7 +27078,7 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< size: 687 -location: src/tests/client/test-client.py:test_004()/452 +location: src/tests/client/test-client.py:test_004()/454 cmd: $NMCLI --mode tabular --pretty -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -26890,68 +27096,68 @@ wlan1 wifi /org/freedesktop/NetworkManager/Devices/4 wlan1 wifi /org/freedesktop/NetworkManager/Devices/5 <<< -size: 3039 -location: src/tests/client/test-client.py:test_004()/453 +size: 3149 +location: src/tests/client/test-client.py:test_004()/455 cmd: $NMCLI --mode tabular --pretty -f ALL device wifi list lang: C returncode: 0 -stdout: 2872 bytes +stdout: 2982 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infra 1 2412 MHz 54 Mbit/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (none) wlan0 no /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infra 1 2412 MHz 54 Mbit/s 40 MHz 55 ** WPA3 (none) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 no /org/freedesktop/NetworkManager/AccessPoint/3 =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infra 1 2412 MHz 54 Mbit/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 no /org/freedesktop/NetworkManager/AccessPoint/4 =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------ +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< -size: 3277 -location: src/tests/client/test-client.py:test_004()/454 +size: 3395 +location: src/tests/client/test-client.py:test_004()/456 cmd: $NMCLI --mode tabular --pretty -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 3100 bytes +stdout: 3218 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 -AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 -AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +AP[2] wlan0-ap-1 776C616E302D61702D31 61:95:77:AC:1E:4C Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 81 **** WPA1 pair_tkip pair_ccmp group_tkip group_ccmp psk (brak) wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/1 +AP[3] wlan0-ap-3 776C616E302D61702D33 9B:F6:B7:EC:97:76 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 55 ** WPA3 (brak) pair_tkip pair_ccmp group_tkip group_ccmp sae wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/3 ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +AP[1] wlan1-ap-4 776C616E312D61702D34 94:2B:E8:F6:D2:86 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 48 ** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan1 nie /org/freedesktop/NetworkManager/AccessPoint/4 ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< size: 1332 -location: src/tests/client/test-client.py:test_004()/455 +location: src/tests/client/test-client.py:test_004()/457 cmd: $NMCLI --mode tabular --pretty -f COMMON device wifi list lang: C returncode: 0 @@ -26981,7 +27187,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 1562 -location: src/tests/client/test-client.py:test_004()/456 +location: src/tests/client/test-client.py:test_004()/458 cmd: $NMCLI --mode tabular --pretty -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -27011,7 +27217,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 3152 -location: src/tests/client/test-client.py:test_004()/457 +location: src/tests/client/test-client.py:test_004()/459 cmd: $NMCLI --mode tabular --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -27041,7 +27247,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 3390 -location: src/tests/client/test-client.py:test_004()/458 +location: src/tests/client/test-client.py:test_004()/460 cmd: $NMCLI --mode tabular --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -27070,42 +27276,42 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ <<< -size: 1154 -location: src/tests/client/test-client.py:test_004()/459 +size: 1187 +location: src/tests/client/test-client.py:test_004()/461 cmd: $NMCLI --mode tabular --pretty -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 964 bytes +stdout: 997 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MHz 54 Mbit/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 no /org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 1242 -location: src/tests/client/test-client.py:test_004()/460 +size: 1277 +location: src/tests/client/test-client.py:test_004()/462 cmd: $NMCLI --mode tabular --pretty -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1041 bytes +stdout: 1076 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 2412 MHz 54 Mb/s 40 MHz 92 **** WPA1 WPA2 pair_tkip pair_ccmp group_tkip group_ccmp psk pair_tkip pair_ccmp group_tkip group_ccmp psk wlan0 nie /org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 569 -location: src/tests/client/test-client.py:test_004()/461 +location: src/tests/client/test-client.py:test_004()/463 cmd: $NMCLI --mode tabular --pretty -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -27122,7 +27328,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 654 -location: src/tests/client/test-client.py:test_004()/462 +location: src/tests/client/test-client.py:test_004()/464 cmd: $NMCLI --mode tabular --pretty -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -27139,7 +27345,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 1267 -location: src/tests/client/test-client.py:test_004()/463 +location: src/tests/client/test-client.py:test_004()/465 cmd: $NMCLI --mode tabular --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -27156,7 +27362,7 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infra 1 2412 MH <<< size: 1355 -location: src/tests/client/test-client.py:test_004()/464 +location: src/tests/client/test-client.py:test_004()/466 cmd: $NMCLI --mode tabular --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -27172,12 +27378,12 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 4956 -location: src/tests/client/test-client.py:test_004()/465 +size: 4983 +location: src/tests/client/test-client.py:test_004()/467 cmd: $NMCLI --mode tabular --pretty -f ALL device show wlan0 lang: C returncode: 0 -stdout: 4788 bytes +stdout: 4815 bytes >>> ========================== Device details (wlan0) @@ -27194,9 +27400,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -27225,12 +27431,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5064 -location: src/tests/client/test-client.py:test_004()/466 +size: 5094 +location: src/tests/client/test-client.py:test_004()/468 cmd: $NMCLI --mode tabular --pretty -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4886 bytes +stdout: 4916 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -27247,9 +27453,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -27279,7 +27485,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1782 -location: src/tests/client/test-client.py:test_004()/467 +location: src/tests/client/test-client.py:test_004()/469 cmd: $NMCLI --mode tabular --pretty -f COMMON device show wlan0 lang: C returncode: 0 @@ -27326,7 +27532,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1823 -location: src/tests/client/test-client.py:test_004()/468 +location: src/tests/client/test-client.py:test_004()/470 cmd: $NMCLI --mode tabular --pretty -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -27372,12 +27578,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 4942 -location: src/tests/client/test-client.py:test_004()/469 +size: 4969 +location: src/tests/client/test-client.py:test_004()/471 cmd: $NMCLI --mode tabular --pretty -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 4636 bytes +stdout: 4663 bytes >>> ========================== Device details (wlan0) @@ -27390,9 +27596,9 @@ NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- CAPABILITIES no 21 Mb/s no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -27421,12 +27627,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5050 -location: src/tests/client/test-client.py:test_004()/470 +size: 5080 +location: src/tests/client/test-client.py:test_004()/472 cmd: $NMCLI --mode tabular --pretty -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4734 bytes +stdout: 4764 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -27439,9 +27645,9 @@ NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- CAPABILITIES nie 21 Mb/s nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -27471,7 +27677,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1529 -location: src/tests/client/test-client.py:test_004()/471 +location: src/tests/client/test-client.py:test_004()/473 cmd: $NMCLI --mode tabular --pretty dev lldp list ifname eth0 lang: C returncode: 0 @@ -27488,7 +27694,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 1553 -location: src/tests/client/test-client.py:test_004()/472 +location: src/tests/client/test-client.py:test_004()/474 cmd: $NMCLI --mode tabular --pretty dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -27505,7 +27711,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 1493 -location: src/tests/client/test-client.py:test_004()/473 +location: src/tests/client/test-client.py:test_004()/475 cmd: $NMCLI --mode tabular --pretty -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -27576,7 +27782,7 @@ interface-name <<< size: 1533 -location: src/tests/client/test-client.py:test_004()/474 +location: src/tests/client/test-client.py:test_004()/476 cmd: $NMCLI --mode tabular --pretty -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -27646,19 +27852,19 @@ interface-name <<< -size: 5916 -location: src/tests/client/test-client.py:test_004()/475 +size: 5985 +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: 5745 bytes +stdout: 5814 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 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27688,19 +27894,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: 6002 -location: src/tests/client/test-client.py:test_004()/476 +size: 6071 +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: 5821 bytes +stdout: 5890 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27730,19 +27936,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: 5916 -location: src/tests/client/test-client.py:test_004()/477 +size: 5985 +location: src/tests/client/test-client.py:test_004()/479 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5745 bytes +stdout: 5814 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 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27772,19 +27978,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: 6002 -location: src/tests/client/test-client.py:test_004()/478 +size: 6071 +location: src/tests/client/test-client.py:test_004()/480 cmd: $NMCLI --mode tabular --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5821 bytes +stdout: 5890 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27814,19 +28020,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: 4578 -location: src/tests/client/test-client.py:test_004()/479 +size: 4647 +location: src/tests/client/test-client.py:test_004()/481 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4400 bytes +stdout: 4469 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 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 -- -- -- -- -1 (default) -- 0 unknown default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27846,19 +28052,19 @@ proxy none no -- -- <<< -size: 4625 -location: src/tests/client/test-client.py:test_004()/480 +size: 4694 +location: src/tests/client/test-client.py:test_004()/482 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4437 bytes +stdout: 4506 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 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 -- -- -- -- -1 (default) -- 0 nieznane default -1 (default) -1 (default) -1 (default) 0x0 (default) -1 -1 +name id uuid stable-id type interface-name autoconnect autoconnect-priority autoconnect-retries multi-connect auth-retries timestamp permissions zone controller master slave-type port-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 -- -- -- -- -- -- -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 replace-local-rule 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 auto-route-ext-gw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27879,7 +28085,7 @@ proxy none nie -- -- <<< size: 686 -location: src/tests/client/test-client.py:test_004()/481 +location: src/tests/client/test-client.py:test_004()/483 cmd: $NMCLI --mode tabular --pretty --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -27894,7 +28100,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 706 -location: src/tests/client/test-client.py:test_004()/482 +location: src/tests/client/test-client.py:test_004()/484 cmd: $NMCLI --mode tabular --pretty --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -27909,7 +28115,7 @@ vpn org.freedesktop.NetworkManager.openvpn -- key1 = val1, key2 = val <<< size: 1140 -location: src/tests/client/test-client.py:test_004()/483 +location: src/tests/client/test-client.py:test_004()/485 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -27924,7 +28130,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 act <<< size: 1178 -location: src/tests/client/test-client.py:test_004()/484 +location: src/tests/client/test-client.py:test_004()/486 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -27939,7 +28145,7 @@ GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 akt <<< size: 711 -location: src/tests/client/test-client.py:test_004()/485 +location: src/tests/client/test-client.py:test_004()/487 cmd: $NMCLI --mode tabular --pretty --color yes dev s lang: C returncode: 0 @@ -27958,7 +28164,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 720 -location: src/tests/client/test-client.py:test_004()/486 +location: src/tests/client/test-client.py:test_004()/488 cmd: $NMCLI --mode tabular --pretty --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -27977,7 +28183,7 @@ DEVICE TYPE STATE CONNECTION <<< size: 2112 -location: src/tests/client/test-client.py:test_004()/487 +location: src/tests/client/test-client.py:test_004()/489 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev status lang: C returncode: 0 @@ -27996,7 +28202,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 2121 -location: src/tests/client/test-client.py:test_004()/488 +location: src/tests/client/test-client.py:test_004()/490 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -28015,7 +28221,7 @@ DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH <<< size: 10199 -location: src/tests/client/test-client.py:test_004()/489 +location: src/tests/client/test-client.py:test_004()/491 cmd: $NMCLI --mode tabular --pretty --color yes dev show lang: C returncode: 0 @@ -28226,7 +28432,7 @@ IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0 <<< size: 10370 -location: src/tests/client/test-client.py:test_004()/490 +location: src/tests/client/test-client.py:test_004()/492 cmd: $NMCLI --mode tabular --pretty --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -28436,12 +28642,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 2001:a::88ca:3654:96b:ab44/89 -- dst = 2001:a::cc8b:7c09:4673:bbb0/85, nh = ::, mt = 2821465568 | dst = 2001:a::a976:2488:f49f:b48/106, nh = 2001:a::62ae:c734:fc7b:e931, mt = 2248613879 | dst = 2001:a::afb7:4449:3787:8bb4/123, nh = :: 2001:a::2934:bd66:550d:ec19 sear6.fo.x.y -- <<< -size: 25062 -location: src/tests/client/test-client.py:test_004()/491 +size: 25143 +location: src/tests/client/test-client.py:test_004()/493 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show lang: C returncode: 0 -stdout: 24890 bytes +stdout: 24971 bytes >>> ========================== Device details (wlan0) @@ -28458,9 +28664,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -28581,9 +28787,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -28624,9 +28830,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY --------------------------------------------------------------------- @@ -28652,12 +28858,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 25417 -location: src/tests/client/test-client.py:test_004()/492 +size: 25507 +location: src/tests/client/test-client.py:test_004()/494 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 25235 bytes +stdout: 25325 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -28674,9 +28880,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -28797,9 +29003,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -28840,9 +29046,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY --------------------------------------------------------------------- @@ -28869,7 +29075,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1781 -location: src/tests/client/test-client.py:test_004()/493 +location: src/tests/client/test-client.py:test_004()/495 cmd: $NMCLI --mode tabular --pretty --color yes dev show wlan0 lang: C returncode: 0 @@ -28916,7 +29122,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1822 -location: src/tests/client/test-client.py:test_004()/494 +location: src/tests/client/test-client.py:test_004()/496 cmd: $NMCLI --mode tabular --pretty --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -28962,12 +29168,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 5235 -location: src/tests/client/test-client.py:test_004()/495 +size: 5262 +location: src/tests/client/test-client.py:test_004()/497 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 5058 bytes +stdout: 5085 bytes >>> ========================== Device details (wlan0) @@ -28984,9 +29190,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -29015,12 +29221,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5343 -location: src/tests/client/test-client.py:test_004()/496 +size: 5373 +location: src/tests/client/test-client.py:test_004()/498 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5156 bytes +stdout: 5186 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -29037,9 +29243,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -29068,12 +29274,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2072 -location: src/tests/client/test-client.py:test_004()/497 +size: 2099 +location: src/tests/client/test-client.py:test_004()/499 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1860 bytes +stdout: 1887 bytes >>> ========================== Device details (wlan0) @@ -29086,17 +29292,17 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 2137 -location: src/tests/client/test-client.py:test_004()/498 +size: 2167 +location: src/tests/client/test-client.py:test_004()/500 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1915 bytes +stdout: 1945 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -29109,17 +29315,17 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< -size: 2072 -location: src/tests/client/test-client.py:test_004()/499 +size: 2099 +location: src/tests/client/test-client.py:test_004()/501 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1860 bytes +stdout: 1887 bytes >>> ========================== Device details (wlan0) @@ -29132,17 +29338,17 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no <<< -size: 2137 -location: src/tests/client/test-client.py:test_004()/500 +size: 2167 +location: src/tests/client/test-client.py:test_004()/502 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1915 bytes +stdout: 1945 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -29155,13 +29361,13 @@ HWADDR ------------------- 13:E0:74:85:7C:D9 -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie <<< size: 819 -location: src/tests/client/test-client.py:test_004()/501 +location: src/tests/client/test-client.py:test_004()/503 cmd: $NMCLI --mode tabular --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -29180,7 +29386,7 @@ DEVICE TYPE DBUS-PATH <<< size: 822 -location: src/tests/client/test-client.py:test_004()/502 +location: src/tests/client/test-client.py:test_004()/504 cmd: $NMCLI --mode tabular --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -29198,68 +29404,68 @@ DEVICE TYPE DBUS-PATH [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 3663 -location: src/tests/client/test-client.py:test_004()/503 +size: 3809 +location: src/tests/client/test-client.py:test_004()/505 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 3484 bytes +stdout: 3630 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(none)[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(none)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfra[0m [35m1[0m [35m2412 MHz[0m [35m54 Mbit/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mno[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m =========================== Wi-Fi scan list (wlan1) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------ +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< -size: 3901 -location: src/tests/client/test-client.py:test_004()/504 +size: 4055 +location: src/tests/client/test-client.py:test_004()/506 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 3712 bytes +stdout: 3866 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m [32mwlan0-ap-1[0m [32m776C616E302D61702D31[0m [32m61:95:77:AC:1E:4C[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m81[0m [32m****[0m [32mWPA1[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32m(brak)[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m [35mwlan0-ap-3[0m [35m776C616E302D61702D33[0m [35m9B:F6:B7:EC:97:76[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m55[0m [35m** [0m [35mWPA3[0m [35m(brak)[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m [35mwlan0[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/3[0m ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +[35mAP[1][0m [35mwlan1-ap-4[0m [35m776C616E312D61702D34[0m [35m94:2B:E8:F6:D2:86[0m [35mInfrastruktura[0m [35m1[0m [35m2412 MHz[0m [35m54 Mb/s[0m [35m40 MHz[0m [35m48[0m [35m** [0m [35mWPA1 WPA2[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [35mwlan1[0m [35mnie[0m [35m [0m [35m/org/freedesktop/NetworkManager/AccessPoint/4[0m ======================================== Lista skanowania sieci Wi-Fi (wlan1) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <<< size: 1668 -location: src/tests/client/test-client.py:test_004()/505 +location: src/tests/client/test-client.py:test_004()/507 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -29289,7 +29495,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 1898 -location: src/tests/client/test-client.py:test_004()/506 +location: src/tests/client/test-client.py:test_004()/508 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -29319,7 +29525,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY <<< size: 3776 -location: src/tests/client/test-client.py:test_004()/507 +location: src/tests/client/test-client.py:test_004()/509 cmd: $NMCLI --mode tabular --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -29349,7 +29555,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA <<< size: 4014 -location: src/tests/client/test-client.py:test_004()/508 +location: src/tests/client/test-client.py:test_004()/510 cmd: $NMCLI --mode tabular --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -29378,42 +29584,42 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ <<< -size: 1320 -location: src/tests/client/test-client.py:test_004()/509 +size: 1362 +location: src/tests/client/test-client.py:test_004()/511 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 1117 bytes +stdout: 1159 bytes >>> =========================== Wi-Fi scan list (wlan0) =========================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfra[0m [32m1[0m [32m2412 MHz[0m [32m54 Mbit/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mno[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 1407 -location: src/tests/client/test-client.py:test_004()/510 +size: 1451 +location: src/tests/client/test-client.py:test_004()/512 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1194 bytes +stdout: 1238 bytes >>> ======================================== Lista skanowania sieci Wi-Fi (wlan0) ======================================== -NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +NAME SSID SSID-HEX BSSID MODE CHAN FREQ RATE BANDWIDTH SIGNAL BARS SECURITY WPA-FLAGS RSN-FLAGS DEVICE ACTIVE IN-USE DBUS-PATH +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +[32mAP[1][0m [32mwlan0-ap-2[0m [32m776C616E302D61702D32[0m [32mC0:E2:BE:E8:EF:B6[0m [32mInfrastruktura[0m [32m1[0m [32m2412 MHz[0m [32m54 Mb/s[0m [32m40 MHz[0m [32m92[0m [32m****[0m [32mWPA1 WPA2[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m [32mwlan0[0m [32mnie[0m [32m [0m [32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 662 -location: src/tests/client/test-client.py:test_004()/511 +location: src/tests/client/test-client.py:test_004()/513 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -29430,7 +29636,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SEC <<< size: 747 -location: src/tests/client/test-client.py:test_004()/512 +location: src/tests/client/test-client.py:test_004()/514 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -29447,7 +29653,7 @@ IN-USE BSSID SSID MODE CHAN RATE SIGNAL BA <<< size: 1433 -location: src/tests/client/test-client.py:test_004()/513 +location: src/tests/client/test-client.py:test_004()/515 cmd: $NMCLI --mode tabular --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -29464,7 +29670,7 @@ NAME SSID SSID-HEX BSSID MODE CHAN FREQ <<< size: 1520 -location: src/tests/client/test-client.py:test_004()/514 +location: src/tests/client/test-client.py:test_004()/516 cmd: $NMCLI --mode tabular --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -29480,12 +29686,12 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 5238 -location: src/tests/client/test-client.py:test_004()/515 +size: 5265 +location: src/tests/client/test-client.py:test_004()/517 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5058 bytes +stdout: 5085 bytes >>> ========================== Device details (wlan0) @@ -29502,9 +29708,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS yes yes no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -29533,12 +29739,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5346 -location: src/tests/client/test-client.py:test_004()/516 +size: 5376 +location: src/tests/client/test-client.py:test_004()/518 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5156 bytes +stdout: 5186 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -29555,9 +29761,9 @@ NAME UP LOWER-UP CARRIER PROMISC -------------------------------------------------- INTERFACE-FLAGS tak tak nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -29587,7 +29793,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1794 -location: src/tests/client/test-client.py:test_004()/517 +location: src/tests/client/test-client.py:test_004()/519 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -29634,7 +29840,7 @@ IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 250 <<< size: 1835 -location: src/tests/client/test-client.py:test_004()/518 +location: src/tests/client/test-client.py:test_004()/520 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -29680,12 +29886,12 @@ GROUP ADDRESS GATEWAY ROUTE IP6 -- -- dst = 2001:a::dd5b:aa7b:b4a2:e42/102, nh = ::, mt = 2504159086 -- sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar -- <<< -size: 5224 -location: src/tests/client/test-client.py:test_004()/519 +size: 5251 +location: src/tests/client/test-client.py:test_004()/521 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 4906 bytes +stdout: 4933 bytes >>> ========================== Device details (wlan0) @@ -29698,9 +29904,9 @@ NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- CAPABILITIES no 21 Mb/s no no -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN -------------------------------------------------------------------------------------------- -WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +---------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown unknown no no NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ----------------------------------------------------------------------------------------------- @@ -29729,12 +29935,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5332 -location: src/tests/client/test-client.py:test_004()/520 +size: 5362 +location: src/tests/client/test-client.py:test_004()/522 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5004 bytes +stdout: 5034 bytes >>> =================================== Informacje o urządzeniu (wlan0) @@ -29747,9 +29953,9 @@ NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- CAPABILITIES nie 21 Mb/s nie nie -NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ---------------------------------------------------------------------------------------------- -WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie +NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ 6GHZ MESH IBSS-RSN +------------------------------------------------------------------------------------------------------- +WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nieznane nie nie NAME IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY ------------------------------------------------------------------------------------------------------ @@ -29779,7 +29985,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x <<< size: 1541 -location: src/tests/client/test-client.py:test_004()/521 +location: src/tests/client/test-client.py:test_004()/523 cmd: $NMCLI --mode tabular --pretty --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -29796,7 +30002,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 1565 -location: src/tests/client/test-client.py:test_004()/522 +location: src/tests/client/test-client.py:test_004()/524 cmd: $NMCLI --mode tabular --pretty --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -29813,7 +30019,7 @@ eth0 00:11:22:33:44:22 port1 GigabitEthernet #3 test3.example. <<< size: 1505 -location: src/tests/client/test-client.py:test_004()/523 +location: src/tests/client/test-client.py:test_004()/525 cmd: $NMCLI --mode tabular --pretty --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -29884,7 +30090,7 @@ interface-name <<< size: 1545 -location: src/tests/client/test-client.py:test_004()/524 +location: src/tests/client/test-client.py:test_004()/526 cmd: $NMCLI --mode tabular --pretty --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -29954,14 +30160,14 @@ interface-name <<< -size: 840 -location: src/tests/client/test-client.py:test_004()/525 +size: 842 +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: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -29970,14 +30176,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: 850 -location: src/tests/client/test-client.py:test_004()/526 +size: 852 +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: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -29986,14 +30192,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: 840 -location: src/tests/client/test-client.py:test_004()/527 +size: 842 +location: src/tests/client/test-client.py:test_004()/529 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30002,14 +30208,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: 850 -location: src/tests/client/test-client.py:test_004()/528 +size: 852 +location: src/tests/client/test-client.py:test_004()/530 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30018,28 +30224,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: 547 -location: src/tests/client/test-client.py:test_004()/529 +size: 549 +location: src/tests/client/test-client.py:test_004()/531 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 383 bytes +stdout: 385 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: <<< -size: 557 -location: src/tests/client/test-client.py:test_004()/530 +size: 559 +location: src/tests/client/test-client.py:test_004()/532 cmd: $NMCLI --mode tabular --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 383 bytes +stdout: 385 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30047,7 +30253,7 @@ proxy:none:no:: <<< size: 259 -location: src/tests/client/test-client.py:test_004()/531 +location: src/tests/client/test-client.py:test_004()/533 cmd: $NMCLI --mode tabular --terse -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -30057,7 +30263,7 @@ vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val <<< size: 269 -location: src/tests/client/test-client.py:test_004()/532 +location: src/tests/client/test-client.py:test_004()/534 cmd: $NMCLI --mode tabular --terse -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -30067,7 +30273,7 @@ vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val <<< size: 363 -location: src/tests/client/test-client.py:test_004()/533 +location: src/tests/client/test-client.py:test_004()/535 cmd: $NMCLI --mode tabular --terse -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -30077,7 +30283,7 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: <<< size: 373 -location: src/tests/client/test-client.py:test_004()/534 +location: src/tests/client/test-client.py:test_004()/536 cmd: $NMCLI --mode tabular --terse -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -30087,7 +30293,7 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: <<< size: 280 -location: src/tests/client/test-client.py:test_004()/535 +location: src/tests/client/test-client.py:test_004()/537 cmd: $NMCLI --mode tabular --terse dev s lang: C returncode: 0 @@ -30101,7 +30307,7 @@ wlan1:wifi:unavailable: <<< size: 290 -location: src/tests/client/test-client.py:test_004()/536 +location: src/tests/client/test-client.py:test_004()/538 cmd: $NMCLI --mode tabular --terse dev s lang: pl_PL.UTF-8 returncode: 0 @@ -30115,7 +30321,7 @@ wlan1:wifi:unavailable: <<< size: 678 -location: src/tests/client/test-client.py:test_004()/537 +location: src/tests/client/test-client.py:test_004()/539 cmd: $NMCLI --mode tabular --terse -f all dev status lang: C returncode: 0 @@ -30129,7 +30335,7 @@ wlan1:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/5 <<< size: 688 -location: src/tests/client/test-client.py:test_004()/538 +location: src/tests/client/test-client.py:test_004()/540 cmd: $NMCLI --mode tabular --terse -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -30143,7 +30349,7 @@ wlan1:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/5 <<< size: 3101 -location: src/tests/client/test-client.py:test_004()/539 +location: src/tests/client/test-client.py:test_004()/541 cmd: $NMCLI --mode tabular --terse dev show lang: C returncode: 0 @@ -30203,7 +30409,7 @@ IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0 <<< size: 3111 -location: src/tests/client/test-client.py:test_004()/540 +location: src/tests/client/test-client.py:test_004()/542 cmd: $NMCLI --mode tabular --terse dev show lang: pl_PL.UTF-8 returncode: 0 @@ -30262,17 +30468,17 @@ IP4:192.168.97.124/29 | 192.168.76.154/18::dst = 192.168.33.233/22, nh = 192.168 IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0/85, nh = \:\:, mt = 2821465568 | dst = 2001\:a\:\:a976\:2488\:f49f\:b48/106, nh = 2001\:a\:\:62ae\:c734\:fc7b\:e931, mt = 2248613879 | dst = 2001\:a\:\:afb7\:4449\:3787\:8bb4/123, nh = \:\::2001\:a\:\:2934\:bd66\:550d\:ec19:sear6.fo.x.y: <<< -size: 6818 -location: src/tests/client/test-client.py:test_004()/541 +size: 6842 +location: src/tests/client/test-client.py:test_004()/543 cmd: $NMCLI --mode tabular --terse -f all dev show lang: C returncode: 0 -stdout: 6660 bytes +stdout: 6684 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infra:1:54 Mbit/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infra:1:54 Mbit/s:55:** :WPA3 @@ -30305,7 +30511,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e6 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/4:::virtual:::21\:E9\:64\:81\:8C\:A8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :94\:2B\:E8\:F6\:D2\:86:wlan1-ap-4:Infra:1:54 Mbit/s:48:** :WPA1 WPA2 IP4::192.168.57.160:dst = 192.168.36.106/21, nh = 192.168.199.128, mt = 979274165 | dst = 192.168.238.130/19, nh = 0.0.0.0 | dst = 192.168.224.39/32, nh = 192.168.148.69:192.168.61.83:sear4.foo4.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo1.bar | sear4.fo.o.bar | sear4.foo3.bar:: DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-6 = val-6 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 @@ -30316,7 +30522,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/5:::virtual:::71\:52\:AD\:63\:5C\:7C:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no IP4:192.168.97.124/29 | 192.168.76.154/18::dst = 192.168.33.233/22, nh = 192.168.222.210, mt = 2810496551:192.168.107.109:sear4.fo.o.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo3.bar | sear4.foo4.bar::192.168.60.60 | 192.168.63.92 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-5 = val-5 IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0/85, nh = \:\:, mt = 2821465568 | dst = 2001\:a\:\:a976\:2488\:f49f\:b48/106, nh = 2001\:a\:\:62ae\:c734\:fc7b\:e931, mt = 2248613879 | dst = 2001\:a\:\:afb7\:4449\:3787\:8bb4/123, nh = \:\::2001\:a\:\:2934\:bd66\:550d\:ec19:sear6.fo.x.y: @@ -30324,17 +30530,17 @@ DHCP6:dhcp-6-opt-2 = val-2 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 6864 -location: src/tests/client/test-client.py:test_004()/542 +size: 6888 +location: src/tests/client/test-client.py:test_004()/544 cmd: $NMCLI --mode tabular --terse -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 6696 bytes +stdout: 6720 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infrastruktura:1:54 Mb/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infrastruktura:1:54 Mb/s:55:** :WPA3 @@ -30367,7 +30573,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e6 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/4:::virtual:::21\:E9\:64\:81\:8C\:A8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :94\:2B\:E8\:F6\:D2\:86:wlan1-ap-4:Infrastruktura:1:54 Mb/s:48:** :WPA1 WPA2 IP4::192.168.57.160:dst = 192.168.36.106/21, nh = 192.168.199.128, mt = 979274165 | dst = 192.168.238.130/19, nh = 0.0.0.0 | dst = 192.168.224.39/32, nh = 192.168.148.69:192.168.61.83:sear4.foo4.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo1.bar | sear4.fo.o.bar | sear4.foo3.bar:: DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-6 = val-6 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 @@ -30378,7 +30584,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/5:::virtual:::71\:52\:AD\:63\:5C\:7C:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no IP4:192.168.97.124/29 | 192.168.76.154/18::dst = 192.168.33.233/22, nh = 192.168.222.210, mt = 2810496551:192.168.107.109:sear4.fo.o.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo3.bar | sear4.foo4.bar::192.168.60.60 | 192.168.63.92 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-5 = val-5 IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0/85, nh = \:\:, mt = 2821465568 | dst = 2001\:a\:\:a976\:2488\:f49f\:b48/106, nh = 2001\:a\:\:62ae\:c734\:fc7b\:e931, mt = 2248613879 | dst = 2001\:a\:\:afb7\:4449\:3787\:8bb4/123, nh = \:\::2001\:a\:\:2934\:bd66\:550d\:ec19:sear6.fo.x.y: @@ -30387,7 +30593,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 <<< size: 603 -location: src/tests/client/test-client.py:test_004()/543 +location: src/tests/client/test-client.py:test_004()/545 cmd: $NMCLI --mode tabular --terse dev show wlan0 lang: C returncode: 0 @@ -30405,7 +30611,7 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se <<< size: 613 -location: src/tests/client/test-client.py:test_004()/544 +location: src/tests/client/test-client.py:test_004()/546 cmd: $NMCLI --mode tabular --terse dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -30422,17 +30628,17 @@ IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sea IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar: <<< -size: 1507 -location: src/tests/client/test-client.py:test_004()/545 +size: 1515 +location: src/tests/client/test-client.py:test_004()/547 cmd: $NMCLI --mode tabular --terse -f all dev show wlan0 lang: C returncode: 0 -stdout: 1343 bytes +stdout: 1351 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infra:1:54 Mbit/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infra:1:54 Mbit/s:55:** :WPA3 @@ -30443,17 +30649,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1544 -location: src/tests/client/test-client.py:test_004()/546 +size: 1552 +location: src/tests/client/test-client.py:test_004()/548 cmd: $NMCLI --mode tabular --terse -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1370 bytes +stdout: 1378 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infrastruktura:1:54 Mb/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infrastruktura:1:54 Mb/s:55:** :WPA3 @@ -30464,56 +30670,56 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 616 -location: src/tests/client/test-client.py:test_004()/547 +size: 624 +location: src/tests/client/test-client.py:test_004()/549 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< -size: 626 -location: src/tests/client/test-client.py:test_004()/548 +size: 634 +location: src/tests/client/test-client.py:test_004()/550 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< -size: 616 -location: src/tests/client/test-client.py:test_004()/549 +size: 624 +location: src/tests/client/test-client.py:test_004()/551 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< -size: 626 -location: src/tests/client/test-client.py:test_004()/550 +size: 634 +location: src/tests/client/test-client.py:test_004()/552 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< size: 441 -location: src/tests/client/test-client.py:test_004()/551 +location: src/tests/client/test-client.py:test_004()/553 cmd: $NMCLI --mode tabular --terse -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -30527,7 +30733,7 @@ wlan1:wifi:/org/freedesktop/NetworkManager/Devices/5 <<< size: 451 -location: src/tests/client/test-client.py:test_004()/552 +location: src/tests/client/test-client.py:test_004()/554 cmd: $NMCLI --mode tabular --terse -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -30540,38 +30746,38 @@ wlan1:wifi:/org/freedesktop/NetworkManager/Devices/4 wlan1:wifi:/org/freedesktop/NetworkManager/Devices/5 <<< -size: 1099 -location: src/tests/client/test-client.py:test_004()/553 +size: 1127 +location: src/tests/client/test-client.py:test_004()/555 cmd: $NMCLI --mode tabular --terse -f ALL device wifi list lang: C returncode: 0 -stdout: 934 bytes +stdout: 962 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 -AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infra:1:2412 MHz:54 Mbit/s:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(none):wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/1 -AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infra:1:2412 MHz:54 Mbit/s:55:** :WPA3:(none):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/3 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infra:1:2412 MHz:54 Mbit/s:40 MHz:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(none):wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/1 +AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infra:1:2412 MHz:54 Mbit/s:40 MHz:55:** :WPA3:(none):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/3 -AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infra:1:2412 MHz:54 Mbit/s:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:no: :/org/freedesktop/NetworkManager/AccessPoint/4 +AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infra:1:2412 MHz:54 Mbit/s:40 MHz:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:no: :/org/freedesktop/NetworkManager/AccessPoint/4 <<< -size: 1157 -location: src/tests/client/test-client.py:test_004()/554 +size: 1194 +location: src/tests/client/test-client.py:test_004()/556 cmd: $NMCLI --mode tabular --terse -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 982 bytes +stdout: 1018 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 -AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infrastruktura:1:2412 MHz:54 Mb/s:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(brak):wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/1 -AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infrastruktura:1:2412 MHz:54 Mb/s:55:** :WPA3:(brak):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/3 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[2]:wlan0-ap-1:776C616E302D61702D31:61\:95\:77\:AC\:1E\:4C:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:81:****:WPA1:pair_tkip pair_ccmp group_tkip group_ccmp psk:(brak):wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/1 +AP[3]:wlan0-ap-3:776C616E302D61702D33:9B\:F6\:B7\:EC\:97\:76:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:55:** :WPA3:(brak):pair_tkip pair_ccmp group_tkip group_ccmp sae:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/3 -AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infrastruktura:1:2412 MHz:54 Mb/s:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:nie: :/org/freedesktop/NetworkManager/AccessPoint/4 +AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:48:** :WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan1:nie: :/org/freedesktop/NetworkManager/AccessPoint/4 <<< size: 448 -location: src/tests/client/test-client.py:test_004()/555 +location: src/tests/client/test-client.py:test_004()/557 cmd: $NMCLI --mode tabular --terse -f COMMON device wifi list lang: C returncode: 0 @@ -30586,7 +30792,7 @@ stdout: 280 bytes <<< size: 494 -location: src/tests/client/test-client.py:test_004()/556 +location: src/tests/client/test-client.py:test_004()/558 cmd: $NMCLI --mode tabular --terse -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -30601,7 +30807,7 @@ stdout: 316 bytes <<< size: 1212 -location: src/tests/client/test-client.py:test_004()/557 +location: src/tests/client/test-client.py:test_004()/559 cmd: $NMCLI --mode tabular --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -30616,7 +30822,7 @@ AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infra:1:2412 MHz:54 <<< size: 1270 -location: src/tests/client/test-client.py:test_004()/558 +location: src/tests/client/test-client.py:test_004()/560 cmd: $NMCLI --mode tabular --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -30630,32 +30836,32 @@ AP[1]:wlan1-ap-4:776C616E312D61702D34:94\:2B\:E8\:F6\:D2\:86:Infrastruktura:1:24 <<< -size: 446 -location: src/tests/client/test-client.py:test_004()/559 +size: 453 +location: src/tests/client/test-client.py:test_004()/561 cmd: $NMCLI --mode tabular --terse -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 257 bytes +stdout: 264 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 Mbit/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:no: :/org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 468 -location: src/tests/client/test-client.py:test_004()/560 +size: 477 +location: src/tests/client/test-client.py:test_004()/562 cmd: $NMCLI --mode tabular --terse -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 269 bytes +stdout: 278 bytes >>> -AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 +AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:2412 MHz:54 Mb/s:40 MHz:92:****:WPA1 WPA2:pair_tkip pair_ccmp group_tkip group_ccmp psk:pair_tkip pair_ccmp group_tkip group_ccmp psk:wlan0:nie: :/org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 265 -location: src/tests/client/test-client.py:test_004()/561 +location: src/tests/client/test-client.py:test_004()/563 cmd: $NMCLI --mode tabular --terse -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -30667,7 +30873,7 @@ stdout: 74 bytes <<< size: 284 -location: src/tests/client/test-client.py:test_004()/562 +location: src/tests/client/test-client.py:test_004()/564 cmd: $NMCLI --mode tabular --terse -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -30679,7 +30885,7 @@ stdout: 83 bytes <<< size: 559 -location: src/tests/client/test-client.py:test_004()/563 +location: src/tests/client/test-client.py:test_004()/565 cmd: $NMCLI --mode tabular --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -30691,7 +30897,7 @@ AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infra:1:2412 MHz:54 <<< size: 581 -location: src/tests/client/test-client.py:test_004()/564 +location: src/tests/client/test-client.py:test_004()/566 cmd: $NMCLI --mode tabular --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -30702,17 +30908,17 @@ AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:24 <<< -size: 1510 -location: src/tests/client/test-client.py:test_004()/565 +size: 1518 +location: src/tests/client/test-client.py:test_004()/567 cmd: $NMCLI --mode tabular --terse -f ALL device show wlan0 lang: C returncode: 0 -stdout: 1343 bytes +stdout: 1351 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infra:1:54 Mbit/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infra:1:54 Mbit/s:55:** :WPA3 @@ -30723,17 +30929,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1547 -location: src/tests/client/test-client.py:test_004()/566 +size: 1555 +location: src/tests/client/test-client.py:test_004()/568 cmd: $NMCLI --mode tabular --terse -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1370 bytes +stdout: 1378 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infrastruktura:1:54 Mb/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infrastruktura:1:54 Mb/s:55:** :WPA3 @@ -30745,7 +30951,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 <<< size: 616 -location: src/tests/client/test-client.py:test_004()/567 +location: src/tests/client/test-client.py:test_004()/569 cmd: $NMCLI --mode tabular --terse -f COMMON device show wlan0 lang: C returncode: 0 @@ -30763,7 +30969,7 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se <<< size: 626 -location: src/tests/client/test-client.py:test_004()/568 +location: src/tests/client/test-client.py:test_004()/570 cmd: $NMCLI --mode tabular --terse -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -30780,16 +30986,16 @@ IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sea IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar: <<< -size: 1618 -location: src/tests/client/test-client.py:test_004()/569 +size: 1626 +location: src/tests/client/test-client.py:test_004()/571 cmd: $NMCLI --mode tabular --terse -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 1313 bytes +stdout: 1321 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infra:1:54 Mbit/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infra:1:54 Mbit/s:55:** :WPA3 @@ -30800,16 +31006,16 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1655 -location: src/tests/client/test-client.py:test_004()/570 +size: 1663 +location: src/tests/client/test-client.py:test_004()/572 cmd: $NMCLI --mode tabular --terse -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1340 bytes +stdout: 1348 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 AP[2]: :61\:95\:77\:AC\:1E\:4C:wlan0-ap-1:Infrastruktura:1:54 Mb/s:81:****:WPA1 AP[3]: :9B\:F6\:B7\:EC\:97\:76:wlan0-ap-3:Infrastruktura:1:54 Mb/s:55:** :WPA3 @@ -30821,7 +31027,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 <<< size: 630 -location: src/tests/client/test-client.py:test_004()/571 +location: src/tests/client/test-client.py:test_004()/573 cmd: $NMCLI --mode tabular --terse dev lldp list ifname eth0 lang: C returncode: 0 @@ -30833,7 +31039,7 @@ eth0:00\:11\:22\:33\:44\:22:port1:GigabitEthernet #3:test3.example.com:Test syst <<< size: 640 -location: src/tests/client/test-client.py:test_004()/572 +location: src/tests/client/test-client.py:test_004()/574 cmd: $NMCLI --mode tabular --terse dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -30845,7 +31051,7 @@ eth0:00\:11\:22\:33\:44\:22:port1:GigabitEthernet #3:test3.example.com:Test syst <<< size: 560 -location: src/tests/client/test-client.py:test_004()/573 +location: src/tests/client/test-client.py:test_004()/575 cmd: $NMCLI --mode tabular --terse -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -30869,7 +31075,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< size: 570 -location: src/tests/client/test-client.py:test_004()/574 +location: src/tests/client/test-client.py:test_004()/576 cmd: $NMCLI --mode tabular --terse -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -30892,14 +31098,14 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< -size: 852 -location: src/tests/client/test-client.py:test_004()/575 +size: 854 +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: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30908,14 +31114,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: 862 -location: src/tests/client/test-client.py:test_004()/576 +size: 864 +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: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30924,14 +31130,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: 852 -location: src/tests/client/test-client.py:test_004()/577 +size: 854 +location: src/tests/client/test-client.py:test_004()/579 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30940,14 +31146,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: 862 -location: src/tests/client/test-client.py:test_004()/578 +size: 864 +location: src/tests/client/test-client.py:test_004()/580 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 683 bytes +stdout: 685 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30956,28 +31162,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: 559 -location: src/tests/client/test-client.py:test_004()/579 +size: 561 +location: src/tests/client/test-client.py:test_004()/581 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 383 bytes +stdout: 385 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: <<< -size: 569 -location: src/tests/client/test-client.py:test_004()/580 +size: 571 +location: src/tests/client/test-client.py:test_004()/582 cmd: $NMCLI --mode tabular --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 383 bytes +stdout: 385 bytes >>> -connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 +connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:::::::-1::0:unknown:default:-1:-1:-1:0x0:-1:-1 ipv4:auto::::0::::-1:0::-1:no:no:::0:yes:::0x0:no:yes:-1:-1::0::-1 ipv6:auto::::0::::-1:0::-1:no:no:no:yes:-1:-1:default:0:auto::::0:yes::0x0:-1: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 @@ -30985,7 +31191,7 @@ proxy:none:no:: <<< size: 271 -location: src/tests/client/test-client.py:test_004()/581 +location: src/tests/client/test-client.py:test_004()/583 cmd: $NMCLI --mode tabular --terse --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -30995,7 +31201,7 @@ vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val <<< size: 281 -location: src/tests/client/test-client.py:test_004()/582 +location: src/tests/client/test-client.py:test_004()/584 cmd: $NMCLI --mode tabular --terse --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -31005,7 +31211,7 @@ vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val <<< size: 375 -location: src/tests/client/test-client.py:test_004()/583 +location: src/tests/client/test-client.py:test_004()/585 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -31015,7 +31221,7 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: <<< size: 385 -location: src/tests/client/test-client.py:test_004()/584 +location: src/tests/client/test-client.py:test_004()/586 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -31025,7 +31231,7 @@ GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no: <<< size: 456 -location: src/tests/client/test-client.py:test_004()/585 +location: src/tests/client/test-client.py:test_004()/587 cmd: $NMCLI --mode tabular --terse --color yes dev s lang: C returncode: 0 @@ -31039,7 +31245,7 @@ stdout: 297 bytes <<< size: 466 -location: src/tests/client/test-client.py:test_004()/586 +location: src/tests/client/test-client.py:test_004()/588 cmd: $NMCLI --mode tabular --terse --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -31053,7 +31259,7 @@ stdout: 297 bytes <<< size: 1059 -location: src/tests/client/test-client.py:test_004()/587 +location: src/tests/client/test-client.py:test_004()/589 cmd: $NMCLI --mode tabular --terse --color yes -f all dev status lang: C returncode: 0 @@ -31067,7 +31273,7 @@ stdout: 888 bytes <<< size: 1069 -location: src/tests/client/test-client.py:test_004()/588 +location: src/tests/client/test-client.py:test_004()/590 cmd: $NMCLI --mode tabular --terse --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -31081,7 +31287,7 @@ stdout: 888 bytes <<< size: 3113 -location: src/tests/client/test-client.py:test_004()/589 +location: src/tests/client/test-client.py:test_004()/591 cmd: $NMCLI --mode tabular --terse --color yes dev show lang: C returncode: 0 @@ -31141,7 +31347,7 @@ IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0 <<< size: 3123 -location: src/tests/client/test-client.py:test_004()/590 +location: src/tests/client/test-client.py:test_004()/592 cmd: $NMCLI --mode tabular --terse --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -31200,17 +31406,17 @@ IP4:192.168.97.124/29 | 192.168.76.154/18::dst = 192.168.33.233/22, nh = 192.168 IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0/85, nh = \:\:, mt = 2821465568 | dst = 2001\:a\:\:a976\:2488\:f49f\:b48/106, nh = 2001\:a\:\:62ae\:c734\:fc7b\:e931, mt = 2248613879 | dst = 2001\:a\:\:afb7\:4449\:3787\:8bb4/123, nh = \:\::2001\:a\:\:2934\:bd66\:550d\:ec19:sear6.fo.x.y: <<< -size: 7190 -location: src/tests/client/test-client.py:test_004()/591 +size: 7214 +location: src/tests/client/test-client.py:test_004()/593 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show lang: C returncode: 0 -stdout: 7020 bytes +stdout: 7044 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfra[0m:[35m1[0m:[35m54 Mbit/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31243,7 +31449,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e6 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/4:::virtual:::21\:E9\:64\:81\:8C\:A8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [35mAP[1][0m:[35m [0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mwlan1-ap-4[0m:[35mInfra[0m:[35m1[0m:[35m54 Mbit/s[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m IP4::192.168.57.160:dst = 192.168.36.106/21, nh = 192.168.199.128, mt = 979274165 | dst = 192.168.238.130/19, nh = 0.0.0.0 | dst = 192.168.224.39/32, nh = 192.168.148.69:192.168.61.83:sear4.foo4.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo1.bar | sear4.fo.o.bar | sear4.foo3.bar:: DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-6 = val-6 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 @@ -31254,7 +31460,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/5:::virtual:::71\:52\:AD\:63\:5C\:7C:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no IP4:192.168.97.124/29 | 192.168.76.154/18::dst = 192.168.33.233/22, nh = 192.168.222.210, mt = 2810496551:192.168.107.109:sear4.fo.o.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo3.bar | sear4.foo4.bar::192.168.60.60 | 192.168.63.92 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-5 = val-5 IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0/85, nh = \:\:, mt = 2821465568 | dst = 2001\:a\:\:a976\:2488\:f49f\:b48/106, nh = 2001\:a\:\:62ae\:c734\:fc7b\:e931, mt = 2248613879 | dst = 2001\:a\:\:afb7\:4449\:3787\:8bb4/123, nh = \:\::2001\:a\:\:2934\:bd66\:550d\:ec19:sear6.fo.x.y: @@ -31262,17 +31468,17 @@ DHCP6:dhcp-6-opt-2 = val-2 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 7236 -location: src/tests/client/test-client.py:test_004()/592 +size: 7260 +location: src/tests/client/test-client.py:test_004()/594 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 7056 bytes +stdout: 7080 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfrastruktura[0m:[35m1[0m:[35m54 Mb/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31305,7 +31511,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e6 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/4:::virtual:::21\:E9\:64\:81\:8C\:A8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [35mAP[1][0m:[35m [0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mwlan1-ap-4[0m:[35mInfrastruktura[0m:[35m1[0m:[35m54 Mb/s[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m IP4::192.168.57.160:dst = 192.168.36.106/21, nh = 192.168.199.128, mt = 979274165 | dst = 192.168.238.130/19, nh = 0.0.0.0 | dst = 192.168.224.39/32, nh = 192.168.148.69:192.168.61.83:sear4.foo4.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo1.bar | sear4.fo.o.bar | sear4.foo3.bar:: DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-6 = val-6 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 @@ -31316,7 +31522,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 GENERAL:wlan1:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/5:::virtual:::71\:52\:AD\:63\:5C\:7C:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan1::wlan1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:unknown:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no IP4:192.168.97.124/29 | 192.168.76.154/18::dst = 192.168.33.233/22, nh = 192.168.222.210, mt = 2810496551:192.168.107.109:sear4.fo.o.bar | sear4.fo.x.y | sear4.foo2.bar | sear4.foo3.bar | sear4.foo4.bar::192.168.60.60 | 192.168.63.92 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-5 = val-5 IP6:2001\:a\:\:88ca\:3654\:96b\:ab44/89::dst = 2001\:a\:\:cc8b\:7c09\:4673\:bbb0/85, nh = \:\:, mt = 2821465568 | dst = 2001\:a\:\:a976\:2488\:f49f\:b48/106, nh = 2001\:a\:\:62ae\:c734\:fc7b\:e931, mt = 2248613879 | dst = 2001\:a\:\:afb7\:4449\:3787\:8bb4/123, nh = \:\::2001\:a\:\:2934\:bd66\:550d\:ec19:sear6.fo.x.y: @@ -31325,7 +31531,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 <<< size: 615 -location: src/tests/client/test-client.py:test_004()/593 +location: src/tests/client/test-client.py:test_004()/595 cmd: $NMCLI --mode tabular --terse --color yes dev show wlan0 lang: C returncode: 0 @@ -31343,7 +31549,7 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se <<< size: 625 -location: src/tests/client/test-client.py:test_004()/594 +location: src/tests/client/test-client.py:test_004()/596 cmd: $NMCLI --mode tabular --terse --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -31360,17 +31566,17 @@ IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sea IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar: <<< -size: 1789 -location: src/tests/client/test-client.py:test_004()/595 +size: 1797 +location: src/tests/client/test-client.py:test_004()/597 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 1613 bytes +stdout: 1621 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfra[0m:[35m1[0m:[35m54 Mbit/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31381,17 +31587,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1826 -location: src/tests/client/test-client.py:test_004()/596 +size: 1834 +location: src/tests/client/test-client.py:test_004()/598 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1640 bytes +stdout: 1648 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfrastruktura[0m:[35m1[0m:[35m54 Mb/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31402,56 +31608,56 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 628 -location: src/tests/client/test-client.py:test_004()/597 +size: 636 +location: src/tests/client/test-client.py:test_004()/599 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< -size: 638 -location: src/tests/client/test-client.py:test_004()/598 +size: 646 +location: src/tests/client/test-client.py:test_004()/600 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< -size: 628 -location: src/tests/client/test-client.py:test_004()/599 +size: 636 +location: src/tests/client/test-client.py:test_004()/601 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< -size: 638 -location: src/tests/client/test-client.py:test_004()/600 +size: 646 +location: src/tests/client/test-client.py:test_004()/602 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 418 bytes +stdout: 426 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown 13\:E0\:74\:85\:7C\:D9 -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no <<< size: 576 -location: src/tests/client/test-client.py:test_004()/601 +location: src/tests/client/test-client.py:test_004()/603 cmd: $NMCLI --mode tabular --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -31465,7 +31671,7 @@ stdout: 394 bytes <<< size: 586 -location: src/tests/client/test-client.py:test_004()/602 +location: src/tests/client/test-client.py:test_004()/604 cmd: $NMCLI --mode tabular --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -31478,38 +31684,38 @@ stdout: 394 bytes [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 1724 -location: src/tests/client/test-client.py:test_004()/603 +size: 1788 +location: src/tests/client/test-client.py:test_004()/605 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 1546 bytes +stdout: 1610 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(none)[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(none)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m40 MHz[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(none)[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m40 MHz[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(none)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfra[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mbit/s[0m:[35m40 MHz[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mno[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< -size: 1782 -location: src/tests/client/test-client.py:test_004()/604 +size: 1854 +location: src/tests/client/test-client.py:test_004()/606 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 1594 bytes +stdout: 1666 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m -[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(brak)[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m -[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(brak)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[2][0m:[32mwlan0-ap-1[0m:[32m776C616E302D61702D31[0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m40 MHz[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32m(brak)[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/1[0m +[35mAP[3][0m:[35mwlan0-ap-3[0m:[35m776C616E302D61702D33[0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m40 MHz[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m:[35m(brak)[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp sae[0m:[35mwlan0[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/3[0m -[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m +[35mAP[1][0m:[35mwlan1-ap-4[0m:[35m776C616E312D61702D34[0m:[35m94\:2B\:E8\:F6\:D2\:86[0m:[35mInfrastruktura[0m:[35m1[0m:[35m2412 MHz[0m:[35m54 Mb/s[0m:[35m40 MHz[0m:[35m48[0m:[35m** [0m:[35mWPA1 WPA2[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[35mwlan1[0m:[35mnie[0m:[35m [0m:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< size: 784 -location: src/tests/client/test-client.py:test_004()/605 +location: src/tests/client/test-client.py:test_004()/607 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -31524,7 +31730,7 @@ stdout: 604 bytes <<< size: 830 -location: src/tests/client/test-client.py:test_004()/606 +location: src/tests/client/test-client.py:test_004()/608 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -31539,7 +31745,7 @@ stdout: 640 bytes <<< size: 1837 -location: src/tests/client/test-client.py:test_004()/607 +location: src/tests/client/test-client.py:test_004()/609 cmd: $NMCLI --mode tabular --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -31554,7 +31760,7 @@ stdout: 1546 bytes <<< size: 1895 -location: src/tests/client/test-client.py:test_004()/608 +location: src/tests/client/test-client.py:test_004()/610 cmd: $NMCLI --mode tabular --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -31568,32 +31774,32 @@ stdout: 1594 bytes <<< -size: 611 -location: src/tests/client/test-client.py:test_004()/609 +size: 627 +location: src/tests/client/test-client.py:test_004()/611 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 410 bytes +stdout: 426 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfra[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mbit/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mno[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 633 -location: src/tests/client/test-client.py:test_004()/610 +size: 651 +location: src/tests/client/test-client.py:test_004()/612 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 422 bytes +stdout: 440 bytes >>> -[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m +[32mAP[1][0m:[32mwlan0-ap-2[0m:[32m776C616E302D61702D32[0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mInfrastruktura[0m:[32m1[0m:[32m2412 MHz[0m:[32m54 Mb/s[0m:[32m40 MHz[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mpair_tkip pair_ccmp group_tkip group_ccmp psk[0m:[32mwlan0[0m:[32mnie[0m:[32m [0m:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 359 -location: src/tests/client/test-client.py:test_004()/611 +location: src/tests/client/test-client.py:test_004()/613 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -31605,7 +31811,7 @@ stdout: 155 bytes <<< size: 378 -location: src/tests/client/test-client.py:test_004()/612 +location: src/tests/client/test-client.py:test_004()/614 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -31617,7 +31823,7 @@ stdout: 164 bytes <<< size: 724 -location: src/tests/client/test-client.py:test_004()/613 +location: src/tests/client/test-client.py:test_004()/615 cmd: $NMCLI --mode tabular --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -31629,7 +31835,7 @@ stdout: 410 bytes <<< size: 746 -location: src/tests/client/test-client.py:test_004()/614 +location: src/tests/client/test-client.py:test_004()/616 cmd: $NMCLI --mode tabular --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -31640,17 +31846,17 @@ stdout: 422 bytes <<< -size: 1792 -location: src/tests/client/test-client.py:test_004()/615 +size: 1800 +location: src/tests/client/test-client.py:test_004()/617 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 1613 bytes +stdout: 1621 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfra[0m:[35m1[0m:[35m54 Mbit/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31661,17 +31867,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1829 -location: src/tests/client/test-client.py:test_004()/616 +size: 1837 +location: src/tests/client/test-client.py:test_004()/618 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1640 bytes +stdout: 1648 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfrastruktura[0m:[35m1[0m:[35m54 Mb/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31683,7 +31889,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 <<< size: 628 -location: src/tests/client/test-client.py:test_004()/617 +location: src/tests/client/test-client.py:test_004()/619 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -31701,7 +31907,7 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se <<< size: 638 -location: src/tests/client/test-client.py:test_004()/618 +location: src/tests/client/test-client.py:test_004()/620 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -31718,16 +31924,16 @@ IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sea IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::sear6.foo2.bar | sear6.foo1.bar | sear6.fo.x.y | sear6.fo.o.bar | sear6.foo3.bar | sear6.foo4.bar: <<< -size: 1900 -location: src/tests/client/test-client.py:test_004()/619 +size: 1908 +location: src/tests/client/test-client.py:test_004()/621 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 1583 bytes +stdout: 1591 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfra[0m:[32m1[0m:[32m54 Mbit/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfra[0m:[35m1[0m:[35m54 Mbit/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31738,16 +31944,16 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1937 -location: src/tests/client/test-client.py:test_004()/620 +size: 1945 +location: src/tests/client/test-client.py:test_004()/622 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1610 bytes +stdout: 1618 bytes >>> GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0::wlan0:no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown CAPABILITIES:no:21 Mb/s:no:no -WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no +WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:unknown:no:no [32mAP[1][0m:[32m [0m:[32mC0\:E2\:BE\:E8\:EF\:B6[0m:[32mwlan0-ap-2[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m92[0m:[32m****[0m:[32mWPA1 WPA2[0m [32mAP[2][0m:[32m [0m:[32m61\:95\:77\:AC\:1E\:4C[0m:[32mwlan0-ap-1[0m:[32mInfrastruktura[0m:[32m1[0m:[32m54 Mb/s[0m:[32m81[0m:[32m****[0m:[32mWPA1[0m [35mAP[3][0m:[35m [0m:[35m9B\:F6\:B7\:EC\:97\:76[0m:[35mwlan0-ap-3[0m:[35mInfrastruktura[0m:[35m1[0m:[35m54 Mb/s[0m:[35m55[0m:[35m** [0m:[35mWPA3[0m @@ -31759,7 +31965,7 @@ CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1 <<< size: 642 -location: src/tests/client/test-client.py:test_004()/621 +location: src/tests/client/test-client.py:test_004()/623 cmd: $NMCLI --mode tabular --terse --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -31771,7 +31977,7 @@ eth0:00\:11\:22\:33\:44\:22:port1:GigabitEthernet #3:test3.example.com:Test syst <<< size: 652 -location: src/tests/client/test-client.py:test_004()/622 +location: src/tests/client/test-client.py:test_004()/624 cmd: $NMCLI --mode tabular --terse --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -31783,7 +31989,7 @@ eth0:00\:11\:22\:33\:44\:22:port1:GigabitEthernet #3:test3.example.com:Test syst <<< size: 572 -location: src/tests/client/test-client.py:test_004()/623 +location: src/tests/client/test-client.py:test_004()/625 cmd: $NMCLI --mode tabular --terse --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -31807,7 +32013,7 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< size: 582 -location: src/tests/client/test-client.py:test_004()/624 +location: src/tests/client/test-client.py:test_004()/626 cmd: $NMCLI --mode tabular --terse --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -31830,12 +32036,12 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< -size: 5730 -location: src/tests/client/test-client.py:test_004()/625 +size: 5816 +location: src/tests/client/test-client.py:test_004()/627 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31850,8 +32056,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -31955,12 +32163,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5767 -location: src/tests/client/test-client.py:test_004()/626 +size: 5853 +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: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31975,8 +32183,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -32080,12 +32290,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5730 -location: src/tests/client/test-client.py:test_004()/627 +size: 5816 +location: src/tests/client/test-client.py:test_004()/629 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32100,8 +32310,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -32205,12 +32417,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5767 -location: src/tests/client/test-client.py:test_004()/628 +size: 5853 +location: src/tests/client/test-client.py:test_004()/630 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32225,8 +32437,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -32330,12 +32544,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4603 -location: src/tests/client/test-client.py:test_004()/629 +size: 4689 +location: src/tests/client/test-client.py:test_004()/631 cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4444 bytes +stdout: 4530 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32350,8 +32564,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -32434,12 +32650,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4630 -location: src/tests/client/test-client.py:test_004()/630 +size: 4716 +location: src/tests/client/test-client.py:test_004()/632 cmd: $NMCLI --mode multiline -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4461 bytes +stdout: 4547 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -32454,8 +32670,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -32539,7 +32757,7 @@ proxy.pac-script: -- <<< size: 492 -location: src/tests/client/test-client.py:test_004()/631 +location: src/tests/client/test-client.py:test_004()/633 cmd: $NMCLI --mode multiline -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -32554,7 +32772,7 @@ vpn.timeout: 0 <<< size: 503 -location: src/tests/client/test-client.py:test_004()/632 +location: src/tests/client/test-client.py:test_004()/634 cmd: $NMCLI --mode multiline -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -32569,7 +32787,7 @@ vpn.timeout: 0 <<< size: 875 -location: src/tests/client/test-client.py:test_004()/633 +location: src/tests/client/test-client.py:test_004()/635 cmd: $NMCLI --mode multiline -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -32591,7 +32809,7 @@ GENERAL.MASTER-PATH: -- <<< size: 888 -location: src/tests/client/test-client.py:test_004()/634 +location: src/tests/client/test-client.py:test_004()/636 cmd: $NMCLI --mode multiline -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -32613,7 +32831,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1082 -location: src/tests/client/test-client.py:test_004()/635 +location: src/tests/client/test-client.py:test_004()/637 cmd: $NMCLI --mode multiline dev s lang: C returncode: 0 @@ -32642,7 +32860,7 @@ CONNECTION: -- <<< size: 1098 -location: src/tests/client/test-client.py:test_004()/636 +location: src/tests/client/test-client.py:test_004()/638 cmd: $NMCLI --mode multiline dev s lang: pl_PL.UTF-8 returncode: 0 @@ -32671,7 +32889,7 @@ CONNECTION: -- <<< size: 2497 -location: src/tests/client/test-client.py:test_004()/637 +location: src/tests/client/test-client.py:test_004()/639 cmd: $NMCLI --mode multiline -f all dev status lang: C returncode: 0 @@ -32725,7 +32943,7 @@ CON-PATH: -- <<< size: 2523 -location: src/tests/client/test-client.py:test_004()/638 +location: src/tests/client/test-client.py:test_004()/640 cmd: $NMCLI --mode multiline -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -32779,7 +32997,7 @@ CON-PATH: -- <<< size: 8060 -location: src/tests/client/test-client.py:test_004()/639 +location: src/tests/client/test-client.py:test_004()/641 cmd: $NMCLI --mode multiline dev show lang: C returncode: 0 @@ -32925,7 +33143,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 8092 -location: src/tests/client/test-client.py:test_004()/640 +location: src/tests/client/test-client.py:test_004()/642 cmd: $NMCLI --mode multiline dev show lang: pl_PL.UTF-8 returncode: 0 @@ -33070,12 +33288,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22671 -location: src/tests/client/test-client.py:test_004()/641 +size: 22815 +location: src/tests/client/test-client.py:test_004()/643 cmd: $NMCLI --mode multiline -f all dev show lang: C returncode: 0 -stdout: 22518 bytes +stdout: 22662 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33122,6 +33340,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -33370,6 +33589,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -33467,6 +33687,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no IP4.ADDRESS[1]: 192.168.97.124/29 @@ -33499,12 +33720,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 22839 -location: src/tests/client/test-client.py:test_004()/642 +size: 22986 +location: src/tests/client/test-client.py:test_004()/644 cmd: $NMCLI --mode multiline -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 22676 bytes +stdout: 22823 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33551,6 +33772,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -33799,6 +34021,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -33896,6 +34119,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie IP4.ADDRESS[1]: 192.168.97.124/29 @@ -33929,7 +34153,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1513 -location: src/tests/client/test-client.py:test_004()/643 +location: src/tests/client/test-client.py:test_004()/645 cmd: $NMCLI --mode multiline dev show wlan0 lang: C returncode: 0 @@ -33962,7 +34186,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1525 -location: src/tests/client/test-client.py:test_004()/644 +location: src/tests/client/test-client.py:test_004()/646 cmd: $NMCLI --mode multiline dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -33994,12 +34218,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5424 -location: src/tests/client/test-client.py:test_004()/645 +size: 5472 +location: src/tests/client/test-client.py:test_004()/647 cmd: $NMCLI --mode multiline -f all dev show wlan0 lang: C returncode: 0 -stdout: 5266 bytes +stdout: 5314 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34046,6 +34270,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -34105,12 +34330,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5485 -location: src/tests/client/test-client.py:test_004()/646 +size: 5534 +location: src/tests/client/test-client.py:test_004()/648 cmd: $NMCLI --mode multiline -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5317 bytes +stdout: 5366 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34157,6 +34382,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -34216,12 +34442,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2189 -location: src/tests/client/test-client.py:test_004()/647 +size: 2237 +location: src/tests/client/test-client.py:test_004()/649 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34261,16 +34487,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2216 -location: src/tests/client/test-client.py:test_004()/648 +size: 2265 +location: src/tests/client/test-client.py:test_004()/650 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34310,16 +34537,17 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2189 -location: src/tests/client/test-client.py:test_004()/649 +size: 2237 +location: src/tests/client/test-client.py:test_004()/651 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34359,16 +34587,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2216 -location: src/tests/client/test-client.py:test_004()/650 +size: 2265 +location: src/tests/client/test-client.py:test_004()/652 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34408,12 +34637,13 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< size: 1035 -location: src/tests/client/test-client.py:test_004()/651 +location: src/tests/client/test-client.py:test_004()/653 cmd: $NMCLI --mode multiline -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -34437,7 +34667,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/Devices/ <<< size: 1045 -location: src/tests/client/test-client.py:test_004()/652 +location: src/tests/client/test-client.py:test_004()/654 cmd: $NMCLI --mode multiline -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -34460,12 +34690,12 @@ TYPE: wifi DBUS-PATH: /org/freedesktop/NetworkManager/Devices/5 <<< -size: 3794 -location: src/tests/client/test-client.py:test_004()/653 +size: 3982 +location: src/tests/client/test-client.py:test_004()/655 cmd: $NMCLI --mode multiline -f ALL device wifi list lang: C returncode: 0 -stdout: 3634 bytes +stdout: 3822 bytes >>> NAME: AP[1] SSID: wlan0-ap-2 @@ -34475,6 +34705,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -34492,6 +34723,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 81 BARS: **** SECURITY: WPA1 @@ -34509,6 +34741,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 55 BARS: ** SECURITY: WPA3 @@ -34527,6 +34760,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 48 BARS: ** SECURITY: WPA1 WPA2 @@ -34539,12 +34773,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 3852 -location: src/tests/client/test-client.py:test_004()/654 +size: 4048 +location: src/tests/client/test-client.py:test_004()/656 cmd: $NMCLI --mode multiline -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 3682 bytes +stdout: 3878 bytes >>> NAME: AP[1] SSID: wlan0-ap-2 @@ -34554,6 +34788,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -34571,6 +34806,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 81 BARS: **** SECURITY: WPA1 @@ -34588,6 +34824,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 55 BARS: ** SECURITY: WPA3 @@ -34606,6 +34843,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 48 BARS: ** SECURITY: WPA1 WPA2 @@ -34619,7 +34857,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 1863 -location: src/tests/client/test-client.py:test_004()/655 +location: src/tests/client/test-client.py:test_004()/657 cmd: $NMCLI --mode multiline -f COMMON device wifi list lang: C returncode: 0 @@ -34666,7 +34904,7 @@ SECURITY: WPA1 WPA2 <<< size: 1909 -location: src/tests/client/test-client.py:test_004()/656 +location: src/tests/client/test-client.py:test_004()/658 cmd: $NMCLI --mode multiline -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -34713,7 +34951,7 @@ SECURITY: WPA1 WPA2 <<< size: 3907 -location: src/tests/client/test-client.py:test_004()/657 +location: src/tests/client/test-client.py:test_004()/659 cmd: $NMCLI --mode multiline -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -34792,7 +35030,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 3965 -location: src/tests/client/test-client.py:test_004()/658 +location: src/tests/client/test-client.py:test_004()/660 cmd: $NMCLI --mode multiline -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -34870,12 +35108,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 1115 -location: src/tests/client/test-client.py:test_004()/659 +size: 1162 +location: src/tests/client/test-client.py:test_004()/661 cmd: $NMCLI --mode multiline -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 932 bytes +stdout: 979 bytes >>> NAME: AP[1] SSID: wlan0-ap-2 @@ -34885,6 +35123,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -34898,12 +35137,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 1137 -location: src/tests/client/test-client.py:test_004()/660 +size: 1186 +location: src/tests/client/test-client.py:test_004()/662 cmd: $NMCLI --mode multiline -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 944 bytes +stdout: 993 bytes >>> NAME: AP[1] SSID: wlan0-ap-2 @@ -34913,6 +35152,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -34927,7 +35167,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 615 -location: src/tests/client/test-client.py:test_004()/661 +location: src/tests/client/test-client.py:test_004()/663 cmd: $NMCLI --mode multiline -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -34947,7 +35187,7 @@ SECURITY: WPA1 WPA2 <<< size: 634 -location: src/tests/client/test-client.py:test_004()/662 +location: src/tests/client/test-client.py:test_004()/664 cmd: $NMCLI --mode multiline -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -34967,7 +35207,7 @@ SECURITY: WPA1 WPA2 <<< size: 1228 -location: src/tests/client/test-client.py:test_004()/663 +location: src/tests/client/test-client.py:test_004()/665 cmd: $NMCLI --mode multiline -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -34995,7 +35235,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 1250 -location: src/tests/client/test-client.py:test_004()/664 +location: src/tests/client/test-client.py:test_004()/666 cmd: $NMCLI --mode multiline -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -35022,12 +35262,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 5427 -location: src/tests/client/test-client.py:test_004()/665 +size: 5475 +location: src/tests/client/test-client.py:test_004()/667 cmd: $NMCLI --mode multiline -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5266 bytes +stdout: 5314 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -35074,6 +35314,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -35133,12 +35374,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5488 -location: src/tests/client/test-client.py:test_004()/666 +size: 5537 +location: src/tests/client/test-client.py:test_004()/668 cmd: $NMCLI --mode multiline -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5317 bytes +stdout: 5366 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -35185,6 +35426,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -35245,7 +35487,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1526 -location: src/tests/client/test-client.py:test_004()/667 +location: src/tests/client/test-client.py:test_004()/669 cmd: $NMCLI --mode multiline -f COMMON device show wlan0 lang: C returncode: 0 @@ -35278,7 +35520,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1538 -location: src/tests/client/test-client.py:test_004()/668 +location: src/tests/client/test-client.py:test_004()/670 cmd: $NMCLI --mode multiline -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -35310,12 +35552,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5391 -location: src/tests/client/test-client.py:test_004()/669 +size: 5439 +location: src/tests/client/test-client.py:test_004()/671 cmd: $NMCLI --mode multiline -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 5092 bytes +stdout: 5140 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -35358,6 +35600,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: @@ -35417,12 +35660,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5450 -location: src/tests/client/test-client.py:test_004()/670 +size: 5499 +location: src/tests/client/test-client.py:test_004()/672 cmd: $NMCLI --mode multiline -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5141 bytes +stdout: 5190 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -35465,6 +35708,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: @@ -35525,7 +35769,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1450 -location: src/tests/client/test-client.py:test_004()/671 +location: src/tests/client/test-client.py:test_004()/673 cmd: $NMCLI --mode multiline dev lldp list ifname eth0 lang: C returncode: 0 @@ -35555,7 +35799,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1460 -location: src/tests/client/test-client.py:test_004()/672 +location: src/tests/client/test-client.py:test_004()/674 cmd: $NMCLI --mode multiline dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -35585,7 +35829,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1082 -location: src/tests/client/test-client.py:test_004()/673 +location: src/tests/client/test-client.py:test_004()/675 cmd: $NMCLI --mode multiline -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -35609,7 +35853,7 @@ connection.interface-name: -- <<< size: 1092 -location: src/tests/client/test-client.py:test_004()/674 +location: src/tests/client/test-client.py:test_004()/676 cmd: $NMCLI --mode multiline -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -35632,12 +35876,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 5742 -location: src/tests/client/test-client.py:test_004()/675 +size: 5828 +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: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35652,8 +35896,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -35757,12 +36003,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5779 -location: src/tests/client/test-client.py:test_004()/676 +size: 5865 +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: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35777,8 +36023,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -35882,12 +36130,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5742 -location: src/tests/client/test-client.py:test_004()/677 +size: 5828 +location: src/tests/client/test-client.py:test_004()/679 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5578 bytes +stdout: 5664 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35902,8 +36150,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -36007,12 +36257,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5779 -location: src/tests/client/test-client.py:test_004()/678 +size: 5865 +location: src/tests/client/test-client.py:test_004()/680 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5605 bytes +stdout: 5691 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -36027,8 +36277,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -36132,12 +36384,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 4615 -location: src/tests/client/test-client.py:test_004()/679 +size: 4701 +location: src/tests/client/test-client.py:test_004()/681 cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 4444 bytes +stdout: 4530 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -36152,8 +36404,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -36236,12 +36490,12 @@ proxy.pac-url: -- proxy.pac-script: -- <<< -size: 4642 -location: src/tests/client/test-client.py:test_004()/680 +size: 4728 +location: src/tests/client/test-client.py:test_004()/682 cmd: $NMCLI --mode multiline --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4461 bytes +stdout: 4547 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -36256,8 +36510,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -36341,7 +36597,7 @@ proxy.pac-script: -- <<< size: 504 -location: src/tests/client/test-client.py:test_004()/681 +location: src/tests/client/test-client.py:test_004()/683 cmd: $NMCLI --mode multiline --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -36356,7 +36612,7 @@ vpn.timeout: 0 <<< size: 515 -location: src/tests/client/test-client.py:test_004()/682 +location: src/tests/client/test-client.py:test_004()/684 cmd: $NMCLI --mode multiline --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -36371,7 +36627,7 @@ vpn.timeout: 0 <<< size: 887 -location: src/tests/client/test-client.py:test_004()/683 +location: src/tests/client/test-client.py:test_004()/685 cmd: $NMCLI --mode multiline --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -36393,7 +36649,7 @@ GENERAL.MASTER-PATH: -- <<< size: 900 -location: src/tests/client/test-client.py:test_004()/684 +location: src/tests/client/test-client.py:test_004()/686 cmd: $NMCLI --mode multiline --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -36415,7 +36671,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1259 -location: src/tests/client/test-client.py:test_004()/685 +location: src/tests/client/test-client.py:test_004()/687 cmd: $NMCLI --mode multiline --color yes dev s lang: C returncode: 0 @@ -36444,7 +36700,7 @@ CONNECTION: [2m--[0m <<< size: 1275 -location: src/tests/client/test-client.py:test_004()/686 +location: src/tests/client/test-client.py:test_004()/688 cmd: $NMCLI --mode multiline --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -36473,7 +36729,7 @@ CONNECTION: [2m--[0m <<< size: 2878 -location: src/tests/client/test-client.py:test_004()/687 +location: src/tests/client/test-client.py:test_004()/689 cmd: $NMCLI --mode multiline --color yes -f all dev status lang: C returncode: 0 @@ -36527,7 +36783,7 @@ CON-PATH: [2m--[0m <<< size: 2904 -location: src/tests/client/test-client.py:test_004()/688 +location: src/tests/client/test-client.py:test_004()/690 cmd: $NMCLI --mode multiline --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -36581,7 +36837,7 @@ CON-PATH: [2m--[0m <<< size: 8072 -location: src/tests/client/test-client.py:test_004()/689 +location: src/tests/client/test-client.py:test_004()/691 cmd: $NMCLI --mode multiline --color yes dev show lang: C returncode: 0 @@ -36727,7 +36983,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 8104 -location: src/tests/client/test-client.py:test_004()/690 +location: src/tests/client/test-client.py:test_004()/692 cmd: $NMCLI --mode multiline --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -36872,12 +37128,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 23007 -location: src/tests/client/test-client.py:test_004()/691 +size: 23151 +location: src/tests/client/test-client.py:test_004()/693 cmd: $NMCLI --mode multiline --color yes -f all dev show lang: C returncode: 0 -stdout: 22842 bytes +stdout: 22986 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -36924,6 +37180,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -37172,6 +37429,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [35m [0m @@ -37269,6 +37527,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no IP4.ADDRESS[1]: 192.168.97.124/29 @@ -37301,12 +37560,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 23175 -location: src/tests/client/test-client.py:test_004()/692 +size: 23322 +location: src/tests/client/test-client.py:test_004()/694 cmd: $NMCLI --mode multiline --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 23000 bytes +stdout: 23147 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37353,6 +37612,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -37601,6 +37861,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [35m [0m @@ -37698,6 +37959,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie IP4.ADDRESS[1]: 192.168.97.124/29 @@ -37731,7 +37993,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1525 -location: src/tests/client/test-client.py:test_004()/693 +location: src/tests/client/test-client.py:test_004()/695 cmd: $NMCLI --mode multiline --color yes dev show wlan0 lang: C returncode: 0 @@ -37764,7 +38026,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1537 -location: src/tests/client/test-client.py:test_004()/694 +location: src/tests/client/test-client.py:test_004()/696 cmd: $NMCLI --mode multiline --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -37796,12 +38058,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5679 -location: src/tests/client/test-client.py:test_004()/695 +size: 5727 +location: src/tests/client/test-client.py:test_004()/697 cmd: $NMCLI --mode multiline --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 5509 bytes +stdout: 5557 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37848,6 +38110,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -37907,12 +38170,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5740 -location: src/tests/client/test-client.py:test_004()/696 +size: 5789 +location: src/tests/client/test-client.py:test_004()/698 cmd: $NMCLI --mode multiline --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5560 bytes +stdout: 5609 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37959,6 +38222,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -38018,12 +38282,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2201 -location: src/tests/client/test-client.py:test_004()/697 +size: 2249 +location: src/tests/client/test-client.py:test_004()/699 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38063,16 +38327,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2228 -location: src/tests/client/test-client.py:test_004()/698 +size: 2277 +location: src/tests/client/test-client.py:test_004()/700 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38112,16 +38377,17 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2201 -location: src/tests/client/test-client.py:test_004()/699 +size: 2249 +location: src/tests/client/test-client.py:test_004()/701 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1996 bytes +stdout: 2044 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38161,16 +38427,17 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2228 -location: src/tests/client/test-client.py:test_004()/700 +size: 2277 +location: src/tests/client/test-client.py:test_004()/702 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2013 bytes +stdout: 2062 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38210,12 +38477,13 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< size: 1170 -location: src/tests/client/test-client.py:test_004()/701 +location: src/tests/client/test-client.py:test_004()/703 cmd: $NMCLI --mode multiline --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -38239,7 +38507,7 @@ DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devi <<< size: 1180 -location: src/tests/client/test-client.py:test_004()/702 +location: src/tests/client/test-client.py:test_004()/704 cmd: $NMCLI --mode multiline --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -38262,12 +38530,12 @@ TYPE: [2mwifi[0m DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 4418 -location: src/tests/client/test-client.py:test_004()/703 +size: 4642 +location: src/tests/client/test-client.py:test_004()/705 cmd: $NMCLI --mode multiline --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 4246 bytes +stdout: 4470 bytes >>> NAME: [32mAP[1][0m SSID: [32mwlan0-ap-2[0m @@ -38277,6 +38545,7 @@ MODE: [32mInfra[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mbit/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -38294,6 +38563,7 @@ MODE: [32mInfra[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mbit/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m81[0m BARS: [32m****[0m SECURITY: [32mWPA1[0m @@ -38311,6 +38581,7 @@ MODE: [35mInfra[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mbit/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m55[0m BARS: [35m** [0m SECURITY: [35mWPA3[0m @@ -38329,6 +38600,7 @@ MODE: [35mInfra[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mbit/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m48[0m BARS: [35m** [0m SECURITY: [35mWPA1 WPA2[0m @@ -38341,12 +38613,12 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc <<< -size: 4476 -location: src/tests/client/test-client.py:test_004()/704 +size: 4708 +location: src/tests/client/test-client.py:test_004()/706 cmd: $NMCLI --mode multiline --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 4294 bytes +stdout: 4526 bytes >>> NAME: [32mAP[1][0m SSID: [32mwlan0-ap-2[0m @@ -38356,6 +38628,7 @@ MODE: [32mInfrastruktura[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mb/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -38373,6 +38646,7 @@ MODE: [32mInfrastruktura[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mb/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m81[0m BARS: [32m****[0m SECURITY: [32mWPA1[0m @@ -38390,6 +38664,7 @@ MODE: [35mInfrastruktura[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mb/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m55[0m BARS: [35m** [0m SECURITY: [35mWPA3[0m @@ -38408,6 +38683,7 @@ MODE: [35mInfrastruktura[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mb/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m48[0m BARS: [35m** [0m SECURITY: [35mWPA1 WPA2[0m @@ -38421,7 +38697,7 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc <<< size: 2199 -location: src/tests/client/test-client.py:test_004()/705 +location: src/tests/client/test-client.py:test_004()/707 cmd: $NMCLI --mode multiline --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -38468,7 +38744,7 @@ SECURITY: [35mWPA1 WPA2[0m <<< size: 2245 -location: src/tests/client/test-client.py:test_004()/706 +location: src/tests/client/test-client.py:test_004()/708 cmd: $NMCLI --mode multiline --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -38515,7 +38791,7 @@ SECURITY: [35mWPA1 WPA2[0m <<< size: 4531 -location: src/tests/client/test-client.py:test_004()/707 +location: src/tests/client/test-client.py:test_004()/709 cmd: $NMCLI --mode multiline --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -38594,7 +38870,7 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc <<< size: 4589 -location: src/tests/client/test-client.py:test_004()/708 +location: src/tests/client/test-client.py:test_004()/710 cmd: $NMCLI --mode multiline --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -38672,12 +38948,12 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc <<< -size: 1281 -location: src/tests/client/test-client.py:test_004()/709 +size: 1337 +location: src/tests/client/test-client.py:test_004()/711 cmd: $NMCLI --mode multiline --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 1085 bytes +stdout: 1141 bytes >>> NAME: [32mAP[1][0m SSID: [32mwlan0-ap-2[0m @@ -38687,6 +38963,7 @@ MODE: [32mInfra[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mbit/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -38700,12 +38977,12 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< -size: 1303 -location: src/tests/client/test-client.py:test_004()/710 +size: 1361 +location: src/tests/client/test-client.py:test_004()/712 cmd: $NMCLI --mode multiline --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1097 bytes +stdout: 1155 bytes >>> NAME: [32mAP[1][0m SSID: [32mwlan0-ap-2[0m @@ -38715,6 +38992,7 @@ MODE: [32mInfrastruktura[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mb/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -38729,7 +39007,7 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< size: 708 -location: src/tests/client/test-client.py:test_004()/711 +location: src/tests/client/test-client.py:test_004()/713 cmd: $NMCLI --mode multiline --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -38749,7 +39027,7 @@ SECURITY: [32mWPA1 WPA2[0m <<< size: 727 -location: src/tests/client/test-client.py:test_004()/712 +location: src/tests/client/test-client.py:test_004()/714 cmd: $NMCLI --mode multiline --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -38769,7 +39047,7 @@ SECURITY: [32mWPA1 WPA2[0m <<< size: 1394 -location: src/tests/client/test-client.py:test_004()/713 +location: src/tests/client/test-client.py:test_004()/715 cmd: $NMCLI --mode multiline --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -38797,7 +39075,7 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< size: 1416 -location: src/tests/client/test-client.py:test_004()/714 +location: src/tests/client/test-client.py:test_004()/716 cmd: $NMCLI --mode multiline --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -38824,12 +39102,12 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< -size: 5682 -location: src/tests/client/test-client.py:test_004()/715 +size: 5730 +location: src/tests/client/test-client.py:test_004()/717 cmd: $NMCLI --mode multiline --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5509 bytes +stdout: 5557 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38876,6 +39154,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -38935,12 +39214,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5743 -location: src/tests/client/test-client.py:test_004()/716 +size: 5792 +location: src/tests/client/test-client.py:test_004()/718 cmd: $NMCLI --mode multiline --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5560 bytes +stdout: 5609 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38987,6 +39266,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -39047,7 +39327,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1538 -location: src/tests/client/test-client.py:test_004()/717 +location: src/tests/client/test-client.py:test_004()/719 cmd: $NMCLI --mode multiline --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -39080,7 +39360,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 1550 -location: src/tests/client/test-client.py:test_004()/718 +location: src/tests/client/test-client.py:test_004()/720 cmd: $NMCLI --mode multiline --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -39112,12 +39392,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5646 -location: src/tests/client/test-client.py:test_004()/719 +size: 5694 +location: src/tests/client/test-client.py:test_004()/721 cmd: $NMCLI --mode multiline --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 5335 bytes +stdout: 5383 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -39160,6 +39440,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no AP[1].IN-USE: [32m [0m @@ -39219,12 +39500,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5705 -location: src/tests/client/test-client.py:test_004()/720 +size: 5754 +location: src/tests/client/test-client.py:test_004()/722 cmd: $NMCLI --mode multiline --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5384 bytes +stdout: 5433 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -39267,6 +39548,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie AP[1].IN-USE: [32m [0m @@ -39327,7 +39609,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1462 -location: src/tests/client/test-client.py:test_004()/721 +location: src/tests/client/test-client.py:test_004()/723 cmd: $NMCLI --mode multiline --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -39357,7 +39639,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1472 -location: src/tests/client/test-client.py:test_004()/722 +location: src/tests/client/test-client.py:test_004()/724 cmd: $NMCLI --mode multiline --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -39387,7 +39669,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1094 -location: src/tests/client/test-client.py:test_004()/723 +location: src/tests/client/test-client.py:test_004()/725 cmd: $NMCLI --mode multiline --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -39411,7 +39693,7 @@ connection.interface-name: -- <<< size: 1104 -location: src/tests/client/test-client.py:test_004()/724 +location: src/tests/client/test-client.py:test_004()/726 cmd: $NMCLI --mode multiline --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -39434,12 +39716,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 6750 -location: src/tests/client/test-client.py:test_004()/725 +size: 6836 +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: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -39457,8 +39739,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -39572,12 +39856,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6800 -location: src/tests/client/test-client.py:test_004()/726 +size: 6886 +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: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -39595,8 +39879,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -39710,12 +39996,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6750 -location: src/tests/client/test-client.py:test_004()/727 +size: 6836 +location: src/tests/client/test-client.py:test_004()/729 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -39733,8 +40019,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -39848,12 +40136,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6800 -location: src/tests/client/test-client.py:test_004()/728 +size: 6886 +location: src/tests/client/test-client.py:test_004()/730 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -39871,8 +40159,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -39986,12 +40276,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 5231 -location: src/tests/client/test-client.py:test_004()/729 +size: 5317 +location: src/tests/client/test-client.py:test_004()/731 cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 5063 bytes +stdout: 5149 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -40009,8 +40299,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -40098,12 +40390,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 5263 -location: src/tests/client/test-client.py:test_004()/730 +size: 5349 +location: src/tests/client/test-client.py:test_004()/732 cmd: $NMCLI --mode multiline --pretty -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5085 bytes +stdout: 5171 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -40121,8 +40413,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -40211,7 +40505,7 @@ proxy.pac-script: -- <<< size: 800 -location: src/tests/client/test-client.py:test_004()/731 +location: src/tests/client/test-client.py:test_004()/733 cmd: $NMCLI --mode multiline --pretty -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -40230,7 +40524,7 @@ vpn.timeout: 0 <<< size: 816 -location: src/tests/client/test-client.py:test_004()/732 +location: src/tests/client/test-client.py:test_004()/734 cmd: $NMCLI --mode multiline --pretty -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -40249,7 +40543,7 @@ vpn.timeout: 0 <<< size: 1197 -location: src/tests/client/test-client.py:test_004()/733 +location: src/tests/client/test-client.py:test_004()/735 cmd: $NMCLI --mode multiline --pretty -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -40275,7 +40569,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1218 -location: src/tests/client/test-client.py:test_004()/734 +location: src/tests/client/test-client.py:test_004()/736 cmd: $NMCLI --mode multiline --pretty -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -40301,7 +40595,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1701 -location: src/tests/client/test-client.py:test_004()/735 +location: src/tests/client/test-client.py:test_004()/737 cmd: $NMCLI --mode multiline --pretty dev s lang: C returncode: 0 @@ -40338,7 +40632,7 @@ CONNECTION: -- <<< size: 1717 -location: src/tests/client/test-client.py:test_004()/736 +location: src/tests/client/test-client.py:test_004()/738 cmd: $NMCLI --mode multiline --pretty dev s lang: pl_PL.UTF-8 returncode: 0 @@ -40375,7 +40669,7 @@ CONNECTION: -- <<< size: 3115 -location: src/tests/client/test-client.py:test_004()/737 +location: src/tests/client/test-client.py:test_004()/739 cmd: $NMCLI --mode multiline --pretty -f all dev status lang: C returncode: 0 @@ -40437,7 +40731,7 @@ CON-PATH: -- <<< size: 3141 -location: src/tests/client/test-client.py:test_004()/738 +location: src/tests/client/test-client.py:test_004()/740 cmd: $NMCLI --mode multiline --pretty -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -40499,7 +40793,7 @@ CON-PATH: -- <<< size: 12885 -location: src/tests/client/test-client.py:test_004()/739 +location: src/tests/client/test-client.py:test_004()/741 cmd: $NMCLI --mode multiline --pretty dev show lang: C returncode: 0 @@ -40707,7 +41001,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 12950 -location: src/tests/client/test-client.py:test_004()/740 +location: src/tests/client/test-client.py:test_004()/742 cmd: $NMCLI --mode multiline --pretty dev show lang: pl_PL.UTF-8 returncode: 0 @@ -40914,12 +41208,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27655 -location: src/tests/client/test-client.py:test_004()/741 +size: 27799 +location: src/tests/client/test-client.py:test_004()/743 cmd: $NMCLI --mode multiline --pretty -f all dev show lang: C returncode: 0 -stdout: 27493 bytes +stdout: 27637 bytes >>> =============================================================================== Device details (wlan0) @@ -40972,6 +41266,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -41259,6 +41554,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -41369,6 +41665,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -41407,12 +41704,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 27856 -location: src/tests/client/test-client.py:test_004()/742 +size: 28003 +location: src/tests/client/test-client.py:test_004()/744 cmd: $NMCLI --mode multiline --pretty -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 27684 bytes +stdout: 27831 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -41465,6 +41762,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -41752,6 +42050,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -41862,6 +42161,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -41901,7 +42201,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2453 -location: src/tests/client/test-client.py:test_004()/743 +location: src/tests/client/test-client.py:test_004()/745 cmd: $NMCLI --mode multiline --pretty dev show wlan0 lang: C returncode: 0 @@ -41946,7 +42246,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2472 -location: src/tests/client/test-client.py:test_004()/744 +location: src/tests/client/test-client.py:test_004()/746 cmd: $NMCLI --mode multiline --pretty dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -41990,12 +42290,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6604 -location: src/tests/client/test-client.py:test_004()/745 +size: 6652 +location: src/tests/client/test-client.py:test_004()/747 cmd: $NMCLI --mode multiline --pretty -f all dev show wlan0 lang: C returncode: 0 -stdout: 6437 bytes +stdout: 6485 bytes >>> =============================================================================== Device details (wlan0) @@ -42048,6 +42348,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -42116,12 +42417,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6672 -location: src/tests/client/test-client.py:test_004()/746 +size: 6721 +location: src/tests/client/test-client.py:test_004()/748 cmd: $NMCLI --mode multiline --pretty -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6495 bytes +stdout: 6544 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -42174,6 +42475,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -42242,12 +42544,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2649 -location: src/tests/client/test-client.py:test_004()/747 +size: 2697 +location: src/tests/client/test-client.py:test_004()/749 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -42292,17 +42594,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2683 -location: src/tests/client/test-client.py:test_004()/748 +size: 2732 +location: src/tests/client/test-client.py:test_004()/750 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -42347,17 +42650,18 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2649 -location: src/tests/client/test-client.py:test_004()/749 +size: 2697 +location: src/tests/client/test-client.py:test_004()/751 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -42402,17 +42706,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2683 -location: src/tests/client/test-client.py:test_004()/750 +size: 2732 +location: src/tests/client/test-client.py:test_004()/752 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -42457,13 +42762,14 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< size: 1654 -location: src/tests/client/test-client.py:test_004()/751 +location: src/tests/client/test-client.py:test_004()/753 cmd: $NMCLI --mode multiline --pretty -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -42495,7 +42801,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/Devices/ <<< size: 1664 -location: src/tests/client/test-client.py:test_004()/752 +location: src/tests/client/test-client.py:test_004()/754 cmd: $NMCLI --mode multiline --pretty -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -42526,12 +42832,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/Devices/ ------------------------------------------------------------------------------- <<< -size: 4759 -location: src/tests/client/test-client.py:test_004()/753 +size: 4947 +location: src/tests/client/test-client.py:test_004()/755 cmd: $NMCLI --mode multiline --pretty -f ALL device wifi list lang: C returncode: 0 -stdout: 4590 bytes +stdout: 4778 bytes >>> =============================================================================== Wi-Fi scan list (wlan0) @@ -42544,6 +42850,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -42562,6 +42869,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 81 BARS: **** SECURITY: WPA1 @@ -42580,6 +42888,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 55 BARS: ** SECURITY: WPA3 @@ -42602,6 +42911,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 48 BARS: ** SECURITY: WPA1 WPA2 @@ -42618,12 +42928,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo =============================================================================== <<< -size: 4835 -location: src/tests/client/test-client.py:test_004()/754 +size: 5031 +location: src/tests/client/test-client.py:test_004()/756 cmd: $NMCLI --mode multiline --pretty -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 4656 bytes +stdout: 4852 bytes >>> =============================================================================== Lista skanowania sieci Wi-Fi (wlan0) @@ -42636,6 +42946,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -42654,6 +42965,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 81 BARS: **** SECURITY: WPA1 @@ -42672,6 +42984,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 55 BARS: ** SECURITY: WPA3 @@ -42694,6 +43007,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 48 BARS: ** SECURITY: WPA1 WPA2 @@ -42711,7 +43025,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 2828 -location: src/tests/client/test-client.py:test_004()/755 +location: src/tests/client/test-client.py:test_004()/757 cmd: $NMCLI --mode multiline --pretty -f COMMON device wifi list lang: C returncode: 0 @@ -42771,7 +43085,7 @@ SECURITY: WPA1 WPA2 <<< size: 2892 -location: src/tests/client/test-client.py:test_004()/756 +location: src/tests/client/test-client.py:test_004()/758 cmd: $NMCLI --mode multiline --pretty -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -42831,7 +43145,7 @@ SECURITY: WPA1 WPA2 <<< size: 4872 -location: src/tests/client/test-client.py:test_004()/757 +location: src/tests/client/test-client.py:test_004()/759 cmd: $NMCLI --mode multiline --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -42923,7 +43237,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 4948 -location: src/tests/client/test-client.py:test_004()/758 +location: src/tests/client/test-client.py:test_004()/760 cmd: $NMCLI --mode multiline --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -43014,12 +43328,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo =============================================================================== <<< -size: 1417 -location: src/tests/client/test-client.py:test_004()/759 +size: 1464 +location: src/tests/client/test-client.py:test_004()/761 cmd: $NMCLI --mode multiline --pretty -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 1224 bytes +stdout: 1271 bytes >>> =============================================================================== Wi-Fi scan list (wlan0) @@ -43032,6 +43346,7 @@ MODE: Infra CHAN: 1 FREQ: 2412 MHz RATE: 54 Mbit/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -43046,12 +43361,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 1445 -location: src/tests/client/test-client.py:test_004()/760 +size: 1494 +location: src/tests/client/test-client.py:test_004()/762 cmd: $NMCLI --mode multiline --pretty -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1242 bytes +stdout: 1291 bytes >>> =============================================================================== Lista skanowania sieci Wi-Fi (wlan0) @@ -43064,6 +43379,7 @@ MODE: Infrastruktura CHAN: 1 FREQ: 2412 MHz RATE: 54 Mb/s +BANDWIDTH: 40 MHz SIGNAL: 92 BARS: **** SECURITY: WPA1 WPA2 @@ -43079,7 +43395,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 916 -location: src/tests/client/test-client.py:test_004()/761 +location: src/tests/client/test-client.py:test_004()/763 cmd: $NMCLI --mode multiline --pretty -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -43103,7 +43419,7 @@ SECURITY: WPA1 WPA2 <<< size: 941 -location: src/tests/client/test-client.py:test_004()/762 +location: src/tests/client/test-client.py:test_004()/764 cmd: $NMCLI --mode multiline --pretty -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -43127,7 +43443,7 @@ SECURITY: WPA1 WPA2 <<< size: 1530 -location: src/tests/client/test-client.py:test_004()/763 +location: src/tests/client/test-client.py:test_004()/765 cmd: $NMCLI --mode multiline --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -43159,7 +43475,7 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< size: 1558 -location: src/tests/client/test-client.py:test_004()/764 +location: src/tests/client/test-client.py:test_004()/766 cmd: $NMCLI --mode multiline --pretty -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -43190,12 +43506,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 6607 -location: src/tests/client/test-client.py:test_004()/765 +size: 6655 +location: src/tests/client/test-client.py:test_004()/767 cmd: $NMCLI --mode multiline --pretty -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6437 bytes +stdout: 6485 bytes >>> =============================================================================== Device details (wlan0) @@ -43248,6 +43564,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -43316,12 +43633,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6675 -location: src/tests/client/test-client.py:test_004()/766 +size: 6724 +location: src/tests/client/test-client.py:test_004()/768 cmd: $NMCLI --mode multiline --pretty -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6495 bytes +stdout: 6544 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -43374,6 +43691,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -43443,7 +43761,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2466 -location: src/tests/client/test-client.py:test_004()/767 +location: src/tests/client/test-client.py:test_004()/769 cmd: $NMCLI --mode multiline --pretty -f COMMON device show wlan0 lang: C returncode: 0 @@ -43488,7 +43806,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2485 -location: src/tests/client/test-client.py:test_004()/768 +location: src/tests/client/test-client.py:test_004()/770 cmd: $NMCLI --mode multiline --pretty -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -43532,12 +43850,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6491 -location: src/tests/client/test-client.py:test_004()/769 +size: 6539 +location: src/tests/client/test-client.py:test_004()/771 cmd: $NMCLI --mode multiline --pretty -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 6183 bytes +stdout: 6231 bytes >>> =============================================================================== Device details (wlan0) @@ -43585,6 +43903,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -43653,12 +43972,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6557 -location: src/tests/client/test-client.py:test_004()/770 +size: 6606 +location: src/tests/client/test-client.py:test_004()/772 cmd: $NMCLI --mode multiline --pretty -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6239 bytes +stdout: 6288 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -43706,6 +44025,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -43775,7 +44095,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1913 -location: src/tests/client/test-client.py:test_004()/771 +location: src/tests/client/test-client.py:test_004()/773 cmd: $NMCLI --mode multiline --pretty dev lldp list ifname eth0 lang: C returncode: 0 @@ -43811,7 +44131,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1927 -location: src/tests/client/test-client.py:test_004()/772 +location: src/tests/client/test-client.py:test_004()/774 cmd: $NMCLI --mode multiline --pretty dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -43847,7 +44167,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 2786 -location: src/tests/client/test-client.py:test_004()/773 +location: src/tests/client/test-client.py:test_004()/775 cmd: $NMCLI --mode multiline --pretty -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -43893,7 +44213,7 @@ connection.interface-name: -- <<< size: 2811 -location: src/tests/client/test-client.py:test_004()/774 +location: src/tests/client/test-client.py:test_004()/776 cmd: $NMCLI --mode multiline --pretty -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -43938,12 +44258,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 6762 -location: src/tests/client/test-client.py:test_004()/775 +size: 6848 +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: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -43961,8 +44281,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -44076,12 +44398,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6812 -location: src/tests/client/test-client.py:test_004()/776 +size: 6898 +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: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -44099,8 +44421,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -44214,12 +44538,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6762 -location: src/tests/client/test-client.py:test_004()/777 +size: 6848 +location: src/tests/client/test-client.py:test_004()/779 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6589 bytes +stdout: 6675 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -44237,8 +44561,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -44352,12 +44678,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6812 -location: src/tests/client/test-client.py:test_004()/778 +size: 6898 +location: src/tests/client/test-client.py:test_004()/780 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6629 bytes +stdout: 6715 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -44375,8 +44701,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -44490,12 +44818,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 5243 -location: src/tests/client/test-client.py:test_004()/779 +size: 5329 +location: src/tests/client/test-client.py:test_004()/781 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 5063 bytes +stdout: 5149 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -44513,8 +44841,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -44602,12 +44932,12 @@ proxy.pac-script: -- ------------------------------------------------------------------------------- <<< -size: 5275 -location: src/tests/client/test-client.py:test_004()/780 +size: 5361 +location: src/tests/client/test-client.py:test_004()/782 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5085 bytes +stdout: 5171 bytes >>> =============================================================================== Szczegóły profilu połączenia (con-vpn-1) @@ -44625,8 +44955,10 @@ connection.auth-retries: -1 connection.timestamp: 0 connection.permissions: -- connection.zone: -- +connection.controller: -- connection.master: -- connection.slave-type: -- +connection.port-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: -- connection.gateway-ping-timeout: 0 @@ -44715,7 +45047,7 @@ proxy.pac-script: -- <<< size: 812 -location: src/tests/client/test-client.py:test_004()/781 +location: src/tests/client/test-client.py:test_004()/783 cmd: $NMCLI --mode multiline --pretty --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -44734,7 +45066,7 @@ vpn.timeout: 0 <<< size: 828 -location: src/tests/client/test-client.py:test_004()/782 +location: src/tests/client/test-client.py:test_004()/784 cmd: $NMCLI --mode multiline --pretty --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -44753,7 +45085,7 @@ vpn.timeout: 0 <<< size: 1209 -location: src/tests/client/test-client.py:test_004()/783 +location: src/tests/client/test-client.py:test_004()/785 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -44779,7 +45111,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1230 -location: src/tests/client/test-client.py:test_004()/784 +location: src/tests/client/test-client.py:test_004()/786 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -44805,7 +45137,7 @@ GENERAL.MASTER-PATH: -- <<< size: 1877 -location: src/tests/client/test-client.py:test_004()/785 +location: src/tests/client/test-client.py:test_004()/787 cmd: $NMCLI --mode multiline --pretty --color yes dev s lang: C returncode: 0 @@ -44842,7 +45174,7 @@ CONNECTION: [2m--[0m <<< size: 1893 -location: src/tests/client/test-client.py:test_004()/786 +location: src/tests/client/test-client.py:test_004()/788 cmd: $NMCLI --mode multiline --pretty --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -44879,7 +45211,7 @@ CONNECTION: [2m--[0m <<< size: 3496 -location: src/tests/client/test-client.py:test_004()/787 +location: src/tests/client/test-client.py:test_004()/789 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev status lang: C returncode: 0 @@ -44941,7 +45273,7 @@ CON-PATH: [2m--[0m <<< size: 3522 -location: src/tests/client/test-client.py:test_004()/788 +location: src/tests/client/test-client.py:test_004()/790 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -45003,7 +45335,7 @@ CON-PATH: [2m--[0m <<< size: 12897 -location: src/tests/client/test-client.py:test_004()/789 +location: src/tests/client/test-client.py:test_004()/791 cmd: $NMCLI --mode multiline --pretty --color yes dev show lang: C returncode: 0 @@ -45211,7 +45543,7 @@ IP6.DOMAIN[1]: sear6.fo.x.y <<< size: 12962 -location: src/tests/client/test-client.py:test_004()/790 +location: src/tests/client/test-client.py:test_004()/792 cmd: $NMCLI --mode multiline --pretty --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -45418,12 +45750,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27991 -location: src/tests/client/test-client.py:test_004()/791 +size: 28135 +location: src/tests/client/test-client.py:test_004()/793 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show lang: C returncode: 0 -stdout: 27817 bytes +stdout: 27961 bytes >>> =============================================================================== Device details (wlan0) @@ -45476,6 +45808,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -45763,6 +46096,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -45873,6 +46207,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -45911,12 +46246,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 28192 -location: src/tests/client/test-client.py:test_004()/792 +size: 28339 +location: src/tests/client/test-client.py:test_004()/794 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 28008 bytes +stdout: 28155 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -45969,6 +46304,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -46256,6 +46592,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -46366,6 +46703,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -46405,7 +46743,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2465 -location: src/tests/client/test-client.py:test_004()/793 +location: src/tests/client/test-client.py:test_004()/795 cmd: $NMCLI --mode multiline --pretty --color yes dev show wlan0 lang: C returncode: 0 @@ -46450,7 +46788,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2484 -location: src/tests/client/test-client.py:test_004()/794 +location: src/tests/client/test-client.py:test_004()/796 cmd: $NMCLI --mode multiline --pretty --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -46494,12 +46832,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6859 -location: src/tests/client/test-client.py:test_004()/795 +size: 6907 +location: src/tests/client/test-client.py:test_004()/797 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 6680 bytes +stdout: 6728 bytes >>> =============================================================================== Device details (wlan0) @@ -46552,6 +46890,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -46620,12 +46959,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6927 -location: src/tests/client/test-client.py:test_004()/796 +size: 6976 +location: src/tests/client/test-client.py:test_004()/798 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6738 bytes +stdout: 6787 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -46678,6 +47017,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -46746,12 +47086,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2661 -location: src/tests/client/test-client.py:test_004()/797 +size: 2709 +location: src/tests/client/test-client.py:test_004()/799 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -46796,17 +47136,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2695 -location: src/tests/client/test-client.py:test_004()/798 +size: 2744 +location: src/tests/client/test-client.py:test_004()/800 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -46851,17 +47192,18 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2661 -location: src/tests/client/test-client.py:test_004()/799 +size: 2709 +location: src/tests/client/test-client.py:test_004()/801 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2447 bytes +stdout: 2495 bytes >>> =============================================================================== Device details (wlan0) @@ -46906,17 +47248,18 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2695 -location: src/tests/client/test-client.py:test_004()/800 +size: 2744 +location: src/tests/client/test-client.py:test_004()/802 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2471 bytes +stdout: 2520 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -46961,13 +47304,14 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< size: 1789 -location: src/tests/client/test-client.py:test_004()/801 +location: src/tests/client/test-client.py:test_004()/803 cmd: $NMCLI --mode multiline --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -46999,7 +47343,7 @@ DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devi <<< size: 1799 -location: src/tests/client/test-client.py:test_004()/802 +location: src/tests/client/test-client.py:test_004()/804 cmd: $NMCLI --mode multiline --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -47030,12 +47374,12 @@ DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devi ------------------------------------------------------------------------------- <<< -size: 5383 -location: src/tests/client/test-client.py:test_004()/803 +size: 5607 +location: src/tests/client/test-client.py:test_004()/805 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 5202 bytes +stdout: 5426 bytes >>> =============================================================================== Wi-Fi scan list (wlan0) @@ -47048,6 +47392,7 @@ MODE: [32mInfra[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mbit/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -47066,6 +47411,7 @@ MODE: [32mInfra[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mbit/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m81[0m BARS: [32m****[0m SECURITY: [32mWPA1[0m @@ -47084,6 +47430,7 @@ MODE: [35mInfra[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mbit/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m55[0m BARS: [35m** [0m SECURITY: [35mWPA3[0m @@ -47106,6 +47453,7 @@ MODE: [35mInfra[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mbit/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m48[0m BARS: [35m** [0m SECURITY: [35mWPA1 WPA2[0m @@ -47122,12 +47470,12 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc =============================================================================== <<< -size: 5459 -location: src/tests/client/test-client.py:test_004()/804 +size: 5691 +location: src/tests/client/test-client.py:test_004()/806 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 5268 bytes +stdout: 5500 bytes >>> =============================================================================== Lista skanowania sieci Wi-Fi (wlan0) @@ -47140,6 +47488,7 @@ MODE: [32mInfrastruktura[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mb/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -47158,6 +47507,7 @@ MODE: [32mInfrastruktura[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mb/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m81[0m BARS: [32m****[0m SECURITY: [32mWPA1[0m @@ -47176,6 +47526,7 @@ MODE: [35mInfrastruktura[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mb/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m55[0m BARS: [35m** [0m SECURITY: [35mWPA3[0m @@ -47198,6 +47549,7 @@ MODE: [35mInfrastruktura[0m CHAN: [35m1[0m FREQ: [35m2412 MHz[0m RATE: [35m54 Mb/s[0m +BANDWIDTH: [35m40 MHz[0m SIGNAL: [35m48[0m BARS: [35m** [0m SECURITY: [35mWPA1 WPA2[0m @@ -47215,7 +47567,7 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc <<< size: 3164 -location: src/tests/client/test-client.py:test_004()/805 +location: src/tests/client/test-client.py:test_004()/807 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -47275,7 +47627,7 @@ SECURITY: [35mWPA1 WPA2[0m <<< size: 3228 -location: src/tests/client/test-client.py:test_004()/806 +location: src/tests/client/test-client.py:test_004()/808 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -47335,7 +47687,7 @@ SECURITY: [35mWPA1 WPA2[0m <<< size: 5496 -location: src/tests/client/test-client.py:test_004()/807 +location: src/tests/client/test-client.py:test_004()/809 cmd: $NMCLI --mode multiline --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -47427,7 +47779,7 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc <<< size: 5572 -location: src/tests/client/test-client.py:test_004()/808 +location: src/tests/client/test-client.py:test_004()/810 cmd: $NMCLI --mode multiline --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -47518,12 +47870,12 @@ DBUS-PATH: [35m/org/freedesktop/NetworkManager/Acc =============================================================================== <<< -size: 1582 -location: src/tests/client/test-client.py:test_004()/809 +size: 1638 +location: src/tests/client/test-client.py:test_004()/811 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 1377 bytes +stdout: 1433 bytes >>> =============================================================================== Wi-Fi scan list (wlan0) @@ -47536,6 +47888,7 @@ MODE: [32mInfra[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mbit/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -47550,12 +47903,12 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< -size: 1610 -location: src/tests/client/test-client.py:test_004()/810 +size: 1668 +location: src/tests/client/test-client.py:test_004()/812 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1395 bytes +stdout: 1453 bytes >>> =============================================================================== Lista skanowania sieci Wi-Fi (wlan0) @@ -47568,6 +47921,7 @@ MODE: [32mInfrastruktura[0m CHAN: [32m1[0m FREQ: [32m2412 MHz[0m RATE: [32m54 Mb/s[0m +BANDWIDTH: [32m40 MHz[0m SIGNAL: [32m92[0m BARS: [32m****[0m SECURITY: [32mWPA1 WPA2[0m @@ -47583,7 +47937,7 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< size: 1009 -location: src/tests/client/test-client.py:test_004()/811 +location: src/tests/client/test-client.py:test_004()/813 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -47607,7 +47961,7 @@ SECURITY: [32mWPA1 WPA2[0m <<< size: 1034 -location: src/tests/client/test-client.py:test_004()/812 +location: src/tests/client/test-client.py:test_004()/814 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -47631,7 +47985,7 @@ SECURITY: [32mWPA1 WPA2[0m <<< size: 1695 -location: src/tests/client/test-client.py:test_004()/813 +location: src/tests/client/test-client.py:test_004()/815 cmd: $NMCLI --mode multiline --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -47663,7 +48017,7 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< size: 1723 -location: src/tests/client/test-client.py:test_004()/814 +location: src/tests/client/test-client.py:test_004()/816 cmd: $NMCLI --mode multiline --pretty --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -47694,12 +48048,12 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< -size: 6862 -location: src/tests/client/test-client.py:test_004()/815 +size: 6910 +location: src/tests/client/test-client.py:test_004()/817 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6680 bytes +stdout: 6728 bytes >>> =============================================================================== Device details (wlan0) @@ -47752,6 +48106,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -47820,12 +48175,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6930 -location: src/tests/client/test-client.py:test_004()/816 +size: 6979 +location: src/tests/client/test-client.py:test_004()/818 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6738 bytes +stdout: 6787 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -47878,6 +48233,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -47947,7 +48303,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 2478 -location: src/tests/client/test-client.py:test_004()/817 +location: src/tests/client/test-client.py:test_004()/819 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -47992,7 +48348,7 @@ IP6.DOMAIN[6]: sear6.foo4.bar <<< size: 2497 -location: src/tests/client/test-client.py:test_004()/818 +location: src/tests/client/test-client.py:test_004()/820 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -48036,12 +48392,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6746 -location: src/tests/client/test-client.py:test_004()/819 +size: 6794 +location: src/tests/client/test-client.py:test_004()/821 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 6426 bytes +stdout: 6474 bytes >>> =============================================================================== Device details (wlan0) @@ -48089,6 +48445,7 @@ WIFI-PROPERTIES.AP: yes WIFI-PROPERTIES.ADHOC: yes WIFI-PROPERTIES.2GHZ: unknown WIFI-PROPERTIES.5GHZ: unknown +WIFI-PROPERTIES.6GHZ: unknown WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- @@ -48157,12 +48514,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6812 -location: src/tests/client/test-client.py:test_004()/820 +size: 6861 +location: src/tests/client/test-client.py:test_004()/822 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6482 bytes +stdout: 6531 bytes >>> =============================================================================== Informacje o urządzeniu (wlan0) @@ -48210,6 +48567,7 @@ WIFI-PROPERTIES.AP: tak WIFI-PROPERTIES.ADHOC: tak WIFI-PROPERTIES.2GHZ: nieznane WIFI-PROPERTIES.5GHZ: nieznane +WIFI-PROPERTIES.6GHZ: nieznane WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- @@ -48279,7 +48637,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c <<< size: 1925 -location: src/tests/client/test-client.py:test_004()/821 +location: src/tests/client/test-client.py:test_004()/823 cmd: $NMCLI --mode multiline --pretty --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -48315,7 +48673,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 1939 -location: src/tests/client/test-client.py:test_004()/822 +location: src/tests/client/test-client.py:test_004()/824 cmd: $NMCLI --mode multiline --pretty --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -48351,7 +48709,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES: 40 (wlan-access-point,telephone) <<< size: 2798 -location: src/tests/client/test-client.py:test_004()/823 +location: src/tests/client/test-client.py:test_004()/825 cmd: $NMCLI --mode multiline --pretty --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -48397,7 +48755,7 @@ connection.interface-name: -- <<< size: 2823 -location: src/tests/client/test-client.py:test_004()/824 +location: src/tests/client/test-client.py:test_004()/826 cmd: $NMCLI --mode multiline --pretty --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -48442,12 +48800,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 2888 -location: src/tests/client/test-client.py:test_004()/825 +size: 2933 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48462,8 +48820,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -48567,12 +48927,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2898 -location: src/tests/client/test-client.py:test_004()/826 +size: 2943 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48587,8 +48947,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -48692,12 +49054,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2888 -location: src/tests/client/test-client.py:test_004()/827 +size: 2933 +location: src/tests/client/test-client.py:test_004()/829 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48712,8 +49074,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -48817,12 +49181,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2898 -location: src/tests/client/test-client.py:test_004()/828 +size: 2943 +location: src/tests/client/test-client.py:test_004()/830 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48837,8 +49201,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -48942,12 +49308,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2313 -location: src/tests/client/test-client.py:test_004()/829 +size: 2358 +location: src/tests/client/test-client.py:test_004()/831 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -48962,8 +49328,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -49046,12 +49414,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2323 -location: src/tests/client/test-client.py:test_004()/830 +size: 2368 +location: src/tests/client/test-client.py:test_004()/832 cmd: $NMCLI --mode multiline --terse -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -49066,8 +49434,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -49151,7 +49521,7 @@ proxy.pac-script: <<< size: 337 -location: src/tests/client/test-client.py:test_004()/831 +location: src/tests/client/test-client.py:test_004()/833 cmd: $NMCLI --mode multiline --terse -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -49166,7 +49536,7 @@ vpn.timeout:0 <<< size: 347 -location: src/tests/client/test-client.py:test_004()/832 +location: src/tests/client/test-client.py:test_004()/834 cmd: $NMCLI --mode multiline --terse -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -49181,7 +49551,7 @@ vpn.timeout:0 <<< size: 563 -location: src/tests/client/test-client.py:test_004()/833 +location: src/tests/client/test-client.py:test_004()/835 cmd: $NMCLI --mode multiline --terse -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -49203,7 +49573,7 @@ GENERAL.MASTER-PATH: <<< size: 573 -location: src/tests/client/test-client.py:test_004()/834 +location: src/tests/client/test-client.py:test_004()/836 cmd: $NMCLI --mode multiline --terse -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -49225,7 +49595,7 @@ GENERAL.MASTER-PATH: <<< size: 427 -location: src/tests/client/test-client.py:test_004()/835 +location: src/tests/client/test-client.py:test_004()/837 cmd: $NMCLI --mode multiline --terse dev s lang: C returncode: 0 @@ -49254,7 +49624,7 @@ CONNECTION: <<< size: 437 -location: src/tests/client/test-client.py:test_004()/836 +location: src/tests/client/test-client.py:test_004()/838 cmd: $NMCLI --mode multiline --terse dev s lang: pl_PL.UTF-8 returncode: 0 @@ -49283,7 +49653,7 @@ CONNECTION: <<< size: 1135 -location: src/tests/client/test-client.py:test_004()/837 +location: src/tests/client/test-client.py:test_004()/839 cmd: $NMCLI --mode multiline --terse -f all dev status lang: C returncode: 0 @@ -49337,7 +49707,7 @@ CON-PATH: <<< size: 1145 -location: src/tests/client/test-client.py:test_004()/838 +location: src/tests/client/test-client.py:test_004()/840 cmd: $NMCLI --mode multiline --terse -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -49391,7 +49761,7 @@ CON-PATH: <<< size: 4552 -location: src/tests/client/test-client.py:test_004()/839 +location: src/tests/client/test-client.py:test_004()/841 cmd: $NMCLI --mode multiline --terse dev show lang: C returncode: 0 @@ -49537,7 +49907,7 @@ IP6.DOMAIN[1]:sear6.fo.x.y <<< size: 4562 -location: src/tests/client/test-client.py:test_004()/840 +location: src/tests/client/test-client.py:test_004()/842 cmd: $NMCLI --mode multiline --terse dev show lang: pl_PL.UTF-8 returncode: 0 @@ -49682,12 +50052,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 13138 -location: src/tests/client/test-client.py:test_004()/841 +size: 13225 +location: src/tests/client/test-client.py:test_004()/843 cmd: $NMCLI --mode multiline --terse -f all dev show lang: C returncode: 0 -stdout: 12977 bytes +stdout: 13064 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49734,6 +50104,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -49982,6 +50353,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -50079,6 +50451,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -50111,12 +50484,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13184 -location: src/tests/client/test-client.py:test_004()/842 +size: 13271 +location: src/tests/client/test-client.py:test_004()/844 cmd: $NMCLI --mode multiline --terse -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 13013 bytes +stdout: 13100 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50163,6 +50536,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -50411,6 +50785,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -50508,6 +50883,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -50541,7 +50917,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 896 -location: src/tests/client/test-client.py:test_004()/843 +location: src/tests/client/test-client.py:test_004()/845 cmd: $NMCLI --mode multiline --terse dev show wlan0 lang: C returncode: 0 @@ -50574,7 +50950,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 906 -location: src/tests/client/test-client.py:test_004()/844 +location: src/tests/client/test-client.py:test_004()/846 cmd: $NMCLI --mode multiline --terse dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -50606,12 +50982,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3034 -location: src/tests/client/test-client.py:test_004()/845 +size: 3063 +location: src/tests/client/test-client.py:test_004()/847 cmd: $NMCLI --mode multiline --terse -f all dev show wlan0 lang: C returncode: 0 -stdout: 2868 bytes +stdout: 2897 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50658,6 +51034,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -50717,12 +51094,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3071 -location: src/tests/client/test-client.py:test_004()/846 +size: 3100 +location: src/tests/client/test-client.py:test_004()/848 cmd: $NMCLI --mode multiline --terse -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2895 bytes +stdout: 2924 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50769,6 +51146,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -50828,12 +51206,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1336 -location: src/tests/client/test-client.py:test_004()/847 +size: 1365 +location: src/tests/client/test-client.py:test_004()/849 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50873,16 +51251,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1346 -location: src/tests/client/test-client.py:test_004()/848 +size: 1375 +location: src/tests/client/test-client.py:test_004()/850 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50922,16 +51301,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1336 -location: src/tests/client/test-client.py:test_004()/849 +size: 1365 +location: src/tests/client/test-client.py:test_004()/851 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50971,16 +51351,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1346 -location: src/tests/client/test-client.py:test_004()/850 +size: 1375 +location: src/tests/client/test-client.py:test_004()/852 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -51020,12 +51401,13 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< size: 553 -location: src/tests/client/test-client.py:test_004()/851 +location: src/tests/client/test-client.py:test_004()/853 cmd: $NMCLI --mode multiline --terse -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -51049,7 +51431,7 @@ DBUS-PATH:/org/freedesktop/NetworkManager/Devices/5 <<< size: 563 -location: src/tests/client/test-client.py:test_004()/852 +location: src/tests/client/test-client.py:test_004()/854 cmd: $NMCLI --mode multiline --terse -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -51072,12 +51454,12 @@ TYPE:wifi DBUS-PATH:/org/freedesktop/NetworkManager/Devices/5 <<< -size: 1550 -location: src/tests/client/test-client.py:test_004()/853 +size: 1618 +location: src/tests/client/test-client.py:test_004()/855 cmd: $NMCLI --mode multiline --terse -f ALL device wifi list lang: C returncode: 0 -stdout: 1382 bytes +stdout: 1450 bytes >>> NAME:AP[1] SSID:wlan0-ap-2 @@ -51087,6 +51469,7 @@ MODE:Infra CHAN:1 FREQ:2412 MHz RATE:54 Mbit/s +BANDWIDTH:40 MHz SIGNAL:92 BARS:**** SECURITY:WPA1 WPA2 @@ -51104,6 +51487,7 @@ MODE:Infra CHAN:1 FREQ:2412 MHz RATE:54 Mbit/s +BANDWIDTH:40 MHz SIGNAL:81 BARS:**** SECURITY:WPA1 @@ -51121,6 +51505,7 @@ MODE:Infra CHAN:1 FREQ:2412 MHz RATE:54 Mbit/s +BANDWIDTH:40 MHz SIGNAL:55 BARS:** SECURITY:WPA3 @@ -51139,6 +51524,7 @@ MODE:Infra CHAN:1 FREQ:2412 MHz RATE:54 Mbit/s +BANDWIDTH:40 MHz SIGNAL:48 BARS:** SECURITY:WPA1 WPA2 @@ -51151,12 +51537,12 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/4 <<< -size: 1608 -location: src/tests/client/test-client.py:test_004()/854 +size: 1684 +location: src/tests/client/test-client.py:test_004()/856 cmd: $NMCLI --mode multiline --terse -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 1430 bytes +stdout: 1506 bytes >>> NAME:AP[1] SSID:wlan0-ap-2 @@ -51166,6 +51552,7 @@ MODE:Infrastruktura CHAN:1 FREQ:2412 MHz RATE:54 Mb/s +BANDWIDTH:40 MHz SIGNAL:92 BARS:**** SECURITY:WPA1 WPA2 @@ -51183,6 +51570,7 @@ MODE:Infrastruktura CHAN:1 FREQ:2412 MHz RATE:54 Mb/s +BANDWIDTH:40 MHz SIGNAL:81 BARS:**** SECURITY:WPA1 @@ -51200,6 +51588,7 @@ MODE:Infrastruktura CHAN:1 FREQ:2412 MHz RATE:54 Mb/s +BANDWIDTH:40 MHz SIGNAL:55 BARS:** SECURITY:WPA3 @@ -51218,6 +51607,7 @@ MODE:Infrastruktura CHAN:1 FREQ:2412 MHz RATE:54 Mb/s +BANDWIDTH:40 MHz SIGNAL:48 BARS:** SECURITY:WPA1 WPA2 @@ -51231,7 +51621,7 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/4 <<< size: 646 -location: src/tests/client/test-client.py:test_004()/855 +location: src/tests/client/test-client.py:test_004()/857 cmd: $NMCLI --mode multiline --terse -f COMMON device wifi list lang: C returncode: 0 @@ -51278,7 +51668,7 @@ SECURITY:WPA1 WPA2 <<< size: 692 -location: src/tests/client/test-client.py:test_004()/856 +location: src/tests/client/test-client.py:test_004()/858 cmd: $NMCLI --mode multiline --terse -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -51325,7 +51715,7 @@ SECURITY:WPA1 WPA2 <<< size: 1663 -location: src/tests/client/test-client.py:test_004()/857 +location: src/tests/client/test-client.py:test_004()/859 cmd: $NMCLI --mode multiline --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -51404,7 +51794,7 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/4 <<< size: 1721 -location: src/tests/client/test-client.py:test_004()/858 +location: src/tests/client/test-client.py:test_004()/860 cmd: $NMCLI --mode multiline --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -51482,12 +51872,12 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/4 <<< -size: 560 -location: src/tests/client/test-client.py:test_004()/859 +size: 577 +location: src/tests/client/test-client.py:test_004()/861 cmd: $NMCLI --mode multiline --terse -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 369 bytes +stdout: 386 bytes >>> NAME:AP[1] SSID:wlan0-ap-2 @@ -51497,6 +51887,7 @@ MODE:Infra CHAN:1 FREQ:2412 MHz RATE:54 Mbit/s +BANDWIDTH:40 MHz SIGNAL:92 BARS:**** SECURITY:WPA1 WPA2 @@ -51510,12 +51901,12 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 582 -location: src/tests/client/test-client.py:test_004()/860 +size: 601 +location: src/tests/client/test-client.py:test_004()/862 cmd: $NMCLI --mode multiline --terse -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 381 bytes +stdout: 400 bytes >>> NAME:AP[1] SSID:wlan0-ap-2 @@ -51525,6 +51916,7 @@ MODE:Infrastruktura CHAN:1 FREQ:2412 MHz RATE:54 Mb/s +BANDWIDTH:40 MHz SIGNAL:92 BARS:**** SECURITY:WPA1 WPA2 @@ -51539,7 +51931,7 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 317 -location: src/tests/client/test-client.py:test_004()/861 +location: src/tests/client/test-client.py:test_004()/863 cmd: $NMCLI --mode multiline --terse -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -51559,7 +51951,7 @@ SECURITY:WPA1 WPA2 <<< size: 336 -location: src/tests/client/test-client.py:test_004()/862 +location: src/tests/client/test-client.py:test_004()/864 cmd: $NMCLI --mode multiline --terse -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -51579,7 +51971,7 @@ SECURITY:WPA1 WPA2 <<< size: 673 -location: src/tests/client/test-client.py:test_004()/863 +location: src/tests/client/test-client.py:test_004()/865 cmd: $NMCLI --mode multiline --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -51607,7 +51999,7 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/2 <<< size: 695 -location: src/tests/client/test-client.py:test_004()/864 +location: src/tests/client/test-client.py:test_004()/866 cmd: $NMCLI --mode multiline --terse -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -51634,12 +52026,12 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 3037 -location: src/tests/client/test-client.py:test_004()/865 +size: 3066 +location: src/tests/client/test-client.py:test_004()/867 cmd: $NMCLI --mode multiline --terse -f ALL device show wlan0 lang: C returncode: 0 -stdout: 2868 bytes +stdout: 2897 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -51686,6 +52078,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -51745,12 +52138,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3074 -location: src/tests/client/test-client.py:test_004()/866 +size: 3103 +location: src/tests/client/test-client.py:test_004()/868 cmd: $NMCLI --mode multiline --terse -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2895 bytes +stdout: 2924 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -51797,6 +52190,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -51857,7 +52251,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 909 -location: src/tests/client/test-client.py:test_004()/867 +location: src/tests/client/test-client.py:test_004()/869 cmd: $NMCLI --mode multiline --terse -f COMMON device show wlan0 lang: C returncode: 0 @@ -51890,7 +52284,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 919 -location: src/tests/client/test-client.py:test_004()/868 +location: src/tests/client/test-client.py:test_004()/870 cmd: $NMCLI --mode multiline --terse -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -51922,12 +52316,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3069 -location: src/tests/client/test-client.py:test_004()/869 +size: 3098 +location: src/tests/client/test-client.py:test_004()/871 cmd: $NMCLI --mode multiline --terse -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 2762 bytes +stdout: 2791 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -51970,6 +52364,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -52029,12 +52424,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3106 -location: src/tests/client/test-client.py:test_004()/870 +size: 3135 +location: src/tests/client/test-client.py:test_004()/872 cmd: $NMCLI --mode multiline --terse -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2789 bytes +stdout: 2818 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -52077,6 +52472,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE: @@ -52137,7 +52533,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 1151 -location: src/tests/client/test-client.py:test_004()/871 +location: src/tests/client/test-client.py:test_004()/873 cmd: $NMCLI --mode multiline --terse dev lldp list ifname eth0 lang: C returncode: 0 @@ -52167,7 +52563,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 1161 -location: src/tests/client/test-client.py:test_004()/872 +location: src/tests/client/test-client.py:test_004()/874 cmd: $NMCLI --mode multiline --terse dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -52197,7 +52593,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 792 -location: src/tests/client/test-client.py:test_004()/873 +location: src/tests/client/test-client.py:test_004()/875 cmd: $NMCLI --mode multiline --terse -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -52221,7 +52617,7 @@ connection.interface-name: <<< size: 802 -location: src/tests/client/test-client.py:test_004()/874 +location: src/tests/client/test-client.py:test_004()/876 cmd: $NMCLI --mode multiline --terse -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -52244,12 +52640,12 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 2900 -location: src/tests/client/test-client.py:test_004()/875 +size: 2945 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52264,8 +52660,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -52369,12 +52767,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2910 -location: src/tests/client/test-client.py:test_004()/876 +size: 2955 +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: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52389,8 +52787,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -52494,12 +52894,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2900 -location: src/tests/client/test-client.py:test_004()/877 +size: 2945 +location: src/tests/client/test-client.py:test_004()/879 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52514,8 +52914,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -52619,12 +53021,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2910 -location: src/tests/client/test-client.py:test_004()/878 +size: 2955 +location: src/tests/client/test-client.py:test_004()/880 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2728 bytes +stdout: 2773 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52639,8 +53041,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -52744,12 +53148,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2325 -location: src/tests/client/test-client.py:test_004()/879 +size: 2370 +location: src/tests/client/test-client.py:test_004()/881 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 lang: C returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52764,8 +53168,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -52848,12 +53254,12 @@ proxy.pac-url: proxy.pac-script: <<< -size: 2335 -location: src/tests/client/test-client.py:test_004()/880 +size: 2380 +location: src/tests/client/test-client.py:test_004()/882 cmd: $NMCLI --mode multiline --terse --color yes -f ALL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2146 bytes +stdout: 2191 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -52868,8 +53274,10 @@ connection.auth-retries:-1 connection.timestamp:0 connection.permissions: connection.zone: +connection.controller: connection.master: connection.slave-type: +connection.port-type: connection.autoconnect-slaves:-1 connection.secondaries: connection.gateway-ping-timeout:0 @@ -52953,7 +53361,7 @@ proxy.pac-script: <<< size: 349 -location: src/tests/client/test-client.py:test_004()/881 +location: src/tests/client/test-client.py:test_004()/883 cmd: $NMCLI --mode multiline --terse --color yes -f VPN con s con-vpn-1 lang: C returncode: 0 @@ -52968,7 +53376,7 @@ vpn.timeout:0 <<< size: 359 -location: src/tests/client/test-client.py:test_004()/882 +location: src/tests/client/test-client.py:test_004()/884 cmd: $NMCLI --mode multiline --terse --color yes -f VPN con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -52983,7 +53391,7 @@ vpn.timeout:0 <<< size: 575 -location: src/tests/client/test-client.py:test_004()/883 +location: src/tests/client/test-client.py:test_004()/885 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 @@ -53005,7 +53413,7 @@ GENERAL.MASTER-PATH: <<< size: 585 -location: src/tests/client/test-client.py:test_004()/884 +location: src/tests/client/test-client.py:test_004()/886 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 @@ -53027,7 +53435,7 @@ GENERAL.MASTER-PATH: <<< size: 603 -location: src/tests/client/test-client.py:test_004()/885 +location: src/tests/client/test-client.py:test_004()/887 cmd: $NMCLI --mode multiline --terse --color yes dev s lang: C returncode: 0 @@ -53056,7 +53464,7 @@ CONNECTION:[2m[0m <<< size: 613 -location: src/tests/client/test-client.py:test_004()/886 +location: src/tests/client/test-client.py:test_004()/888 cmd: $NMCLI --mode multiline --terse --color yes dev s lang: pl_PL.UTF-8 returncode: 0 @@ -53085,7 +53493,7 @@ CONNECTION:[2m[0m <<< size: 1517 -location: src/tests/client/test-client.py:test_004()/887 +location: src/tests/client/test-client.py:test_004()/889 cmd: $NMCLI --mode multiline --terse --color yes -f all dev status lang: C returncode: 0 @@ -53139,7 +53547,7 @@ CON-PATH:[2m[0m <<< size: 1527 -location: src/tests/client/test-client.py:test_004()/888 +location: src/tests/client/test-client.py:test_004()/890 cmd: $NMCLI --mode multiline --terse --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 @@ -53193,7 +53601,7 @@ CON-PATH:[2m[0m <<< size: 4564 -location: src/tests/client/test-client.py:test_004()/889 +location: src/tests/client/test-client.py:test_004()/891 cmd: $NMCLI --mode multiline --terse --color yes dev show lang: C returncode: 0 @@ -53339,7 +53747,7 @@ IP6.DOMAIN[1]:sear6.fo.x.y <<< size: 4574 -location: src/tests/client/test-client.py:test_004()/890 +location: src/tests/client/test-client.py:test_004()/892 cmd: $NMCLI --mode multiline --terse --color yes dev show lang: pl_PL.UTF-8 returncode: 0 @@ -53484,12 +53892,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 13474 -location: src/tests/client/test-client.py:test_004()/891 +size: 13561 +location: src/tests/client/test-client.py:test_004()/893 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show lang: C returncode: 0 -stdout: 13301 bytes +stdout: 13388 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53536,6 +53944,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -53784,6 +54193,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[35m [0m @@ -53881,6 +54291,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -53913,12 +54324,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13520 -location: src/tests/client/test-client.py:test_004()/892 +size: 13607 +location: src/tests/client/test-client.py:test_004()/894 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 13337 bytes +stdout: 13424 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53965,6 +54376,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -54213,6 +54625,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[35m [0m @@ -54310,6 +54723,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no IP4.ADDRESS[1]:192.168.97.124/29 @@ -54343,7 +54757,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 908 -location: src/tests/client/test-client.py:test_004()/893 +location: src/tests/client/test-client.py:test_004()/895 cmd: $NMCLI --mode multiline --terse --color yes dev show wlan0 lang: C returncode: 0 @@ -54376,7 +54790,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 918 -location: src/tests/client/test-client.py:test_004()/894 +location: src/tests/client/test-client.py:test_004()/896 cmd: $NMCLI --mode multiline --terse --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -54408,12 +54822,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3289 -location: src/tests/client/test-client.py:test_004()/895 +size: 3318 +location: src/tests/client/test-client.py:test_004()/897 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 3111 bytes +stdout: 3140 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54460,6 +54874,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -54519,12 +54934,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3326 -location: src/tests/client/test-client.py:test_004()/896 +size: 3355 +location: src/tests/client/test-client.py:test_004()/898 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3138 bytes +stdout: 3167 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54571,6 +54986,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -54630,12 +55046,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1348 -location: src/tests/client/test-client.py:test_004()/897 +size: 1377 +location: src/tests/client/test-client.py:test_004()/899 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54675,16 +55091,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1358 -location: src/tests/client/test-client.py:test_004()/898 +size: 1387 +location: src/tests/client/test-client.py:test_004()/900 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54724,16 +55141,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1348 -location: src/tests/client/test-client.py:test_004()/899 +size: 1377 +location: src/tests/client/test-client.py:test_004()/901 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54773,16 +55191,17 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1358 -location: src/tests/client/test-client.py:test_004()/900 +size: 1387 +location: src/tests/client/test-client.py:test_004()/902 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1135 bytes +stdout: 1164 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54822,12 +55241,13 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< size: 688 -location: src/tests/client/test-client.py:test_004()/901 +location: src/tests/client/test-client.py:test_004()/903 cmd: $NMCLI --mode multiline --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 @@ -54851,7 +55271,7 @@ DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< size: 698 -location: src/tests/client/test-client.py:test_004()/902 +location: src/tests/client/test-client.py:test_004()/904 cmd: $NMCLI --mode multiline --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 @@ -54874,12 +55294,12 @@ TYPE:[2mwifi[0m DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 2174 -location: src/tests/client/test-client.py:test_004()/903 +size: 2278 +location: src/tests/client/test-client.py:test_004()/905 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device wifi list lang: C returncode: 0 -stdout: 1994 bytes +stdout: 2098 bytes >>> NAME:[32mAP[1][0m SSID:[32mwlan0-ap-2[0m @@ -54889,6 +55309,7 @@ MODE:[32mInfra[0m CHAN:[32m1[0m FREQ:[32m2412 MHz[0m RATE:[32m54 Mbit/s[0m +BANDWIDTH:[32m40 MHz[0m SIGNAL:[32m92[0m BARS:[32m****[0m SECURITY:[32mWPA1 WPA2[0m @@ -54906,6 +55327,7 @@ MODE:[32mInfra[0m CHAN:[32m1[0m FREQ:[32m2412 MHz[0m RATE:[32m54 Mbit/s[0m +BANDWIDTH:[32m40 MHz[0m SIGNAL:[32m81[0m BARS:[32m****[0m SECURITY:[32mWPA1[0m @@ -54923,6 +55345,7 @@ MODE:[35mInfra[0m CHAN:[35m1[0m FREQ:[35m2412 MHz[0m RATE:[35m54 Mbit/s[0m +BANDWIDTH:[35m40 MHz[0m SIGNAL:[35m55[0m BARS:[35m** [0m SECURITY:[35mWPA3[0m @@ -54941,6 +55364,7 @@ MODE:[35mInfra[0m CHAN:[35m1[0m FREQ:[35m2412 MHz[0m RATE:[35m54 Mbit/s[0m +BANDWIDTH:[35m40 MHz[0m SIGNAL:[35m48[0m BARS:[35m** [0m SECURITY:[35mWPA1 WPA2[0m @@ -54953,12 +55377,12 @@ DBUS-PATH:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< -size: 2232 -location: src/tests/client/test-client.py:test_004()/904 +size: 2344 +location: src/tests/client/test-client.py:test_004()/906 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device wifi list lang: pl_PL.UTF-8 returncode: 0 -stdout: 2042 bytes +stdout: 2154 bytes >>> NAME:[32mAP[1][0m SSID:[32mwlan0-ap-2[0m @@ -54968,6 +55392,7 @@ MODE:[32mInfrastruktura[0m CHAN:[32m1[0m FREQ:[32m2412 MHz[0m RATE:[32m54 Mb/s[0m +BANDWIDTH:[32m40 MHz[0m SIGNAL:[32m92[0m BARS:[32m****[0m SECURITY:[32mWPA1 WPA2[0m @@ -54985,6 +55410,7 @@ MODE:[32mInfrastruktura[0m CHAN:[32m1[0m FREQ:[32m2412 MHz[0m RATE:[32m54 Mb/s[0m +BANDWIDTH:[32m40 MHz[0m SIGNAL:[32m81[0m BARS:[32m****[0m SECURITY:[32mWPA1[0m @@ -55002,6 +55428,7 @@ MODE:[35mInfrastruktura[0m CHAN:[35m1[0m FREQ:[35m2412 MHz[0m RATE:[35m54 Mb/s[0m +BANDWIDTH:[35m40 MHz[0m SIGNAL:[35m55[0m BARS:[35m** [0m SECURITY:[35mWPA3[0m @@ -55020,6 +55447,7 @@ MODE:[35mInfrastruktura[0m CHAN:[35m1[0m FREQ:[35m2412 MHz[0m RATE:[35m54 Mb/s[0m +BANDWIDTH:[35m40 MHz[0m SIGNAL:[35m48[0m BARS:[35m** [0m SECURITY:[35mWPA1 WPA2[0m @@ -55033,7 +55461,7 @@ DBUS-PATH:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< size: 982 -location: src/tests/client/test-client.py:test_004()/905 +location: src/tests/client/test-client.py:test_004()/907 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device wifi list lang: C returncode: 0 @@ -55080,7 +55508,7 @@ SECURITY:[35mWPA1 WPA2[0m <<< size: 1028 -location: src/tests/client/test-client.py:test_004()/906 +location: src/tests/client/test-client.py:test_004()/908 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -55127,7 +55555,7 @@ SECURITY:[35mWPA1 WPA2[0m <<< size: 2287 -location: src/tests/client/test-client.py:test_004()/907 +location: src/tests/client/test-client.py:test_004()/909 cmd: $NMCLI --mode multiline --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: C returncode: 0 @@ -55206,7 +55634,7 @@ DBUS-PATH:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< size: 2345 -location: src/tests/client/test-client.py:test_004()/908 +location: src/tests/client/test-client.py:test_004()/910 cmd: $NMCLI --mode multiline --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list lang: pl_PL.UTF-8 returncode: 0 @@ -55284,12 +55712,12 @@ DBUS-PATH:[35m/org/freedesktop/NetworkManager/AccessPoint/4[0m <<< -size: 725 -location: src/tests/client/test-client.py:test_004()/909 +size: 751 +location: src/tests/client/test-client.py:test_004()/911 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 -stdout: 522 bytes +stdout: 548 bytes >>> NAME:[32mAP[1][0m SSID:[32mwlan0-ap-2[0m @@ -55299,6 +55727,7 @@ MODE:[32mInfra[0m CHAN:[32m1[0m FREQ:[32m2412 MHz[0m RATE:[32m54 Mbit/s[0m +BANDWIDTH:[32m40 MHz[0m SIGNAL:[32m92[0m BARS:[32m****[0m SECURITY:[32mWPA1 WPA2[0m @@ -55312,12 +55741,12 @@ DBUS-PATH:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 747 -location: src/tests/client/test-client.py:test_004()/910 +size: 775 +location: src/tests/client/test-client.py:test_004()/912 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 -stdout: 534 bytes +stdout: 562 bytes >>> NAME:[32mAP[1][0m SSID:[32mwlan0-ap-2[0m @@ -55327,6 +55756,7 @@ MODE:[32mInfrastruktura[0m CHAN:[32m1[0m FREQ:[32m2412 MHz[0m RATE:[32m54 Mb/s[0m +BANDWIDTH:[32m40 MHz[0m SIGNAL:[32m92[0m BARS:[32m****[0m SECURITY:[32mWPA1 WPA2[0m @@ -55341,7 +55771,7 @@ DBUS-PATH:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 410 -location: src/tests/client/test-client.py:test_004()/911 +location: src/tests/client/test-client.py:test_004()/913 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -55361,7 +55791,7 @@ SECURITY:[32mWPA1 WPA2[0m <<< size: 429 -location: src/tests/client/test-client.py:test_004()/912 +location: src/tests/client/test-client.py:test_004()/914 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -55381,7 +55811,7 @@ SECURITY:[32mWPA1 WPA2[0m <<< size: 838 -location: src/tests/client/test-client.py:test_004()/913 +location: src/tests/client/test-client.py:test_004()/915 cmd: $NMCLI --mode multiline --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: C returncode: 0 @@ -55409,7 +55839,7 @@ DBUS-PATH:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< size: 860 -location: src/tests/client/test-client.py:test_004()/914 +location: src/tests/client/test-client.py:test_004()/916 cmd: $NMCLI --mode multiline --terse --color yes -f NAME,SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH device wifi list bssid C0:E2:BE:E8:EF:B6 lang: pl_PL.UTF-8 returncode: 0 @@ -55436,12 +55866,12 @@ DBUS-PATH:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 3292 -location: src/tests/client/test-client.py:test_004()/915 +size: 3321 +location: src/tests/client/test-client.py:test_004()/917 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3111 bytes +stdout: 3140 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -55488,6 +55918,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -55547,12 +55978,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3329 -location: src/tests/client/test-client.py:test_004()/916 +size: 3358 +location: src/tests/client/test-client.py:test_004()/918 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3138 bytes +stdout: 3167 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -55599,6 +56030,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -55659,7 +56091,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 921 -location: src/tests/client/test-client.py:test_004()/917 +location: src/tests/client/test-client.py:test_004()/919 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device show wlan0 lang: C returncode: 0 @@ -55692,7 +56124,7 @@ IP6.DOMAIN[6]:sear6.foo4.bar <<< size: 931 -location: src/tests/client/test-client.py:test_004()/918 +location: src/tests/client/test-client.py:test_004()/920 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 @@ -55724,12 +56156,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3324 -location: src/tests/client/test-client.py:test_004()/919 +size: 3353 +location: src/tests/client/test-client.py:test_004()/921 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: C returncode: 0 -stdout: 3005 bytes +stdout: 3034 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -55772,6 +56204,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -55831,12 +56264,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3361 -location: src/tests/client/test-client.py:test_004()/920 +size: 3390 +location: src/tests/client/test-client.py:test_004()/922 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6,BOND,TEAM,BRIDGE,VLAN,BLUETOOTH,CONNECTIONS device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3032 bytes +stdout: 3061 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -55879,6 +56312,7 @@ WIFI-PROPERTIES.AP:yes WIFI-PROPERTIES.ADHOC:yes WIFI-PROPERTIES.2GHZ:unknown WIFI-PROPERTIES.5GHZ:unknown +WIFI-PROPERTIES.6GHZ:unknown WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no AP[1].IN-USE:[32m [0m @@ -55939,7 +56373,7 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- <<< size: 1163 -location: src/tests/client/test-client.py:test_004()/921 +location: src/tests/client/test-client.py:test_004()/923 cmd: $NMCLI --mode multiline --terse --color yes dev lldp list ifname eth0 lang: C returncode: 0 @@ -55969,7 +56403,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 1173 -location: src/tests/client/test-client.py:test_004()/922 +location: src/tests/client/test-client.py:test_004()/924 cmd: $NMCLI --mode multiline --terse --color yes dev lldp list ifname eth0 lang: pl_PL.UTF-8 returncode: 0 @@ -55999,7 +56433,7 @@ NEIGHBOR[2].SYSTEM-CAPABILITIES:40 (wlan-access-point,telephone) <<< size: 804 -location: src/tests/client/test-client.py:test_004()/923 +location: src/tests/client/test-client.py:test_004()/925 cmd: $NMCLI --mode multiline --terse --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: C returncode: 0 @@ -56023,7 +56457,7 @@ connection.interface-name: <<< size: 814 -location: src/tests/client/test-client.py:test_004()/924 +location: src/tests/client/test-client.py:test_004()/926 cmd: $NMCLI --mode multiline --terse --color yes -f connection.id,connection.uuid,connection.type,connection.interface-name,802-3-ethernet.mac-address,vpn.user-name connection show 5fcfd6d7-1e63-3332-8826-a7eda103792d UUID-con-vpn-1-REPLACED-REPLACED-REP UUID-con-xx1-REPLACED-REPLACED-REPLA lang: pl_PL.UTF-8 returncode: 0 @@ -56046,3 +56480,88 @@ connection.type:802-11-wireless connection.interface-name: <<< +size: 246 +location: src/tests/client/test-client.py:test_004()/927 +cmd: $NMCLI c add type ethernet con-name con-xx2 ifname eth1 +lang: C +returncode: 0 +stdout: 80 bytes +>>> +Connection 'con-xx2' (UUID-con-xx2-REPLACED-REPLACED-REPLA) successfully added. + +<<< +size: 114 +location: src/tests/client/test-client.py:test_004()/928 +cmd: $NMCLI -wait 0 con up con-xx2 +lang: C +returncode: 0 +size: 239 +location: src/tests/client/test-client.py:test_004()/929 +cmd: $NMCLI con up con-xx1 +lang: C +returncode: 0 +stdout: 106 bytes +>>> +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4) + +<<< +size: 1412 +location: src/tests/client/test-client.py:test_004()/930 +cmd: $NMCLI -f all device status +lang: C +returncode: 0 +stdout: 1272 bytes +>>> +DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH +eth0 ethernet connected unknown unknown /org/freedesktop/NetworkManager/Devices/1 con-xx2 UUID-con-xx2-REPLACED-REPLACED-REPLA /org/freedesktop/NetworkManager/ActiveConnection/3 +wlan0 wifi connected unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA /org/freedesktop/NetworkManager/ActiveConnection/4 +eth1 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/2 -- -- -- +wlan1 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/4 -- -- -- +wlan1 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/5 -- -- -- + +<<< +size: 1429 +location: src/tests/client/test-client.py:test_004()/931 +cmd: $NMCLI -f all device status +lang: pl_PL.UTF-8 +returncode: 0 +stdout: 1279 bytes +>>> +DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH +eth0 ethernet połączono nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 con-xx2 UUID-con-xx2-REPLACED-REPLACED-REPLA /org/freedesktop/NetworkManager/ActiveConnection/3 +wlan0 wifi połączono nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA /org/freedesktop/NetworkManager/ActiveConnection/4 +eth1 ethernet niedostępne nieznane nieznane /org/freedesktop/NetworkManager/Devices/2 -- -- -- +wlan1 wifi niedostępne nieznane nieznane /org/freedesktop/NetworkManager/Devices/4 -- -- -- +wlan1 wifi niedostępne nieznane nieznane /org/freedesktop/NetworkManager/Devices/5 -- -- -- + +<<< +size: 2074 +location: src/tests/client/test-client.py:test_004()/932 +cmd: $NMCLI -f all connection show +lang: C +returncode: 0 +stdout: 1932 bytes +>>> +NAME UUID TYPE TIMESTAMP TIMESTAMP-REAL AUTOCONNECT AUTOCONNECT-PRIORITY READONLY DBUS-PATH ACTIVE DEVICE STATE ACTIVE-PATH SLAVE FILENAME +con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/3 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/2 -- /etc/NetworkManager/system-connections/con-vpn-1 +con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/2 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/1 -- /etc/NetworkManager/system-connections/con-xx1 +con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/2 yes wlan0 activated /org/freedesktop/NetworkManager/ActiveConnection/4 -- /etc/NetworkManager/system-connections/con-xx1 +con-xx2 UUID-con-xx2-REPLACED-REPLACED-REPLA ethernet 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/4 yes eth0 activated /org/freedesktop/NetworkManager/ActiveConnection/3 -- /etc/NetworkManager/system-connections/con-xx2 +con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet 0 never yes 0 no /org/freedesktop/NetworkManager/Settings/Connection/1 no -- -- -- -- /etc/NetworkManager/system-connections/con-1 + +<<< +size: 2090 +location: src/tests/client/test-client.py:test_004()/933 +cmd: $NMCLI -f all connection show +lang: pl_PL.UTF-8 +returncode: 0 +stdout: 1938 bytes +>>> +NAME UUID TYPE TIMESTAMP TIMESTAMP-REAL AUTOCONNECT AUTOCONNECT-PRIORITY READONLY DBUS-PATH ACTIVE DEVICE STATE ACTIVE-PATH SLAVE FILENAME +con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn 0 nigdy tak 0 nie /org/freedesktop/NetworkManager/Settings/Connection/3 tak wlan0 aktywowano /org/freedesktop/NetworkManager/ActiveConnection/2 -- /etc/NetworkManager/system-connections/con-vpn-1 +con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi 0 nigdy tak 0 nie /org/freedesktop/NetworkManager/Settings/Connection/2 tak wlan0 aktywowano /org/freedesktop/NetworkManager/ActiveConnection/1 -- /etc/NetworkManager/system-connections/con-xx1 +con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi 0 nigdy tak 0 nie /org/freedesktop/NetworkManager/Settings/Connection/2 tak wlan0 aktywowano /org/freedesktop/NetworkManager/ActiveConnection/4 -- /etc/NetworkManager/system-connections/con-xx1 +con-xx2 UUID-con-xx2-REPLACED-REPLACED-REPLA ethernet 0 nigdy tak 0 nie /org/freedesktop/NetworkManager/Settings/Connection/4 tak eth0 aktywowano /org/freedesktop/NetworkManager/ActiveConnection/3 -- /etc/NetworkManager/system-connections/con-xx2 +con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet 0 nigdy tak 0 nie /org/freedesktop/NetworkManager/Settings/Connection/1 nie -- -- -- -- /etc/NetworkManager/system-connections/con-1 + +<<< diff --git a/src/tests/client/test-client.check-on-disk/test_daemon_not_running.expected b/src/tests/client/test-client.check-on-disk/test_daemon_not_running.expected new file mode 100644 index 00000000..14f7c1de --- /dev/null +++ b/src/tests/client/test-client.check-on-disk/test_daemon_not_running.expected @@ -0,0 +1,10 @@ +size: 170 +location: src/tests/client/test-client.py:test_daemon_not_running()/1 +cmd: $NMCLI c +lang: C +returncode: 8 +stderr: 38 bytes +>>> +Error: NetworkManager is not running. + +<<< diff --git a/src/tests/client/test-client.py b/src/tests/client/test-client.py index baa229cf..df137ee0 100755 --- a/src/tests/client/test-client.py +++ b/src/tests/client/test-client.py @@ -201,7 +201,6 @@ _UNSTABLE_OUTPUT = object() class Util: - _signal_no_lookup = { 1: "SIGHUP", 2: "SIGINT", @@ -544,7 +543,7 @@ class Util: [ "sed", "-e", - "/^--[0-9]\+-- WARNING: unhandled .* syscall: /,/^--[0-9]\+-- it at http.*\.$/d", + r"/^--[0-9]\+-- WARNING: unhandled .* syscall: /,/^--[0-9]\+-- it at http.*\.$/d", name, ], stdout=subprocess.PIPE, @@ -658,7 +657,6 @@ class Util: @staticmethod def cmd_create_argv(cmd_path, args, with_valgrind=None): - if with_valgrind is None: with_valgrind = conf.get(ENV_NM_TEST_VALGRIND) @@ -719,7 +717,7 @@ class Util: micro = ver & 0xFF minor = (ver >> 8) & 0xFF major = ver >> 16 - return f"{major}.{minor}.{micro}" + return "%s.%s.%s" % (major, minor, micro) ############################################################################### @@ -1092,9 +1090,7 @@ class NMTestContext: srv.shutdown() def async_start(self, wait_all=False): - while True: - while True: for async_job in list(self._async_jobs[0 : self.MAX_JOBS]): async_job.start() @@ -1134,7 +1130,6 @@ class NMTestContext: self._async_jobs.append(async_job) def run_post(self): - self.async_wait() self.srv_shutdown() @@ -1302,7 +1297,6 @@ class TestNmcli(unittest.TestCase): extra_env=None, sync_barrier=None, ): - frame = sys._getframe(1) if langs is not None: @@ -1350,7 +1344,6 @@ class TestNmcli(unittest.TestCase): sync_barrier, frame, ): - if sync_barrier: self.ctx.async_wait() @@ -1428,7 +1421,6 @@ class TestNmcli(unittest.TestCase): self.ctx.ctx_results.append(None) def complete_cb(async_job, returncode, stdout, stderr): - if expected_stdout is _UNSTABLE_OUTPUT: stdout = "<UNSTABLE OUTPUT>".encode("utf-8") else: @@ -1559,7 +1551,6 @@ class TestNmcli(unittest.TestCase): @nm_test def test_001(self): - self.call_nmcli_l([]) self.call_nmcli_l( @@ -1626,7 +1617,6 @@ class TestNmcli(unittest.TestCase): self.call_nmcli_l(["c", "s"], replace_stdout=replace_uuids) for con_name, apn in con_gsm_list: - replace_uuids.append( self.ctx.srv.ReplaceTextConUuid( con_name, "UUID-" + con_name + "-REPLACED-REPLACED-REPL" @@ -1753,6 +1743,8 @@ class TestNmcli(unittest.TestCase): dbus.UInt32(NM.ActiveConnectionState.DEACTIVATING), ) + self.call_nmcli_l(["-f", "all", "d"], replace_stdout=replace_uuids) + self.call_nmcli_l([], replace_stdout=replace_uuids) for i in [0, 1]: @@ -1886,8 +1878,17 @@ class TestNmcli(unittest.TestCase): self.call_nmcli_l([], replace_stdout=replace_uuids) - for mode in Util.iter_nmcli_output_modes(): + self.call_nmcli( + ["-f", "all", "connection", "show", "--order", "na:-active"], + replace_stdout=replace_uuids, + ) + + self.call_nmcli( + ["-f", "all", "connection", "show", "--order", "active:-na"], + replace_stdout=replace_uuids, + ) + for mode in Util.iter_nmcli_output_modes(): self.call_nmcli_l( mode + ["con", "s", "con-vpn-1"], replace_stdout=replace_uuids ) @@ -2051,9 +2052,34 @@ class TestNmcli(unittest.TestCase): replace_cmd=replace_uuids, ) + replace_uuids.append( + self.ctx.srv.ReplaceTextConUuid( + "con-xx2", "UUID-con-xx2-REPLACED-REPLACED-REPLA" + ) + ) + + self.call_nmcli( + ["c", "add", "type", "ethernet", "con-name", "con-xx2", "ifname", "eth1"], + replace_stdout=replace_uuids, + ) + + self.ctx.srv.op_SetActiveConnectionStateChangedDelay( + "/org/freedesktop/NetworkManager/Devices/2", 50000 + ) + self.call_nmcli(["-wait", "0", "con", "up", "con-xx2"]) + self.call_nmcli(["con", "up", "con-xx1"]) + + self.call_nmcli_l( + ["-f", "all", "device", "status"], + replace_stdout=replace_uuids, + ) + self.call_nmcli_l( + ["-f", "all", "connection", "show"], + replace_stdout=replace_uuids, + ) + @nm_test_no_dbus def test_offline(self): - # Make sure we're not using D-Bus no_dbus_env = { "DBUS_SYSTEM_BUS_ADDRESS": "very:invalid", @@ -2158,18 +2184,18 @@ class TestNmcli(unittest.TestCase): nmc.pexp.expect("Interface name:") nmc.pexp.sendline("eth0") nmc.pexp.expect("There are 3 optional settings for Wired Ethernet.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect("There are 2 optional settings for IPv4 protocol.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect("There are 2 optional settings for IPv6 protocol.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect("There are 4 optional settings for Proxy.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") - nmc.pexp.expect("Connection 'ethernet' \(.*\) successfully added.") + nmc.pexp.expect(r"Connection 'ethernet' \(.*\) successfully added.") nmc.pexp.expect(pexpect.EOF) Util.valgrind_check_log(nmc.valgrind_log, "test_ask_mode") @@ -2190,34 +2216,34 @@ class TestNmcli(unittest.TestCase): nmc.pexp.expect("Interface name:") nmc.pexp.sendline("eth0") nmc.pexp.expect("There are 3 optional settings for Wired Ethernet.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect("There are 2 optional settings for IPv4 protocol.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect("There are 2 optional settings for IPv6 protocol.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect("There are 4 optional settings for Proxy.") - nmc.pexp.expect("Do you want to provide them\? \(yes/no\) \[yes]") + nmc.pexp.expect(r"Do you want to provide them\? \(yes/no\) \[yes]") nmc.pexp.sendline("no") nmc.pexp.expect( - "\[connection\]\r\n" - + "id=ethernet\r\n" - + "uuid=.*\r\n" - + "type=ethernet\r\n" - + "interface-name=eth0\r\n" - + "\r\n" - + "\[ethernet\]\r\n" - + "\r\n" - + "\[ipv4\]\r\n" - + "method=auto\r\n" - + "\r\n" - + "\[ipv6\]\r\n" - + "addr-gen-mode=default\r\n" - + "method=auto\r\n" - + "\r\n" - + "\[proxy\]\r\n" + r"\[connection\]\r\n" + r"id=ethernet\r\n" + r"uuid=.*\r\n" + r"type=ethernet\r\n" + r"interface-name=eth0\r\n" + r"\r\n" + r"\[ethernet\]\r\n" + r"\r\n" + r"\[ipv4\]\r\n" + r"method=auto\r\n" + r"\r\n" + r"\[ipv6\]\r\n" + r"addr-gen-mode=default\r\n" + r"method=auto\r\n" + r"\r\n" + r"\[proxy\]\r\n" ) nmc.pexp.expect(pexpect.EOF) Util.valgrind_check_log(nmc.valgrind_log, "test_ask_offline") @@ -2269,6 +2295,10 @@ class TestNmcli(unittest.TestCase): ], ) + @nm_test_no_dbus + def test_daemon_not_running(self): + self.call_nmcli(["c"]) + ############################################################################### @@ -2508,12 +2538,12 @@ class TestNmCloudSetup(unittest.TestCase): nmc.pexp.expect("provider azure detected") nmc.pexp.expect("found interfaces: CC:00:00:00:00:01, CC:00:00:00:00:02") nmc.pexp.expect("found azure interfaces: 2") - nmc.pexp.expect("interface\[0]: found a matching device with hwaddr") + nmc.pexp.expect(r"interface\[0]: found a matching device with hwaddr") nmc.pexp.expect( - "interface\[0]: (received subnet address|received subnet prefix 20)" + r"interface\[0]: (received subnet address|received subnet prefix 20)" ) nmc.pexp.expect( - "interface\[0]: (received subnet address|received subnet prefix 20)" + r"interface\[0]: (received subnet address|received subnet prefix 20)" ) nmc.pexp.expect("get-config: success") nmc.pexp.expect("meta data received") @@ -2644,7 +2674,7 @@ class TestNmCloudSetup(unittest.TestCase): nmc.pexp.expect("provider GCP detected") nmc.pexp.expect("found interfaces: CC:00:00:00:00:01, CC:00:00:00:00:02") nmc.pexp.expect("found GCP interfaces: 2") - nmc.pexp.expect("GCP interface\[0]: found a requested device with hwaddr") + nmc.pexp.expect(r"GCP interface\[0]: found a requested device with hwaddr") nmc.pexp.expect("get-config: success") nmc.pexp.expect("meta data received") # One of the devices has no IPv4 configuration to be modified @@ -2699,7 +2729,7 @@ def main(): sys.executable, __file__, "--started-with-dbus-session", - *sys.argv[1:], + *sys.argv[1:] ) except OSError as e: if e.errno != errno.ENOENT: |